Problem
Nobody can copy hundreds of cards and check stock every day by hand, so products the supplier no longer had kept selling. After part of the chain moved to BigCommerce, one service had to serve several stores, each with its own prices that sync must not overwrite. It also must not flood a store with products it never sold.
Solution
One service with two entry points, a shared data layer and separate syncers for Shopify (Admin GraphQL) and BigCommerce (Catalog API v3). A daily incremental run and a weekly full run bring in products, variants, photos and prices from the supplier catalogue. A separate stock pass runs every 30 minutes. Each store is synced on its own, with dry-run mode for new stores and a protected list that blocks writes.
Key decisions
Chose a dedicated stock feed for stock, apart from the full catalogue run
Why A full run takes hours, so stores saw availability once a day. The stock pass takes about a minute, so it can run every 30 minutes.
Chose a baseline on first sync
Why Only products that appear after a store is connected are created, so no store gets hundreds of items it never sold or deleted.
Chose to create new products as hidden drafts
Why A person reviews each new item before shoppers see it.
Chose a safety net: dry-run for new stores and a protected-store list
Why A mistaken sync cannot write into a live store by accident.