Skip to content

Case study · Built at Edition

Expansion Store Sync

A multi-store synchronisation system, shipped as a Shopify app. One master store keeps any number of market stores in sync: products, inventory, collections, metaobjects, pages, blogs and metafields, with rules, prices and translations per store.

  • 5.0

    App Store rating

  • 9

    content types synced

  • 2-way

    inventory sync

  • Jan 2026

    live on the App Store

Sync system · Shopify app

1.5M

product updates in < 24 h

Expansion Store Sync

2025–26 · Built at Edition

Year
2025–26
Role
Solo developer
Built at
Edition
Type
Sync system · Shopify app
Status
Live
  • Next.js
  • TypeScript
  • Polaris
  • PostgreSQL
  • Prisma
  • Redis
  • BullMQ
  • Shopify GraphQL
  • Docker

The challenge

A merchant expanding into new markets runs one Shopify store per market. Keeping products, stock and content identical by hand across every store doesn't scale, and each market still needs its own prices, exclusions and language. On top of that, Shopify limits how fast any app may call each store, so a naive sync either crawls or gets throttled.

The approach

  1. 01Webhook-driven: a change in the master store becomes a background job that syncs only that change to every child store. Composite hashes of each product detect what actually changed, so duplicate and no-op webhooks exit early and unchanged text is never translated twice.
  2. 02Rate limits handled at the source: a token bucket in Redis, updated atomically in Lua, mirrors Shopify's own model per store. Every process and worker draws from the same balance, and each store's pace is tuned to the real cost of its queries.
  3. 03Fair under load: a per-store concurrency gate reschedules jobs instead of blocking workers, so one store flooding the queue with edits never starves the others.
  4. 04Two-way inventory without loops: when the app writes stock to a store, Shopify echoes it back as a new change. An echo blocker recognises its own writes and ignores them, while real sales seconds later still sync.
  5. 05Full-catalogue syncs in bulk: products are written in chunks with Shopify's bulk mutations, compared again in a second round, and anything still failing falls back to a single-product sync. These run at lower priority than live edits, so merchants' changes stay fast.
  6. 06Per-store rules for every field (sync on creation, on every update, or never), pricing formulas for local markets, exclusions, location mapping, machine translation with usage-based credits, and a sync history that logs every change on every store.

The outcome

Live on the Shopify App Store since January 2026 under Edition, with paid plans from $25 a month and a 5.0 rating from merchants. In one store network it synced over 1.5 million product updates in under 24 hours.

Every Admin API call is paced by a shared token bucket in Redis, so the system runs at each store's real Shopify rate limit without getting throttled. It has synced over 1.5 million product updates from a single store network in under 24 hours.

Next case study

Edition – DataLayer & Tracking

Read it →

Have a problem worth solving?