Help

StoreTwin copies products and stock one way, from the store that owns the catalogue to the store that sells it, and then keeps checking that the two really match. Nothing is copied into the receiving store until you approve it twice, and no product, variant, image or metafield is ever deleted.

Connect two stores

Install StoreTwin on both stores. The store that owns the catalogue is the source; the store that receives products is the destination.

Create a code on the source store

Open StoreTwin in the store that owns the catalogue and press Create pairing code.

The code is shown once, works once, and expires in an hour. Creating a new code cancels the previous one.

Enter the code on the destination store

Open StoreTwin in the receiving store, paste the code and press Pair with source.

The first scan starts immediately. It matches products by SKU, then barcode, then handle, and reports how many were linked.

Review what the scan found

Open Details. Matched products is what the app will keep in sync. Needs review lists the products it refused to match on its own - for example two products that share a SKU - and each one says what to do about it.

An ambiguous match is never linked silently. That is deliberate: silent guessing is how sync apps create duplicate products.

Turn the sync on

Writing into a live store is a serious step, so it takes two deliberate presses. Until both are done, StoreTwin only reads and compares.

Allow changes in the receiving store

On the store that receives products, press Allow changes in this store. Nothing is copied yet - this only records that you agree to StoreTwin changing this store.

Start syncing

Press Start syncing. From that moment a change in the source store reaches the other one within seconds, and the differences a check finds are fixed automatically - except the few that are reported but never fixed: images after the product was created, option names, and variant fields outside SKU, barcode, weight and stock.

You can stop at any time with Disconnect stores. Products already copied stay exactly as they are.

When a product needs your decision

Some products cannot be matched without guessing, and guessing is how sync apps create duplicates. Those wait in Needs review on the connection page, and every line says what was found and what to do about it.

Two products share one SKU

A SKU is how StoreTwin recognises the same product in both stores, so it has to belong to one product only. Give each of them its own SKU in the source store. A shared barcode works the same way.

The web address matches but the codes disagree

Both stores have a product with the same handle, while their SKUs or barcodes point at different products. Correct whichever field is wrong, and the pair matches on the next check.

Two source stores claim the same product

A product in the receiving store can belong to one source only - otherwise the two would overwrite each other every hour. Decide which store owns it and disconnect the other pair, or change the SKU there.

After you have fixed it

Press Mark as handled. The next check re-reads both stores: if the conflict is really gone, the product is matched and starts syncing. If it is still there, the line comes back - a conflict is never closed on your word alone.

What is synced

Products: title, description, status, tags, options, product metafields, and images when the product is first created in the destination store.

Metafields are copied for your own fields (the custom namespace). Fields owned by other apps in the receiving store - review scores, subscription data - are compared and reported but never overwritten: they belong to that app, and rewriting them would start a fight neither of us wins.

Variants: SKU, barcode, option values, weight. Price is not synced: it is set once when a product is first created in the receiving store, because a variant without a price would go on sale at zero, and it is never updated afterwards - expansion stores usually sell in different currencies, and copying prices across them produces nonsense.

Inventory: the available quantity, mapped per location. You choose which source locations count and which destination location receives the total.

Orders and customers are never touched. The app does not even request access to them.

What is never done

Nothing is deleted. A product, variant, image or metafield that exists only in the destination store is reported as a difference and left alone. Tags are the exception, because they travel as a whole set: a tag added only in the destination store is replaced when that product is next repaired.

The source store is never modified. Sync is one way by design.

Nothing is copied before you press both Allow changes in this store and Start syncing.

The audit is the product

Any app can copy a product. The reason StoreTwin exists is to prove that the copy is still correct a month later.

Every hour the app re-checks products that changed recently. Once a day it compares the FULL catalogue of both stores, field by field.

The result is a plain list: which product, which field, what each store says. When syncing is on, the difference is also fixed, and the next check reports that the stores match.

You can run a check yourself at any time with Check now.

Differences we report but do not fix

When a connection syncs only the products you picked, the audit still covers everything matched. A difference on a product you did not pick is marked reported only - not picked for syncing, and a line under the list says how many of them there are.

That is not a failure: those products are being watched, not copied. Pick one under Products to sync and its differences start being fixed on the next check.

Two other kinds of difference are reported and left alone by design: anything that exists only in the receiving store, and fields owned by other apps there.

New products, deletions and reinstalls

A product created in the source store appears in the receiving store within minutes, with its images, variants and stock. Archived products are not copied over - they would fill your plan with a graveyard - while a product already matched keeps syncing even after you archive it, because status is just another field.

