Docs / Inventory Sync

Inventory Sync

Suppli takes your suppliers' stock and updates every connected sales channel automatically — no manual uploads, no scheduled jobs to babysit, no per-channel exp

Inventory Sync illustration

Inventory Sync

Suppli takes your suppliers' stock and updates every connected sales channel automatically — no manual uploads, no scheduled jobs to babysit, no per-channel exports.

Two ways in

  • Email CSV — your supplier emails a stock file; Suppli reads it from your inbox within about a minute of it arriving. You can also upload a CSV yourself on Feed uploads, which explains the file rules and what the list shows.
  • Supplier API — if your supplier publishes a catalog API, the Supplier API app fetches their stock and cost every 6 hours, and the moment you add them.

Both go through exactly the same steps once the data arrives: matching to your catalog, your stock buffer, pushing to every channel, and a record on the Dashboard, in Sync logs and on Feed uploads. Products Suppli hasn't seen before land in Unmapped SKUs either way.

How the email pipeline works

  1. Celery beat scheduler runs every 60 seconds. Suppli's worker fires poll_email_task on a 60-second cadence, checking every connected IMAP inbox for new messages from supplier addresses.
  2. CSV attachment detected and downloaded. Suppli identifies CSV or Excel attachments in the email, downloads them, and queues them as a FeedFile for processing.
  3. SKUs matched, rules applied, quantities calculated. Rows are matched to product mappings, sync rules applied (stock buffers, markups), and multi-supplier totals are stacked — in milliseconds.
  4. All channels updated simultaneously. Suppli pushes updated quantities to Shopify, eBay, Walmart, Amazon, Etsy and WooCommerce in the same sync run.

Total time from email received to every channel updated: under 2 minutes.

How Suppli compares

Method Polling interval Human required? Total lag
Suppli 60 seconds No <2 minutes
Stock Sync (Standard) 4–24 hours No (FTP/URL only) 4–24 hours
CIN7 Manual import Yes Hours–days
Manual CSV upload Whenever you remember Yes Hours–days

Supported channels

  • Shopify — Admin API with a custom access token. Inventory updated per location. Auto-hide/publish on stock changes. Stacked total from all suppliers.
  • eBay — Each user registers their own eBay developer app. Full OAuth 2.0 per tenant, Inventory API v1. Only eBay-connected supplier quantities are pushed.
  • Walmart — Walmart Marketplace API. Client ID + Secret per connection, bearer token auto-refreshed. Only Walmart-connected supplier quantities are pushed.
  • Amazon — SP-API Feeds API. LWA OAuth per connection, inventory XML feed uploaded to S3.
  • Etsy — Etsy API v3 with PKCE OAuth. No developer account required — just log in. Per-supplier quantities.
  • WooCommerce — your store's own REST API (wc/v3) with a Read/Write key pair, approved on the store or pasted. Stock by SKU on products and variations, in batches of 100; totals from the suppliers connected to that store. At 0 WooCommerce shows Out of stock by itself. WooCommerce tutorial

Channel-specific inventory logic

Different channels get different inventory totals, depending on which suppliers are connected to each — this prevents a channel from receiving inflated numbers from a supplier that hasn't been onboarded there.

Channel Inventory source
Shopify Sum of all suppliers' last-known quantities for that internal SKU
eBay Sum of quantities only from suppliers with an active eBay connection
Walmart Sum of quantities only from suppliers with an active Walmart connection
Amazon Sum of quantities only from suppliers with an active Amazon connection
Etsy Sum of quantities only from suppliers with an active Etsy connection
WooCommerce Sum of quantities from the suppliers connected to that store (one push per store)

Auto-hide and auto-publish

Auto-hide on zero stock

When channel-specific inventory hits zero, Suppli automatically sets the Shopify product to Draft and pushes qty=0 to eBay/Walmart. This prevents orders you can't fulfill.

Auto-publish when restocked

When stock returns above zero, Suppli restores the Shopify product to Active and pushes the real quantity back. Nothing stays hidden that shouldn't be.

Multi-supplier stacking

If you source the same product from more than one supplier, Suppli automatically combines those quantities into a single accurate number.

Example — SKU WIDGET-BLK-M:

Supplier A: 10 units in stock
Supplier B: 15 units in stock
─────────────────────────────
Shown to customers: 25 units
  • Each supplier sends their own feed, on their own IMAP mailbox, matched using their own supplier-to-internal-SKU mapping.
  • SupplierSkuLastQty tracks the last known quantity per (supplier, internal_sku) pair. When Supplier A sends a new feed, only Supplier A's rows update — Supplier B's last known quantities are untouched.
  • After every feed is processed, Suppli sums all SupplierSkuLastQty.last_qty values for each internal_sku to calculate channel totals — so even when only one supplier sends a feed, the final number reflects every supplier's current stock.
  • Shopify receives the full stacked total from all suppliers. eBay, Walmart, Amazon, Etsy and WooCommerce each receive totals only from the suppliers connected to that specific channel (for WooCommerce, to that store).

Unlimited suppliers per account

There's no limit to the number of suppliers you can connect. Each has their own IMAP connection, channel credentials, sync rules, and product mappings — scale from 1 supplier to 100 without changing plans.

Price control per supplier

When multiple suppliers carry the same SKU, only one supplier's price should control what customers see. Mark one supplier per SKU as price primary — that supplier's cost × your multiplier becomes the channel price. All other suppliers contribute inventory only.

Supplier A — is_price_primary=True — price_mode=cost_multiplier × 1.35
Supplier B — is_price_primary=False — contributes qty only

Result: Shopify price = Supplier A's cost × 1.35
        Shopify qty   = Supplier A qty + Supplier B qty

Compare tab

After every sync, Suppli stores a snapshot of before/after quantities per channel. The Compare tab lets you see exactly what changed, per channel, per sync run — so you always know what happened and when.