Docs / Inventory Sync

Inventory Sync

Suppli watches your supplier's email inbox and updates every connected sales channel automatically — no manual uploads, no scheduled jobs to babysit, no per-cha

Inventory Sync illustration

Inventory Sync

Suppli watches your supplier's email inbox and updates every connected sales channel automatically — no manual uploads, no scheduled jobs to babysit, no per-channel exports.

How the 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, and Etsy 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.

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

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, and Etsy each receive totals only from the suppliers connected to that specific channel.

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.