Supplier Sync App

User Guide

Import products and stock levels from your suppliers into Shopify. Set each supplier's defaults once, then run imports that already know your mapping, pricing and inventory rules.

📦 Shopify embedded app ⏱️ ~10 min first setup 🧩 Version 2.4.0 🗓️ Updated 8 Jun 2026
On this page

Overview #

The Product Import Manager keeps your Shopify catalogue and stock in step with your suppliers.

The app connects to each supplier by live API or by CSV upload, maps their fields to your Shopify products, applies your pricing and inventory rules, and writes the result into your store. You configure a set of defaults per supplier so every import starts pre-filled and consistent.

  • Match supplier items to your Shopify products by barcode, then SKU.
  • Map supplier fields to Shopify fields, including dual mappings and per-field sync control.
  • Price products with simple or rule-based markup, with optional price rounding.
  • Control product status, null protection, delta sync, inventory buffer and continue-selling.

Install & access #

Getting the app into your Shopify admin.

1

Install the app

Install SAAS Integrator Supplier Sync App from the link provided by SAAS Integrator and approve the Shopify permissions it requests (products, inventory, locations).

2

Open it from Apps

In Shopify admin, find SAAS Integrator Supplier Sync App under Apps in the left sidebar. It opens embedded inside your admin.

3

Land on the dashboard

You arrive at the Product Import Manager, your home base for suppliers, connections and import history.

Key concepts #

Six terms that appear throughout this guide.

TermWhat it means
SupplierA source of products you've set up in the Supplier Directory, with its own defaults.
ConnectionA specific API feed or CSV source belonging to a supplier. One supplier can have several connections.
DefaultsThe five-step configuration that pre-loads into every import for that supplier.
MappingWhich supplier field fills which Shopify field. Can be dual (one source to two targets).
MarkupHow supplier cost becomes your sell price, a simple uniform rate or conditional rules.
BufferA quantity held back from the published stock figure, so you never oversell.

The dashboard #

The Product Import Manager, where you manage suppliers and review imports.

The dashboard opens on the Supplier Directory tab. Three summary cards across the top show your totals: Suppliers, Connections and Products. Switch to Import History at any time to review past runs.

Product Import Manager dashboard showing the Supplier Directory
Figure 1. The Supplier Directory, with summary cards and the supplier list.

Each supplier row shows its health, number of connections, last sync, product count, and whether defaults are set:

ColumnWhat it tells you
HealthHealthy or Needs attention, a quick status flag for the supplier's connections.
ConnectionsHow many feeds/sources belong to this supplier. Click a row to view them.
Last syncHow long ago this supplier last imported.
ProductsNumber of products currently imported from this supplier.
Defaults✓ Defaults set once you've saved the five-step configuration.
  • Use Search to filter suppliers by name or email, and the All / CSV / API tabs to filter by connection type.
  • Expand all opens every supplier's connections inline; + Add New Supplier starts a new supplier.
💡

TipUse clear, consistent supplier names. They appear in Import History and on every product's provenance details.

Supplier defaults #

Set a supplier's rules once across five steps. They pre-load into every import, and you can still override any of them per-import.

Open a supplier (or click + Add New Supplier) to reach Edit: [supplier]. The defaults editor runs across five steps shown in the progress bar at the top. Use Next / Previous to move between them, Save & Close to save and return to the directory at any point, or Save Supplier Defaults on the final step.

ℹ️

Defaults vs. a live importThis editor sets a supplier's defaults. It does not run an import itself; it pre-fills the matching steps when you later run the import wizard.

Step 1 of 5

Supplier Info

Identify the supplier and choose how its data arrives.

Step 1 Supplier Info: name, connection type, API details, notes
Figure 2. Step 1, Supplier Info.
SectionWhat to enter
Supplier Information RequiredSupplier Name and Email, the basic identity of the supplier.
Default Connection Type RequiredChoose API Connection (a live feed with auto-sync) or CSV Import (manual file uploads).
Default API Details OptionalFor API suppliers, optionally pre-fill the Default API URL and Default Access Token, then use Validate Connection to test them. These pre-fill new connections for this supplier.
Internal Notes OptionalPrivate notes visible only to your team.
ℹ️

API vs CSVChoosing API enables the Default Mapping step (Step 2), and that mapping is pre-loaded into the Key Mapping step of every import. CSV suppliers map their columns at import time instead.

Step 2 of 5 · API only

Default Mapping

