Cases / E-commerce · Operations platform
Client under NDA Data sync and AI

A retailer pulled six sales channels into one system and cut cancellations from 15% to 5%.

15% → 5%
order cancellations
~70%
of contacts closed by AI
~2 mo
to the full loop

Client under NDA: industry and size are given as a range. The figures are the client’s own, comparing the periods before and after launch; comparable projects landed on both sides of these numbers. Run the numbers on your own volumes →

Context

One product was entered into five systems, and they still sold what they did not have.

The retailer sells short-shelf-life goods through two marketplaces, its own storefront and an offline point of sale, plus product feeds into Google Ads and Facebook Ads. Every new item was keyed in by hand — once into the warehouse system, then again into each channel. Stock was reconciled by daily export, so a channel would happily sell an item the warehouse no longer had, or one it did have but with an expiry date too close to ship, which meant a manager calling to check. Cancellations reached 15% of orders: marketplace penalties and a listing sinking in search. Delivery notes were typed by hand and errors in carrier waybills surfaced at the carrier. Goods receipts were filled in on paper and re-keyed by accounting. Purchasing was assembled from last year’s files.

Solution

A platform of our own, not an assembly on top of off-the-shelf automation.

The stack was chosen for the job: Python and Django at the core, PostgreSQL as the single source of truth for product, stock and expiry date. An item is entered once and the platform creates and updates it everywhere, product feeds included. The model that handles calls sits behind an interface and is replaceable on purpose — something better ships every few months, and we move the client onto it without rewriting anything else.

Architecture
Product cardentered onceGoods receiptcount + photoCalls and requestscall centrePlatform corestock · price · expiryMarketplaces2 channelsStorefrontown siteOffline tillpaymentsAd feedsGoogle · MetaBookswarehouses · accounting
What we built

Five loops, one at a time.

Each phase went to production on its own and started paying for itself before the next one began.

01
One entry point, and sync
An item is entered once. Price, stock, availability and expiry date propagate to the marketplaces, the storefront, the offline till and the ad feeds on their own.
02
Delivery paperwork
Delivery notes generate themselves. The system checks whether an order was received and catches errors in carrier waybills before dispatch instead of at the carrier.
03
Goods receipt
The receipt is created automatically. The warehouse keeper physically counts the goods and photographs the document — from there the system posts it across warehouses and accounting and updates stock in every channel.
04
Call centre with AI
Around 70% of contacts are closed by AI. The rest pass to an operator seamlessly: the caller notices no handover, and the conversation context travels with them.
05
Forecast and purchasing
The system forecasts sales with seasonality and drafts the purchase order. The buyer approves it and edits as they see fit, rather than building it from nothing.
Before and after

Before and after.

Before
Entering a product5 systems by hand
Stock updatesdaily export
Cancellations~15%
Goods receiptpaper, then re-keyed
Contacts on operators100%
After
Entering a productonce, then automatic
Stock updatescontinuous
Cancellations~5%
Goods receiptcount and photograph
Contacts on operators~30%
Limits
What stayed with people, deliberately.
Physically counting goods at receipt and photographing the document. No machine can confirm the boxes actually arrived.
Final approval of the purchase order: the forecast proposes, the buyer decides.
Price and description conflicts between channels. We do not let anything overwrite a price on its own.
The roughly 30% of contacts the AI hands to an operator instead of guessing.
Stack
Python Django PostgreSQL Marketplace APIs LLM (replaceable) Demand forecast Monitoring and alerts
Straight about timelines

Why the whole loop took a couple of months rather than a year.

Because we were not learning the domain as the project went along: we have owned a business like this one and know its processes by heart — where stock reconciliation breaks, why expiry date matters more than availability, and what people actually ask a call centre. There were plenty of technical problems, but they were resolved quickly, because none of them was a surprise. In an unfamiliar industry the same scope would have taken several times longer, and we say so during the audit rather than in month three.

Related

What this case is made of.

The service pages explain the method behind this project; the solution pages take the same building blocks on their own, each with its own scope and price.

Want the same for your process?

A free mini-audit projects the ROI for your highest-impact process — then the build is a fixed price.

Get a free mini-audit →