MERSO IT

Automation · Multichannel selling

TikTok Shop + Shopify: one inventory, two storefronts

MERSO IT Insights · Updated July 2026 · 8 min read

Two storefront channels feeding into a single shared inventory and fulfilment pipeline

The situation: your Shopify store carries the brand, and TikTok Shop drives impulse volume from short video. Both sell the same physical stock on the same shelf. The moment you manage two inventory counts by hand, you either oversell during a livestream or you leave stock artificially locked on one channel while the other runs dry. The fix is architectural: one source of truth, and both storefronts become projections of it.

Pick the system of record — and mean it

In most builds we make Shopify the master for product data and a small inventory service the master for stock. Every stock movement — a Shopify order, a TikTok Shop order, a supplier delivery, a manual correction — is written to that service first, and the two storefronts are updated from it. Neither storefront ever edits the other. This one rule kills the circular-update bugs that plague point-to-point connectors: Shopify tells TikTok, TikTok tells Shopify, and forty minutes later a phantom unit has appeared or vanished.

Webhook-driven sync in both directions

  1. Order placed on either channel → webhook received → inventory service decrements the shared count → the other channel's available quantity is pushed down.
  2. Cancellation or return → webhook → increment → push back up to both channels.
  3. Supplier goods-in → recorded once in the inventory service → both channels rise together.
  4. Nightly reconciliation → compare what each platform believes against the master, and alert on drift instead of silently overwriting it. Drift is a symptom; find the missed webhook that caused it.

Webhooks are fast but not guaranteed. Both platforms occasionally drop or delay deliveries, so the nightly pull-and-compare job is not optional — it is the safety net that makes the real-time layer trustworthy.

Oversell prevention: reserve buffers and atomic decrements

The classic failure is the flash sale. A creator mentions your product, two hundred people check out within a minute, and your sync loop — which reads the count, subtracts one, writes it back — loses updates because two orders read the same number. Stock check and decrement must be a single atomic operation: a conditional database update or an atomic counter, never read-then-write. If the decrement would go below zero, the order goes to a manual-review queue instead of a courier.

Reserve bufferNever publish your full physical count to fast-moving channels. Hold back a small reserve — a few units per SKU, larger during planned livestreams — so that webhook latency between the platforms cannot produce a sale you cannot fulfil. Tune the buffer per SKU velocity, not globally.

One fulfilment pipeline for both channels

A TikTok Shop order should land in exactly the same fulfilment flow as a Shopify order: normalise it into a common internal order format, book the ViettelPost pickup, print the label, push tracking updates back to the originating platform. We covered the courier side in detail in our ViettelPost automation guide, and the full architecture in the end-to-end stack article. The critical addition for TikTok Shop: the platform scores you on fulfilment speed, and penalty metrics accumulate if your automation lags. If your pickup-booking job runs hourly, make it event-driven instead; if your label printing waits for a human, remove the human.

Category and attribute mapping: the unglamorous 40%

TikTok Shop's category tree and required attributes do not match Shopify's product model. A listing that syncs "successfully" but into the wrong category gets suppressed in search or rejected on review. Build an explicit mapping table — Shopify product type → TikTok category ID plus required attributes — and treat unmapped products as errors that block publishing, not warnings. The same discipline applies to variants: size/colour option ordering differs between the platforms, and a silent mismatch means customers receive the wrong item.

Price and promotion sync rules

Decide the pricing relationship explicitly. Common patterns:

RuleBehaviourUse when
MirrorTikTok price always equals Shopify priceSimple catalogues, brand consistency
OffsetTikTok price = Shopify price plus channel-fee marginFee structures differ materially
Independent promosBase price mirrors; platform campaigns run locallyYou join TikTok flash-sale campaigns

Whatever you choose, promotions must never desync the base price. When a TikTok campaign ends, the sync job should restore the mirrored price automatically — expired promos left at campaign price are one of the most common margin leaks we find in audits.

Settlement reconciliation: two payout streams, one ledger

TikTok Shop settles on its own cycle with its own fee lines; Shopify payouts (or your gateway's) arrive on another. Reconcile both against orders in a single ledger, the same way we described for cash on delivery in the COD reconciliation article: match settlement lines to order IDs, book fees per channel, and surface unmatched lines for review. Sellers who skip this discover the gap only at tax time — and if you issue e-invoices, both channels' orders must flow into the same invoicing pipeline (see our MISA AMIS integration guide).

Where to start

Begin with one-directional stock push and the nightly reconciliation, then add atomic decrements and buffers, then unify fulfilment. Marketing the channels — including auto-posting the videos that drive TikTok traffic in the first place — is its own pipeline, covered in our cross-platform posting article. Get the inventory truth right first; everything else compounds on top of it.

Want both channels running off one stock count?

MERSO IT builds multichannel sync with the buffers, atomic operations and reconciliation jobs that survive a flash sale — and for suitable projects we demonstrate the core workflow before any payment.

Talk to Mersoid, our AI consultant