Shopify → 3PL Fulfilment Automation: From 6-Hour Lag to 10 Minutes
A DTC skincare brand was manually copy-pasting every Shopify order into their 3PL portal — 500 times a month. Here's the n8n pipeline we built to make that a problem of the past.
The problem
James runs a direct-to-consumer skincare brand doing around 500 orders a month through Shopify. Their 3PL handles warehousing and shipping. Sounds like a clean setup — until you ask how orders get from Shopify to the 3PL.
The answer: someone logs into Shopify, copies the order details, logs into the 3PL portal, and pastes them in. Manually. For every order. That's 3–4 hours of ops work every single day.
"We have a 3PL with a perfectly good API," their ops lead told us. "And we're typing addresses into a web form fifteen times a day." They'd had two fulfilment errors in the previous month from typos. A wrong digit in a postcode. One order shipped to a completely different city.
Nobody had prioritised the fix because the business was growing fast and there were always more urgent fires. Classic ops debt.
What we built
A five-step n8n pipeline that handles the full order handoff — trigger to tracking number — with zero human steps for routine orders:
The SKU mapper is a Google Sheet that translates Shopify variant IDs to 3PL warehouse codes. The ops team owns it — when new products launch, they add a row. No code involved.
The validator checks three things before the 3PL API call: does the SKU exist in the warehouse catalog, does the address pass a basic format check, is the item flagged as in stock. Anything that fails routes to a Slack channel with a link to the order. An exception takes about 5 minutes to handle manually. Everything else is invisible.
Tracking sync is a separate scheduled workflow that polls the 3PL every two hours, grabs new tracking numbers, and writes them to the Shopify order. That fires Shopify's native shipping email — so customers get their tracking notification automatically, earlier than before.
The details that matter
A few non-obvious pieces we had to build:
- Bundle handling — some Shopify products are bundles that map to multiple 3PL SKUs. We added an expansion step that splits one line item into many before the API call.
- International customs — the 3PL needs HS codes and declared values for cross-border shipments. A second Sheet tab maps product categories to HS codes; the workflow looks this up per item.
- Idempotency — Shopify can send the same webhook more than once. We track order IDs that have already been submitted so the 3PL never gets a duplicate.
None of these are exotic problems, but they're invisible until you run real orders. That's why we always test with live data in staging before flipping to production.
The stack
n8n as the workflow engine, running on a $12/month VPS. Google Sheets for the SKU and HS code mappings — ops-editable, no engineering required. Shopify webhooks as the trigger. The 3PL's REST API as the destination. Slack for exception alerts.
No new software for the team to learn. No monthly platform fee per order. The brand got the full workflow export, the Sheets templates, and a Loom walkthrough. Self-sufficient from day one.
Build time: 4 days. The 3PL's API documentation was patchy, which cost us half a day. Everything else was clean.
The result
The ops lead put it well: "I only see a Slack message when something actually needs me. I don't think about orders anymore." That's what a well-built automation should feel like — not a dashboard to monitor, just a problem that stopped existing.
Still manually pushing orders to your 3PL? We can probably fix that in a week.
[ let's talk ]