Shopify and ShipStation: a guide for small stores
Shopify and ShipStation are a common pair for a reason: Shopify takes the orders, ShipStation buys the labels at good rates, and the connection between them handles the busywork. It also has gaps, and they tend to show up on your busiest day. I've written about each one separately. This page puts them in one place: how the connection works, what goes wrong, and where each fix lives.
How the connection works
- Orders flow into ShipStation. New paid orders import with the address, items, weights and the customer's note.
- You pick, pack and buy labels in ShipStation. Pick lists and packing slips print from there.
- Tracking flows back. When you ship, ShipStation marks the order fulfilled in Shopify with the tracking number, and Shopify emails the customer.
- Products match on SKU. Anything that syncs product details between the two, including stock and bin locations, relies on the SKU being identical in both.
Most problems come from the edges of that loop: data that never makes the trip, orders that don't qualify to import, and products that don't match.
The common problems, and where each one is fixed
| What you see | What's going on | The fix |
|---|---|---|
| Bin locations don't print on the pick list | Bins usually live in a Shopify product metafield, and the connection doesn't carry metafields | Get bin locations onto ShipStation pick lists |
| The pick list zig-zags around the stockroom | It's sorted by name or SKU, not shelf | Sort the pick list by bin |
| An order is missing from ShipStation | It's still a draft, it's older than 90 days, or it's closed | What doesn't sync, and why |
| Order tags, gift notes or delivery dates aren't there | They're off by default, and there are only three custom fields | Map them in the store settings |
| Every order needs the same service, box or weight picked by hand | No automation rules or product defaults yet, or rules written before the data they need arrived | Set up automation rules |
| Customs values look too high | Automatic discounts and the order's currency don't come across | Check declared values on international orders |
| A product won't sync, or the wrong one updates | Blank, duplicate or slightly different SKUs | Keep SKUs matched |
Set it up right the first time
- Clean the SKUs first. Every variant gets a unique SKU in Shopify, in one pattern. It's the foundation for everything else. The one-hour audit.
- Decide where bins live. One product metafield in Shopify, in a format that sorts (A02-03-1, not A2-3-1). Shopify stays the source; ShipStation gets a copy.
- Choose your three custom fields. Map only the order data your team acts on: usually tags, a delivery date, or the fraud risk for a hold rule.
- Decide about closed orders. If you ever ship after closing an order in Shopify, turn on importing closed orders, or you'll hunt for them later.
- Run one real order end to end. Import, pick, pack, buy a label, ship, and check the tracking lands in Shopify and the customer's email.
When to pick in one tool and ship in another
ShipStation is built around the label. If your trouble is on the floor (people picking the wrong variant, temp staff who can't log in, nothing checked before the box closes), it can make sense to pick and pack in a tool built for that and keep ShipStation for labels. I build Pickadoodl for that job, and I wrote an honest comparison with ShipStation's pick list, including when ShipStation alone is enough.
If you'd rather have it just work
The bin location gap is the one I'm asked about most, so I built a sync that copies each product's bin from Shopify into ShipStation's Warehouse Location and keeps it current: ShipStation bin location sync. For anything else in the loop that's manual, slow or breaking, tell me about it.