AwardXero App of the Year Awards 2026 Finalist
qoblex_logo_main

Shopify

How Shopify product and inventory sync works

Once your store is connected, Qoblex keeps your products and stock levels in step with Shopify automatically, in whichever direction you chose on the settings page. This is the day-to-day sync that runs after the initial import: a product edited in Shopify flows back into Qoblex, and a product or stock change in Qoblex is pushed out to Shopify, all according to your sync directions and the per-field options you ticked.

This article explains what triggers the sync, which direction each setting drives, exactly which fields map to which Shopify fields, how Qoblex matches an incoming Shopify product to one you already have, and what you will see when it works. After reading it you will understand why a given field did or did not update, and why deleting a product in Shopify does not delete it in Qoblex.


What triggers the sync

The sync runs in two directions, each with its own trigger.

  • Shopify to Qoblex (inbound). When a product is created, updated, or deleted in your Shopify admin, Shopify notifies Qoblex. Creating or updating a product is handled the same way: Qoblex fetches the current product from Shopify and updates (or creates) the matching Qoblex product. Deleting a product unlinks it (see Deleting a product in Shopify).
  • Qoblex to Shopify (outbound). When you create or change a product in Qoblex, Qoblex converts it to Shopify’s format and pushes the change to your store, subject to your sync directions and field selections.

There is no separate schedule to configure: the inbound side reacts as soon as Shopify notifies Qoblex of a change, and the outbound side reacts to changes you make in Qoblex.

While an initial product import is running for a store, live product changes from that store are held until the import finishes, so a bulk import and live edits do not collide. See Import products from Shopify.

Gating: when Qoblex listens for inbound product changes at all

This is the single most common reason a Shopify edit does not appear in Qoblex, so it is worth stating plainly.

Qoblex only listens for product create, update, and delete changes from Shopify when at least one of Inventory, Pricing, or Product information sync is set to a Shopify-sourced direction, that is Sync from Shopify to Qoblex or Sync both ways. If all three of those are set so that Shopify is never a source (for example everything is Do not sync or Sync from Qoblex to Shopify), Qoblex does not listen for those product changes at all, and changes you make in Shopify will not flow back.

Important: if you change a sync direction to make Shopify a source (or stop being one), whether Qoblex listens for inbound product changes is only re-evaluated when the integration is installed or updated. If inbound product changes stop arriving after a settings change, reconnect or update the store so Qoblex starts listening again.

Order, fulfillment, refund, and app-lifecycle changes are listened for regardless of these settings; only inbound product changes are gated this way.

Product information sync (the direction that governs product fields)

The How would you like us to sync your products information? setting drives product-level data. Its options are:

  • Do not sync (no product data flows in either direction).
  • Sync from Qoblex to Shopify (Qoblex is the source).
  • Sync from Shopify to Qoblex (Shopify is the source).
  • Sync both ways.

What each direction does:

  • Sync from Shopify to Qoblex or Sync both ways: an incoming Shopify product create/update is applied to the matching Qoblex product, updating product information (field by field, gated by the checkboxes below), variant information, mappings, and (if the Images field is ticked) images. On this inbound leg, Qoblex also removes local images that no longer exist in Shopify, so Shopify’s image set wins outright. This image removal happens whenever an inbound update is applied, under both Sync from Shopify to Qoblex and the Shopify-to-Qoblex side of Sync both ways.
  • Sync from Qoblex to Shopify or Sync both ways: product changes in Qoblex are converted and pushed to Shopify. In the Do not sync or Sync from Shopify to Qoblex directions, Qoblex does not push product information out.
  • Do not sync: an incoming Shopify product that has no local match is not created in Qoblex, and Qoblex records a note that the product sync is off.

Which product fields sync (the field checkboxes)

