Playbook · 3PL tracking writeback
3PL already shipped. Shopify still says Unfulfilled.
Written for a Shopify DTC owner who can open the warehouse portal — ShipBob, ShipMonk, ShipHero, Deliverr, or a regional 3PL — and see a tracking number, then open the same order in Shopify and still see Unfulfilled, empty Timeline, no carrier, no shipping confirmation. The box left. Shopify never heard. This is a fulfillment writeback playbook. Not an aging-unfulfilled Slack ping. Not a “where is my order” inbox loop. Not a branded tracking widget. No ticket-cut number, no recovered-revenue claim, no invented case studies.
Nico at Latch AI Ops · Sep 2, 2026 · ~8 minute read
Buy the 72-hour install — $997Unfulfilled order alertWISMO playbookWISMO app vs installMerchant FAQ
01
This is not an unfulfilled alert. Not a WISMO loop. Not a tracking app.
Three other playbooks on this site look adjacent and are not this job. Unfulfilled order alert is internal silence: paid orders sit Unfulfilled because nobody packed them, and Slack never rang. On this page the warehouse already packed. The 3PL already has a tracking number. Shopify is the system that never got the fulfillment. Pinging ops that the order is “still sitting” is the wrong diagnosis — the box is on a truck.
WISMO is customer-facing: shipping mail, the order status page, and a saved inbox reply for “where is my order.” Use that after tracking exists in Shopify. If you answer WISMO by pasting a 3PL tracking URL while the order stays Unfulfilled, you taught the customer to email you every time. The writeback is the missing step.
WISMO app vs install is a storefront widget — branded tracking page, order lookup, chat bubble. A tracking app will still show nothing if Shopify has no fulfillment to look up. Do not buy a bubble to hide a dead 3PL pipe.
Stay on this page if the fact is: the 3PL shipped, Shopify still says Unfulfilled, and tracking never wrote back. Walk native Shopify fulfill first. You already pay for the 3PL and for Shopify. You do not need a fourth dashboard to land a tracking number on an order.
02
3PL shipped. Shopify still Unfulfilled.
Open the 3PL portal. Find the order. Status is Shipped, Packed, or In transit. A carrier and a tracking number exist. Then open Shopify admin → Orders → that order. Fulfillment status is still Unfulfilled (or Partially fulfilled with the 3PL line missing). Timeline has no “Fulfillment created.” The customer’s order status page has no tracking. Native shipping confirmation never fired, because Shopify never saw a fulfill.
That split is the whole job. The warehouse is not late. Flow is not “broken.” Klaviyo Fulfilled Order did not miss a metric — there was no Shopify fulfillment for the metric to ride. A WISMO ticket is a late, expensive substitute for a Fulfillment record that should have landed when the 3PL bought the label.
Common ways this gap hides. You assumed the 3PL “syncs automatically” because it did last month. You assumed a tracking email from the 3PL’s own brand counted as Shopify shipping confirmation. You assumed Mark as fulfilled in the 3PL UI wrote to Shopify. You have the 3PL app installed, and the token or location map died quietly.
03
Prove it with two screens before you rebuild anything.
Screen one: 3PL order page. Copy the tracking number, the carrier, the ship date, and the SKU that left. If the 3PL has no tracking, you are not on this page — the warehouse has not shipped, and the aging-unfulfilled playbook at /unfulfilled-order-alert is the one that pings ops.
Screen two: Shopify order. Scroll Timeline. Look for Fulfillment created, a tracking URL, or a 3PL app note. Open the Fulfillments card. If it is empty, writeback never happened. If a fulfillment exists with no tracking number, the 3PL created a fulfill and skipped the tracking fields — still this page, smaller hole. If a fulfillment exists with tracking and the customer still got no mail, leave this page and walk shipping confirmation not sending.
Also check Settings → Locations. The 3PL should own a Shopify location. If the order was assigned to “Shop location” or a retail POS location the 3PL cannot fulfill, the 3PL may have packed a copy of the order in their own system without permission to write a Shopify fulfillment. That is a map problem, not a packing problem.
04
Why tracking never wrote back.
Label bought outside Shopify. The 3PL printed on their own carrier account and never called Shopify’s Fulfillment API. The box has a real tracking number. Shopify has none. Fix: land the fulfill natively (next section), then turn on the 3PL’s “write tracking to Shopify” toggle — every 3PL names it differently, all of them mean the same write.
App token or install died. Apps → the 3PL app. If it is uninstalled, pending, or “needs reauthorization,” every shipment after that date will sit Unfulfilled in Shopify even when the warehouse is current. Reconnect. Do not install a second 3PL connector “to be sure.”
Location mismatch. Shopify sent the order to a location the 3PL does not fulfill. The 3PL still received a CSV, an email, or a mirrored SKU and packed it. Shopify will not accept a fulfillment from an app that does not own that location. Map the 3PL to the location that actually ships, and assign new orders there.
SKU / barcode mismatch. The 3PL fulfilled a SKU they invented, or a barcode that is not the Shopify variant SKU. Their portal shows shipped. Shopify still waits on the original line item. Match SKUs one-to-one. A renamed SKU in the 3PL catalog is a silent writeback killer.
Hold, payment, or partial. A fulfillment hold, a high-risk hold, or an unpaid remainder can block the 3PL from writing. Partials: the 3PL shipped one line and Shopify still shows Unfulfilled on the rest — that is expected. The shipped line should still have its own fulfillment with tracking. If even that line is blank, it is the same writeback hole.
Do not confuse this with native shipping mail being off. If Timeline already shows Fulfillment created and the customer got nothing, that is shipping confirmation not sending— template off, or Notify customer of shipment unchecked. Writeback is upstream of that mail.
05
Land tracking with a native Shopify fulfill. Today’s orders first.
Shopify admin → the order → Fulfill item. Paste the tracking number from the 3PL. Pick the carrier. Check Notify customer of shipment. Fulfill. Timeline should now show Fulfillment created. The order status page should show tracking. Native shipping confirmation should queue. That is the native write. It is not a workaround. It is what the 3PL app was supposed to do.
Do not paste the 3PL tracking URL into a one-off customer email and leave the order Unfulfilled. You will answer the ticket once and train every future customer to skip the status page. Do not mark fulfilled without tracking “to clear the queue” — you just created a fulfilled order with no carrier, and WISMO starts the next morning.
Do not install a branded tracking widget to display a number that does not exist on the order. That is the WISMO app vs install fork, and it will still show empty. Do not build a Shopify Flow that emails the customer “your 3PL has tracking” by scraping a portal. Flow cannot see a fulfillment that was never created.
Catch up the backlog the same way: 3PL shipped + Shopify Unfulfilled → native fulfill with tracking → notify. One afternoon of that is cheaper than a monthly “tracking sync” app that posts the same Fulfillment Shopify already knows how to accept.
06
Fix location, SKU, and the 3PL app so the next one writes back.
Reconnect the 3PL Shopify app. Confirm it is installed, authorized, and set to create fulfillments (not just import orders). Turn on write-tracking / notify-Shopify / auto-fulfill — whatever that 3PL’s settings page calls the Fulfillment create. One app. One pipe.
Map locations. Settings → Locations: the 3PL location exists and is active. The 3PL app is allowed to fulfill that location. Incoming orders that the 3PL should ship are assigned there — not to a retail location, not to “Shop location” leftover from before you outsourced.
Match SKUs. Shopify variant SKU equals 3PL SKU. No extra prefix, no barcode-only match unless the 3PL is explicitly set to barcode. A catalog rename last quarter is the usual silent break.
Prove the pipe. Place one cheap paid order. Let the 3PL receive it, pack it, buy the label. Do not fulfill it yourself. Wait for Shopify Timeline: Fulfillment created, tracking number, carrier. If that run never appears, the 3PL support thread is “your app did not create a Shopify fulfillment,” not “Shopify is broken.” If it appears and the customer still got no mail, walk shipping confirmation not sending. If tracking exists and the same “where is my order” question still loops in inbox, that is WISMO or repetitive support, not a louder 3PL dashboard.
07
When to stay DIY vs pay $997.
Stay DIY if you can spend one afternoon on the list above: prove the split with two screens, land today’s tracking with a native Shopify fulfill, reconnect the 3PL app, map the location, match SKUs, and watch one test order write Fulfillment created. No agency required. Short answers also live on the merchant FAQ. Related: unfulfilled order alert, WISMO playbook, WISMO app vs install, shipping confirmation not sending.
Pay for help when the work is not this one writeback — it is connecting the stack you already have so ops exceptions land in a channel you already check, lead capture is not dying in DMs, and checkout follow-up is one live workflow instead of a 3PL portal plus a native toggle you forgot plus a Klaviyo draft. That is the Latch AI Ops install.
What $997 USD one-time buys: lead capture on the live store, ops alerts in a channel you already check, and a checkout-ready workflow. 72 hours after collaborator access, not after payment. One live Shopify store. Access plus a delivery thread. Store URL collected at checkout. Not a SaaS seat, not a 3PL migration, not a Shopify Flow rebuild, not a Klaviyo rebuild, not a Gorgias implementation, not a support VA, not a brand or theme job.
Other shops’ public ranges, not testimonials: a Shopify Flow or recovery-app install typically runs $500–$2,500. A Klaviyo-only flow rebuild typically runs $2,000–$5,000. $997 is the cheap end of that work, sold as a 72-hour install of three systems — not as recovered checkout revenue or a ticket-cut number.
What it does not buy: recovered checkout revenue, a lift in conversion, fewer WISMO tickets, a 3PL SLA, or a case study. Latch AI Ops has not published customer proof because there are no customers yet. You are buying the install.
Checkout is on Whop. Operator is Nico. United States offer. You can revoke collaborator access after handoff. We do not take owner passwords.