Product Mirroring Wizard Live on the Shopify App Store

Change the parent, the children follow.

Limits, conflicts and errors

Conflicts the app prevents

  • One rule per product. A product can be a parent or a child, in one rule, and nothing else. Attempts to break that are refused with a message naming the rule that already owns the product.
  • No chains. Because a parent cannot also be a child, a change never travels more than one step.
  • No loops. Mirroring is parent to child only. The app’s own writes to a child do not start another sync.

Conflicts you resolve yourself

  • A child edited by hand. Any field enabled in the rule’s config is overwritten on the next sync. Unenabled fields are never written. There is no per child exception, so if one child must differ on a field, turn that field off for the rule.
  • A config several rules share. Editing it changes behaviour everywhere it is used. The configs list shows how many products each one covers before you edit it.
  • Deleting a config in use. The app asks which config its parents should move to, and moves them as part of the deletion. The default config cannot be deleted at all; make another config the default first.

When a write fails

Each child is synced independently. A failure on one child does not stop the others, and each gets its own row in the sync history with Shopify’s own error message.

The common causes:

  • A metafield value Shopify rejects, usually because the metafield’s definition on that product expects a different type.
  • A product that no longer exists, for example a child deleted in the admin but still attached to the rule. Remove it from the rule.
  • The parent itself missing. If the parent cannot be read, every child in the rule is recorded as failed with that reason, and nothing is written.

Fix the cause and press Sync Now on the rule to try again. Nothing retries automatically except rate limiting, described below.

If automatic syncs stop happening but Sync Now still works, open the app once from your Shopify admin. That refreshes the credentials the background syncs use.

Rate limiting

Shopify limits how much an app may do per second. The app watches the budget Shopify reports on every call, slows down as it gets low, and waits and retries when it is throttled rather than failing. A large sync therefore takes longer rather than breaking.

Retries are limited. When Shopify keeps refusing, the sync records the failure and moves on.

Ceilings worth knowing

LimitValue
Sync rules per storeTwo on Free, unlimited on Pro. The app tells you when you reach it
Child products per ruleNo limit
Images read from a parent250, Shopify’s own limit per product
Metafields read from a parent250
Variants read from a parent250
Metafields written per request25, Shopify’s documented maximum
Products scanned for recommendationsThe first 1000 in the catalogue
Sync history shown on a ruleThe last 30 rows
Sync history shown store wideThe last 200 rows

Current plans and prices are on the App Store listing. Rules that already exist keep syncing whatever plan you are on, so moving to a cheaper plan never breaks a rule you have already set up.

Getting help

Write to hello@ioun.dev with your store’s myshopify domain and, if it is about one sync, the parent product’s name and roughly when it ran.