Sync Hub Help
How every sync works, in plain words. Pick a topic below.
Getting started
What Sync Hub does
Sync Hub keeps your Shopify stores in sync. You choose one main store, and Sync Hub copies data from it to your other stores.
It can sync:
- Products, variants, images and collections
- Inventory (stock levels)
- Orders and customers
- B2B companies
- Discounts
- Metafields and metaobjects (custom data fields)
- Files
- Blogs, pages, theme templates and translations
Most data moves in one direction: from the source store to the destination store. Some features can also send changes back. See Two-way and reverse sync.
Key words
| Word | What it means |
|---|---|
| Source store | The store where your data comes from. This is your main store. |
| Destination store | A store that receives data from the source store. |
| Store pair or connection | One source store linked to one destination store. Each pair has its own settings and its own plan. |
| Hub | A source store that is connected to several destination stores. |
| Connection token | A one-time code. The destination store creates it, and the source store uses it to connect. |
| Sync | One run that copies data from the source store to a destination store. |
One source store can connect to many destination stores. Each destination store connects to one source store only. If you connect a destination store to a new source store, its old connection is removed.
Before you start
- Install Sync Hub on every store you want to connect: the source store and each destination store.
- Decide which store is your source store. This is the store you will manage your data in.
- You need admin access to each store, or someone with access must help you on that store.
- Plans and billing are managed from the source store. See Plans & billing.
Step 1: Set up each destination store
Do this on each destination store first.
- 1Open Sync Hub in the destination store's Shopify admin.
- 2On the welcome screen, click Get Started.
- 3Under Step 2: Select Store Type, click Select as Destination Store.
- 4Under Step 3: Generate Connection Token, click Generate Token.
- 5Click the copy button to copy the token.
- 6Send the token to the person who manages the source store (or keep it if that is you).
- A token works only once. After it is used, generate a new one for the next connection.
- If you click Regenerate Token, the old token stops working.
- Copy the whole token. A token that is cut short will not work.
Step 2: Connect the source store
- 1Open Sync Hub in the source store's Shopify admin.
- 2Click Get Started.
- 3Click Select as Source Store.
- 4Paste the token into the Connection Token box.
- 5Click Connect to Destination Store.
You will see a message that the store is connected. The destination store will show Successfully Connected as Destination Store.
Add more destination stores
- 1Create a token on the new destination store (see Step 1).
- 2On the source store, go to Configurations.
- 3Click + Add new store.
- 4Paste the token and click to connect.
Repeat this for each destination store.
Step 3: Choose what to sync
You set up each connection on its own, from the source store.
- 1On the source store, go to Configurations.
- 2In the Connected Stores list, find the destination store.
- 3Click Configure.
- 4Use the tabs to turn on the data you want to sync.
- 5Click Save changes.
| Tab | What you set here |
|---|---|
| Product & Inventory | Product sync, inventory sync, which product fields to copy, prices, images, collections |
| Orders & Customers | Order sync, customer sync, companies (B2B) |
| Content Sync | Pages, templates, blogs, translations, collections, files, discounts, metafields and metaobjects |
| Config | Email alerts when a sync fails |
Each data type has its own guide. Start with Product sync and Inventory sync.
Step 4: Run your first sync
- 1On the source store, go to Configurations.
- 2Find the destination store and click Sync.
- 3The Sync Actions window opens. It lists every data type you turned on.
- 4Click Run full sync to sync everything you turned on. Or click the button for one data type only.
Before the sync starts, Sync Hub may show a box called Before you run this sync. Read it. It warns you about problems, for example when your plan does not cover all your products, or when the two stores use different currencies.
The first sync takes the longest, because every item is copied for the first time. Later syncs are faster, because Sync Hub skips items that did not change.
Step 5: Turn on automatic syncs (optional)
A sync can run by hand only, or on a schedule.
- 1Open Configure for the destination store.
- 2Find the Automatic schedule setting for each data type.
- 3Choose how often it should run.
- 4Click Save changes.
| Data type | Schedule options |
|---|---|
| Products, inventory, orders, customers | Off — manual only, Every 30 minutes, Every hour, Every 6 hours, Every day |
| Content (pages, blogs, templates and more) | Turn on Automatic schedule, then choose Every 6 hours, Every day or Every week |
- Turning a sync on does not turn on its schedule. If the schedule is Off — manual only, the data only syncs when you click Sync.
- A product sync also refreshes stock. So if products run on a schedule, stock is updated with each product sync too.
- Scheduled syncs can start a few minutes after their planned time when many stores are syncing.
Check your syncs
The dashboard
Open Sync Hub to see the Sync Dashboard. Use the Destination menu at the top to choose a store.
The dashboard shows:
- A status summary at the top, with the last successful run and the next planned run.
- A box for each data type, with the number of items synced, the last sync time, and a status: Successful, Partial or Never run.
- An Orders box with orders sent each way.
- Needs attention: problems you should look at.
- Automated schedule: what runs on its own and how often.
- Recent activity: the latest sync events.
The Connected Stores list
On Configurations, each destination store shows:
| Column | What it shows |
|---|---|
| Store | The store name |
| Last Sync | When the last sync ran |
| Status | Success, Error, In Progress or Billing Pending. Move your mouse over the badge to see the message. |
| Actions | Sync, Configure, View Logs, Delete |
Billing Pending means your plan does not cover everything this store wants to sync. See Plans & billing.
Sync logs
Click View Logs next to a store to open its sync logs.
- Use Operation type to show one data type, for example Products or Orders.
- Use Status to show only Success, Error, In Progress or Warning.
- Use Search to find a message or log ID.
- Click a log row to see the full message and any error details.
Email alerts
You can get an email when a sync fails.
- 1Open Configure for the destination store.
- 2Go to the Config tab.
- 3Turn on Email alerts.
- 4Enter a Receiver email. If you leave it blank, alerts go to the store's account email.
- 5Choose which failures send an email, for example Send alert when product sync fails.
- 6Click Save changes.
Pause or stop a sync
There is no separate pause button. To stop syncing, turn the sync off in the settings:
| You want to… | Do this |
|---|---|
| Stop automatic syncs, but keep syncing by hand | Set Automatic schedule to Off — manual only |
| Stop one data type completely | Turn off that sync (for example Product synchronization) and click Save changes |
| Stop everything for one store | Turn off each sync for that store, or delete the connection |
When you turn product sync off, it stops in both directions. Work that is waiting to run will not start, and a run in progress stops at its next step.
Your settings are kept, so you can turn the sync back on later.
Disconnect a destination store
- 1On the source store, go to Configurations.
- 2Find the store and click Delete.
- 3Read the message and click Delete Store.
What happens:
- The connection and all its sync settings are removed. You cannot undo this.
- Products, orders and other data already copied to the destination store stay there. Nothing is deleted from either store.
- To connect the store again, create a new token and connect again. You will need to set up the settings again.
- Your Shopify charge does not go down by itself. Go to Plans to lower it. See Plans & billing.
Uninstall Sync Hub
You uninstall Sync Hub from Shopify, like any app: in your Shopify admin, go to Settings > Apps, find Sync Hub and uninstall it.
What happens:
- All connections to that store stop, and its sync settings are removed.
- Data already copied to your stores stays there.
- Shopify cancels the app charge for that store.
- If you install Sync Hub again, you must connect the stores and choose your settings again.
To learn what data we keep and delete, see Privacy & data.
Need help?
Book a meeting with our support team. At the bottom of every Sync Hub page you also find Read the docs, which opens this help page in a new tab, and Book a meeting. You can also read the FAQ.
Product sync
Product sync copies products from your source store (the main store) to a destination store (the store that receives the copies). It creates products that are missing and keeps matched products up to date.
What it does
- Copies products, their variants and options from the source to the destination.
- Finds products that already exist on the destination and updates them. It does not make duplicates.
- Creates products that are missing on the destination (you can turn this off).
- Can also copy images, videos, collections, sales channel publishing and metafields.
- Remembers which product on the source belongs to which product on the destination, so later runs update the same product.
- Skips products that have not changed since the last run, so repeat runs are faster.
Each destination store has its own settings. If you have three destination stores, you set up product sync three times, once for each.
Before you start
- Install Sync Hub on both stores and connect them. See Getting started.
- Check that each product has a SKU or barcode, and that they are the same on both stores. This is the safest way to match products.
- If the destination already has products, decide which fields you want to keep. Unchecked fields are never overwritten.
- If the two stores use different currencies, read Prices and currency first.
- On the free plan, only 10 products are synced. Your paid plan sets how many products you can sync. See Plans and billing.
How to set it up
- 1In Sync Hub, open Configurations.
- 2In your list of connected stores, find the destination store and click Configure.
- 3Open the Product & Inventory Sync tab.
- 4Turn on Product synchronization.
- 5Make sure Forward sync (source → this store) is on.
- 6Choose how often it runs under Automatic schedule. Pick Off — manual only if you want to start it yourself.
- 7Choose the Primary product match field (SKU is the default and the safest).
- 8Choose what to do with new products under New products on destination.
- 9Under Fields synced and Pricing, tick the fields you want copied.
- 10Under Sync collections, images & sales channels, tick the extras you want.
- 11Add filters if you only want some products (optional).
- 12Click Save changes.
- 13To start a sync now, click Sync on the store row, then Run next to Products.
Before you run, the Sync window may show a box called Before you run this sync. It warns you about:
- products that will not sync because of your plan limit,
- different currencies on the two stores,
- a destination that already has products (first sync only),
- a different number of locations on the two stores.
Read these warnings before you press Run.
How products are matched
Matching decides which destination product is "the same" as a source product. You choose the field in Primary product match field:
| Option | How it works | When to use |
|---|---|---|
| SKU (default) | Exact SKU match | Best choice when both stores use the same SKUs |
| Barcode | Exact barcode match | When both stores use the same barcodes |
| Handle | Matches the product's web address name (for example blue-shirt) | Only if you have no shared SKU or barcode |
| Title | Matches the product name | Only if you have no shared SKU or barcode |
Rules:
- If your chosen field finds no single match, Sync Hub only tries the other field in the same group: SKU ↔ Barcode, or Handle ↔ Title. It never falls back from SKU or barcode to a name match. The product is left unmatched instead, so look-alike products are not paired by mistake.
- A product with no SKU and no barcode at all is matched by handle or title instead, so it is not created twice.
- If a name matches more than one product, the product is left unmatched. Sync Hub does not guess.
- Once two products are matched, Sync Hub remembers the pair. Later runs update that same product.
Creating new products vs updating
New products on destination has two choices:
| Choice | What happens |
|---|---|
| Create (default) | Products missing on the destination are created. Matched products are updated. |
| Update only | Only matched products are updated. Nothing new is created. |
With Create, the Title field is always on, because Shopify needs a title to create a product.
Variants
When a matched product is updated, the destination's variants are made to match the source. A variant you added only on the destination is removed on the next sync.
To stop this, turn on Keep variants added on this store. Sync then still updates the matching variants, but never deletes the extra ones. (Two-way sync turns this on for you. See Two-way and reverse sync.)
Deleted products
- Deleted on the source: the copy on the destination is not deleted. Delete it yourself if you no longer want it.
- Deleted on the destination: Sync Hub sees the product is gone. If Create is selected, the product is created again on the next sync. Choose Update only or use a filter if you do not want it back.
Settings explained
Fields synced
Each field is a chip you can tick or untick.
- Ticked: the source value overwrites the destination on every sync.
- Unticked: the destination keeps its own value. On a new product, Shopify's default is used.
- Ticked fields show a badge: EVERY SYNC or ON CREATE. Click the badge to switch. ON CREATE fills the field once, when the product is first created, and never changes it again. Use it for fields you edit on the destination yourself.
- Fields marked REQ are needed by Shopify to create a product. They are always filled on a new product.
Product fields
| Setting | What it copies | Default |
|---|---|---|
| Title | Product name | On (required with Create) |
| Description | Product description | On |
| Handle | Web address name of the product | Off |
| Vendor | Brand / vendor | On |
| Product Type | Product type | On |
| Tags | Product tags | On |
| Status | Active / Draft / Archived | Always on. Set it to ON CREATE to keep your own Draft/Active choice on the destination after the first copy. |
Variant fields
| Setting | What it copies | Default |
|---|---|---|
| SKU | Variant SKU | On |
| Barcode | Variant barcode | On |
| Weight | Variant weight | On |
| Track quantity | Whether Shopify tracks stock for the variant | On |
| Continue selling when out of stock | Whether customers can buy when stock is 0 | Off |
| Customs info (HS code, origin) | HS code and country/region of origin | Off |
Variant options (like Size and Color) and their values are always copied.
First sync into a store that already has products: if the destination already has products and this pair has never synced, Sync Hub offers safer defaults. Title, Description, Vendor, Product Type and Tags start unticked, so your own wording is not replaced. Tick them on purpose if you want the source's text.
Pricing
| Setting | What it copies | Default |
|---|---|---|
| Price | Variant price | On |
| Compare Price | Compare-at price (the "was" price) | On |
| Unit Price Measurement | Unit price setup (for example price per 100 ml) | Off |
| Cost | Cost per item | Off |
- If Price is off, a new product still gets the source price once, so it is not created at 0.00. Later runs do not change it.
- Unit Price Measurement is hidden when reverse or two-way sync is on, because it can only go source → destination.
Prices and currency
Sync Hub never converts prices. It copies the number as it is. A price of 1,299 in one currency becomes 1,299 in the other.
When the two stores use different currencies:
- Price fields are off and locked by default. You will see Prices are not synced for this pair.
- To copy prices anyway, tick Copy prices anyway, without converting them to ….
- Cost is never copied between stores with different currencies, even with this box ticked.
- With prices locked, new products are created without a price, so Shopify shows 0.00. Set prices on the destination yourself, or choose Update only.
Collections, images and sales channels
| Setting | What it does | Default |
|---|---|---|
| Sync collections | Puts products into the matching collections on the destination | Off |
| Sync images | Copies product and variant images | On |
| Sync videos & 3D | Copies videos (uploaded, YouTube, Vimeo) and 3D models | Off |
| Publish to sales channels | Publishes products to the same sales channels on the destination | Off |
| Sync metafields | Copies product and variant metafields after each product sync | Off |
Each extra makes a sync slower. Turn on only what you need.
Schedule
Automatic schedule choices: Off — manual only, Every 30 minutes, Every hour, Every 6 hours, Every day. The default is Off — manual only.
Filters
Filters decide which source products are synced. They are in the Product & Inventory Sync tab, below the extras.
Product status to sync
Tick Active, Draft and/or Archived. Leave all unticked to sync every status (the default). This works with or without the filter switch below.
Filter products for product sync
Turn this on, then add rows. Each row has a Type and Values:
| Type | Example values |
|---|---|
| Tag | wholesale, retail |
| Vendor | Nike, Adidas |
| Product type | Shirt, Pants |
| Collection | The source collection's ID number |
How matching works:
- Several values in one row = OR. Tags
summer, sale→ products with either tag. - Different rows = AND. Tag
summer+ VendorAcme→ only Acme products tagged summer. - Each type can be used once.
- Matching ignores upper and lower case.
Don't sync products with these tags
Shown when the filter switch is on. Type tags separated by commas, for example do-not-sync.
- A product with any of these tags is never created on the destination, and stops getting updates.
- The tag must match the whole tag.
do-not-syncdoes not matchdo-not-sync-later. - This wins over the include rows above.
- Leave it empty to sync everything.
Filters never delete anything. Products already on the destination stay there. They just stop getting updates.
Collections
Turn on Sync collections to keep products in the right collections on the destination. Then you get more options:
| Setting | What it does | Default |
|---|---|---|
| Collection type sync mode | Which collection types to include: Sync smart and custom collections, Sync smart collections only, or Sync custom collections only | Both |
| Sync collection definitions before assignments | Also copies the collection itself (title, description, sort order, and rules for smart collections) | On |
| Reconcile custom collection membership | Removes products from destination manual collections when they are no longer in that collection on the source | Off |
- A smart collection (automated) fills itself using its rules. A custom collection (manual) gets products added by Sync Hub.
- Only collections that hold at least one product in this run are copied.
Pairing collections with different names
Collections are paired by name (handle). If both stores use the same names, they pair on their own and you will see that all collections pair up.
If some names differ (for example, the stores are in different languages), you will see how many collections need pairing. Click Pair collections to open Pair collections between your stores:
- 1Click Find matches for me to get suggestions. Sync Hub compares the products inside each collection. On a big catalog this takes a few minutes.
- 2Click Use this on a suggestion, or Accept … suggested to take all of them.
- 3Or choose the Matching collection by hand.
- 4Optional: tick Also copy the order the products appear in.
- 5Click Save pairing.
Suggestions are kept for 6 hours. Click Refresh matches after you change products or collections.
Images and media
With Sync images on, you get Image options:
| Setting | What it does | Default |
|---|---|---|
| Mirror source images | Adds new images, removes images removed on the source, and keeps the same order (including the main image). Images you added yourself on the destination are kept. | On |
| Remove destination-only images (exact mirror) | Also removes images that exist only on the destination, on every sync. The destination ends up with exactly the source's images. | Off |
| Force image rebuild (one-time repair) | On the next sync, deletes all images on each destination product and uploads them fresh from the source. Turns itself off after the run. | Off |
- With Mirror source images off, images are only added, never removed or reordered.
- Use Force image rebuild when an image looks old on the destination, for example after you replaced an image but kept the same file name. It is slower than a normal sync.
- Image alt text is copied with the image.
Videos and 3D (Sync videos & 3D):
- Copies Shopify-hosted videos, YouTube/Vimeo videos and 3D models.
- If you replace or remove a video on the source, the destination is updated to match.
- Turning this off later does not remove videos already copied.
Sales channels
With Publish to sales channels on, each product is published on the destination to the sales channels it is on at the source. Channels are matched by name, so a channel must exist on both stores (for example "Online Store").
This setting only publishes. It never unpublishes a product.
Metafields
With Sync metafields on, product and variant metafields are copied after each product sync finishes. You can also run it alone from Sync → Product metafields.
- Metafield allowlist: leave it empty to sync every metafield. To limit it, list entries separated by commas, as
namespace.key(for examplecustom.color) or justkey. - Matching metafield definitions are created on the destination, so values show in the Shopify admin.
- Metafields that point to other things (reference metafields, for example a product, collection, file or metaobject entry) are copied too. Each one is pointed at the matching item on the destination. If there is no match, that field is skipped. See Reference metafields.
What is synced / not synced
Synced (when the setting is on):
- Title, description, handle, vendor, product type, tags, status
- Options and option values
- Variant SKU, barcode, weight, track quantity, continue selling when out of stock, customs info
- Price, compare-at price, unit price measurement, cost
- Product and variant images, alt text, image order
- Videos and 3D models
- Collection membership and collection details
- Sales channel publishing
- Product and variant metafields
Not synced by product sync:
- SEO title and SEO description of products
- Stock quantities — these are handled by Inventory sync
- Product reviews, and data that belongs to other apps
- Product deletions from the source (see Deleted products)
- Prices converted to another currency
- Translations — see Translation sync
How often it runs
- Manual: click Sync on the store row, then Run next to Products. Run full sync runs every resource you turned on.
- Automatic: based on your Automatic schedule.
- If a product sync is still running when the next one is due, the new one is skipped. It runs at the next scheduled time.
- When product sync finishes, inventory sync runs next if you turned it on. Metafield sync runs next if Sync metafields is on.
How long a sync takes
Each run starts by asking Shopify for a full export of both stores' products. Shopify needs a few minutes for this, even on a small store.
| Catalog size | Rough time |
|---|---|
| A few hundred products | Usually minutes |
| Tens of thousands of products | Can take hours |
| Hundreds of thousands of products | Can take a day or more |
The first sync is the slowest. Later runs skip products that did not change. Images, collections and sales channels add time.
While a sync runs, View Logs shows what it is doing, for example "Writing products to destination (wave 2 of 8)", and often an estimate like "about 72 min left".
Limits
- Free plan: 10 products.
- Paid plans: your plan sets the product limit for each store pair. Products over the limit are not synced, and the sync log tells you how many. See Plans and billing.
- Shopify's export delay: Shopify's export can be a few minutes behind. A change you made just before a sync started may only appear in the next sync.
- Shopify's variant limit: Shopify limits how many new variants a very large store can create each day. On stores with tens of thousands of variants, a big first sync may need several days to create everything.
Good to know
- Sync Hub never changes your source store during forward sync.
- Matching first: on a store that already has products, matched products are updated, not duplicated.
- Changing the match field, filters or fields only affects future syncs. Nothing is undone.
- Unticking a field does not clear it on the destination. The destination keeps what it has.
- You can get an email when a product sync fails. Go to the Config tab, under Email alerts, and turn on Send alert when product sync fails.
- Want changes on the destination to go back to the source? See Two-way and reverse sync.
Troubleshooting
- Check New products on destination is set to Create.
- Check your filters, Product status to sync and Don't sync products with these tags.
- Check your plan limit. The sync log shows products blocked by plan.
- If you just created the product, wait for the next sync. Shopify's export can be a few minutes behind.
- The match field did not find the existing product. Make sure the SKU (or barcode) is the same on both stores, then delete the extra copy.
- If you use Handle or Title, switch to SKU or Barcode if you can.
That field is ticked, so the source wins on every sync. Untick it, or switch its badge to ON CREATE.
Turn on Keep variants added on this store.
- Check the Pricing chips are ticked.
- If the stores use different currencies, prices stay off until you tick Copy prices anyway, without converting them to ….
- Check Sync images is on.
- Turn on Force image rebuild (one-time repair) and run one product sync.
- Check Sync collections is on.
- If some collection names differ between stores, pair them in Pair collections between your stores.
- Check Collection type sync mode includes that collection type.
That is normal. Skipped products had no changes since the last sync.
Open View Logs. On big stores each step can take a long time. If the log shows a time estimate and the wave number goes up, the sync is still working. If nothing changes for several hours, contact support.
This is by design. Product sync never deletes destination products. Delete it on the destination yourself.
Inventory sync
What it does
Inventory sync copies stock numbers from one store to the other. It works per variant and per location. A variant is one version of a product, for example "T-shirt, size M". A location is a place where you keep stock in Shopify, for example a warehouse or a shop.
- By default, stock goes from the source store to the destination store.
- You can turn the direction around, so the destination's stock goes up to the source. See Stock direction.
- Only stock numbers are copied. Product details (title, price, images) are handled by Product sync.
The store that sends stock is the "master". Its number replaces the number on the other store. A 0 on the source sets the destination to 0, so sold-out items show as sold out.
Before you start
- Both stores must be connected as a pair. See Getting started.
- Products must exist on both stores and be linked. Usually Product sync does this for you.
- Check your locations on both stores. Stock is copied into the location with the same name, or into the location you choose in Location mapping. If no location matches, no stock is written.
- Give each variant a SKU (a stock code) if you can. SKUs are the main way variants are matched.
- If a warehouse app or stock app already manages stock on one of your stores, decide which store is the master before you turn this on.
How to set it up
- 1In Sync Hub, find your destination store in the list and click Configure.
- 2Open the Product & Inventory Sync tab and scroll to Inventory Sync Settings.
- 3Turn on Inventory sync.
- 4Choose a schedule under Automatic schedule. If product sync also runs on a schedule, this control is called Extra stock-only refreshes.
- 5Choose Which store's stock is correct (the stock direction).
- 6Choose Quantity to sync: Available or On hand.
- 7If your location names are different on the two stores, turn on Location mapping and pair them. See Location mapping.
- 8Click Save changes.
- 9To run a first sync now, click Sync next to the store, then run Inventory.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Inventory sync | Main switch for stock sync on this pair. | Off |
| Automatic schedule / Extra stock-only refreshes | How often stock syncs by itself: Every 30 minutes, Every hour, Every 6 hours or Every day. Off — manual only means it runs only when you start it, or after a product sync. | Off — manual only |
| Filter products for inventory sync | Only sync stock for source products that match your rules (tags, vendors, product types and more). Other products are skipped, and their destination stock is not touched. | Off |
| Override track quantity | Turns on "Track quantity" on the destination for every synced item, then sets the number from the source. | Off |
| A sale here lowers the source's stock | When a customer buys on this destination store, the same units come off the source store's stock. See When a sale lowers the source's stock. | Off |
| Refresh this store's stock after each order | After an order here has changed the source's stock, copy the source's new number for the ordered items to this store right away. See Real-time stock after orders. | Off |
| Which store's stock is correct | Source store = source stock is copied down to this store. This store = this store's stock is copied up to the source. | Source store |
| When this store shows 0, set the source to 0 too | Only shown when This store is chosen above. Off = a 0 here is ignored, so an item you have not counted yet cannot empty the source. On = 0 means 0 everywhere. | Off |
| Quantity to sync | Which Shopify number is read and written: Available or On hand. See Available or On hand. | Available (new connections) |
| Location mapping | Pair each location on this store with a location on the source store. | Off |
Available or On hand
Shopify keeps two main stock numbers for each item and location:
- On hand is everything physically on the shelf. It also counts units that are already sold in orders that are not shipped yet.
- Available is what you can still sell. It is On hand minus the units waiting in open orders.
Available is the safer choice in most cases. With On hand, units that are already sold on the source (but not shipped) are counted as free stock on the destination. The destination can then sell them a second time.
The same type is used on both sides. With Available, the source's available number is written as the destination's available number.
Location mapping
Stock is copied per location. The app decides where each source location's stock goes like this:
- 1Location mapping is on and has rows: each source location goes to the destination location you paired it with. A source location with no row is skipped.
- 2Location mapping is off: each source location goes to the destination location with the same name. Upper and lower case do not matter, but the rest of the name must match exactly.
- 3No match: that location's stock is not copied. The app never guesses a location.
To set up mapping:
- 1Turn on Location mapping.
- 2Click (+) Add.
- 3Pick a Location in this store and a Location in the source store.
- 4Add one row for each pair of locations, then click Save changes.
One location on each store, with different names? Nothing is copied until you pair them. Turn on Location mapping and add one row.
Tips:
- Pair locations one to one. Do not send two source locations into one destination location. The numbers are not added together, so one would replace the other.
- If you turn on Location mapping, add a row for every location you want synced. Locations without a row are left alone.
Stock direction
Use Which store's stock is correct to pick the master store. Stock moves in one direction only. There is no "both ways" option, because stock has no way to tell which number is newer, so the two stores would keep overwriting each other.
Source store (default)
- The source's stock is copied down to this store.
- A source count of 0 sets this store to 0.
- Use this when the source holds your real stock, for example a central warehouse store.
This store
- This store's stock is copied up to the source.
- Each location on this store writes into its matching location on the source (by Location mapping, or by the same name).
- If several stores send stock to the same source, each one writes its own location. The source then shows the total across its locations.
- Use this when your shops hold the real stock and the source is a central catalog store.
Before you switch to This store:
- Make sure the stock on this store is correct. It is about to become the source's number.
- If more than one store sends stock to the same source, each store must point at its own location under Location mapping. If two stores share a location, sync stops instead of guessing. You will see the reason in View Logs.
- Leave When this store shows 0, set the source to 0 too off unless every item here has a counted quantity.
Your product filter (if any) still picks products from the source store, even in this direction. If your filter tags live only on the destination, the wrong products may be picked.
When a sale lowers the source's stock
With Which store's stock is correct set to Source store, a sale on the destination does not change the source by itself. At the next sync, the source's number is copied down again and the sold units come back on the destination. The destination can then oversell.
A sale here lowers the source's stock fixes this. When it is on, each sale on this store takes the same number of units off the source.
How it works depends on your order settings. The screen tells you which method applies:
- Orders from this store are copied to the source (order sync set to ← Reverse or Both ⇄): the copied order lowers the source's stock, like a normal sale on the source.
- Orders are not copied to the source: the source's stock is lowered directly. No order is created on the source, so its order list and sales reports stay the same. Orders copied here from the source are not counted again.
- Leave it off if a warehouse app or stock app on the source already lowers the stock for these sales. Otherwise each sale is counted twice.
- It needs Inventory sync on.
- It cannot be used with This store as the master. The switch is blocked in that case.
- Products must be linked to the source. The source location is found from your Location mapping, or by the same location name.
- When stock is lowered directly:
- Only orders placed after you turn it on are counted.
- A cancel or refund that puts the items back in stock on this store gives the units back to the source.
- A refund without restock keeps the units off the source.
- Removing items by editing an order does not give units back. Only cancels and restocked refunds do.
- If Quantity to sync is On hand, the screen warns you: the source's available stock goes down at once, but this store only shows the change when the order ships. Click Use Available, or tick Keep On hand — I understand this store shows the change when orders ship to keep it.
- When it is on, a Saved status line shows whether it works and what it did in the last 24 hours.
- Every change to the source's stock, and every item that could not be counted, is listed in View Logs.
Real-time stock after orders
Normally stock updates on your schedule. Some order events update stock sooner:
- After forward order sync: when an order is copied from the source to the destination and Inventory sync is on, the app refreshes the destination's stock for the products in that order.
- Refresh this store's stock after each order: when an order on this store has changed the source's stock, the app copies the source's new number for the ordered items to this store right away. Other stores that sell the same items and have this setting on are updated too.
Refresh this store's stock after each order only copies numbers down from the source. It does not lower the source by itself. Something must change the source's stock first, for example A sale here lowers the source's stock, or a stock app on the source. The screen tells you when nothing will start it. It is not used when This store is the master.
We recommend turning it on together with A sale here lowers the source's stock.
What is synced / not synced
| Synced | Not synced |
|---|---|
| Stock numbers (Available or On hand), per variant and per location | Product details, prices, images (see Product sync) |
| Sold-out items (a source 0 becomes 0) | Stock for items whose location has no match |
| Draft and archived products, as well as active ones | Stock for bundle products (see below) |
| "Track quantity" turned on where needed | Incoming stock, committed stock and other Shopify stock types |
How often it runs
- On your schedule: every 30 minutes, every hour, every 6 hours or every day.
- After every product sync: when product sync finishes, a stock sync runs for the pair.
- By hand: click Sync next to the store, then run Inventory.
- After orders: see Real-time stock after orders.
If stock was refreshed recently (for example by a product sync), a scheduled run may be skipped until it is due again. Only one stock sync runs per pair at a time.
Shopify can take a few minutes to include your latest stock edits in the data the app reads. A change you made a minute ago may appear in the next run instead.
Limits
- Stock is synced only for products inside your plan's product limit. Products over the limit show as Blocked by plan in the logs. See Plans and billing.
- A first sync to a new, empty destination is slower. Shopify needs each item to be stocked at each location one by one. Later runs are much faster.
- Large catalogs can take a long time per run. That is normal.
Good to know
Negative stock. Shopify does not accept a negative number here. If the source shows a negative number, the destination is set to 0.
Untracked items. If an item does not track quantity on the destination, inventory sync turns "Track quantity" on so the number is used. It does not do this if your Product sync field setting Track quantity says not to track. Override track quantity forces tracking on for every synced item.
Bundles. Shopify works out a bundle product's stock from the items inside it. Its stock cannot be set directly, so the app skips it. This is not counted as an error. Sync the stock of the items inside the bundle instead.
Items without a SKU. Variants are matched mainly by SKU. A variant with no SKU, or with the same SKU as another variant of the same product, can still get stock if product sync has already linked it to its partner on the other store. Its variant title must also match and be unique. Otherwise it is skipped. Giving each variant its own SKU is the most reliable setup.
How products are matched. Products are matched by SKU first, then by title, then by handle (the product's web address name).
Turning inventory sync off stops all stock changes from this app, including A sale here lowers the source's stock.
Troubleshooting
Read the whole log line in View Logs:
- Unchanged: N — the numbers were already the same. Nothing to do.
- No destination location: N — the location names do not match. Turn on Location mapping and pair your locations.
- Not written: N — the items could not be matched (for example no SKU, or the item is missing on the destination). Check the SKUs, or run Product sync first.
- Blocked by plan: N — these products are over your plan's limit.
The names are probably different. Turn on Location mapping, add one row, and save.
- Check that Inventory sync is on and a schedule is set.
- Use Available under Quantity to sync. On hand counts units already sold in open source orders.
- If customers buy on the destination, turn on A sale here lowers the source's stock and Refresh this store's stock after each order.
This is expected with Source store as the master, because the source did not change. Turn on A sale here lowers the source's stock, or let a stock app on the source handle it.
With Source store as the master, a 0 on the source sets the destination to 0. Check the stock on the source, in the matching location.
Shopify may need a few minutes to include it. Wait for the next run, or start one by hand.
Bundle stock cannot be set directly. Sync the items inside the bundle.
Check Which store's stock is correct. Only one direction runs per pair.
Order sync
What it does
Order sync copies orders between your two connected stores. It can also keep the copies up to date when an order is paid, shipped or refunded.
You choose one Order sync direction:
| Direction | What happens |
|---|---|
| Off | Orders are not copied. |
| Forward → | New orders on the source store are copied to the destination store. |
| ← Reverse | New orders on the destination store are copied back to the source store, in real time. |
| Both ⇄ | Forward and Reverse run together. With Real-time order updates on, both stores stay in sync live. |
Common uses:
- Forward: your main store takes the orders, and a second store (for example a warehouse or fulfillment store) needs a copy.
- Reverse: several shops sell your products, and your central store (the source) ships them. Each shop's orders are copied to the central store.
Before you start
- Both stores must be connected as a pair. See Getting started.
- Products in your orders should be linked between the stores. Product sync does this. Forward sync can also copy a missing product when it needs it.
- Your plan sets how many orders you can copy. See Plans and billing.
- For B2B orders (orders placed for a company), the receiving store needs Shopify Plus with B2B.
- Copying an order does not charge the customer again. It only creates a record of the order on the other store.
How to set it up
- 1In Sync Hub, find your destination store in the list and click Configure.
- 2Open the Orders & Customers Sync tab.
- 3Under Order sync direction, pick Forward →, ← Reverse or Both ⇄.
- 4Set the options for your direction (see the tables below).
- For Forward, tick at least one status under Which orders to sync. If none is ticked, forward sync is paused.
- 5Click Save changes.
- 6For Forward, click Sync next to the store and run Orders to copy orders now. Or set an Automatic schedule.
Reverse has no button and no schedule. It starts by itself when a new order arrives on the destination.
Settings explained
Forward settings (source → destination)
| Setting | What it does | Default |
|---|---|---|
| Which orders to sync | Only new orders with a ticked fulfillment status are copied: Unfulfilled, Partially fulfilled, Fulfilled. Untick all to pause. | None ticked (paused) |
| Payment status filter | Only copy orders with the ticked payment statuses: Pending, Authorized, Partially paid, Paid, Partially refunded, Refunded, Voided, Expired. Leave all unticked to copy every payment status. | All |
| Automatic schedule | How often new orders are copied: Every 30 minutes, Every hour, Every 6 hours or Every day. Off — manual only = only when you click Sync. | Off — manual only |
| Real-time order updates | When an already-copied source order is shipped or refunded, the change is copied to the destination within seconds. It does not copy new orders. | Off |
| Also mirror updates made on the destination order back to the source | Shown under Real-time order updates in Forward mode. Shipping and refund changes your staff make on the destination copy are also copied back to the source order. It does not create new orders on the source. | Off |
| Sync payment status | When an order becomes Paid on one store, its copy is marked paid too. Only the change to Paid is copied. Works in both directions. | Off |
| Sync B2B orders & companies | Orders placed for a company are copied as B2B orders. The company, company location and company contact are reused if they exist, or created if missing. | Off |
Reverse settings (destination → source)
| Setting | What it does | Default |
|---|---|---|
| Cutoff date (UTC) | Orders created before this date and time are ignored. | The moment you turned on reverse sync |
| Payment status filter | Only copy orders with the ticked payment statuses. Leave all unticked to copy every payment status. This filter only decides which orders are created. Later refunds and updates always sync. | All |
| Auto-resolve missing products | On: if an ordered product is not found on the source, look for it by SKU, and if still not found, create a simple product so the order can be copied. Off: skip the order (shown as a warning). | On |
| Create missing products on the source for orders from this store | Off: only link to source products that already exist (matched by SKU). An order with an unknown product is skipped with a warning, and no product is created. | On |
| Fill in auto-created products | When a product is created on the source for an order, also copy its images, description, vendor, tags, collections, metafields and variant details from the destination. It follows your Product sync field settings. | Off |
| Source stock for orders from this store | Shows whether copied orders lower the source's stock. You change this under Product & Inventory Sync → A sale here lowers the source's stock. See Inventory sync. | Off |
| Add custom labels to reverse-synced orders | Adds a Delivery method label, a Source identifier (optional) and a Referring site (optional) to copied orders. | Off |
| Tags for reverse-synced orders | Tags added to every copied order on the source: reverse_synced, dest_order_ plus a number (shows which destination order it came from), reverse_sync_origin_pos (for point-of-sale orders), plus your own Custom tags (comma-separated). | reverse_synced and dest_order_ on |
| Sync B2B orders & companies (reverse) | Destination orders placed for a company are created on the source as B2B orders. Needs Shopify Plus with B2B on the source. | Off |
| Customize fallback customer | When a destination order has no usable customer contact, the source copy is attached to a placeholder customer. Here you can set its Fallback email (optional), First name, Last name and more. | Off (default placeholder used) |
| Webhook status | Under Troubleshooting. Click Check to see if the destination is set up to send new orders to the app. | — |
What is synced / not synced
When an order is copied, the copy contains:
| Copied | Notes |
|---|---|
| Line items (products, quantities) | Prices are the prices the customer paid on the original order, not the prices in the receiving store. |
| Custom line items | Items without a product are copied with their title, quantity and price. |
| Customer, email and phone | The customer is linked or created on the receiving store. |
| Shipping and billing address | — |
| Shipping method and cost | — |
| Taxes | Tax lines from the original order. |
| Discount | See Good to know. |
| Note and tags | — |
| Payment status | Paid, pending, and so on, as on the original order. |
| Fulfillments | If the original order is already shipped, its shipments (with tracking numbers) are copied too. |
| Company, location and contact | Only for B2B orders, when B2B sync is on. |
After an order is copied, these later changes can sync too:
| Change | Forward | Reverse |
|---|---|---|
| Shipments and tracking | With Real-time order updates on | Yes |
| Refunds | With Real-time order updates on | Yes |
| Tags and note | With Real-time order updates on | Yes |
| Marked as paid | With Sync payment status on | With Sync payment status on |
In Reverse, when the source ships a copied order, the shipment and tracking are also copied back to the original order on the destination. This needs nothing extra from you.
Not synced:
- Cancellations. Cancelling an order does not cancel its copy. Cancel it on both stores.
- Customer emails. The app creates copies and copied shipments without emailing the customer. No order confirmation or shipping email is sent for them.
How line items are matched
Forward:
- 1If the product variant is already linked to the destination, that variant is used.
- 2If not, the app copies the product to the destination first, then uses it. This counts toward your plan's product limit.
- 3If your product limit is full and the product does not exist on the destination yet, the order is not copied. You will see an error in View Logs.
- 4If a line still cannot be matched, that line is left out. If no lines are left, the order is not copied.
Reverse:
- 1If the variant is linked to the source, that variant is used.
- 2If not, the app looks for a source variant with the same SKU.
- 3If still not found, what happens depends on Auto-resolve missing products and Create missing products on the source for orders from this store:
- Both on: a simple product is created on the source, and the order is copied.
- Either off: the order is skipped with a warning in View Logs.
How often it runs
| Direction | When |
|---|---|
| Forward, new orders | On your Automatic schedule, or when you click Sync and run Orders. |
| Forward, changes to copied orders | Within seconds, with Real-time order updates on. |
| Reverse | In real time. A new or changed destination order usually syncs within seconds to a few minutes. |
| Both ⇄ with Real-time order updates on | New orders and changes go both ways live. The Automatic schedule is not used; the Sync button still works. |
Limits
- Your plan sets how many orders can be copied. See Plans and billing.
- Shopify only lets the app read orders from about the last 60 days. Older orders cannot be copied.
- Forward sync copies each order once. A scheduled run does not update orders that are already copied. Use Real-time order updates for that.
- B2B orders need Shopify Plus with B2B on the receiving store. If the company cannot be created there, the order is copied as a normal order.
Good to know
- Order numbers. The copy gets a new order number from the receiving store. In Reverse, the dest_order_… tag shows which destination order it came from.
- Channel column. Shopify always shows the app as the "Channel" of orders the app creates. This cannot be changed. To label copied orders, use the Delivery method label in reverse settings.
- Discounts. Shopify accepts one order-level discount when the app creates an order. If the original order has several, only the first is copied.
- Stock. A forward copy does not lower stock on the destination by itself. Stock comes from Inventory sync. If inventory sync is on, the stock of the ordered products is refreshed after each forward copy.
- Stock in Reverse. By default a copied order does not lower the source's stock. To change this, turn on A sale here lowers the source's stock in Inventory sync. Leave it off if a warehouse app or stock app on the source already handles these orders.
- Both ⇄ mode. A loop guard stops changes from bouncing back and forth. If the same order is edited on both stores at almost the same moment, the most recent edit wins. Refunds are copied once, with matching amounts.
- B2B net terms. Net-terms B2B orders are usually Pending when placed. If your reverse Payment status filter only allows Paid, they are copied only after they are paid.
- Customers. In Forward, customers are copied with their orders. In Reverse, the customer is matched on the source by email. If no match is found, a customer is created from the order. If the order has no usable contact, the fallback customer is used. See Customer sync to sync all customers.
- Companies. To copy B2B companies without waiting for an order, see Company sync.
Troubleshooting
- Check that at least one status is ticked under Which orders to sync. None ticked = paused.
- Check the Payment status filter.
- Check that an Automatic schedule is set, or click Sync and run Orders.
- Orders older than about 60 days cannot be read.
- Check your plan's order limit.
The order needed a product that is not on the destination yet, and your product limit is full. Upgrade your plan, or make room, then sync again.
- Check the Cutoff date (UTC). Orders created before it are ignored.
- Check the reverse Payment status filter.
- Under Troubleshooting, click Check next to Webhook status.
- Look in View Logs for skipped orders. A common reason is a product that is not on the source, with Auto-resolve missing products or Create missing products on the source for orders from this store turned off.
In Forward, turn on Real-time order updates. Changes made before you turned it on are not copied.
This is a Shopify rule for app-created orders. Use the Delivery method label instead.
Shipments copied by the app are added without emailing the customer. This also applies in Reverse, when the source ships and the shipment is copied back to the destination order. If you want the customer to get an email, send it from Shopify by hand.
Cancellations are not copied. Cancel the copy by hand.
The receiving store needs Shopify Plus with B2B. If the company, location or contact could not be set up, the order is still copied, as a normal order.
Customer sync
What it does
Customer sync copies your customers from one store to the other and keeps them up to date.
- In one way mode, customers go from the source store to the destination store.
- In two way mode, changes on either store reach the other store.
The app links each customer on the source to the same person on the destination. After that, edits are copied to the linked customer instead of making a new one.
Customer sync also has a separate tool, Customer consolidation, that finds and merges duplicate customers inside each store. See Find and merge duplicate customers.
Before you start
- Both stores must be connected as a pair (a source store and a destination store). See Getting started.
- Your plan sets how many customers you can sync. See Plans and billing.
- Decide which store is the "main" store for customer data. In one way mode, the source always wins.
- If you use marketing apps (email or SMS), read Marketing consent first.
How to set it up
- 1In Sync Hub, find your destination store in the list and click Configure.
- 2Open the Orders & Customers Sync tab.
- 3Turn on Customers sync.
- 4Under Automatic schedule, choose how often to sync. Choose Off — manual only if you only want to sync by hand.
- 5Choose the Direction (one way or two way).
- 6If you chose two way, set the extra options (see Settings explained).
- 7Turn on Sync customer updates via webhooks if you want changes copied within seconds.
- 8Save your settings.
- 9To start a first sync now, click Sync next to the store, then run Customers.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Customers sync | Main switch for customer sync on this pair. | Off |
| Automatic schedule | How often a sync runs by itself: Every 15 minutes, Every 30 minutes, Every hour, Every 6 hours or Every day. Off — manual only means it runs only when you start it. | Off |
| Direction | One way — source to destination, or Two way — changes on either store sync to the other. | One way |
| When both stores change the same field | Two way only. Which edit is kept when the same field changed on both stores: Keep the most recent edit, Source store wins or Destination store wins. | Keep the most recent edit |
| Create customers on the source store | Two way only. Customers that exist only on the destination are added to the source. | Off |
| Copy marketing consent back to the source | Two way only. Copies email and SMS subscription status from the destination to the source. | Off |
| Sync customer updates via webhooks | Copies customer changes in real time, a few seconds after they happen, instead of waiting for the schedule. ("Webhooks" are messages Shopify sends to the app when something changes.) | Off |
| Sync opt-in on order-created customers | When Order sync has to create a new customer, it also copies that customer's email and SMS marketing opt-in. Existing customers are never changed. | Off |
| Customer metafield namespaces to sync | A list of metafield namespaces to copy, for example custom, loyalty. Leave it empty to not sync customer metafields. (A metafield is an extra custom field on a customer. The namespace is the first part of its name, before the dot.) | Empty (off) |
If you switch Direction back to one way, the two way options turn off.
What is synced
| Data | Synced |
|---|---|
| Yes | |
| First name and last name | Yes |
| Phone number | Yes (see Phone numbers and emails) |
| Addresses, including the default address | Yes |
| Tags | Yes |
| Note | Yes |
| Tax exempt setting | Yes |
| Email marketing consent | Yes |
| SMS marketing consent | Yes |
| Metafields | Only the namespaces you list in Customer metafield namespaces to sync |
What is not synced
- Order history, amount spent and order count. These belong to orders. See Order sync.
- Customer accounts and passwords. The app never sends account invites.
- Gift cards, store credit and saved payment methods.
- B2B company links. Use Company sync (B2B) for those.
- Deletes. Deleting a customer on one store never deletes it on the other store.
- Removed metafields. If you remove a customer metafield on one store, it is not removed on the other store.
How customers are matched
Before it creates a customer, the app looks for the same person on the other store:
- 1A customer it already linked before.
- 2A customer with the same email.
- 3A customer with the same phone number.
If it finds one, it links the two customers. It does not create a copy. If it finds none, it creates a new customer.
Direction: one way or two way
One way. The source store is the main store. When a customer differs between the two stores, the source version is copied to the destination. Edits made only on the destination are overwritten the next time that customer changes on the source.
Two way. Edits on either store reach the other store.
- Each field is handled on its own. If you change the phone on the source and the note on the destination, both changes are kept.
- If the same field changed on both stores, the rule in When both stores change the same field decides which edit is kept.
- Customers that exist only on the destination are added to the source only if Create customers on the source store is on.
- Marketing consent goes from the destination to the source only if Copy marketing consent back to the source is on.
When two way starts. The first time two linked customers are compared, the app has no "last agreed" version to compare against. If the two stores hold different details, the app leaves both customers unchanged and counts them as "differ between stores". You can then fix them with Resolve using the conflict rule in the status panel (see below). When one store has an empty value and the other has a value, the value is kept.
Marketing consent
Email and SMS subscription status is copied with the customer.
- A customer who was never asked on the source does not change the destination. The app does not mark them as unsubscribed.
- In two way mode, consent goes back to the source only if Copy marketing consent back to the source is on.
Be careful with welcome emails. If a customer becomes "subscribed" on a store, your marketing apps (for example Shopify Email, Shopify Flow or Klaviyo) may send them a welcome email. Before you turn on consent sync for many customers, check your welcome automations. The app itself never sends emails to your customers.
Phone numbers and emails
Shopify allows each email and each phone number only once per store. This can stop a customer from syncing as it is:
- If the email or phone already belongs to a customer on the other store, the app links to that customer instead of creating a new one.
- If Shopify rejects the phone number (it is already used by a different customer, or the format is not valid), the app creates or updates the customer without the phone. SMS consent is then skipped for that customer.
- If one email or phone matches more than one customer, the app does not guess. The customer is not linked and shows as Not linked — matches more than one customer.
Shopify can also reject other values, for example some special characters such as emoji in a name. That customer fails until you fix the value on the store it comes from.
Customer sync status panel
When customer sync is on and saved, the Customer sync status panel appears under the customer settings. Click Refresh to update it.
It shows:
- One way or Two way, and the run status: Idle, Running or Failed.
- When the last run happened (Last run), and what it did.
- Live updates: whether real-time updates are working on the Source and Destination store (Active, Error or Not set up).
- Linked customers: how many customers are linked between the two stores.
- Last 24 hours: what happened to customers in the last day. Click Show details to see each result, for example Created on the destination, Updated on the source, Matched to an existing customer, Not created — plan limit reached or Could not save to Shopify.
Buttons:
- Run a full customer sync now starts a full sync for this pair.
- Resolve using the conflict rule appears when some customers differ between the stores and were not changed automatically. It fixes them with the rule you chose in When both stores change the same field.
How often it runs
- Real time. With Sync customer updates via webhooks on, a change usually reaches the other store within seconds. In two way mode this works on both stores.
- Schedule. The schedule picks up every customer that changed since the last run. It also catches any change that real-time updates missed. Keep a schedule on even when you use real-time updates.
- By hand. Click Sync next to the store and run Customers, or use Run a full customer sync now in the status panel.
- With orders. When Order sync copies an order, it also creates or links the order's customer.
A brand-new customer may only arrive on the next scheduled run. If new customers must appear quickly, choose a short schedule, such as Every 15 minutes.
Find and merge duplicate customers
Customer consolidation finds customers that look like the same person inside one store and lets you merge them. It is separate from sync. It changes nothing until you click merge.
- 1In the Orders & Customers Sync tab, turn on Customer consolidation and save.
- 2Click Run scan. The app scans the source store and the destination store. A scan can take several minutes on a large store.
- 3Review the groups under Destination store duplicates and Source store duplicates.
- High confidence groups share the same email or phone.
- Low confidence groups only share a name. They are hidden until you tick Include name-only matches (low confidence). Names can belong to different people, so check each group.
- Likely different people means the records have different emails or phone numbers.
- 4In a group, tick the records that are the same person. The record marked Keep survives, and the others merge into it. Click Set as “Keep” to choose a different one.
- 5Under Which details should the merged customer keep?, pick the email, phone, name or default address you want.
- 6Click Merge selected. Or click Not duplicates to hide the group.
- Merging uses Shopify's own customer merge. A merge cannot be undone.
- Shopify cannot merge some customers, for example customers with gift cards, store credit, subscriptions, saved payment methods or B2B company links. Those groups show Cannot merge or Partially merged.
- A merge only happens on one store. The copy of that customer on the other store stays as it is.
- Each merged group counts as one customer toward your plan usage.
- If the app asks you to approve new permissions before merging, accept them and try again.
Limits
- Your plan sets how many customers can be synced per store pair. When you reach the limit, new customers are not created, and the status panel shows Not created — plan limit reached. Updates to customers that were already synced keep working. See Plans and billing.
- Each email and phone number can only be used once per store (a Shopify rule).
- Up to 250 metafields are read per customer.
Privacy
- When Shopify sends a request to erase a customer's data, the app clears its own saved copy of that customer's personal data. See Privacy and data.
- Deleting a customer on one store does not delete it on the other store. If you need a customer removed from both stores, delete it on both.
Troubleshooting
Check the Customer sync status panel and click Show details under Last 24 hours. Common reasons:
- Your plan limit is reached (Not created — plan limit reached).
- The direction is one way and the change was made on the destination (Skipped — this direction is not synced).
- In two way mode, the customer exists only on the destination and Create customers on the source store is off (Not created — this direction is not synced).
- Shopify rejected a value (Could not save to Shopify).
New customers may wait for the next scheduled run. Check that Automatic schedule is not Off — manual only. You can also click Run a full customer sync now.
Shopify did not accept the phone on that store. It may already belong to another customer there, or the format may not be valid. Fix the number on the source store and the next sync adds it.
This happens in two way mode when two linked customers had different details before syncing started. Click Resolve using the conflict rule to fix them.
Turn Sync customer updates via webhooks off, save, then turn it on again and save. If it still shows an error, contact support. The schedule keeps syncing in the meantime.
In one way mode, the source store's consent is copied to the destination. If the source says "subscribed" or "unsubscribed", the destination follows. A customer who was never asked on the source does not change the destination.
Open the Config tab, go to Email alerts, and turn on Send alert when customer sync fails.
Company sync (B2B)
What it does
Company sync copies your B2B companies from the source store to the destination store. B2B means selling to other businesses. In Shopify, a B2B customer is a company.
Each company in Shopify has:
- Locations: the company's branches or sites, with their own addresses, tax settings and payment terms.
- Contacts: the people who buy for the company. Each contact is also a normal customer.
- Roles: what each contact may do at each location (for example "Location admin" or "Ordering only").
Company sync copies all of these, so the destination store is ready to take B2B orders without waiting for the first order.
Company sync works in one direction only: source → destination. It never deletes anything on the destination.
Before you start
- Both stores need a Shopify plan that includes B2B companies. If one store does not have it, the sync stops before it writes anything.
- Both stores must be connected as a pair. See Getting started.
- To copy catalogs and price lists, Product sync must run on the same pair first.
- Your plan sets how many companies you can sync. See Plans and billing.
You do not need Customer sync turned on. Company sync creates or links the customers behind each contact by itself. This lets you keep a store that holds only your B2B customers.
How to set it up
- 1In Sync Hub, find your destination store and click Configure.
- 2Open the Orders & Customers Sync tab.
- 3Turn on Companies sync (B2B).
- 4Under Automatic schedule, choose how often it runs, or Off — manual only.
- 5Under Companies that already synced, choose Create only or Create and update (see below).
- 6Turn on Sync company changes via webhooks if you want changes copied right away.
- 7Turn on Company metafields and Catalogs and price lists if you need them.
- 8Save your settings.
- 9To start now, click Sync next to the store, then run Companies (B2B).
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Companies sync (B2B) | Main switch for company sync on this pair. | Off |
| Automatic schedule | How often a sync runs by itself: Every 30 minutes, Every hour, Every 6 hours or Every day. Off — manual only means it runs only when you start it. | Off |
| Companies that already synced | Create only — never change companies that already synced: only adds what is missing on the destination. Create and update — source edits overwrite the destination: also copies later edits from the source. | Create only |
| Sync company changes via webhooks | When a company, location, contact or role changes on the source, that company is synced again right away, using the mode above. ("Webhooks" are messages Shopify sends to the app when something changes.) | Off |
| Company metafields | Copies the custom fields (metafields) on companies and their locations, including their definitions. | Off |
| Catalogs and price lists | Copies each company location's catalog: its price list and which products that location can see. Needs product sync. | Off |
Which mode should I use?
- Use Create only if someone also edits companies by hand on the destination. Their edits stay safe.
- Use Create and update if the source is your main store and the destination should always match it. Edits made only on the destination are overwritten.
What is synced
| Item | What is copied |
|---|---|
| Company | Name, note, Company ID, and the "customer since" date (only when the company is first created) |
| Locations | Name, shipping and billing addresses, tax settings, checkout settings, payment terms |
| Contacts | The customer behind the contact, the contact's job title and language |
| Roles | Each contact's role at each location |
| Main contact | The company's main contact |
| Metafields | Company and location metafields, if Company metafields is on |
| Catalogs | Price list and product list per company location, if Catalogs and price lists is on |
What is not synced
- Deletes. If you delete a company, location or contact on the source, it stays on the destination. Delete it there by hand if needed.
- Emptied fields. An empty value never overwrites a value. If you clear a company note on the source, the destination keeps the old note.
- Removed tax exemptions. New tax exemptions are added. An exemption removed on the source is not removed on the destination.
- Removed metafields. A metafield that exists only on the destination is never removed.
- Changes made on the destination. Company sync never sends anything back to the source.
How companies are matched
The app links each source company to one destination company, so it does not create copies.
| Item | How the app finds it on the destination |
|---|---|
| Company | A company it linked before, then the same Company ID, then the exact same name |
| Location | A location with the same name inside that company |
| Contact | The customer with the same email, then the same phone number. If none is found, the customer is created. |
| Role | A role with the same name inside the destination company |
- A contact whose customer has no email and no phone is skipped. The app has no way to find that person on the destination.
- Company ID must be unique on a store. If the destination already uses that ID for another company, the company is still created, but without the Company ID. The run tells you why.
- Roles are matched by name. If the destination uses a different language for role names, the app picks the closest admin role. Check the roles after the first sync.
- Payment terms are matched by type and number of days (for example "Net 30"). If the destination has no matching terms, the location is copied without payment terms.
Catalogs and price lists
A catalog in Shopify B2B sets which products a company location can see and what prices it pays. It has a price list (a percentage adjustment and fixed prices for some products).
When Catalogs and price lists is on:
- The catalog is copied and linked to the matching destination locations.
- The percentage adjustment is copied.
- Fixed prices are copied only for products that already exist on the destination through product sync.
- Products that do not exist on the destination are reported as unmatched. The app never guesses.
Rules:
- Product sync must run on this pair first. If no products are synced yet, catalogs are skipped and the run says so.
- Fixed prices need the same currency on both stores. If the currencies are different, the percentage adjustment is still copied, but fixed prices are skipped. This way, no one pays a price meant for another currency.
- If none of a catalog's products exist on the destination, the product list is not created. The catalog and percentage adjustment are still set up. (An empty product list would hide every product from that location.)
- Some Shopify plans allow companies but not catalogs. In that case catalogs are skipped with a clear reason, and companies still sync.
How often it runs
- Real time. With Sync company changes via webhooks on, a change on the source usually reaches the destination in under a minute.
- Schedule. Runs at the frequency you chose under Automatic schedule. It also catches anything real-time updates missed.
- By hand. Click Sync next to the store, then run Companies (B2B).
- With orders. B2B orders copied by Order sync can also create the company they belong to. Both features share the same links, so a company created by one is reused by the other.
Only one company sync runs per pair at a time.
Check the results
Under Automatic schedule on the Companies sync (B2B) card you see:
- When the last sync ran, or that a sync is running now.
- A short summary, for example "Last run: 3 companies created, 5 contacts linked to existing, 1 contact skipped (no email or phone)".
- "Last run: everything already up to date" when nothing needed to change.
For more detail, click View Logs next to the store.
Limits
- Your plan sets how many companies and catalogs you can sync per store pair. Locations and contacts do not count toward the company limit. See Plans and billing.
- Customers that company sync has to create count toward your plan's customer limit.
- Up to 2,000 new companies are created per run. If you have more, the rest are created on the next run.
- A source store with more than 5,000 companies is not supported yet. Contact support if you need this.
- Up to 5,000 fixed prices are copied per price list.
Troubleshooting
Check that you are on the Orders & Customers Sync tab of the destination store. If it is still missing, contact support.
One of the stores does not have a Shopify plan that includes B2B companies. Both stores need it.
Add an email or phone number to that customer on the source store, then sync again.
Check the mode. In Create only, companies that already synced are never changed. Switch to Create and update.
This is on purpose. The app never empties a field on the destination. Clear it there by hand.
Either the products are not synced yet (run Product sync first), or the two stores use different currencies.
You reached your plan's company limit. Upgrade your plan to sync the rest. See Plans and billing.
Discount sync
What it does
Discount sync copies your discounts from the source store to the destination store. It copies both kinds of Shopify discounts:
- Discount codes: the customer types a code at checkout.
- Automatic discounts: applied at checkout without a code.
It works in one direction only: source → destination. Changes you make to a discount on the destination are not sent back to the source.
Before you start
- Both stores must be connected as a pair. See Getting started.
- Discount sync needs a subscription. Your plan sets how many discounts you can sync. See Plans and billing.
- Sync your products and collections first. A discount that applies to certain products or collections can only be copied if those products and collections exist on the destination. See Product sync.
- If a discount is for specific customers, those customers must exist on the destination. See Customer sync.
How to set it up
- 1In Sync Hub, find your destination store and click Configure.
- 2Open the Content Sync tab.
- 3Turn on Discounts sync.
- 4Save your settings.
- 5To start now, click Sync next to the store, then run Discounts.
After this, discount sync also runs by itself about once a day.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Discounts sync | Main switch. When on, discounts are copied from source to destination about once a day, and you can also run it by hand. | Off |
| Send alert when discount sync fails | In the Config tab, under Email alerts. Sends you an email when discount sync fails. | Off |
There are no other discount settings. The schedule cannot be changed.
Which discounts are copied
| Discount type | Code | Automatic |
|---|---|---|
| Amount off products or amount off order (percentage or fixed amount) | Yes | Yes |
| Buy X get Y | Yes | Yes |
| Free shipping | Yes | Yes |
Discounts made by other discount apps are not copied.
What is copied for each discount
- Title
- All discount codes (not only the first one)
- The value: percentage or fixed amount
- Start date and end date
- Which products, product variants or collections it applies to
- Minimum purchase requirement (amount or quantity)
- Who can use it: all customers, or specific customers
- Usage limits: total number of uses, and "once per customer"
- Which other discounts it can combine with
- Whether it applies to one-time purchases, subscriptions or both
How products, collections and customers are translated
Each store has its own IDs for products, collections and customers. So the app looks up the same item on the destination:
| Item in the discount | How the app finds it on the destination |
|---|---|
| Product | Same product handle (the product's web address name) |
| Product variant | Same product handle, then the same SKU, then the same variant title |
| Collection | Same collection handle |
| Customer | Same email |
The app never makes a discount bigger than on the source.
- If none of the items a discount applies to exist on the destination, the discount is not copied at all. (Otherwise it would apply to your whole store.)
- If some of the items exist, the discount is copied for those items only. It is narrower than on the source, never wider.
- Discount sync never creates products on the destination. Use Product sync for that.
Some discounts cannot be copied as they are set up:
- A discount for a customer segment. Segments are different on each store, so the discount is skipped. (Copying it for "all customers" would give it to everyone.)
- A Buy X get Y discount that does not name any products or collections on the source. Shopify does not allow this on the destination.
How discounts are matched
The app remembers which destination discount belongs to which source discount.
- On each run, it updates the linked discount instead of making a new one.
- If the destination already has a discount with the same code (or, for automatic discounts, the same title), the app links to it and updates it.
- Renaming is safe. If you rename a code or an automatic discount's title on the source, the same destination discount is updated.
- Old codes are removed. If a code no longer exists on the source discount, it is removed from the destination discount. The app never removes the last code a discount has.
- If you remove a product from a discount on the source, it is also removed on the destination.
When you delete a discount on the source
If you delete a discount on the source, the linked discount on the destination is turned off (deactivated). It is not deleted, so you can still see it and its history. Delete it by hand if you no longer need it.
To stay safe, the app only does this when it read the full list of source discounts without any error. If the source list comes back empty, nothing is turned off.
How often it runs
- Automatically: about once a day while Discounts sync is on.
- By hand: click Sync next to the store, then run Discounts.
There is no real-time discount sync. A change on the source reaches the destination on the next run.
Check the results
Click View Logs next to the store to see each run. The run summary shows how many discounts were created and updated, and how many were turned off because they were deleted on the source.
If some discounts were not copied, the store shows a warning that tells you how many and why, for example:
- "...because the products, collections or customers they apply to do not exist on this store." Sync those products or collections first, then run discounts again.
- "...because they cannot be copied as they are set up on the source store." Check the discount on the source (for example a customer segment, or a Buy X get Y with no products).
Limits
- Your plan sets how many discounts you can sync per store pair. When you reach the limit, the remaining discounts are skipped, and the store shows: "Billing required for this shop: discount plan limits reached. Upgrade to sync blocked discounts." See Plans and billing.
- Up to 5,000 codes are copied per discount.
- Up to 5,000 products, variants or collections are read per discount.
Troubleshooting
Check the warning on the store and in View Logs. Usually the products, collections or customers it uses are not on the destination yet. Run Product sync (and Customer sync for customer-only discounts), then run Discounts again.
Some of the products or collections are not on the destination. Sync them, then run Discounts again.
The automatic run happens about once a day. To start now, click Sync and run Discounts.
Its source discount was deleted. If you still need the discount on the destination, turn it back on by hand, or create it again on the source.
The source is the main store for discounts. Each run copies the source version again. Make your change on the source instead.
Discount sync needs a subscription, or you reached your plan's discount limit. See Plans and billing.
Metafields & metaobjects
What it does
Sync Hub copies your custom data from the source store to the destination store.
Two Shopify words first:
- A metafield is an extra field on a product, page, customer and so on. For example "Care instructions" or "Material". It is how you add data that Shopify does not have by default.
- A metaobject is your own content type with its own fields. For example a "Designer" with a name, photo and bio. You create the entries once and link to them from many places.
Each of these has two parts:
| Part | What it is | Example |
|---|---|---|
| Definition | The field itself: its name, key and type. | "Material", key custom.material, type "Single line text" |
| Value | What you filled in for one item. | "100% cotton" on one product |
Sync Hub copies both. It creates the definitions on the destination first, then it writes the values.
There are two separate features for this:
| Feature | What it copies | Where you turn it on |
|---|---|---|
| Metafield & metaobject sync | Metaobject definitions and entries, metafield definitions, and metafield values on blogs, articles, pages, products, variants, collections, the shop, customers and orders. | Content Sync tab |
| Product metafields | Only product and variant metafield values (and the definitions they need). | Product & Inventory Sync tab, as part of product sync |
You can use one or both.
Before you start
- You need a paid plan. Both features show "Subscription required". See Plans & billing.
- Values are only copied for items that are already linked between your stores. So sync the items first:
- products and variants with Product sync,
- pages and blog articles with Blogs, pages & templates,
- customers with Customer sync, orders with Order sync.
- If a product, page or other item is not linked yet, its metafield values are skipped. They are copied on a later run, once the item is linked.
How to set it up
Metafield & metaobject sync
- 1Open the app and find the destination store in your list of connected stores.
- 2Click Configure.
- 3Open the Content Sync tab.
- 4Turn on Metafield & metaobject sync.
- 5Optional: change Metafields bulk mode or Compare digest mode (see the table below). Most stores can leave them as they are.
- 6Click Save changes.
- 7To run it, click Sync on the store, then click the run button on the Metafields & metaobjects row. It also runs when you click Run full sync.
Product metafields
- 1Click Configure on the destination store.
- 2Open the Product & Inventory Sync tab.
- 3Under Sync collections, images & sales channels, tick Sync metafields.
- 4Optional: fill in the Metafield allowlist (see below).
- 5Click Save changes.
Product metafields then run by themselves at the end of every product sync. You can also run them any time from Sync → Product metafields.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Metafield & metaobject sync | Turns the full metafield and metaobject sync on for this pair. | Off |
| Metafields bulk mode | For large runs, Sync Hub switches to Shopify's bulk processing when a type has many items. Small runs still write item by item. | Off |
| Compare digest mode | Off is faster. Safe adds a check so a value that changed on the destination while the sync was writing is not overwritten blindly. The write is retried instead. | Off |
| Sync metafields (Product sync) | Copies product and variant metafield values after each product sync. | Off |
| Metafield allowlist → Forward (source → destination) | Leave it empty to copy every product and variant metafield. To copy only some, list them with commas: namespace.key (for example custom.color) or just key to match any namespace. | Empty (all) |
| Metafield allowlist → Reverse (destination → source) | The same, for products copied back to the source. Only shown when reverse sync is on. See Two-way & reverse sync. | Empty (all) |
The forward allowlist also limits which product and variant metafields the full Metafield & metaobject sync writes.
What is synced
The full sync runs in this order:
- 1Metaobject definitions
- 2Metaobject entries
- 3Metafield definitions
- 4Metafield values
- 5Metaobject translations (only when Translation sync is also on)
Each step needs the step before it. If a step has too many failures, the later steps wait for the next run. A few failed rows do not stop the run.
Details:
- Definitions are created on the destination with the same name, key and type. If the destination already has a metaobject definition but is missing some fields, Sync Hub adds the missing fields. It never removes or changes fields you have there.
- Metaobject entries that are missing on the destination are created. Sync Hub first looks for a matching entry (same handle, or same content) so it does not make copies.
- Product metafields skip products whose metafields have not changed since the last run. This keeps runs fast.
- Admin filter limit: Shopify allows only 50 product metafield definitions that can be used to filter the product list. If the destination is full, the definition is still created, just without the filter option.
- Pinned definitions: a definition is pinned on the destination only if it is pinned on the source.
Reference metafields
Some metafields do not hold text. They point to something else in your store, like a product, a collection, an image or a metaobject entry. This is called a reference.
Every item has a different ID in each store. So Sync Hub must find the matching item on the destination and point to that one. If it cannot find a match, it skips that field. It never writes a link to the wrong item.
| The metafield points to | How Sync Hub finds it on the destination |
|---|---|
| Product or variant | Uses the products linked by product sync. |
| Metaobject entry | Finds the matching entry. If none exists, it creates it (and its definition). |
| Image or video file | Uploads the file to the destination, or reuses a file with the same name that is already there. |
| Collection (product metafields only) | Finds the collection with the same handle (URL name). |
| Page, blog article, customer, company or order (product metafields only) | Uses the items already linked by those syncs. |
| Mixed reference (can point to several metaobject types) | Each allowed type is matched on the destination. |
Supported file types for references:
- Images: PNG, JPG/JPEG, GIF, SVG, WebP and HEIC.
- Videos: MP4, MOV, AVI and MKV.
What is not synced
- PDFs and other document files inside a metafield reference. The field is skipped. To copy the documents themselves into the destination's Files, use File sync.
- Shopify-reserved and app-owned data. Some metafields and metaobjects belong to Shopify or to another app, not to you. Apps like Sync Hub are not allowed to create them. These are skipped:
- namespaces that belong to Shopify (for example
shopify), - metaobject types that start with
shopify--, such as the standard values used by Shopify's product category fields (for example color or pattern), - metaobject types and metafields owned by another app (
app--…,$app:…), - Shopify's standard definitions that only Shopify can create (for example
reviews.rating).
- Definitions that point to another app's metaobjects. They are skipped quietly, because the destination cannot hold them.
- Edits to metaobject entries that already exist on the destination. In the full metafield & metaobject sync, an entry is created once. If you later change it on the source, the destination entry is not updated.
- Deletes. Sync Hub does not delete metafields, definitions or entries on the destination.
How often it runs
| Feature | When it runs |
|---|---|
| Metafield & metaobject sync | When you click its row in Sync, or Run full sync. It is not part of the content Automatic schedule. |
| Product metafields | Automatically after every product sync (manual or scheduled), and when you click Product metafields in Sync. |
Limits
- A paid plan is needed. Usage counts toward your plan. See Plans & billing.
- A definition's type cannot change in Shopify. If the same key has a different type on each store, values for it cannot be copied. One exception: single-line and multi-line text are converted for you when it is safe (a value with no line breaks).
- Shopify's limits on definitions per store still apply on the destination.
Good to know
- Run product sync (and page, blog, customer and order sync, if you use them) before metafield sync. Values need linked items.
- Large stores take longer on the first run. Later runs are faster, because existing entries are matched and unchanged products are skipped.
- If you delete a metaobject entry on the destination that Sync Hub created, it is created again on the next run.
- To get an email when this sync fails, open Configure → Config → Email alerts and tick Send alert when metafields/metaobjects sync fails.
Troubleshooting
Check these, in order:
- Is the product linked by product sync? If not, run product sync first.
- Is the metafield in your Metafield allowlist? If the list is not empty, only listed metafields are copied.
- Is it a reference to a PDF, or to a Shopify-reserved or app-owned item? Those are skipped.
- Does the destination have the same key with a different type? Then make the two definitions match.
Sync Hub could not find the matching item on the destination. Sync that item first (for example the product or page), then run the metafield sync again.
Entries that already exist on the destination are not updated. Edit the entry on the destination as well.
An earlier step (for example definitions) had too many failures. Fix the cause shown in View Logs, then run the sync again.
The destination already has this key with a different type. Shopify does not let anyone change a type. Contact support before you delete a definition, because deleting it also deletes its values.
File sync
What it does
File sync copies files from the Files area of your source store to the destination store. In Shopify admin this is Content → Files.
It copies:
- Images (with their alt text, the short description for screen readers and search engines),
- Videos (only when Sync videos is on),
- Documents and other files, such as PDFs.
File sync only adds files that are missing on the destination. It never changes or deletes a file that is already there.
Before you start
- You need a paid plan. The setting shows "Subscription required". See Plans & billing.
- File sync is for the Files library. Product images are copied by Product sync, not by file sync.
- Think about which files you really need. A big library takes time, and each file created counts toward your plan.
How to set it up
- 1Open the app and find the destination store in your list of connected stores.
- 2Click Configure.
- 3Open the Content Sync tab.
- 4Turn on Files sync.
- 5Turn on Sync videos if you want videos too.
- 6Optional: set filters (see below) to copy only some files.
- 7Click Save changes.
- 8To run it now, click Sync on the store, then the run button on the Files row. It also runs with Run full sync.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Files sync | Turns file sync on for this pair. | Off |
| Sync videos | Includes video files. When off, videos are skipped and only images and other files are copied. | Off for new pairs |
| File type | Tick Images and/or Documents & other files. Nothing ticked = all types. Videos are controlled only by Sync videos. | Nothing ticked (all) |
| Used in | Any (no restriction), Used in a product, or Not used anywhere. | Any (no restriction) |
| File name contains | Copies only files whose name contains this word, for example banner. | Empty (all) |
| File size → Min size / Max size | Copies only files in this size range. Pick KB, MB or GB. | Empty (any size) |
A file must match every rule you set. If you leave all filters empty, you see "No filter set — all files will sync."
The filters also apply to videos when Sync videos is on.
How duplicates are avoided
Sync Hub checks each file by its file name:
- If the destination already has a file with that name, the file is skipped.
- Shopify sometimes renames a file when it is uploaded. It may add a code to the end (
photo.jpgbecomesphoto_1a2b3c….jpg). It may also change the extension to match the real format (a PNG that is really a JPEG is saved as.jpg). Sync Hub knows about this and still sees the file as "already there".
Because the check uses the name only:
- If you replace a file on the source but keep the same name, the new version is not copied.
- Two different files with the same name count as one. Only the first is copied.
What is synced / not synced
| Synced | Not synced |
|---|---|
| New images, with alt text | Changes to a file that already exists on the destination |
| New videos (when Sync videos is on) | Deletes. Removing a file on the source does not remove it on the destination |
| New PDFs and other documents | Files from the destination back to the source |
How often it runs
- When you click the Files row in Sync, or Run full sync.
- On a schedule, if you turn on Automatic schedule in the Content Sync tab. Choose Every 6 hours, Every day or Every week. The schedule runs pages, blogs and files together.
Large libraries and long runs
- The first run on a big library is the slowest. Later runs only add new files, so they are much faster.
- Images and documents are created in batches. Videos are uploaded one at a time, so they take longer.
- Shopify prepares a full list of your files before the copy starts. For a large library this can take a few minutes. That is normal.
- If Shopify is slow or busy, Sync Hub waits and tries again by itself.
- To make a run smaller, use the filters, for example Used in → Used in a product, or a Max size.
Limits
- A paid plan is needed. Each file created counts toward your plan's file usage. See Plans & billing.
- Shopify's own file rules still apply on the destination, such as file size limits and supported formats.
- Matching is by file name only (see above).
Good to know
- After a run, open View Logs on the store. You see how many files were found, created and skipped.
- To get an email when file sync fails, open Configure → Config → Email alerts and tick Send alert when content sync fails.
- Images and videos used inside metafields are handled by Metafields & metaobjects, not by file sync.
Troubleshooting
Check these:
- Is it a video? Then Sync videos must be on.
- Does it match all your filters? An unexpected File name contains or Max size value is a common cause.
- Does the destination already have a file with the same name? Then it is skipped on purpose.
- Has your plan reached its file limit? Check View Logs and Plans & billing.
File sync does not replace existing files. Upload the new image under a new file name, or replace it on the destination yourself.
This is normal for the first run of a large library, and for videos. Use filters to copy fewer files. Later runs only add new files.
File sync never deletes files. Remove it on the destination by hand.
Blogs, pages & templates
What it does
Sync Hub copies your online store content from the source store to the destination store. There are three separate parts:
| Part | What it copies |
|---|---|
| Blogs sync | Your blogs and every article (blog post) inside them. |
| Pages sync | Your online store pages, such as "About us" or "Shipping policy". You can pick which pages. |
| Templates sync | Theme templates. A template is the layout file your theme uses for a type of page, for example the product page or a custom page layout. You pick which templates. |
All three copy in one direction only: source → destination.
Before you start
- Blogs and pages: the free plan copies only a few items (5 pages and 5 articles). To copy more, you need a paid plan. See Plans & billing.
- Templates are copied into the destination's live theme (the published theme your customers see). Make a backup of the destination theme first. In Shopify admin, go to Online Store → Themes and duplicate the live theme.
- Template sync is an experimental feature. Test it on one template first.
- If you also want metafields on pages and articles, see Metafields & metaobjects. For translated pages and articles, see Translation sync.
How to set it up
- 1Open the app and find the destination store in your list of connected stores.
- 2Click Configure.
- 3Open the Content Sync tab.
- 4Turn on the parts you want: Pages sync, Templates sync and/or Blogs sync.
- 5For pages: under Pages to sync, tick the pages you want, or click Select all.
- 6For templates: under Templates to sync, tick the templates you want, or click Select all.
- 7Optional: turn on Automatic schedule and pick how often (pages and blogs only).
- 8Click Save changes.
- 9To run now, click Sync on the store. Use the Pages, Blogs or Templates row, or Run full sync.
When you run Templates, you first see a Template Sync Notice. Read it, then click Continue.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Pages sync | Copies pages from source to destination. | Off |
| Pages to sync | The pages to copy. Select all copies every page, including new ones you add later. Clear removes all ticks. | All pages |
| Templates sync | Copies theme templates into the destination's live theme. | Off |
| Templates to sync | The templates to copy. Works the same way as Pages to sync. | All templates |
| Blogs sync | Copies all blogs and all their articles. You cannot pick single blogs. | Off |
| Automatic schedule | Runs content sync again and again: Every 6 hours, Every day or Every week. | Off |
What is synced
Blogs:
- Title, handle (the name used in the web address), template, and comment setting.
Articles:
- Title, author, content, excerpt (summary), tags, featured image, handle, template, visible or hidden, and publish date.
Pages:
- Title, content, handle, template, visible or hidden, and publish date.
Templates:
- The template file from the source's live theme.
- The sections and snippets it uses. These are smaller theme files that templates are built from. Sync Hub copies them too, so the template works on the destination. They always come from the latest source version.
How existing content is matched
- Sync Hub remembers which source item belongs to which destination item.
- On the first run, if the destination already has a page, blog or article with the same handle, Sync Hub uses that one. It does not create a copy. From then on, it updates it with the source content.
- Templates are matched by their file name. A template with the same name on the destination is replaced.
What is not synced
- Deletes. If you delete a page, blog or article on the source, it stays on the destination. Delete it there by hand.
- Changes made on the destination. Content moves source → destination only. If you edit a synced page on the destination, the next sync overwrites your edit with the source version.
- Blog comments.
- Metafields and translations. These have their own features (links above).
- Templates in full sync or on a schedule. Templates run only when you click Templates yourself.
Templates: what "graceful strip" means
A template can contain settings that point to something that exists only in the source store. For example a background video or an image that was uploaded only there.
Shopify rejects a whole template file if even one setting points to something the destination does not have. Without help, the full template would fail.
So Sync Hub does this:
- 1It tries to save the template.
- 2If Shopify rejects some settings, Sync Hub removes only those settings.
- 3It tries again. The template is saved without them.
The template still arrives and works. Only the parts that could not be linked are left empty. Open the template in the destination's theme editor and choose the missing image or video again.
Sync Hub does not look for a matching file on the destination for these settings. It only removes them.
Templates: backup and Revert
Before every template run, Sync Hub saves a backup of the destination's current versions of those templates and sections.
To go back:
- 1Click View Logs on the store.
- 2Find the template sync you want to undo.
- 3Click Revert, then confirm with Revert.
Good to know about Revert:
- It restores the templates and sections to how they were before that run.
- It is a best effort, not a perfect copy. Shopify does not let apps delete theme files. So a template that was new in that run is not removed.
- After a revert, the log shows Reverted. You can revert a run only once.
How often it runs
| Part | Manual | Automatic schedule | Run full sync |
|---|---|---|---|
| Pages | Yes | Yes | Yes |
| Blogs | Yes | Yes | Yes |
| Templates | Yes | No | No |
Limits
- Free plan: up to 5 pages and 5 articles. Paid plans: see Plans & billing.
- Only one template run can run at a time for a store. Wait for it to finish before you start another.
- Templates are always written to the destination's live theme. You cannot pick another theme.
Good to know
- If none of the pages you ticked still exist on the source, nothing is copied. Open Pages to sync and pick again.
- New pages on the source are included automatically only when Select all is used.
- To get an email when content sync fails, open Configure → Config → Email alerts and tick Send alert when content sync fails.
Troubleshooting
The page is synced from the source. Each sync copies the source version over it. Make the change on the source, or remove the page from Pages to sync.
Check that Pages sync is on and that the page is ticked in Pages to sync. If you are on the free plan, you may have reached the 5-page limit.
That setting pointed to a file that exists only in the source store, so it was removed (see "graceful strip"). Choose the file again in the destination's theme editor.
Click View Logs, find the template run and click Revert. If that does not fix it, restore the theme backup you made before.
Sync Hub reads templates from the source's live theme. Check that the source store has a published theme.
Translation sync
What it does
If your source store sells in more than one language, translation sync copies the translated text to the destination store.
For example: your source store's main language is English, and it also has German. Translation sync copies the German titles and descriptions of your products to the matching products on the destination.
It copies translations for:
- Products (when product sync is on for this pair),
- Pages,
- Blog articles,
- Metaobject entries (when Metafield & metaobject sync is also on).
Before you start
- You need a paid plan. The setting shows "Subscription required". See Plans & billing.
- Both stores must have the same extra languages added and published. In Shopify admin, go to Settings → Languages. Only published languages are copied. Your store's main (default) language is never "translated" — it is the normal text, copied by the other syncs.
- The items must already be linked between your stores. So run these first:
- Product sync for products,
- Blogs, pages & templates for pages and articles,
- Metafields & metaobjects for metaobject entries.
How to set it up
- 1Open the app and find the destination store in your list of connected stores.
- 2Click Configure.
- 3Open the Content Sync tab.
- 4Turn on Translations sync.
- 5Click Save changes.
- 6To run it, click Sync on the store, then the run button on the Translations row. It also runs with Run full sync.
Settings explained
| Setting | What it does | Default |
|---|---|---|
| Translations sync | Copies translations in all published extra languages from source to destination. | Off |
There are no other settings. Which items are translated depends on which other syncs are on (see the list above).
What is synced
For each linked item and each published extra language, Sync Hub copies the translated text that Shopify lets you translate. For example:
- title,
- description or content,
- handle (the name used in the web address),
- SEO title and SEO description,
- excerpt (for articles),
- metaobject field text.
Only the general translation for each language is copied. Translations made for one market only (Shopify Markets) are not copied.
When Shopify refuses a translation
This is the most important thing to understand about translation sync.
A translation only fits the exact text it was written for. Shopify checks this. When you save a translation, Shopify compares it with the main-language text on that store.
So if a field's main-language text on the destination is different from the source, the source's translation does not belong there. Shopify would refuse it.
This often happens when:
- product sync is set not to copy that field (for example the description or the handle), so each store has its own text,
- someone edited the text on the destination,
- the field is empty on the destination (for example no SEO title there).
What Sync Hub does:
- It checks each field first.
- It copies only the fields where the text is the same on both stores.
- It skips the other fields and tells you why. It does not force a wrong translation onto your store.
In View Logs each item gets one clear line:
| Log message | What it means |
|---|---|
| "… translations synced successfully" | All fields were copied. |
| "… not translated — this store's text differs from the source (a translation only fits the text it was written for)" | The text is different on the destination, so that field was skipped. |
| "… not translated — this store has no such text" | The field is empty on the destination, so there is nothing to translate. |
| "Shopify refused …" | Shopify did not accept that field. Its reason is shown. |
Items that have no translations on the source are counted as "No translations on the source". This is not an error.
What is not synced
- Fields where the destination's main text is different from the source (see above).
- Your main language. That is normal text, copied by the other syncs.
- Languages that are not published on both stores.
- Market-specific translations.
- Translations for collections and for blogs themselves (articles are included).
- Deletes. Removing a translation on the source does not remove it on the destination.
How often it runs
- When you click the Translations row in Sync.
- When you click Run full sync.
Translation sync is not part of the content Automatic schedule. After you change translations on the source, run it yourself.
Limits
- A paid plan is needed. Usage counts toward your plan. See Plans & billing.
- Only items that are already linked between the stores are translated.
Good to know
- Run the other syncs first, then translations. A new product or page has nothing to receive a translation until it is linked.
- If you want a field to be translated, its main-language text must be the same on both stores. Check your product sync settings for that field.
- To get an email when translation sync fails, open Configure → Config → Email alerts and tick Send alert when content sync fails.
Troubleshooting
The descriptions are different on the two stores. Often product sync is set not to copy the description. The source's translation does not fit the destination's text, so it is skipped. Translate those fields on the destination yourself, or let product sync copy the description.
Check these:
- Is the language added and published on both stores?
- Were the items synced first (products, pages, articles)?
- Does the source item really have a translation? Look for "No translations on the source" in the log.
- Is your plan active?
Translations are not copied on a schedule. Run Translations from Sync, or Run full sync.
For fields it copies, yes — the source translation is written to the destination. Fields whose main text differs are never touched.
Two-way & reverse sync
What it does
Sync Hub always connects two stores as a pair:
- The source store is your main store.
- The destination store ("this store" on the settings screen) receives products from the source.
Products can move in three ways:
| Mode | What moves | Where you turn it on |
|---|---|---|
| Forward sync | Source → destination. This is the normal sync. | Forward sync (source → this store) |
| Reverse sync | Products that exist only on the destination are copied up to the source. | Reverse sync (this store → source) |
| Two-way sync | Edit any product on either store, and the change reaches the other store. | Two-way sync — edit any product on either store |
Stock (inventory) is different. Stock always moves in one direction only. See "Stock direction" below.
Before you start
- Product sync must be on for this pair. See Product sync.
- Check your Primary product match field (SKU, Barcode, Handle or Title). Reverse sync uses it to find a product that already exists on the source, so it does not create a duplicate.
- Before you turn on Two-way sync, make sure each store already has the data you want to keep. The first run only records how each product looks today.
- If you use many stores, decide which store is your hub (see "Hub setups" below).
How to set it up
- 1Open the app and find the destination store in your list of connected stores.
- 2Click Configure.
- 3Open the Product & Inventory tab.
- 4Make sure Product synchronization is on.
- 5Turn on Reverse sync (this store → source).
- 6Under Automatic schedule, pick how often reverse sync runs, or Off — manual only.
- 7Optional: turn on Two-way sync — edit any product on either store.
- 8Optional: turn on Filter which destination products reverse-sync to limit which products go up.
- 9Click Save changes.
To run reverse sync right away, click Run reverse sync. It runs in the background. The status is shown next to the button.
Reverse sync (this store → source)
Reverse sync does two things:
- 1Copies new products up. A product that exists on the destination but not on the source is copied to the source. This includes products whose source copy was deleted.
- 2Keeps those products up to date. A product that reverse sync copied up stays controlled by the destination. When you edit it on the destination, the change goes to the source on the next run.
What reverse sync does not do on its own:
- Products that came from the source stay controlled by the source. If you edit one of those on the destination, the change is not sent back. The next forward sync will overwrite it.
- If you want to edit any product on either store, also turn on Two-way sync.
New products made on the destination
When reverse sync finds a product that is only on the destination:
- It first looks for the same product on the source, using your match field (and SKU, barcode, handle or title after that). If it finds one, it links the two products. Nothing new is created.
- If there is no match, it creates the product on the source.
- If New products on destination is set to Update only, reverse sync does not create new products on the source either. It only links products that already match.
New products created on the source count toward your plan's product usage. Linking products that already exist does not.
When reverse sync runs
- After each forward sync, if forward sync is on.
- On its own schedule, if you set Automatic schedule. Choices: Every 30 minutes, Every hour, Every 6 hours, Every day, or Off — manual only.
- When you click Run reverse sync.
Running reverse sync on its own (by schedule or button) needs a paid plan.
Two-way sync
With Two-way sync on, the destination and the source become equal editors. Every product counts, including products that came from the source.
- Edits travel both ways: titles, descriptions, prices, images, new variants (a "variant" is one version of a product, like one size or one color).
- Sync never deletes products or variants. A variant that exists on only one store stays there. The only exception is images, if you turned on Remove destination-only images (exact mirror) in the image settings.
- Only fields that are turned on in your product sync settings travel. A field set to "never" stays local to each store.
- Two-way sync also keeps variants added on the destination. You do not need Keep variants added on this store as well.
- Two-way sync never moves stock. Stock follows inventory sync, in one direction.
How the app decides which edit wins
Sync Hub compares each product with how it looked at the last sync.
| What happened | Result |
|---|---|
| You changed a field on one store only | That change is copied to the other store. |
| You changed different fields on the two stores (for example, the title on one and the description on the other) | Both changes are kept. |
| You changed the same field on both stores | The most recent edit wins. The other edit is replaced. |
This field-by-field check covers: title, description, vendor, product type, tags, status and category.
For variants (prices, SKUs and so on), the whole product counts as one unit. If both stores changed a product's variants between syncs, the store with the newest edit wins.
The first run after you turn it on
The first run only records each product's current state. It does not push anything. Two-way syncing starts from the next run.
How fast changes arrive
Two-way sync is not instant. Changes arrive with the normal sync runs, usually within one or two sync cycles. Shopify can take a few minutes to include a fresh edit in the data we read, so a very recent edit may only arrive on the next run.
Stock direction: inventory is never two-way
Stock moves in one direction only. There is no "both ways" option, on purpose. Stock numbers have no way to show which one is newer, so two directions would just overwrite each other.
You choose the direction in the inventory settings for this store, under Which store's stock is correct:
| Option | What happens |
|---|---|
| Source store (default) | The source's stock is copied down to this store. A source count of 0 sets this store to 0. |
| This store | This store's stock is copied up to the source, into the matching source location. |
If you choose This store:
- The app shows When this store shows 0, set the source to 0 too. Leave it off unless every item on this store has a counted quantity. Otherwise an item you did not count yet would set the source to 0.
- If more than one store sends stock to the same source, each store needs its own location in Location mapping. If two stores share a location, inventory sync stops instead of guessing.
- Check that the stock on this store is right before the next sync. It is about to replace the source's numbers.
Stock of products created by reverse sync
When reverse sync creates a product on the source, the product starts with this store's stock, so it does not start at 0. This happens once, at create, and only when inventory sync is on. After that, stock follows Which store's stock is correct.
A sale here lowers the source's stock
If stock flows from the source down to this store, you can turn on A sale here lowers the source's stock. Each sale on this store then takes the same number of units off the source.
- Leave it off if a warehouse or stock app on the source already lowers its stock for these sales. Otherwise each sale is counted twice.
- It cannot be used when stock flows up to the source (Which store's stock is correct = This store).
See Inventory sync for all stock settings.
How the switches work together
| Switch | Effect |
|---|---|
| Product synchronization off | No product sync in either direction. Reverse sync and two-way sync stop too. |
| Forward sync off, Reverse sync on | Reverse only. Products go from this store to the source. Nothing is copied from the source. |
| Reverse sync off | Nothing is sent from this store to the source. Two-way sync also turns off. |
| Inventory sync off | Stock does not change because of a sale on this store. |
What you see on the screen is what runs. If a switch is off, that direction does not run, even on a schedule.
Hub setups: one store to many stores
You can connect one source store to many destination stores. The source is then your hub, and each destination is a spoke.
- Each destination has its own settings. Turn on reverse or two-way sync per destination.
- With two-way sync, an edit on one spoke goes up to the hub first. The next forward sync then carries it out to the other spokes.
- Each spoke keeps its own extra variants. Sync does not delete them.
- For stock, pick one direction per destination. If several spokes send stock up to the hub, give each spoke its own location on the hub.
Settings explained
| Setting | What it does |
|---|---|
| Reverse sync (this store → source) | Copies products that exist only on this store up to the source. Those products stay controlled by this store. |
| Automatic schedule | How often reverse sync runs on its own. With Off — manual only, it runs after each forward sync (if forward is on) or when you click Run reverse sync. |
| Two-way sync — edit any product on either store | Every product can be edited on either store. Field-by-field check; the most recent edit wins on the same field. |
| Run reverse sync | Starts reverse sync now, without waiting for a forward sync. |
| Filter which destination products reverse-sync | Only products that match your rules (tags, vendor, product type or collections) go up. Several values in one row = any of them. Different rows = all of them. This filter is separate from the forward filter. |
| Keep variants added on this store | Forward sync keeps variants that exist only on this store, but does not send them back. Not needed if Two-way sync is on. |
| Which store's stock is correct | The one direction stock moves in. |
You may also see Also forward-sync reverse-created products (legacy). This old option only shows for stores that already have it on. Two-way sync does this job better, and you can safely turn it off.
Good to know
- Don't edit the same field on two stores at the same time. Only the most recent edit is kept. Pick one store for each kind of change when you can.
- Sync never deletes products or variants because of reverse or two-way sync.
- If you change the reverse filter, products that no longer match stop getting updates. They are not deleted.
- If forward sync is on with a schedule but has never run for this pair, reverse sync waits. It does not create products on the source until the first forward sync has linked your products. You will see a warning in View Logs. Run a forward sync first.
- Customers and orders have their own direction settings. See Customer sync and Order sync.
Troubleshooting
That product probably came from the source. With reverse sync alone, source products stay controlled by the source. Turn on Two-way sync to edit any product on either store. Also check that the field is turned on in your product sync settings.
The first run only records the current state of each product. Changes start to flow from the next run.
Someone may have edited the same field on the other store after you. The most recent edit wins. Also, a very recent edit can take one extra sync cycle to arrive.
Check these:
- New products on destination may be set to Update only.
- The reverse filter may not match the products.
- Forward sync may not have run yet for this pair. Check View Logs for a warning.
- You may have reached your plan's product limit. See Plans & billing.
Two-way sync never moves stock. Set Which store's stock is correct to This store if this store holds your real stock. See Inventory sync.
It should not. With Product synchronization off, no product sync runs in either direction. Check that you clicked Save changes, then contact support if it continues.
Plans & billing
How pricing works
- You pay per connection. Each source store → destination store pair has its own plan.
- You choose a plan for each connection: Free, Basic, Pro or Enterprise.
- Shopify adds up the plans of all your connections and charges one total amount.
- All prices are in USD and are billed every 30 days.
- The source store pays. The Plans page is only shown on the source store.
Example: you have one source store and three destination stores. One connection is on Pro and two are on Basic. You pay $39.99 + $14.99 + $14.99 = $69.97 every 30 days.
Plans and prices
| Plan | Price per connection |
|---|---|
| Free | $0 |
| Basic | $14.99 every 30 days |
| Pro | $39.99 every 30 days |
| Enterprise | $149.99 every 30 days |
Every new connection starts on Free.
Limits per connection
Each plan has a limit for each type of data. The limit is the number of different items a connection can sync.
| Data type | Free | Basic | Pro | Enterprise |
|---|---|---|---|---|
| Products | 10 | 1,000 | 10,000 | 100,000 |
| Inventory | 10 | 1,000 | 10,000 | 100,000 |
| Orders | 5 | 500 | 2,000 | 10,000 |
| Customers | 5 | 500 | 2,000 | 25,000 |
| Companies (B2B) | 5 | 100 | 500 | 5,000 |
| B2B catalogs | 2 | 25 | 100 | 1,000 |
| Blog articles | 5 | 50 | 100 | 500 |
| Pages | 5 | 50 | 100 | 500 |
| Collections | 5 | 100 | 500 | 10,000 |
| Files | 5 | 100 | 500 | 1,000 |
| Discounts | 5 | 100 | 500 | 5,000 |
| Metafields | 5 | 2,000 | 10,000 | 50,000 |
| Metaobjects | 5 | 1,000 | 5,000 | 30,000 |
| Translations | 5 | 2,000 | 20,000 | 100,000 |
You can also see these limits under Plan Details on the Plans page.
How items are counted
- An item counts once, the first time it is synced to that destination store.
- Updating the same item again later does not count again. So you can sync an item as many times as you want.
- Limits are per connection. A product synced to two destination stores counts once for each connection.
- Deleting a synced item does not give the count back.
What happens when you reach a limit
- Items that were already synced keep syncing as normal.
- New items of that type are skipped. They are not created on the destination store.
- The rest of the sync still runs.
- In Configurations, the store's status may show Billing Pending.
- On the Plans page, the connection may show Product limit reached. Upgrade to resume processing new products.
- Before you start a sync, the Before you run this sync box tells you if your plan does not cover all your products.
To sync more items, move that connection to a bigger plan.
Change your plan (upgrade or downgrade)
- 1Open Sync Hub on your source store.
- 2Go to Plans.
- 3You see a list of your destination stores. Each shows its current plan.
- 4Choose a new plan in the menu next to the store. You can change more than one store at once.
- 5Check the new total in Pricing Summary.
- 6Click Pay / Update Plan.
- 7Shopify shows you the new total amount. Approve it.
- 8You return to Sync Hub. Your new plans are now active.
- Nothing changes until you approve the new amount in Shopify.
- Your Shopify charge is replaced by one new charge for the new total.
- If the new total is $0, your charge is cancelled.
Moving to a smaller plan
If a connection already synced more items than the new plan allows:
- The oldest synced items, up to the new limit, keep syncing.
- Newer items stop syncing. They are not deleted from the destination store.
- New items are not created.
How charges appear on your Shopify bill
- Sync Hub uses Shopify's own billing. You do not give us any card details.
- The charge appears on your Shopify bill as an app charge for Sync Hub.
- You see one amount for all your connections together, not one line per connection.
- To see the details per connection, open the Plans page.
When you remove a store
When you delete a connection, its plan is removed. But your Shopify charge does not go down by itself, because Shopify needs your approval for a new amount.
When you pay more than your connections cost now, Sync Hub shows a message at the top of the dashboard and Configurations, and on the Plans page:
- You can lower your charge by $X a month: on the Plans page, click Lower my charge to $X/mo, then approve the new amount in Shopify.
- You are being billed but have no connected stores: on the Plans page, click Cancel my charge.
Your syncs keep running while you decide.
If you have no connected stores left and do not cancel, Sync Hub cancels the charge by itself after about 14 days without sync activity. There is no refund for the time already billed.
Cancel your plan
- Stop paying for one connection: change it to Free and click Pay / Update Plan. Or delete the connection and lower your charge (see above).
- Stop paying for everything: change every connection to Free, or delete all connections and click Cancel my charge.
- Uninstall Sync Hub from your source store. Shopify cancels the app charge when you uninstall.
Special prices
If our team has agreed a special price with you, the Plans page shows a badge next to that store, for example "20% off". The Pricing Summary shows your price and the normal price crossed out.
When your price changes, a blue message appears: Your updated pricing is ready. Click Approve updated pricing and approve the amount in Shopify. Until you approve, you keep paying the amount you approved before.
Older accounts: Sync Hub Pro
Some stores that installed Sync Hub before the current plans still use the older plans. You will know because your Plans page shows Free Plan and Sync Hub Pro.
| — | Free Plan | Sync Hub Pro |
|---|---|---|
| Price | $0 | $10 every 30 days for each connected destination store |
| Products | 10 | No plan limit |
| Blog articles | 5 | No plan limit |
| Pages | 5 | No plan limit |
| Orders | 10 | No plan limit |
| Customers | 10 | No plan limit |
| Translations, files, metafields | Not included | Included |
Good to know for older accounts:
- Stores are covered in the order you connected them, oldest first.
- If you connect more stores than you pay for, the extra stores show Pending billing update. Click Update billing to cover all stores to cover them.
- To move to Free, click Update Subscription under Free Plan, then Yes, downgrade to Free. Your charge is cancelled right away.
Troubleshooting
You are on a destination store. Open Sync Hub on your source store. Plans are managed there.
You must approve the new amount in Shopify. Go to Plans and click Pay / Update Plan again, then approve. Click Refresh on the Plans page to reload.
That connection is on the Free plan. Move it to Basic or higher.
Open Plans and click Lower my charge. Then approve the new amount in Shopify.
Privacy & data
What this page covers
- What data Sync Hub reads from your stores, and why.
- What data Sync Hub keeps, and for how long.
- What happens when a customer asks to see or delete their data.
- What happens when you uninstall the app.
- How your data is protected.
For the legal text, read our Privacy Policy.
The short version
- Sync Hub reads data from your stores only to copy it between your own stores.
- We keep only what we need to link the same item across your stores, plus short-lived sync logs.
- We do not sell or share your store data for marketing.
- When a customer asks Shopify to delete their data, we remove their personal details from our records.
- When you uninstall, your data is deleted after Shopify asks us to delete it (about 48 hours after uninstall).
Permissions the app asks for
When you install Sync Hub, Shopify asks you to approve a list of permissions (Shopify calls them "access scopes"). Each one lets the app read or change one kind of data in your store. Sync Hub needs to read data in the store that sends it, and write data in the store that receives it. Because a store can be a sender in one pair and a receiver in another, the app asks for both.
| Permission (plain words) | Why we need it |
|---|---|
| Products, variants and collections | Product sync |
| Inventory and locations | Inventory sync: read and set stock per location |
| Orders, draft orders and fulfillment orders | Order sync: copy orders and their fulfillment status |
| Customers, and customer merge | Customer sync and merging duplicate customers |
| Companies and payment terms (B2B) | Company sync |
| Discounts | Discount sync |
| Metafields, metaobjects and their definitions | Metafield & metaobject sync |
| Files | File sync |
| Online store content (blogs, articles, pages) and themes (templates) | Blogs, pages & templates sync |
| Translations and store languages | Translation sync |
| Sales channels (publications) | Make synced products visible on the same sales channels |
The app uses these permissions only for the syncs you turn on. A sync that is off does not read or write that kind of data.
What data we read and keep
| Data | Why | How long |
|---|---|---|
| Store details (store name, domain, contact email, Shopify store ID) | To know which store is which and to contact you | Until your store's data is deleted after uninstall |
| Access to your store (a secure key from Shopify) | So the app can talk to your store | Until you uninstall. Shopify stops it at uninstall. |
| Your sync settings and store pairings | To run each sync the way you set it up | Until your store's data is deleted after uninstall |
| Links between items on your two stores (for example, "product X on store A is product Y on store B"), with IDs and details like SKUs | So the app updates the right item and does not create duplicates | While the pair is connected, until your store's data is deleted |
| Customer details for synced customers (name, email, phone, addresses), when customer sync is on | To match and update the same customer on both stores | Until the customer asks for deletion, or your store's data is deleted |
| Order details for synced orders, which can include the customer's email and addresses, when order sync is on | To link and update the same order on both stores | Until the customer asks for deletion, or your store's data is deleted |
| Sync logs (what ran, what changed, any errors). Some lines can include a customer's email. | So you can see results in View Logs, and so we can help when something goes wrong | 30 days, then deleted automatically |
| Temporary working files made while a sync runs | To process large catalogs | Deleted automatically, usually within a few days |
| Billing records | Accounting and legal reasons | Kept after uninstall. The contact email is removed. |
Your products, orders and customers themselves stay in your Shopify stores. Sync Hub is not a backup of your store.
Customer data requests
Under privacy laws (like GDPR in Europe), your customers can ask about their data. They make the request to you or to Shopify. Shopify then sends the request to every app that may hold that customer's data, including Sync Hub. We have 30 days to act on it.
"Show me my data"
Shopify tells us the customer's request. We record it and gather what we hold about that customer in your stores' sync data.
"Delete my data"
We clear that customer's personal details from our records:
- Name, email, phone and addresses in customer links.
- Personal details (email, addresses, notes) in order links.
- Contact details in B2B company links.
- Customer sync history and duplicate-customer scan results for that customer.
We keep only the bare link between the two stores' customer IDs. It holds no personal details.
When you uninstall
- 1Right away: Shopify ends the app's access to your store. Sync stops. Your store pairings and connections are removed.
- 2About 48 hours later: Shopify asks us to delete your store's data. We then delete all data we hold for that store: settings, item links, customer and order details, and logs.
- 3Kept: billing records only, with the contact email removed.
- Uninstalling does not remove anything from your stores. Products, customers and orders that were already copied stay where they are.
- If you reinstall later, you need to connect your stores and set up your syncs again.
- If you only want to stop syncing for now, turn the syncs off instead of uninstalling. Your settings stay saved.
How your data is protected
- All traffic between Sync Hub and Shopify uses secure, encrypted connections (HTTPS).
- The app checks that every message claiming to come from Shopify really comes from Shopify. Messages that fail this check are rejected.
- The app can only reach stores where it is installed, and only with the permissions you approved.
- Customer data is used only to sync between your own stores.
- We do not sell, rent or share your store data for marketing or advertising.
Troubleshooting
Sync Hub can sync many kinds of data. Shopify asks for all permissions at install, even for syncs you have not turned on yet. The app uses only what your turned-on syncs need.
Delete them in each of your stores. Shopify then sends the deletion request to us, and we clear that customer's details from our records.
Your store pairings are removed as soon as you uninstall. Reinstall the app, connect your stores again, and check every sync setting before you start a sync.
On our Privacy Policy page. It also lists how to contact us about your data.
FAQ & troubleshooting
First steps when something looks wrong
- 1On the source store, go to Configurations.
- 2Look at the Status of the destination store. Move your mouse over the badge to read the message.
- 3Click View Logs. Set Status to Error or Warning.
- 4Click a log row to see the full message and the error details.
- 5Wait a few minutes and run the sync again. Many problems are short and fix themselves.
- 6Still stuck? Click Book a meeting at the bottom of any Sync Hub page.
Setup and connections
Yes. Install it on the source store and on each destination store. You cannot connect a store that does not have the app. See Getting started.
A token works only once. It also stops working when you click Regenerate Token. Create a new token on the destination store, copy the whole token, and paste it again on the source store.
No. A destination store has one source store. If you connect it to a new source store, the old connection is removed.
Turning a sync on does not start a schedule. Open Configure, find Automatic schedule, and choose how often it should run. Off — manual only means it only runs when you click Sync.
Yes. Syncs run on our servers. You can close the app or your browser.
Products
Check these, in this order:
- Plan limit. The Free plan syncs 10 products per connection. See Plans & billing.
- New products on destination is set to Update only. Then Sync Hub only updates products that already exist on the destination store. It does not create new ones.
- Filters. Check Product status to sync, Filter products for product sync and Don't sync products with these tags.
- Recent change. See the next question.
- Logs. Open View Logs and filter by Products.
Shopify needs a few minutes before a new change shows up in the data that Sync Hub reads. Wait a few minutes, then run the sync again.
Sync Hub first looks for the same product on the destination store and updates it. It matches by SKU unless you pick another field in Primary product match field (see How products are matched). It only creates a product when it cannot find a match. Products with the same SKU, or with no SKU, are harder to match. Give each variant a unique SKU for the best results.
Sync Hub does not delete it from the destination store. Delete it there yourself if you want it gone.
If New products on destination is set to Create, the next sync may create it again. To stop this, set it to Update only, or tag the product in the source store and add that tag to Don't sync products with these tags.
When Sync Hub updates a product, it makes the variants match the source store. Turn on Keep variants added on this store to keep variants you add on the destination store.
Each product field you turn on is copied from the source store on every sync. Turn the field off to keep your own value. Some fields can be set to copy only when the product is first created. See Product sync.
No. Sync Hub never converts prices. When the currencies are different, prices are not synced unless you tick Copy prices anyway, without converting them to …. Then a price of 100 in one currency becomes 100 in the other.
Inventory
Check these:
- Quantity to sync. Available is stock you can sell. On hand also includes units already sold but not yet shipped. Choose the one you want.
- Locations. Stock goes to a destination location with the same name as the source location. If the names are different, set up Location mapping in the inventory settings.
- Schedule. If inventory sync has no schedule and product sync has no schedule, stock only changes when you click Sync.
- Timing. Stock can change between two syncs. A sale in one store shows in the other store after the next sync.
See Inventory sync.
The source store is the main store for stock. When the source store has 0, the destination store is set to 0 too.
Orders and customers
Yes. When Sync Hub copies an order, it also copies the customer of that order. To sync all customers, also turn on customer sync. See Order sync and Customer sync.
You probably reached your plan limit for customers. Check the Plans page and move that connection to a bigger plan.
Syncs and status
It depends on how much data you have.
- A small store can finish in a few minutes.
- The first sync of a large catalogue can take several hours.
- Later syncs are faster, because items that did not change are skipped.
Click View Logs and open the newest Error row. The message tells you what went wrong. Fix the cause if you can, then click Sync again. Turn on Email alerts in the Config tab to get an email next time.
Your plan does not cover everything this store wants to sync. New items are skipped, but items already synced keep updating. Open Plans to upgrade. See Plans & billing.
Turn the sync off in Configure and click Save changes. To stop only automatic runs, set Automatic schedule to Off — manual only. See Getting started.
Your data
Normal syncs only read the source store. They write to the destination store. Sync Hub changes the source store only if you turn on a feature that sends data back, for example:
- Reverse or two-way product sync
- Inventory sync from the destination store to the source store
- Lowering the source store's stock when an item sells on the destination store
- Reverse order sync
Everything already copied stays in your stores. Sync Hub removes the connection and its settings. See Getting started and Privacy & data.
Support
Click Book a meeting at the bottom of any Sync Hub page. This opens a calendar where you can book a call with our support team: https://calendly.com/techmarbles/synchub-support
Before the call, note the source store, the destination store, and the log ID of the error from View Logs. This helps us help you faster.