appscript.dev
Blog Sheets Drive Gmail

How I automated my Shopify order fulfillment

Northwind side shop: orders to packing slips to shipping labels — hands-off from cart to mailbox.

By Awadesh Madhogaria · Published Aug 5, 2025

Northwind runs a small side shop on Shopify. It is not the main business, which is exactly why I never wanted it eating my time.

Every order used to mean the same little dance — switch to Shopify, read the order, copy the details, hand-make a packing slip, buy a shipping label, get it printed. Pleasant once; tedious by the tenth time. A side shop’s orders trickle in unpredictably, and each one interrupted whatever I was actually doing, losing ten minutes of focus several times a day.

For a side project, that interruption tax was the whole problem. The shop wasn’t worth a fragmented working day. Here is how I made it hands-off from cart to mailbox.

How the flow works

The aim was for an order to fulfil itself up to the point where I physically have to touch paper and parcels:

  1. A Shopify webhook fires on a new order.
  2. An Apps Script web app catches it.
  3. It adds a row to the Orders sheet.
  4. It generates a packing-slip PDF.
  5. It calls the carrier API for a shipping label.
  6. It emails me both PDFs to print.

The order goes from cart to “ready to print” with no input from me — I no longer visit Shopify to fulfil an order at all. The script catches each order, records it the moment it’s placed, produces the packing slip, buys the shipping label, and hands me both documents ready to print.

What slowed me down, and what stayed manual

The bottleneck turned out to be hardware, not code. The label printer takes about 8 seconds per label, and the webhook flow runs instantly regardless — only printing was slow. Per-order printing meant 8 seconds plus a context switch all day long, so I solved it by batching: I print once a day, not per order. That turned a constant interruption into a single deliberate task.

The other thing I left to a person was the same-day-versus-next-day shipping call. The script prepares everything, but a person still packs and posts, and whether to ship same-day or next-day depends on the day rather than a rule a script can hold. I left that decision to me on purpose — it’s a promise to the customer, not a step.

Was it worth it

Yes, clearly:

  • New orders fulfil themselves up to the printout — no Shopify visits.
  • One daily print run replaced a dozen interruptions.
  • The side shop runs in the background instead of fragmenting my day.

Automate to the edge of the physical world, then batch what’s left. The webhook handles the digital steps instantly; the trick was grouping the slow, physical work into one deliberate session a day.