Delete a product in the source store and its copy stays alive in the receiving store. Nothing is ever deleted by the app - you delete it yourself if you want it gone.

One field is an exception worth knowing, because it looks like a deletion: tags. The repair writes the source product's whole tag set, so a tag you added only in the receiving store - by hand or through another app - is gone after the next repair of that product. If you need a local label to survive, keep it somewhere the sync does not manage: a collection, a metafield outside the custom namespace, or the source store itself.

Delete a copy in the receiving store and the next check creates it again: it is part of the catalogue the source store owns. If you want it gone for good, unpick it (or disconnect the pair) first.

Disconnect stores stops everything immediately and leaves both catalogues exactly as they are.

Uninstalling the app stops the sync too and your access token is destroyed the moment we hear about it. Install it again and the connection comes back on its own - in checking-only mode, so nothing is copied until you allow it again.

If syncing stops by itself

StoreTwin watches its own writing, and it does two different things. If one connection would make sixty changes or more in a minute, writing is spaced out: it pauses for a minute and resumes on its own, and during a long busy stretch the pause repeats and gets longer each time, up to an hour, clearing once the store goes quiet. Nothing needs to be pressed, and we email you the first time it happens.

The other case is a stop, not a pause: a batch of stock updates where most counts are zero. That is the signature of a bad import about to be copied over a healthy catalogue, so the connection stops before writing and waits for you. The connection page shows the reason in plain words; when you have looked at the source store, press Resume syncing.

If the app loses access to a store - the app was removed, the password changed, permissions were revoked - the sync stops as well and we email you. Open StoreTwin in that store to restore access.

What we email you

A weekly report: what the checks found, product by product, and whether the stores matched all week.

A message the first time a connection pauses itself, with the reason and the way back. Later pauses of the same connection are silent - they are visible on the connection page, and a letter every time would train you to ignore the letters.

A message when we lose access to one of your stores, because that stops the sync silently otherwise.

A message when your catalogue grows past the plan, so products stop being added quietly.

Nothing else. We do not send marketing from the app.

Inventory locations

Stock is compared per location, not as a store total: the SUM of the source locations you selected against ONE destination location.

Leaving a selection empty means all locations of that store. That is the right default for single-location stores.

Third-party fulfilment locations are not listed for selection; their stock is counted only when the selection is left empty.

Plans and billing

Billing goes through Shopify and is paid by the destination store - it is the store products are copied into. Source stores are always free.

Paid plans differ by one number only: how many products you sync. Standard ($29/month) covers up to 1,000 synced products, Pro ($49/month) has no product limit. Everything else is identical - real-time sync, both audits, every field the app syncs and your own metafields, and operations that are never metered or billed. Nothing is held back for a higher tier and nothing is an add-on.

Free Audit ($0) runs a daily audit of your whole catalogue - including one another app is syncing - and syncs 25 products for real. You pick those 25 yourself on the connection page; nothing is pre-selected.

Picking products is not a free-plan trick: every plan can sync either the whole matched catalogue (the default when you pay) or only the products you pick. Use the shorter list when the receiving store sells part of the range - another country, licensed brands, a seasonal window. Whole collections and tags can be added at once.

Whatever the mode, the audit still covers every matched product: differences are found and reported, they are simply not repaired for products you did not pick.

Your tier counts what is actually synced, not everything matched. A thousand matched products with a hundred picked is a hundred synced products.

One ceiling is not a plan limit: the full daily audit holds both catalogues at once, so a very large catalogue - hundreds of thousands of products, or a large one with long descriptions - can be too big for a single comparison. The connection says so when that happens, the hourly checks keep running, and the ceiling is identical on the free plan and on Pro.

Incoming connections are unlimited on every plan, including the free one - a hub feeding several stores costs the same as a single pair. Only the number of synced products decides the tier.

If your catalogue outgrows the plan, products already syncing keep syncing; new ones stop being added until you upgrade, and we tell you when that happens.

You approve every charge in Shopify before it applies. Uninstalling the app cancels the subscription.

When something looks wrong

Open the connection page. Latest check shows what the last check found, difference by difference, and Earlier checks keeps the previous ones.

If a change has not arrived within a few minutes, press Check now: the hourly check picks up anything that slipped past the live updates.

Still wrong? Write to support@storetwin.app and quote the line from the report. We answer from the same journal the app shows you.

Still stuck?

Write to support@storetwin.app and quote the line from your drift report.

From the same studio: StoreVault - versioned backups of a Shopify store with a restore you can preview. storevault.app