Service · Inventory · Supplier Feeds

Supplier feeds, automated.
Three patterns. One platform.

Suppliers send their stock and price feeds three different ways: a CSV behind a Cloudflare-protected portal, a shared Google Sheet, a weekly Excel email. One automation platform handles all three — without anyone in your warehouse opening a spreadsheet.

Feed patterns supported
3
SKUs synced daily
~470
Manual touch per feed
0 / 0 / 1
Storefronts on one feed
Any
The three feed patterns

Different suppliers, different shapes.

Every supplier delivers their stock feed differently, and that's not changing. The question is whether your team handles all three shapes, or just the one that's convenient. The platform handles all three.

Pattern 1 · Scheduled pull

Supplier portal · CSV behind Cloudflare

Hits the supplier's authenticated portal nightly, downloads the CSV, parses it, pushes inventory levels into Shopify. The catch: the supplier blocks VPS IP ranges. Solution covered below — runs from a residential IP.

Pattern 2 · Sheet polling

Google Sheet · shared by supplier

Supplier shares a Google Sheet that they update manually. Hub polls the Sheet via the Google API on a schedule, diffs against last-known state, pushes only changed SKUs. Quiet when nothing changes.

Pattern 3 · Manual upload

Weekly Excel · staff-driven

Supplier emails an Excel file weekly. Staff drag it onto the dashboard. The hub parses every relevant sheet (the file has multiple tabs), maps supplier SKUs to your SKUs, and pushes the diff. One click, one minute.

The Cloudflare problem

Why a cloud-hosted script won't work.

Plenty of suppliers protect their distributor portals with Cloudflare. Most of them configure it to block known VPS provider IP ranges (DigitalOcean, AWS, Google Cloud, Linode — all flagged by default). Your hosted automation script gets a 403 every time.

The fix isn't proxies — those get flagged faster. The fix is to run the inventory sync from the residential IP you already have: the warehouse PC. Windows Task Scheduler kicks off the Python automation at 06:00 daily. The supplier sees a request from an Australian residential ISP, treats it like any other browser session, returns the CSV.

This is the operational reason the whole platform is local-first. Cloud-hosting the automations would mean fighting Cloudflare every night — and losing.

uropa_stock_sync.py · daily 06:00 run
$ python -m automations.commercial_equipment.uropa_stock_sync
fetching supplier CSV from authenticated portal ...
CSV ok · 472 rows · 2026-05-15 stock snapshot
matching supplier SKUs to Shopify products ...
451 matched · 21 unmatched (logged for review)
pushing inventory_set mutations ...
89 SKUs changed · 362 unchanged (skipped, no write)
0 errors · 14.2s total
status: cache/commercial_equipment/uropa_stock_sync.json
Idempotent + observable

Re-run anything. See everything.

Each feed sync writes a status JSON when it finishes — current run state, summary counts, last-success timestamp, log path. The dashboard renders one card per feed with traffic-light status.

If a supplier's CSV format changes overnight, the sync logs the parse error and the card turns red. Nobody finds out two days later because a customer complained.

Re-running is always safe. The "manual upload" pattern in particular is designed to be drop-the-file-twice-by-accident-tolerant: identical uploads produce identical Shopify writes, which Shopify accepts as no-ops.

Screenshot · Dashboard card · three feed cards with last-run timestamps and counts
What you get

One platform that handles every supplier.

Per-feed build
from $2,400
Adding a feed later
1-2 days
Recurring SaaS
$0
Schedule control
You own it

Build it once per supplier; reuse the platform's auth, logging, and dashboard. Adding your fourth, fifth, and sixth supplier is a Python module each — not a project each.

Related Builds

Other angles on the
same platform.

Every page on this list is drawn from the same Raw Blend build — different problems, same operating model.

Got a supplier feed
we can take off your team?

Tell us what your suppliers send and how. CSV, Sheets, Excel, hand-typed — we've shipped against all of them. Discovery is free and we'll quote a specific feed in 48 hours.

Discovery is free · Quote in 48 hours · No retainer required