Shopify product synchronization

Products are one of only two things that move in both directions. What makes that safe is the matching rule — Bizmitra looks for an existing record before it creates one, on the way in and on the way out. This guide states that rule exactly, including what it does not copy.

Last reviewed against the implementation on

At a glance

Direction
Both ways
Matched on
SKU first, then exact name
Not copied
Price and stock level
Export safety
Looks up the SKU on your store before creating

Shopify → Bizmitra

Products come across in the initial import and then whenever one is created, updated or deleted on your store. Each one becomes a stock item in Bizmitra — the same kind of record you would create by hand in the product master.

The matching rule

Before creating anything, Bizmitra looks for a product it already has. The order is fixed and worth knowing exactly, because it determines whether a re-import updates your catalogue or doubles it:

Match order

01
By SKU
If the Shopify product has a SKU, Bizmitra looks for a product in this company whose SKU field matches. A hit means update, not create.
02
By exact name
If there is no SKU, or no SKU match, Bizmitra looks for a product with exactly the same name in this company.
03
Otherwise, create
Only when neither matches is a new stock item written.

The name fallback exists for a specific reason: plenty of real catalogues have products with no SKU at all. Without it, every re-import would create a fresh duplicate of every SKU-less product.

The name match is exact

"Blue Kurta" and "Blue Kurta " are different names. If your catalogue has no SKUs and inconsistent naming, you will get duplicates — and the fix is SKUs, which also make stock synchronization reliable. A product with neither a usable name nor a SKU is skipped rather than written as a blank row.

Which field counts as "the SKU" on the Bizmitra side is configurable; by default it is the stock item's alias field.

What is deliberately not copied

FieldCopied?Why
Product name Yes Becomes the stock item name.
SKU Yes Stored on the configured SKU field and used for matching.
Price No Bizmitra holds rates on vouchers and price lists, not on the product record. There is no price column to write to.
Stock level No Stock is owned by the inventory flows, not the catalogue import — importing it would overwrite your real warehouse position with a storefront number.

Both omissions are intentional, and the stock one especially so. Your Shopify quantity is one location's view of an item. Your Bizmitra quantity is the position across every warehouse you run. Letting the smaller number overwrite the larger one would be a data-loss bug wearing the costume of a feature.

Fields Bizmitra fills in

A Bizmitra stock item requires several ERP fields that Shopify has no concept of. Rather than refusing the import, Bizmitra fills them with the same defaults the product master uses when you create a product by hand: the company's primary stock group and category, a unit of "not applicable", and the company owner as the creating user.

You can change any of these afterwards — they are starting values, not permanent ones, and editing them does not break the link to the store.

Bizmitra → Shopify

Products are one of only two things that also travel outward (customers being the other). Sending a Bizmitra product to your store creates or updates the listing there.

How duplicates are avoided

The risk on the way out is the mirror of the risk on the way in: pushing a product that already exists on the store, and ending up with two listings.

So before creating anything, Bizmitra asks your store whether a variant with that SKU already exists. If one does, the existing product is updated and its id is recorded, which repairs the link for every future sync. Only a genuinely unknown SKU results in a new listing.

Best-effort, never blocking

If that lookup itself fails — a timeout, a rate limit — the export continues down its normal path rather than failing the whole job. The lookup is a safeguard against duplication, not a prerequisite for working at all.

Writing to Shopify also makes Shopify fire a product-updated webhook describing the change Bizmitra just made. That echo is recognised and discarded — see duplicates and echoes.

The mapping, and why it matters

Every matched product stores a mapping between the two systems' ids. That mapping is what makes the pairing survive a rename on either side: change the product's name in Shopify and its name in Bizmitra, and they stay linked, because neither name is what joins them.

The mapping also carries one detail that matters later:

  • The Shopify inventory item id, captured when a product is exported. Stock cannot be pushed to Shopify without it — which is why the inventory guide spends most of its length on how that id is found when the mapping does not already have one.

Order lines use the same mapping to resolve which stock item was sold, falling back to SKU when no mapping exists yet. That is the link between this guide and what happens to an order.

Bizmitra Assistant