Tell the app which supplier field fills which Shopify field. Three counters at the top track your Source Fields (fields the supplier sends), Shopify Fields (targets available to map to), and Mapped (how many you've connected).

Step 2 Default Mapping: supplier field to Shopify field rows with Apply markup and Sync controls
Figure 3. Step 2, Default Mapping (API suppliers only).

Each row maps one Supplier Field to one Shopify Field, with two controls on the right:

ControlWhat it does
Markup (Apply)Tick Apply on a price field to make it eligible for your Step 3 markup. Only ticked rows are affected by markup; non-price rows show a dash.
SyncControls whether this field updates when an existing product is re-synced. See How the Sync toggle works below.

How the Sync toggle works

The Sync toggle only affects existing products on re-sync. It does not change how new products are first created.

  • New products (first import): every mapped field is written from the supplier, whatever its Sync setting. The toggle has no effect when a product is first created.
  • Existing products (re-sync): Sync on updates the field from the supplier on every run; Sync off leaves the field at its current Shopify value, so the import never overwrites it.

So turn Sync off for fields you curate by hand in Shopify, such as polished titles or descriptions: the first import seeds them from the supplier, and every re-sync after that leaves your edits intact.

ℹ️

One exception: the Tags fieldThe app adds a small source tag to every product it imports so it can recognise its own products later. On a re-sync, that tag is only re-applied when the Tags field has Sync on. Turning Sync off for Tags leaves a product's existing tags untouched, but the app won't re-stamp its source tag.

A typical default mapping looks like this:

Supplier fieldShopify fieldMarkupSync
nametitle *Off
descriptionbody_htmlOff
barcodebarcodeOn
image_urlimage_srcOff
supplier_sku_codesku *On (always)
priceprice *✓ ApplyOn
rrpcompare_at_priceApply (off)On
availableinventory_quantityOn
supplier_idvendorOn

Here title, body_html and image_src have Sync off, so any edits you make to those in Shopify are preserved on every re-sync, while stock, price and the rest keep updating from the supplier.

Use + Add Mapping for another row, or ⚡ Add Dual Price Mapping for the dual-price pattern below.

ℹ️

Dual field mappingMap the same supplier field to multiple Shopify fields. For example, map wholesale_price to Price (with markup) and Compare At Price (without markup).

⚠️

SKU always syncsThe SKU field always syncs because it's the product identity key; its Sync toggle can't be turned off.

Step 3 of 5

Markup Rules

Decide how supplier cost becomes your sell price. There are two modes, chosen with the Simple Markup / Advanced Rules toggle.

Step 3 Markup Rules in Simple Markup mode
Figure 4. Step 3, Simple Markup, with live preview and price rounding.

Simple Markup

Apply one uniform markup to all products. Pick a Markup Type (Percentage or fixed amount) and a Value; the Quick Preview shows the resulting price, markup and margin. Optionally snap prices with Round prices to: No rounding, .99, .95, .50 or .00.

Step 3 Markup Rules in Advanced Rules mode with conditional rule cards
Figure 5. Step 3, Advanced Rules, with conditional rule cards.

Advanced Rules

Apply different markups based on product attributes. Build each condition from three parts, a field, an operator, and a value, then set the markup that applies when the rule matches. Add more conditions with + Add condition, and more rules with + Add Markup Rule.

PartOptions
FieldTitle, SKU, Tags, Vendor, Product Type, Price, Compare at Price.
Operator (text fields)is equal to, is not equal to, starts with, ends with, contains, does not contain.
Operator (Price / Compare at Price)All of the above, plus greater than, greater than or equal to, less than, less than or equal to, and between.
ValueWhat to compare against (a number for price fields, text otherwise).
MarkupPercentage (%) or a fixed amount. The live Preview shows the new price, markup % and margin.

Two global settings decide how rules resolve:

SettingEffect
Products must matchAny condition (OR) or All conditions (AND) within a rule.
When multiple rules matchThe tie-breaker: Higher price wins, lower price wins, or by rule Priority.
⚠️

Markup needs a flagged fieldMarkup only applies to mapping rows where the Markup toggle is on (Step 2). If no field is flagged, markup has nothing to act on.

Step 4 of 5

Import Settings

The behaviour rules for imports from this supplier. Every setting here is a default you can override per-import.

Step 4 Import Settings: product status, protection, delta sync, location, buffer, continue selling, data expiry
Figure 6. Step 4, Import Settings.

Default New Product Status. Choose how newly created products appear:

  • Draft (default): "New products created as Draft. Review and publish from Shopify admin when ready." A safe default.
  • Published: "New products Published immediately after sync. Make sure product data is ready."

Default Existing Product Status. How to handle Shopify status when an existing product is updated during sync. The default, Keep current status, no change, leaves existing products at their current Shopify status.

Default Existing Product Protection. The checkbox Respect product ownership (on, recommended) decides how much of a matched product an import may change, based on which connection created it.

In short: with protection on, stock is always updated, except for products owned by a different connection in this app, which are left completely untouched.

Where the product came fromStockOther fields (title, price, images…)
This connectionUpdatedUpdated
Outside the app (added manually or by another app)UpdatedLeft untouched
A different connection in this appSkippedSkipped

Ownership is detected via the supplier-qty-app.connection_id metafield on each Shopify product. Turning protection off removes these guardrails: every matched product is fully overwritten regardless of origin, and products created by other connections are reassigned to this one.

Default Data Protection (Null Override). The checkbox Allow null/blank values to override existing data is off by default; blank fields in the source are skipped and existing Shopify data is preserved. Turn it on only if you want blank values to overwrite (clear) existing data.

Default Delta Sync. Enable delta sync, only process products changed since last sync is on (recommended). Unchanged products are skipped using timestamp and data-hash comparison for faster resyncs; off processes every product on every resync.

Default Inventory Location. The Shopify location where this supplier's stock is recorded. The app overwrites this location's quantities with the supplier's figures on every import. Required for the import wizard.

⚠️

Use a dedicated supplier locationPoint this at a Shopify location set up to hold third-party (supplier) stock only, not a location that holds your own inventory. Think of it as where this supplier's stock lives, separate from your own stock holding. Because each import overwrites this location's quantities with the supplier's figures, choosing a location that holds your own stock would replace your real on-hand counts.

Default Inventory Buffer New reduces inventory quantities by a fixed amount before writing to Shopify. Enter a Buffer amount in units; 0 means no buffer (quantities written exactly as received). Example: supplier reports 50 units − buffer 0 = Shopify receives 50 units; a buffer of 5 would write 45.

Default Continue Selling When Out of Stock New is the checkbox Continue selling when out of stock. When on, customers can order at zero inventory (Shopify policy CONTINUE). When off (default), Shopify stops selling once stock hits zero (DENY), a safe default.

Default Supplier Data Expiry New automatically takes action on products not seen in recent supplier data. Set Expire after N days without appearing in supplier data, then choose what happens under Then (e.g. No action (track only)). Tracking metafields are written to each product: supplier-qty-app.supplier_data, supplier-qty-app.expiry_date, supplier-qty-app.date.

Step 5 of 5 · Future feature

Purchase Orders

Purchase order generation is on the roadmap. You can configure these defaults now so they're ready when the feature launches.

Step 5 Purchase Orders: fulfilment, account details, contact, delivery, shipping, order terms, PO preview
Figure 7. Step 5, Purchase Orders (preview of an upcoming feature).
SectionWhat to enter
Default Fulfilment MethodDrop Ship (supplier ships to your customer) or Warehouse (supplier ships to your location first).
Supplier Account DetailsYour account number, ABN / Tax ID, PO number prefix and currency.
PO ContactContact name, email and phone for purchase orders.
Delivery AddressUse your Shopify inventory location address, or enter your own.
ShippingDefault shipping method and freight account.
Order TermsPayment terms, lead time, minimum order value and default PO notes.

A live PO Preview shows how a purchase order will read with your settings. When you're done, click Save Supplier Defaults.

💡

TipYou don't have to complete Step 5 to use the app today; it's optional and purely forward-looking.

The import wizard #

Running an actual import, with your supplier defaults pre-loaded.

When you start an import or re-sync, the wizard guides you through seven steps along the top progress bar. Because your supplier defaults pre-fill each step, most runs are just a matter of reviewing and confirming.

The seven steps

#StepWhat you set
1Data SourceThe API feed or CSV file to import from.
2Import TypeHow the run behaves (e.g. full import vs re-sync).
3Key MappingSupplier-to-Shopify field mapping, pre-loaded from your defaults.
4Import FiltersWhich products to include, by attribute or numeric range.
5MarkupPricing, simple or advanced rules, pre-loaded from your defaults.
6Import SettingsProduct status, protection, delta sync, location, buffer and more.
7Review & RunA single summary screen: check everything, then run or save.
💡

Editing an existing connectionRe-syncing a supplier opens the wizard with its last saved configuration already filled in, so you can land on Review & run and go.

Step 7 · Review & run

The final step gathers everything into one screen: "Check the summary, then start the re-sync, or save your settings to run later."

Step 7 Review and run: summary cards, configuration summary, what-happens strip and actions
Figure 8. Step 7, Review & run.

Three cards summarise the run at a glance: the number of Products, the New product status (e.g. Draft), and how many Fields mapped. Below them, the Configuration Summary lists the key settings:

RowExample
SourceCSV, products_export_1 (2).csv
Filters9 attributes
Markup1 condition
Inventory locationYour dedicated supplier stock location
Null override✓ OFF, existing data protected

A plain-language What happens when you run this strip spells out the outcome, for example: matched products are updated at your supplier stock location by SKU; new products are created as Draft; blank source values are skipped, so existing Shopify data is protected.

Three actions sit at the bottom:

  • Start re-sync: saves your settings and runs the import now. The label reflects the mode (import vs re-sync).
  • Save & close: saves your settings to run later from the dashboard, without importing.
  • Previous: step back to adjust any earlier choice.

Running the import

Once you click Start re-sync, progress shows inline. A bar tracks processed / total with a live percentage and a remaining count, and three tiles tally Successful, Failed and Remaining as it works. Use Cancel to stop a run in progress.

Import progress: bar at 4 percent, 1 of 26 processed, Successful/Failed/Remaining tiles, Cancel
Figure 9. An import in progress, with live counts and a Cancel option.

Import results

When the run finishes you get a full breakdown: a completion banner with the supplier and timestamp, and result cards for Total, Created, Updated, Skipped and Failed.

Import complete: result cards, downloadable report, filter tabs and per-product results table
Figure 10. A completed import, showing the per-product results table.
  • Download full report (CSV) exports the complete result set.
  • Filter the results table by outcome (All / Created / Updated / Stock Only / Skipped / Failed) or search by SKU or title.
  • Each row shows the SKU, Product Title, the Action taken (e.g. Skipped), and Details, for example "No changes detected (delta sync)" when delta sync skips an unchanged product.
  • Finish with ← Return to Dashboard or View Products in Shopify ↗.
ℹ️

Why everything might say "Skipped"If a re-sync reports products as Skipped, No changes detected (delta sync), that's expected: nothing changed at the supplier since the last run. To force a full re-process, turn off Delta Sync in Import Settings.

Import History #

A record of every run and its outcome.

Switch to the Import History tab on the dashboard to see each import logged with its supplier, timestamp and result, including any products skipped by delta sync.

Troubleshooting #

Common questions and how to resolve them.

SymptomLikely cause & fix
A field I edited keeps getting overwrittenTurn its Sync toggle off in Step 2, Default Mapping, so imports leave it alone.
Markup isn't being appliedCheck that the priced field has its Markup toggle on in Step 2; markup only acts on flagged fields.
Blank supplier values are clearing my dataSwitch Null Override off in Step 4 (it's off by default) to protect existing Shopify data.
Imports skip lots of productsThat's delta sync skipping unchanged items. Disable it in Step 4 to force a full run.
Stock looks lower than the supplier'sCheck the Inventory Buffer in Step 4; it subtracts a fixed amount before publishing.
Supplier shows "Needs attention"Open the supplier to review its connections; data may be stale (see Data Expiry) or a feed may have failed.

FAQ #

Quick answers.

Can I override a supplier default for one import?

Yes. Everything in the five-step defaults editor pre-fills the import wizard, but you can change any value for a single run without altering the saved default.

Does a buffer ever oversell?

No. The buffer is subtracted before publishing, so Shopify always shows a quantity at or below true stock.

Do I need to fill in Purchase Orders?

No. Step 5 is an optional preview of an upcoming feature; the app works fully without it.

Change log #

What changed in each release. Newest first.

2.4.0
12 Jun 2026
Latest
ChangedImport process collapsed into a single Review & run screen with inline progress.
ChangedRedesigned Supplier Directory.
AddedSAAS brand theme applied across the app.
RemovedRetired the Stock Adjustment feature.
2.3.0
08 Jun 2026
AddedSupplier Data Expiry, alerts on stale supplier data (Step 4).
AddedInventory Buffer in Import Settings (Step 4).
AddedContinue Selling When Out of Stock default (Step 4).