[ Case study ]
The POS and the online shop kept separate stock levels. Overselling live plants online was routine, staff re-keyed sales into the shop system nightly, and the 'current' stock count was whoever's spreadsheet had been updated last.
CLIENT a garden centre with an online shop and a POS — FOCUS Poll and reconcile on a schedule
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
A garden centre that has grown from a family nursery into a proper retail operation: a physical site with a POS, an online shop that now outsells the car park on weekends, and stock that is genuinely alive — plants arrive, sell, wilt, and get marked down or composted. The two systems grew up separately, the online catalogue was built from a supplier feed years ago, and the person who understands the POS's quirks is the owner, on the shop floor, with a phone in his pocket.
The POS and the online shop kept separate stock levels. Overselling live plants online was routine, staff re-keyed sales into the shop system nightly, and the 'current' stock count was whoever's spreadsheet had been updated last.
We proposed a self-hosted n8n sync that polls the POS database every 15 minutes, reconciles both systems on a log the owner can actually read, and reserves online sales against POS stock immediately — with a compensation rule for refunds so the books never drift. The polling window was chosen against the POS's reality: no real-time API, so tight, boring polling beats pretending. Every design decision was tested against the shop floor: alerts text the owner because dashboards don't get opened between customers, and condition grades are first-class states, not noise to filter out.
Just as important is what we ruled out, and why:
POS stock changes sync to the shop every 15 minutes with a reconciliation log, so drift is visible in minutes rather than at stocktake.
Online orders decrement POS stock immediately with a compensation rule on refunds — the oversell window shrank from hours to seconds.
A nightly reconciliation compares both systems and texts the owner any mismatch above threshold.
Delivered by the systems pod — automation specialist + engineer over 5 weeks, with working increments reviewed with the client every week.
Obstacle
The POS marks dead and dying stock with condition-grade codes in a field the first sync design read as ordinary units, so dying plants published as fully available.
Handled: We rebuilt the mapping with the owner's codes as first-class states — each grade maps to a sellable rule — and added a reconciliation alert for any grade that appears unmapped.
Obstacle
A weekend promotion drove more concurrent online orders than the shop API's stock endpoint had ever handled, and responses slowed to the point of timeouts.
Handled: Orders now queue through a lightweight buffer with per-item decrements, and the sync tolerates a delayed read instead of fighting the endpoint in real time.
The headline: oversell incidents per month, three months post-launch versus three months before — 23 → 0, read from Order and POS reconciliation logs. A second check: nightly manual re-keying (eliminated) at −100%.
The nightly re-keying ritual is gone and nobody misses it; the evening staff close the till and leave. The owner texts less than he expected to — silence is the system working — and the morning reconciliation text has become how he starts the day: one glance, no drift, out the door to the nursery. The e-commerce team stopped pre-emptively discounting stock they feared would oversell, which the accountants noticed before anyone said it aloud.
The result was read from Order and POS reconciliation logs against the pre-engagement baseline over the stated window, with a guardrail check on nightly manual re-keying (eliminated). Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would have asked about the condition-grade field in week one — 'dead stock marking' in the POS broke the first sync design and we rebuilt it once.
[ Related service ]
[ Related builds ]
44% 71%Tier-1 tickets resolved without human touch, month two post-launch versus month before
4 hrs 25 minAverage policy-comparison preparation per client file, verified over 40 files
[ Next step ]
Next case study