What I Learned Automating 120 Hours of Manual Work for One Client
The situation
A mid-sized retailer was selling through both their Shopify store and a wholesale channel. Every time certain wholesale orders came through, someone on the team would open Shopify, cross-reference the order against their pricing spreadsheet, manually create an invoice in Xero, and email it to the client.
Every. Single. Day.
By their estimate, this took about 30 minutes each morning. Multiply that by five days a week, 50 weeks a year - you get 125 hours. More than three full work weeks, spent copying numbers between two screens.
What surprised me in discovery
When I sat down and actually mapped the process, the 30 minutes was generous. On busy days - post-campaign, end of month - it was closer to an hour. And the error rate was higher than anyone wanted to admit. Mismatched line items, wrong tax codes, invoices sent to the wrong contact. Each mistake spawned a correction chain that ate even more time.
The other surprise: the “rules” for which orders got invoices weren’t documented anywhere. They lived in one person’s head. If she was sick, the invoices didn’t go out.
The build
The automation we built was conceptually simple - it’s the kind of thing that sounds obvious in hindsight:
- A Shopify webhook fires when a qualifying order is created
- A small middleware service catches the webhook, applies the pricing rules, and maps the data to Xero’s invoice schema
- The invoice is created in Xero via their API, with the correct contact, line items, tax codes, and due dates
- A summary notification goes to the team’s Slack channel
The whole thing runs without anyone touching it. The team gets a Slack message confirming each invoice was created - they review them in batch at the end of the day instead of building them one-by-one in the morning.
What I’d do differently
I’d spend more time on the error-handling layer upfront. We built the happy path first and bolted on error handling after launch. It worked, but the error messages weren’t as helpful as they could have been in those first couple of weeks. Now I build the error states before the success states - it’s a better order of operations.
The broader lesson
Most manual processes that involve “take data from system A, transform it slightly, put it in system B” are automatable. Not theoretically - practically. A webhook, a small service, and a couple of API calls. That’s it.
The hard part isn’t the technology. It’s the discovery: sitting down, mapping the actual process (not the one in the documentation, the one people actually follow), identifying the rules and edge cases, and designing something that handles them reliably.
That’s the work I enjoy most - and it’s where the real value sits.
Got a process that’s eating hours every week? Let’s talk about it.