Under Which product properties and attributes would you like to sync? you tick the fields to include. These flags gate the sync of each field in both directions: on the outbound (Qoblex to Shopify) push, an unticked field is not sent; and on the inbound (Shopify to Qoblex) application, an unticked field is not updated from Shopify either. So if you untick a field, that field stops syncing both ways. Two behaviours are worth knowing:

  • When Qoblex creates a brand-new product in Shopify, it sends the core fields (name, description, options, tags, type) regardless of the individual checkboxes, because a new Shopify product needs them. Handle is sent on a new product too, but only when it has a value (see below). The checkboxes take effect on later updates.
  • The Brand and Product Handle (url) fields are only sent when they actually have a value in Qoblex, so an empty brand or handle will not blank out what is in Shopify.

The checkboxes are: Name / Title, Description, Brand, Options and their values (ex. color, size…), Product Type, Product Tags, Product Handle (url), Images, Sync Barcode, Inventory Tracking Policy, and Continue selling when sold out.

Push and publish new products

When product sync includes the Qoblex to Shopify direction, two extra toggles appear:

  • Would you like to automatically sync new products created in Qoblex to Shopify? (Push new products). When on, a product you create in Qoblex is created in your Shopify store. When off, Qoblex does not auto-create a Qoblex-origin product in Shopify (it records a note that new products are not pushed) unless the creation is forced by another path. Auto-creation is also blocked if product information sync for that store is Do not sync or Sync from Shopify to Qoblex, since Qoblex is not a source in those directions.
  • Would you like to automatically publish newly created products to your web channel? (Publish on creation). When on, immediately after Qoblex creates the product in Shopify it publishes it (makes it available on your online store). When off, the product is created but left unpublished.

Both are on by default.

Inventory level sync

The How would you like us to sync your inventory levels (quantity adjustments, stock transfers, purchases…)? setting controls stock quantities, separately from product information.

In the settings dropdown you can pick Do not sync or Sync from Qoblex to Shopify. When set to sync from Qoblex to Shopify, Qoblex is the source of truth for on-hand quantities: adjustments, stock transfers, and purchases in Qoblex bring the Shopify quantity into line with Qoblex. Stock is pushed per mapped location, so each Qoblex location’s available quantity is reconciled against the Shopify location it is mapped to. Under the hood Qoblex does not overwrite Shopify with an absolute number: it reads the current available quantity at that Shopify location, works out the difference from the Qoblex quantity, and sends only that difference as a correction (an inventory adjustment). The end result is the same, Shopify ends up matching Qoblex, but this means Qoblex only issues an adjustment when the two differ, and a location where Shopify tracks no available quantity is skipped rather than forced. Set up those mappings first, see Shopify locations, currency, and price lists.

Important: with inventory sync set to Qoblex to Shopify, Qoblex owns the stock numbers and will overwrite the quantities in Shopify. If you also adjust stock manually inside Shopify, the next Qoblex sync replaces it. Pick one system to be the source of truth for stock.

Qoblex can also accept stock levels from Shopify (for example during the initial import, and internally the model supports a Shopify-sourced inventory direction). If you need Shopify to drive stock on an ongoing basis, confirm the current behaviour with support, because the standard settings dropdown for inventory offers only Do not sync and Sync from Qoblex to Shopify.

Pricing and cost sync

Pricing and cost each have their own direction, independent of product information:

  • How would you like us to sync your product prices? offers Do not sync, Sync from Qoblex to Shopify, and Sync from Shopify to Qoblex. When Qoblex is the source, variant prices are pushed to Shopify from the price list you selected as your price list, and the compare-at price from your compare-at list. When Shopify is the source, incoming Shopify prices update your Qoblex price lists.
  • How would you like to sync your product cost data? offers Do not sync and Sync from Qoblex to Shopify.

Which price list feeds each field, the compare-at rule, and the currency and exchange-rate requirements are covered in Shopify locations, currency, and price lists. A couple of price behaviours are enforced during the push: if the compare-at price is greater than zero but lower than the price, Qoblex omits it (so a lower “compare at” is not shown as a fake discount), and if a variant’s price works out to zero, both price and compare-at are left unset rather than pushed as zero.

How Qoblex matches an incoming Shopify product

