Privacy Policy

How Everstock (Everstock: Supplier Sync), a Shopify supplier inventory-sync app by Normalize, accesses, stores, and protects data, and why it holds no customer personal data.

Effective date: 22 October 2026.

This Privacy Policy explains how Everstock (App Store listing name: "Everstock: Supplier Sync"), a Shopify app built by the commerce software studio Normalize, handles data. Everstock synchronizes inventory quantities, pricing, and product records from a merchant's suppliers into that merchant's Shopify store. The app is built around a single principle: inventory sync does not need customer data, so Everstock does not request or store any. Everstock is listed on the Shopify App Store.

This policy describes what the app accesses through Shopify's APIs, what it stores in its own database, what it collects directly from you as a merchant, and what it deliberately does not collect from you or from your customers. It also covers our sub-processors, cookies, data retention and deletion, and your rights.

1. Who operates Everstock and how to reach us

Everstock is built and operated by Normalize, a commerce software studio. You can reach us at the addresses below.

If you have any question about this policy or about how your data is handled, contact us at the address above. For a formal privacy or data-deletion request, please use the privacy and support contact.

2. What Everstock accesses through Shopify's APIs

When you install Everstock, you grant it a specific, limited set of Shopify access scopes. The app requests only the scopes its shipped features actually use. It requests no order, fulfillment, or customer scopes. Each scope maps to a concrete function of the sync engine:

