Shopify
Keep a Shopify store's products, collections and customers in step with Fóir, and answer Shopify's customer privacy requests.
About
Keep a Shopify store's products, collections and customers in step with Fóir, and answer Shopify's customer privacy requests.
Connects a Shopify store to a Fóir project. You choose, during setup, which models each kind of Shopify data is written to.
Products and collections are kept in step with the store. Each one is keyed on its Shopify handle, and follows the handle when you change it in Shopify.
Shopify customers become Fóir customers. Each one is linked to their Shopify customer account sign-in and has one profile record. Shopify's privacy requests are answered for you: a data request is answered from the customer's profile, and a redaction erases the profile, the link and, when nothing else belongs to them, the customer.
Email marketing consent is kept in step in both directions: a change in Shopify shows in Fóir, and a change in Fóir is written to the Shopify customer. Your storefront can take newsletter sign-ups against the same consent.
Fóir is also a backend for apps of your own, built with your coding agent on your project's models, operations and customer sign-in. Two are included as examples, and you can switch each one on during setup.
Back-in-stock alerts let a shopper ask to be told when a variant returns, with a newsletter sign-up alongside if you want one, and you decide who hears first and how many at a time. Saved items is a wishlist your storefront reads and writes.
Customer names, email addresses and postal addresses are protected customer data, which Shopify releases only to apps it has approved. Until Shopify approves this app, a Shopify customer becomes a Fóir customer when they first sign in with their Shopify account.
Screenshots
Supplied by the publisher.
What it can read
Everything this app would be able to see in the project you install it into.
appconfig:read
appsecrets:read
identities:read
records:read:$back_in_stock_request
records:read:$collection
records:read:$customer
records:read:$privacyRequest
records:read:$product
records:read:$saved_item
records:read.all:$back_in_stock_request
records:read.all:$saved_item
What it can change
Everything this app would be able to alter. Granted for as long as it stays installed.
appsecrets:put
identities:delete
notifications:consent
notifications:write.named
project:stand
records:attribute:$back_in_stock_request
records:attribute:$saved_item
records:create:$back_in_stock_request
records:create:$collection
records:create:$customer
records:create:$privacyRequest
records:create:$product
records:create:$saved_item
records:delete:$customer
records:delete:$saved_item
records:write:$back_in_stock_request
records:write:$collection
records:write:$customer
records:write:$privacyRequest
records:write:$product
records:write:$saved_item
records:write.all:$back_in_stock_request
status:write
users:create
Sources
Data this app brings in. You choose the project model each one is written into, during install.
10 fieldsYou can decline this one at install; everything that depends on it is dropped with it.The app writes this itself. Nothing syncs in from an outside system.Each row belongs to one user, and only they and your project can read it.
11 fields
18 fieldsYou can decline this one at install; everything that depends on it is dropped with it.Each row belongs to one user, and only they and your project can read it.
18 fieldsYou can decline this one at install; everything that depends on it is dropped with it.The app writes this itself. Nothing syncs in from an outside system.
17 fields
7 fieldsYou can decline this one at install; everything that depends on it is dropped with it.The app writes this itself. Nothing syncs in from an outside system.Each row belongs to one user, and only they and your project can read it.
Operations
What this app does. Some of it runs when somebody asks, and the rest runs on its own: the hooks below say when. Reserved operations are run by the platform around the install lifecycle.
shopify/shop-infoReads the connected store name, plan, currency and timezone straight from Shopify.
shopify/syncExports the mapped Shopify sources in bulk and writes them into the models the install chose. Resumable: each run adopts whatever export is already in flight rather than starting again.
shopify/privacy-shopHandles shop/redact by removing the Shopify integration and leaving every synced record in place, and answers a customer request completely when this project syncs no customers.
shopify/privacy-customerFinds the user Shopify named by their Shopify customer id, answers a data request with what is actually held, and on an erasure request erases their profile and the link, and the user when nothing else is theirs.
shopify/back-in-stock-requestStores a shopper's request to be told when a sold-out variant can be bought again. Callable by a signed-in shopper, or by anyone with an email; the variant is read from Shopify and must really be sold out.
shopify/back-in-stock-releaseStarted when a variant shoppers are waiting for is back in stock. Tells them a batch at a time, in the order and at the pace the store set, reading the stock again before each batch, until nobody is waiting or the variant has sold out again.
shopify/back-in-stock-notifyRun by the platform for each request a release marked: emails the shopper once, in the language they asked in, and records that they were told.
shopify/marketing-consent-pushRun by the platform when a user's marketing preference changes: sets the linked Shopify customer's email marketing consent to match, unless Shopify already agrees or holds a newer change.
shopify/marketing-consent-pullRun by the platform when Shopify reports a customer's email marketing consent changed: sets the linked user's marketing preference to match, unless a newer change is already held.
shopify/newsletter-signupOpts a visitor in to the store's marketing emails, by email or as the signed-in shopper. The project decides whether that counts at once or after the visitor confirms by email. Callable by anyone when the publishable key allows it for signed-out visitors.
shopify/wishlist-saveKeeps a product, or one variant of it, on the signed-in shopper's list. The item is read from Shopify; the list belongs to the shopper and only they read it.
shopify/wishlist-removeTakes a product or variant off the signed-in shopper's list.
shopify/store-healthThe connected store, the webhooks this project relies on and what the next sync will change about them, and whether each turned-on feature has the access it needs. Changes nothing. If the store no longer honours the connection, the install's status says so.
shopify/back-in-stock-demandOutstanding stock alerts counted by variant, most wanted first, with how many shoppers were already told. Counts only; changes nothing.
shopify/back-in-stock-sendTells the next batch of shoppers waiting for a variant that it is back, on a user's word. The batch is the size and order the store set. Refused for a variant that cannot be bought.
shopify/wishlist-demandSaved items counted by product, most saved first. Counts only; changes nothing.
shopify/__discoverReads the connected store's fields, custom field definitions, markets and locales, and checks what customer data this app is actually approved to read.
shopify/__validate_credentials
shopify/__uninstall
Hooks
When this app runs without being asked. Each one binds a record event to an operation above, for as long as the app stays installed.
Runs on its own whenever a record is changed.The model you map Back-in-stock request onto.It runs the Tell a shopper a variant is back operation.
Runs on its own whenever a user's notification preference changes.It runs the Mirror marketing consent to Shopify operation.
Placements
Screens and panels this app adds to the console, each loaded from the publisher in a frame.
A screen of its own in the console.https://integrations.foir.io/shopify/console
Connecting
What this app needs from you before it can run, and where its own service lives.
You sign in to the app's own service and it holds the grant.
https://integrations.foir.io/shopify
https://integrations.foir.io/shopify/manifest.json