When a Shopify product arrives, Qoblex has to decide whether it belongs to a product you already have. It always tries the existing link first, then falls back to your chosen matching strategy.

  1. By existing link. If the Shopify product is already mapped to a Qoblex product, that product is updated. This link is the reliable path and is created the first time the two are joined.
  2. By your matching strategy, set under How would you like Qoblex to identify and match similar products across different stores?: – Match products by name: Qoblex looks for a Qoblex product whose name matches (trimmed of surrounding spaces). If the match is already linked to a different Shopify product, it is skipped rather than double-linked. – Match products by SKU: Qoblex matches on variant SKU. If the incoming product has no SKUs, or a matching product is already linked to another Shopify product, Qoblex records a warning and does not sync it. – Match products by barcode: same logic as SKU, matched on barcode.
  3. No match: if nothing matches and product sync allows it, Qoblex creates a new product from the Shopify data. If product sync is Do not sync, it is not created and Qoblex logs that the sync is off.

A Shopify product must have at least one variant and, for multi-variant products, consistent option/SKU data before Qoblex will process it. Products still being edited in Shopify (incomplete data) are held back to avoid syncing a half-finished product.

Deleting a product in Shopify

When you delete a product in Shopify, Qoblex unlinks the product. It removes the link (mapping) between the Shopify product and your Qoblex product, and the same for the variants, then records a note that the product was removed from that store.

Important: deleting a product in Shopify does not delete it in Qoblex. Your Qoblex product, its stock, and its history remain intact, only the connection to that Shopify store is removed. To remove the product from Qoblex, delete it in Qoblex directly.

Field mapping: product

The table below is the product-level mapping applied when a Shopify product is read into Qoblex and when a Qoblex product is pushed out. Direction and per-field notes reflect exactly how each field is handled.

Qoblex field Shopify field Notes / transform
Name Title Pushed when Name / Title is ticked, and always for a brand-new Shopify product.
Description Body (HTML) Pushed when Description is ticked, and always for a new product.
Brand Vendor Pushed only when Brand is ticked and the Qoblex brand has a value (an empty brand is not sent).
Options and their values Options (Option1/2/3) Pushed when Options is ticked, and always for a new product. A product with a single option named Title valued Default Title is treated as a simple (non-variant) product on the way in.
Product Tags Tags Pushed when Product Tags is ticked, and always for a new product. Stored in Qoblex as the product’s categories/tags.
Product Type Product Type Pushed when Product Type is ticked, and always for a new product.
Product Handle (url) Handle Pushed when Product Handle (url) is ticked, a new product, and the handle has a value.
Archived status Status (archived) A Shopify product with status archived comes in as archived in Qoblex; an archived Qoblex product is pushed out with status archived.
(publish state) Published at On outbound sync Qoblex sets the product as published at the current time; Publish on creation governs whether a newly created product is published.
Images (attachments) Product images See the images note below. Only synced when Images is ticked.

Field mapping: variant

Variant-level fields map as follows. Inventory-management, overselling, and barcode fields are each gated by their own checkbox.

Qoblex field Shopify field Notes / transform
SKU SKU Always mapped in both directions. On the way in it also seeds the supplier SKU.
Barcode Barcode Pushed only when Sync Barcode is ticked.
Tracked / Untracked Inventory management Pushed only when Inventory Tracking Policy is ticked: a tracked variant maps to Shopify-managed inventory, an untracked variant to no inventory management. On the way in, a variant with no inventory management is stored as untracked.
Allow overselling Inventory policy Pushed only when Continue selling when sold out is ticked: allow overselling maps to continue, otherwise deny. On the way in, continue maps to allow overselling.
Weight Weight Mapped in both directions.
Weight unit Weight unit Pushed only when the Qoblex weight unit has a value.
Taxable Taxable Pushed as taxable only when the product is taxable in Qoblex (so a non-taxable state does not reset an existing Shopify setting).
Option values Option1 / Option2 / Option3 Up to three option values, in order. A simple product’s variant uses Default Title.
Position Position Qoblex position plus one on the way out; Shopify position minus one on the way in.
Retail / list price Price Only when pricing sync includes the Qoblex to Shopify direction; taken from your selected price list, currency-converted when required. A resulting price of zero is left unset.
Compare-at price Compare at price From your compare-at price list; omitted when it is greater than zero but lower than the price.
Cost / moving average cost / purchase price Inventory item cost On the way in, Shopify’s inventory-item cost populates the variant cost, moving average cost, and purchase price (currency-converted); new variants imported from Shopify start with zero cost until this is set.

