Carrier-Calculated Rates Not Showing at Shopify Checkout? The Fix Checklist
Real-time carrier rates vanish at Shopify checkout more often than merchants realize, and the cause is rarely the app. Here's the checklist we run to bring them back.
Priya runs Fold and Field, a four-year-old home-textiles brand on Shopify doing around $2.3M a year. Her checkout had been quiet for months. Then one Tuesday, orders headed outside her home state started stalling at the shipping step. No rate. Just a spinner, and then a blank where the shipping options should be.
She assumed her rate app had broken. It hadn’t.
We hopped on a screen share and reproduced it in about four minutes. A new bedding bundle she’d launched that weekend had gone live with no weight set on one of its variants. That single zero was enough to collapse the rate response for any cart the variant touched. Her customers weren’t seeing a broken app. They were seeing the carrier decline to quote a box it couldn’t weigh.
When the rate box goes blank
The empty shipping step is the checkout failure that panics merchants most. The customer has their card out. The address is in, and the one thing standing between them and a paid order is a shipping option that never renders.
The instinct is to blame the carrier app, since it’s the thing that’s supposed to put a number there. So people uninstall it, reinstall it, open a support ticket, and lose two days while orders quietly leak.
Here’s what we’ve learned across dozens of these: the app is the messenger. When real-time rates don’t appear, the carrier got a request it couldn’t price, or it never got a clean request at all. The fix lives in your store’s data and configuration far more often than in the integration itself. A Shopify Community reply we quote to clients puts the developer side bluntly: make sure your app is returning a shipping rate array in the correct Shopify format. Everything upstream of that array is where the real bugs hide.
So before you touch the app, you walk the inputs.
Weight is usually the first thing lying to you
Real-time rates are a weight-and-dimensions calculation. Strip the weight and the carrier has nothing to price. That’s why the very first place we look is the product data, not the shipping settings.
The trap is that a store rarely has zero weights everywhere. It has one. One variant, added in a hurry, weight left at 0.0. As long as no cart contains it, rates render fine. The moment someone adds it, the whole cart’s rate request can come back empty, because the carrier won’t quote a shipment with an item of unknown mass.
Priya’s launch bundle was exactly this. Four variants got weights, the fifth didn’t, and that fifth was the one in the carts that failed.
The fix is boring and it works. Audit every variant for a real weight, in the right unit, and set a sane default at the template level so nothing ships at zero again. If you carry hundreds of SKUs, export the product CSV, sort by weight ascending, and the zeros float to the top. Ten minutes of cleanup that prevents the ugliest checkout failure you can have.
Zones and profiles that quietly swallow rates
Once weights are clean and rates still won’t show for some addresses, the next suspect is geography. Shopify only quotes shipping for destinations your zones actually cover.
A shipping zone is a promise: “I ship to these places, at these rates.” If a customer’s address falls outside every zone you’ve defined, Shopify has nothing to offer them, and the checkout shows no options rather than an error. It looks identical to an app failure from the customer’s side, but the cause is that you never told the store you’d ship there.
Profiles make this trickier than it sounds. Shopify’s shipping profiles let you set different rules for different products, which is genuinely useful, and also a common place for rates to disappear. A product sitting in a custom profile that has no rate defined for a given zone will blank the whole cart for that destination. Merchants forget the custom profile exists; they set it up once for an oversized item and never looked again. Shopify’s own shipping profiles documentation is worth a read if you’ve got products split across more than the general profile.
Walk the failing address against your zones first. Then confirm every product in the failing cart has a rate in whatever profile it belongs to. Nine times out of ten the gap is right there.
The plan tier nobody reads until it bites
The data is clean, the zones cover the address, and third-party carrier rates still won’t turn on. Now check what your plan actually includes, because external carrier-calculated shipping is gated.
Third-party real-time rates, the kind that pull live pricing from UPS, FedEx, or your own negotiated carrier account, are a feature Shopify attaches to higher plans or sells as an add-on. On the mid tiers you typically unlock it one of two ways: pay for it as a monthly line item, or switch your store to annual billing, which flips the feature on at no extra charge. A merchant told us on an onboarding call that they’d spent a week debugging an app that was working perfectly, when the real blocker was that their plan simply wasn’t entitled to serve external carrier rates yet.
This one has a fast diagnostic. If Shopify’s own calculated rates (its native carrier integration) show up but your external carrier account rates don’t, you’re almost certainly looking at a plan entitlement, not a bug. Check billing settings, see whether annual billing changes the offer, and weigh the add-on cost against the orders you’re losing.
Default box sizes that wreck negotiated pricing
Here’s a subtler one that doesn’t blank the rate, it just makes it wrong. And a wrong rate quietly costs you margin on every order.
When a carrier prices a shipment, it needs dimensions, not just weight, because dimensional weight often decides the cost. If you haven’t defined package sizes in Shopify, the store falls back to a default box that may look nothing like what you actually ship in. Your negotiated rates, the good ones you fought your carrier rep for, get calculated against a phantom box and come back inflated or, occasionally, too low.
The customers still see rates, so nothing looks broken. But you’re either overcharging shoppers and losing conversions, or undercharging and eating the difference on every parcel, and neither shows up in an error log.
Set your real package dimensions in shipping settings, add the specific boxes and mailers you use, and let the carrier price against reality. Priya had three package types in real life and one generic box in Shopify. Fixing that recovered about forty cents an order in shipping accuracy, which on her volume was not nothing.
When the third-party app returns nothing
If you’ve cleared weights, zones, profiles, plan, and packages and a specific rate app still returns an empty array, now it’s fair to look at the integration itself.
Rate apps talk to Shopify through the Carrier Service API, and they can fail quietly. An expired token, a lapsed API credential, a carrier account suspended over billing, any of these produce the same silent blank. The app is installed and looks fine in your admin while returning nothing to the checkout.
The move here is to check the app’s own logs or test panel, not Shopify’s. Most serious rate apps have a way to fire a test request and show you the raw response. If it’s erroring, the message usually points straight at the carrier credential. Reconnect the account, confirm the credentials are current, and re-run the test. If the app returns a valid rate array in the test but not at checkout, that’s when you loop in the app’s support with a specific reproduction, which gets you a real answer instead of a canned reply.
The pre-launch pass we run before every store goes live
Almost every case in this post is preventable with one habit: test the actual checkout, on real addresses, before and after anything that touches products or shipping.
Before a store or a big catalog update goes live, we run the same short pass. Confirm no variant ships at zero weight. Confirm every zone you claim to serve has rates in every profile a product could sit in. Place a real test order to an in-zone address and an edge-case one (a rural ZIP, or an international destination), and watch the shipping step render. Confirm the plan is entitled to the carrier rates you’re relying on. Check that your package dimensions match what leaves the warehouse.
It takes twenty minutes and it catches the blank-rate failure before a customer ever does. Shopify’s guide to setting up shipping carriers covers the entitlement side if you want the official version. The point is to make the check a ritual, not a fire drill you run after orders start disappearing.
What we keep telling clients
A blank shipping step feels like an emergency, and it is one, because a customer who can’t see a rate can’t pay. But the panic sends people to the wrong place. They tear into the app while the real cause sits one layer up, in a weight field or a zone boundary or a plan setting nobody thought to check.
The fix is almost always cheaper than the diagnosis. Cleaning a weight takes thirty seconds. Confirming a zone takes a minute. What costs you is the two days spent reinstalling an app that was working the whole time, while paid-for orders slip away at the last screen.
So we’ve turned it into a sequence instead of a scramble. Weights, zones and profiles, plan, packages, then the app, in that order, every time. It’s dull, and dull is exactly what you want when money is leaking at checkout.
Priya set a default weight on her product template, added her three real box sizes, and confirmed her plan’s annual billing already covered her carrier rates. The blank shipping step disappeared that afternoon, and the bundle that had been quietly killing carts went on to be her best seller of the quarter.
Questions we get every week
Why do rates show for some customers but not others? That pattern almost always points to zones or product data rather than the app. A customer whose address falls outside your defined zones, or whose cart contains a zero-weight item or a product in an uncovered profile, gets a blank shipping step while everyone else checks out fine. Test the specific failing address against your zones first.
I reinstalled the carrier app and nothing changed. What now? Reinstalling rarely helps because the app is usually not the problem. Work the inputs in order: variant weights, shipping zones and profiles, plan entitlement, then package dimensions. Only after all four are clean is it worth debugging the app itself through its own test panel.
Do I need a specific Shopify plan for real-time carrier rates? For external carriers like UPS or FedEx, yes, it’s gated to higher tiers or offered as a paid add-on. Switching to annual billing often unlocks it without the extra monthly fee, so check your billing settings before assuming the integration is broken.
Rates are showing but they look wrong. Is that the same issue? No, a wrong rate usually means your package dimensions aren’t set, so the carrier is pricing against a default box that doesn’t match your real parcels. Add your actual box and mailer sizes in shipping settings and the numbers come back in line.
If your Shopify checkout is dropping shipping rates and you can’t pin down why, send us the store and we’ll run the checklist with you.