Automating the handoff between a bookshop and its distributor
Every order now generates a distributor-ready XML document and dispatches it automatically to the publisher responsible for fulfilment — removing roughly ten minutes of manual transcription from every sale.
www.rebelsfaq.no/nettbutikk/ ↗- Manual work per order
- ~10 min → zero
- Orders automated
- ~20–30 / month
- Order to distributor
- Immediate
How this started
RebelsFAQ first came to me for something much smaller: a website migration. That went cleanly, and the working relationship carried on from there — this automation project came later, once there was enough trust to hand over something the business actually depends on.
That order matters. Nobody gives a stranger control of the path between their orders and their distributor. It gets earned on smaller work first.
The problem
RebelsFAQ sells books through a WooCommerce storefront but doesn't hold stock. Fulfilment sits with the distributor, who needs order details in their own format before they can dispatch anything.
That handoff was manual. Someone opened each order, transcribed the details into the format the distributor expected, and sent it on. It took around ten minutes an order — every order, regardless of its value — and the work scaled linearly with sales. The busier the shop got, the more of someone's day disappeared into retyping order data.
Manual transcription also has a failure mode that only surfaces later. A wrong quantity or a mistyped identifier doesn't fail at the point of entry. It fails downstream, as a wrong delivery, days later, when it has become a customer service problem instead of a data entry problem. In one case a single order resulted in multiple books being shipped — the kind of error that costs the return shipping, the replacement, and a measure of the customer's confidence.
Why the obvious solutions didn't work
There's no off-the-shelf plugin that speaks a specific Norwegian book distributor's XML schema.
Generic order-export plugins produce generic formats — a CSV dump, or their own XML structure — which still leaves someone reshaping the output into something the distributor will actually accept. The requirement was never "export orders." It was "produce exactly the document this partner's system ingests, correctly, every time, without supervision."
What I built
A WooCommerce integration hooked into the order lifecycle. When an order reaches the appropriate status, it builds a complete XML document containing the order, line items, quantities, product identifiers and delivery details — structured to the distributor's required schema — and emails it to the distributor automatically.
The decisions that mattered:
Built on the WooCommerce REST API and order hooks rather than scraping the admin or polling the database. The integration follows WooCommerce's own lifecycle, which means it behaves predictably and survives updates.
Generation and transmission kept as separate steps. The XML is produced and stored, then sent. If transmission fails, the document still exists and can be retried without regenerating it — which matters when the failure is at the other end and outside your control.
An admin interface for failed transmissions. Any order whose document didn't reach the distributor is visible and can be re-sent manually from the WordPress admin. Email is a reliable enough transport for this volume, but "reliable enough" isn't the same as "never fails", and the recovery path needed to exist before it was needed rather than after.
Validated before sending, because a malformed document that a partner system silently rejects is considerably worse than one that fails loudly.
The result
- Manual work per order: roughly ten minutes → effectively zero
- Orders processed automatically: approximately 20–30 per month
- Time from order placed to distributor notified: immediate
- Transcription errors eliminated as a class — the document is generated from the order record, so it cannot disagree with it
Beyond the hours saved, the operational change is that order volume stopped being tied to staff availability. The shop can take more orders without anyone doing more work — which is the difference between a store that scales and one that doesn't.
Scope
Built in 2024 as a custom WooCommerce plugin, in the region of $5,000–6,000. That is a useful marker for the shape of this kind of project: one well-defined system with a clear operational outcome, rather than an open-ended engagement.
The relationship has continued well beyond it.
“What characterizes this man is efficiency, short, pleasant and very clear communication. The professional skills are obviously the very best. He just quietly delivered a beautiful, well-functioning and completely problem-free migration.”
Working on something similar?
Get in touch