DataShopify scopeWhy we need it
Productsread_products, write_productsMatch supplier barcode and SKU records to your existing products and variants. Only when you turn them on: write the supplier's values for the product fields you choose onto a matched product (each field its own opt-in, off by default); add new variants to a matched product; create draft products for supplier items that have no matching variant; create collections from the supplier's categories and add products to them; and tag a product that a connection synced before and that has since left its supplier's feed, or set it to Draft.
Inventoryread_inventory, write_inventoryThe core function of the app: read current stock and write authoritative or delta stock quantities back to your store.
Locationsread_locationsResolve which of your store's locations a supplier's stock quantity should be written to.
Sales channel publicationsread_publications, write_publicationsOnly when you turn on publishing new collections (off by default): find your Online Store sales channel and publish the collections Everstock creates to it.
Store identity and API access (shop domain and an offline access token)Granted through the OAuth install (covers the scopes above)Standard Shopify OAuth session used to call the Admin API on your behalf. This is store-level, not customer-level, data.
Store profile (your store's name, contact email, owner name, country, and Shopify plan)No additional scope: the store's own details, readable once the app is installedRead when you install or reinstall Everstock, and later if we have none on file for your store. The contact email is where run notifications are sent (section 6); the rest identifies your store in our install records and in our internal install notices (sections 3 and 6). These are details about you and your store, not about your customers.

Everstock does not request or use any scope that would expose orders, fulfillments, or customer records.

3. What Everstock stores

The app stores the following records in its own database, all tied to your store's myshopify domain. None of it is customer personal data. The only personal data in it is about you: your store's contact email and owner name, and anything you choose to type into feedback.

What we storeContainsNotes
SessionShopify session id, shop domain, granted scope, state, token expiry, and the Shopify access and refresh tokens for your store.The app uses offline access tokens only, so the optional staff-user fields on this record (user id, first name, last name, email) are not populated. Access and refresh tokens are encrypted at rest through an encrypting session store (AES-256-GCM) before they reach the database.
ShopYour myshopify domain; the scope granted at last install; install, reinstall, and uninstall dates and an install count; an active/inactive flag; your store profile (store name, contact email, owner name, country, and Shopify plan, see section 2); your run-notification email setting; and, if we have paused syncing for your store, when and why.An install registry for operational queries, and the address run notifications go to. Contains no customer data. Your contact email and owner name are cleared when your store is closed (section 8).
SupplierConnectionThe supplier's display name, feed type, connection status, the feed details (such as an API address or file location) and credentials you enter, and your sync settings (the Shopify location and quantity state this connection syncs, schedule, quantity cap, ignore list, field mapping, price rules, which fields to sync, and your rule for products no longer in the feed).The credentials value is encrypted at rest with AES-256-GCM before it is stored.
ConnectionFileA spreadsheet you upload for a connection (CSV or XLSX, up to 20 MB): the file as you uploaded it, its name and type, and when you uploaded it.Kept so that scheduled syncs can read it again, until you upload a replacement or delete the connection. Everstock reads only the columns you map.
SyncRun / SyncRunItemPer-run statistics (counts of records fetched, applied, skipped, ignored, flagged for review, and failed) and a per-record audit trail: matching key, SKU, barcode, quantity before/after, price before/after, the other field values a run changed, action, reason, status, and any error message.Product and inventory data only, used for run history, troubleshooting, and reverting a run. The complete earlier values a revert needs are cleared 30 days after the run; the rest of the record stays. Contains no customer data.
ShopPlanYour shop domain, the plan identifier, and the subscription status.Cached billing entitlement state. Billing is handled by Shopify; the app stores no payment card or financial account details.
DeadLetterThe payload of a sync job that exhausted all retry attempts, plus the queue name, shop, connection id, failure reason, and attempt count.Kept for troubleshooting failed sync jobs. Contains sync/product payloads, not customer data.
AppEventIn-app review and feedback records for your store: when Everstock last asked Shopify to show you its App Store review request, and what Shopify reported back (for example, that the request was shown, or that you have already reviewed the app); whether you turned those requests off in the app's settings, and when; and each piece of feedback you send, with the topic you picked and any message you typed. What you answered the rating prompt of an earlier version of the app (a star rating if you gave one, and whether you postponed that prompt or followed its App Store link) stays stored too. Dismissing the setup guide or a promotion card is stored as the fact that you did, and when.Written when Everstock asks for a review, when you change that setting or send feedback, and when you dismiss a card. Keyed to your store domain; no customer data.
ShopEventA timeline of account events for your store: install, reinstall, uninstall, plan changes, store closure, and any action our team takes on your store's account (such as pausing syncing), with a short note.Used for support and operations. Contains no customer data.
Store catalog copy (StoreMirrorState / StoreMirrorProduct / StoreMirrorVariant / StoreMirrorLevel)A copy of your store's catalog that Everstock may keep, updated from Shopify's product and inventory notifications and a periodic full read: product titles, descriptions, vendors, product types, and tags; variant SKUs, barcodes, and prices; available stock at your locations; and when each was last updated.Lets a sync compare the supplier's feed with your store without reading your whole catalog from Shopify on every run. Product and inventory data only; no customer data.
Records of what Everstock added (BulkCreateOperation / SupplierMediaLink / SupplierCollectionLink)Which products a run submitted for creation, which supplier images Everstock added to which of your products, and which products it added to which collections.Lets Everstock avoid adding the same image or collection membership twice, and finish or retry a product creation it started. Product data only; no customer data.
Products each connection has synced (ConnectionMatchedKey)For each supplier connection, which of your products it has synced: each product's matching key (the barcode or SKU it was matched on), its Shopify product id, and when the connection first and last matched it.Lets "No longer in this feed" and its rule act only on products that connection synced before, never on another supplier's products or your own. Deleted with the connection. Product data only; no customer data.

To be explicit: supplier credentials are encrypted at rest with AES-256-GCM, and Shopify access and refresh tokens are stored only through an encrypting session store that applies the same AES-256-GCM encryption before writing to the database.

4. What we collect directly from you

Most of what you enter into Everstock directly is what is needed to connect a supplier: the feed's details (for example an API address or a file location) and the credentials for it, or a spreadsheet you upload, together with the sync configuration for that connection (for example its display name, schedule, field mapping, price rules, quantity cap, and ignore list). You also choose, in the app's settings, which run notifications are emailed to your store's contact email.

The one other thing you can enter is optional feedback. The Send feedback form in the app's settings is open at any time and asks for no rating: the topic you pick from the list and any message you type are stored against your store domain and may be forwarded to us so we can read and act on it. Nothing is stored unless you send it. In the same place you can turn off the App Store review requests that Everstock may ask Shopify to show you after a sync has made changes.

We do not ask you to create a separate account. Beyond what you type into the app, the only personal information we hold about you is the store profile Everstock reads from Shopify when you install it (section 2): your store's contact email and owner name, alongside its name, country, and Shopify plan. Supplier credentials you enter are encrypted at rest before storage.

5. What we collect from your customers: nothing

Everstock requests no protected customer data. It holds no customer names, email addresses, postal addresses, phone numbers, order contents, or payment information.

The app requests no order, fulfillment, or customer scope, and nothing in the sync engine reads or writes customer, order, or fulfillment records. Because the app stores no customer personal data, there is by design nothing about your customers for it to disclose, sell, or share.

One thing is in your hands: a spreadsheet you upload is stored exactly as you uploaded it (section 3). Everstock reads only the columns you map, but please do not upload a file that contains your customers' personal data.

6. Third parties and sub-processors

Everstock runs on managed cloud infrastructure: an application server, a PostgreSQL database, and a Redis job queue. Requests to the app and to this website pass through Cloudflare (cloudflare.com), which protects and delivers them and, like any network of its kind, handles the IP address and request details of each visit.

Run notification emails are sent through Plunk (useplunk.com), an email delivery service. For each email, Plunk receives your store's contact email address and the message itself: the connection's name, what happened in the run, its counts, and a link to the run in the app. It never receives supplier credentials or the raw error text from a supplier's feed.

Our internal team messaging tool is Slack (slack.com). When a store installs or reinstalls Everstock, we post a notice to our team's channel with the store's name, myshopify domain, contact email, country, and Shopify plan, and we post shorter notices about uninstalls, plan changes, store closures, and actions our team takes on a store's account. When you send feedback from the app's settings, we may also forward a copy to Slack so that we see it promptly: your store domain, the topic you picked, and the message you typed. The records themselves are stored in our own database either way, so these messages are notifications and never the storage.

Separately, when a sync runs, Everstock fetches each supplier feed you configure: from the API, web address, Google Sheet, or FTP, FTPS, or SFTP server you set, authenticating with the credentials that you supply. Those requests go to the suppliers you choose; their handling of any data is governed by your relationship with them, not by us. Those requests only fetch that supplier's own data: Everstock sends no inventory quantities, no product records, and no customer data to a supplier. The app also communicates with Shopify's own APIs to perform its function.

When you ask Shopify Sidekick, the assistant in your Shopify admin, about your syncs, Everstock answers with the sync records described in section 3 for your store: connection names, run results, and the product titles, SKUs, barcodes, quantities and prices in your sync results. Sidekick is part of Shopify, and Shopify's terms and privacy policy govern what it does with an answer. Everstock never gives Sidekick supplier credentials, feed addresses or customer data, and Sidekick cannot change anything through Everstock.

The support chat inside the app is served by Connect (connect.usenormalize.com), our own support platform, operated by us on our own infrastructure rather than by an outside vendor. It loads only on the app's admin screens, never on this marketing site. When it loads it receives your store domain, your plan, the admin page you are on, and the ordinary details any web page sees about a browser: user agent, language, time zone, screen size, and an approximate location resolved from your IP address. Credentials that appear in an admin page's address, such as Shopify's short-lived session token, are stripped out before the address is recorded. Anything else we learn is what you choose to type into the chat.

The landing page at sync.usenormalize.com can show a YouTube video, but nothing loads from YouTube until you press play, and after that YouTube's own privacy policy applies (https://policies.google.com/privacy).

7. Cookies and tracking

Our marketing site at sync.usenormalize.com loads no analytics, no chat widget, and no advertising trackers. The YouTube video described in section 6 loads only when you press play.

Within the app itself, cookies are used only where the Shopify OAuth and embedded-app session flow requires them to authenticate your store and keep you signed in. We do not use cookies to profile you or to track you across other sites.

The support chat described in section 6 sets no cookie. It keeps one random identifier in your browser's local storage so that reopening the chat returns you to your own conversation rather than starting a new one.

8. Retention and deletion

Everstock implements Shopify's mandatory compliance webhooks. Their actual behaviour is:

  • customers/data_request: responds successfully with no data compiled, because the app stores no customer personal data to return.
  • customers/redact: responds successfully with nothing to erase, for the same reason.
  • shop/redact: when your shop is closed, the app erases its stored data for that shop: sync-run history (and its per-record items), supplier connections and any spreadsheet you uploaded, cached plan state, sessions, dead-letter rows, in-app prompt state (including any rating or feedback message you sent), the account event timeline, the store catalog copy, the records of what Everstock added to your store, and the record of which products each connection has synced. It also clears your store's name, contact email, and owner name from the install registry straight away.
  • app/uninstalled: when you uninstall the app, it deletes the store's session(s) and marks the store inactive in its install registry.

The install-registry entry for a store (its domain, store profile, last-granted scope, and install and uninstall timestamps) is kept for 30 days after you uninstall the app or after your store is closed, and is then deleted automatically; after a closure its contact email and owner name are already gone, as described above. If you reinstall within those 30 days, that deletion is cancelled. What a reinstall restores depends on which of the two events it follows, and it is worth being precise about: after an uninstall, your supplier connections and sync-run history are still there, because uninstalling does not erase them. After a store closure they are not, because the shop-redaction step described above already erased them at the time your shop was closed, and reinstalling does not bring them back. The entry itself contains no customer personal data.

Records that persist while your store remains installed, such as sync-run history and dead-letter troubleshooting rows, are retained for the life of the installation and are erased on shop closure as described above. The one exception is the complete earlier values a revert needs, which are cleared 30 days after each run.

Messages that have already left our database are not recalled by these steps: the notices posted to our team's Slack channel, and emails already sent to you. If you want the Slack notices about your store deleted, contact us.

9. Your rights

Depending on where you are located, you may have rights to access, correct, export, or delete personal data we hold about you. Because Everstock holds no customer personal data, such requests concern only the limited merchant and store-level records described in this policy, including your store's contact email and owner name.

Uninstalling the app deletes your store's Shopify session and access tokens and marks the store inactive. It does not by itself erase your supplier connections, sync-run history, cached plan state, dead-letter rows, or the other store records described in section 3. Those are erased when Shopify sends the shop-redaction request after a store is closed. To have them erased sooner, contact us using the privacy and support contact in section 1.

10. International data transfers

Your data is processed in the region(s) where our hosting and database infrastructure operates. If you have questions about where the data for your store is processed, contact us at hello@usenormalize.com.

11. Security

Supplier credentials are encrypted at rest with AES-256-GCM, and Shopify access and refresh tokens are encrypted with the same scheme through an encrypting session store before they are written to the database. Access to Shopify is limited to the minimum scopes the app's features require.

No method of transmission or storage is completely secure, but we apply these controls to protect the credentials and tokens entrusted to us.

12. Changes to this policy and contact

We may update this policy as the app evolves or as legal requirements change. When we do, we will revise the effective date above and, where appropriate, notify merchants through the app or the App Store listing.

Questions about this policy or your data can be sent to hello@usenormalize.com, or to the privacy and support contact listed in section 1.