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¶
- Celery beat scheduler runs every 60 seconds. Suppli's worker fires
poll_email_taskon a 60-second cadence, checking every connected IMAP inbox for new messages from supplier addresses. - CSV attachment detected and downloaded. Suppli identifies CSV or Excel attachments in the email, downloads them, and queues them as a
FeedFilefor processing. - 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.
- 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.
SupplierSkuLastQtytracks 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_qtyvalues for eachinternal_skuto 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.