Field mapping: inventory (per location)

Stock quantities are mapped per location, using your location mappings. Outbound stock is pushed as a delta correction: Qoblex compares its available quantity for a mapped location against Shopify’s current available quantity there and sends only the difference as an inventory adjustment, so Shopify ends up matching Qoblex.

Qoblex field Shopify field Notes / transform
Location available quantity Inventory level available Qoblex reconciles its available quantity for a mapped location against the matching Shopify location by sending the difference as a correction, not an absolute overwrite. A location that Shopify does not stock is activated with the Qoblex quantity; a location where Shopify tracks no available quantity is skipped. Each Qoblex location must be mapped to a Shopify location, or the sync raises a location mapping error (message: One of your locations is not properly mapped. Please make sure your locations are properly mapped for store [store url]).
Location (mapping) Location ID Resolved through your location mappings; one Qoblex location maps to one Shopify location and vice versa.
Variant Inventory item ID The variant must already be linked (have its Shopify inventory-item id) before its stock can be pushed.

Field mapping: images

Images are synced only when the Images field is ticked and product information sync is not Do not sync or Shopify-sourced-only for the outbound direction.

Qoblex field Shopify field Notes / transform
Attachment URL Image source (Src) The image URL is sent (URL-decoded on the way out).
Attachment position Image position Qoblex position plus one on the way out; Shopify position minus one on the way in.
File name Image alt text The attachment file name is used as the image alt text (and derived from the URL if the name is blank).
Variant image assignment Image variant IDs An image is linked to the Shopify variants that use it in Qoblex; on the way in, an image with variant ids is assigned to those variants.

What you will see when it works

  • A linked product. After the first successful sync, the Qoblex product carries a link (mapping) to the Shopify product and store; that link is what drives every later update and is what deleting the product in Shopify removes.
  • Activity notes. Qoblex records a note for each inbound event, for example “[product] updated from [your store]“, “[product] created from [your store]“, or “[product] removed from [your store]“. These appear against the integration so you can see what synced and when.
  • Failures you can act on. If a match is skipped or blocked, for example missing SKUs, a duplicate SKU or barcode, an unmapped location, or a product with no variants, Qoblex logs a warning naming the product and the reason. Fix the underlying data (add the SKU, map the location) and the next sync will pick it up.

Troubleshooting

Changes I make in Shopify do not appear in Qoblex
Qoblex only listens for inbound product changes when Pricing or Product information sync is set to Sync from Shopify to Qoblex or Sync both ways. (The inventory control cannot be set to a Shopify-source direction, so it never triggers listening for these changes.) Check those two settings, then reconnect or update the store so Qoblex starts listening again. Also confirm the product is not mid-edit in Shopify, as incomplete products are held back.
A product I deleted in Shopify is still in Qoblex
That is expected. Deleting a product in Shopify only unlinks it from the Shopify store, it does not delete your Qoblex product. Delete it in Qoblex directly if you want it gone there too.
Stock I set in Shopify keeps getting overwritten
With inventory sync set to Sync from Qoblex to Shopify, Qoblex is the source of truth and will overwrite Shopify quantities on the next sync. Choose one system to own stock and stop adjusting it in the other.
A field I edited in Qoblex did not push to Shopify
Check the field’s checkbox under Which product properties and attributes would you like to sync? and confirm product sync includes the Qoblex to Shopify direction. Note that Brand and Product Handle (url) are only sent when they have a value, so clearing them will not blank the Shopify field.
Qoblex could not sync a product because of SKUs or barcodes
When your matching strategy is Match products by SKU or Match products by barcode, the incoming product needs those values, and they must not already belong to a different linked product. Qoblex logs a warning naming the conflict; set unique SKUs or barcodes, or switch to matching by name, then retry.
A location error appears during stock sync
Every Qoblex location that should push stock must be mapped to a Shopify location. See Shopify locations, currency, and price lists to complete the mappings, then resync.

Share

Your next stage of growth is just a click away