The Company
A mid-sized Dutch 3PL fulfilling 300–500 orders per day (1,000+ during peak season), serving around 50 ecommerce clients — each with custom pricing, special rules, and contract-specific surcharges. No automated invoicing.
Industry
3PL, Ecommerce Fulfilment, Logistics
The Challenge
Monthly invoicing was a massive operational bottleneck.
Before:
• 3 full days of work
• One admin employee manually collecting data from 7+ systems
• 1500–2000 monthly surcharges across couriers
• Dozens of client-specific pricing models
• Frequent mismatches and missing data
• High stress around deadlines
The data lived everywhere:
• ChannelDock (orders, shipments)
• Google Sheets (services, surcharges, credits)
• PostNL, QLS, MyParcel dashboards
• A warehouse app for inbound/returns
• Contract spreadsheets
• Moneybird for invoicing
Nothing talked to anything else.
How Automated Invoicing Solved the Bottleneck
What I built
A fully automated financial workflow engine that gathers, checks, and processes every data point needed to generate client invoices — then pushes the final result straight into Moneybird via API.
1. Unified data engine (Python + PostgreSQL)
All relevant data streams now flow into a central database:
• ChannelDock orders via API
• ChannelDock shipments via API
• Fixed services from Google Sheets
• Variable services (inbounds, returns, relabeling, counting) from a custom warehouse app
• Courier surcharges from QLS, PostNL, MyParcel via webhooks
• Required credits from Google Sheets
Every data source is normalised, cleaned, and linked to the correct client automatically.
2. Contract-aware pricing
Each of the 50 clients had unique pricing rules.
The engine applied all of them automatically:
• Pick & pack fees
• Storage fees
• Custom services
• International surcharges
• Weight-based courier rules
• Special discounts or exceptions
• Volume-based pricing
• Bundled service agreements
No more manual lookup.
3. Automated Invoicing in Moneybird
Once all calculations were done, the system:
• Creates a draft invoice per client
• Includes every line item
• Tags everything for reporting
• Handles VAT rules
• Pushes data through the Moneybird API
Invoices appear in Moneybird ready for review.
4. Human validation (final safeguard)
The admin employee now only:
• Reviews the draft invoice
• Checks a few edge cases
• Sends them out
No more hunting for data.
No more manual linking.
No more late invoices.
5. Zero interface — everything controlled from tools they already used
To reduce complexity, I removed the need for a dedicated UI:
• Google Sheets drives service updates
• ChannelDock drives order/ship data
• Moneybird drives invoicing
• The engine runs on DigitalOcean as a background service
• No training required
• No new logins
• No new workflow
Fast. Invisible. Reliable.
The Result
From 3 days → 2 hours
A 92 percent reduction in time spent.
Accurate, systematic invoicing
• No missing surcharges
• No mismatched services
• No forgotten extra fees
• Clients billed correctly every time
Cleaner operations
The fulfilment center finally had:
• Real visibility into client profitability
• Consistent rules
• Faster cash flow
• Fewer disputes
• Less chaos at month-end
Scales during peak season
Invoices during 1,000-order days now generate without additional effort.
No more stress around data hunting
Everything is pulled and processed automatically.
Delivery Time
• ~1 month to build
• ~1 month to test with live data
• Fully operational afterwards
Tools Used for Automated Invoicing
Python, PostgreSQL, REST APIs, Moneybird API, ChannelDock API, Google Apps Script, DigitalOcean, custom warehouse service app.
What This Shows
Complex monthly financial workflows can be automated without changing your tools or hiring more staff.
A 3-day problem became a 2-hour review process — predictable, accurate, and fully scalable.
Want your automated invoicing too?
If your invoicing still depends on spreadsheets, manual data export, or chasing data across platforms, you’re wasting time and leaking margin.
I can look at your setup and show you exactly how to automate the entire workflow.
