Why does Shopify checkout say no shipping rates are available?
Trace a missing shipping rate from the delivery profile and stock location to the zone, the rate conditions, and the carrier quote for the exact cart that failed.
The customer got as far as entering an address, which means everything else worked. The product was visible, the variant was in stock, the cart was real — and then checkout told them there is nothing available to ship it with. This is the most expensive place in the funnel to fail, and the cause is almost never the product.
The important thing to understand first: a shipping rate is matched against a cart, not attached to a product. Rates exist inside a delivery profile, apply to a group of locations, cover a zone of countries or regions, and often carry conditions on weight or order value. A rate can be perfectly configured and still not apply to the cart in front of you.
Reproduce the exact failure before changing settings
Get the specific cart and the specific address. One product with a different quantity, or the same product plus a second item, can produce a different result, and a rate that appears when you test with one T-shirt is not proof that anything is fixed. Ask for the destination country, the postal code, and what was in the cart.
A cart fails as a whole. If one item cannot be shipped to the destination, the customer is not offered rates for the rest. A single misconfigured product can make a five-item cart look like a store-wide shipping outage.
Find out which delivery profile is being used
Most stores have one general profile and forget it exists. Then someone creates a custom profile for oversized furniture, fragile glassware, or anything shipped by a different partner, and moves a handful of products into it. That profile starts life with only the zones someone bothered to build, which is usually the domestic one.
So the first question is not "do we ship to Germany" but "does the profile governing this product ship to Germany". Those have different answers more often than most merchants expect.
Rates belong to a location group, so the stock location matters
Inside a profile, rates are defined per group of locations. If the stock that would fulfill this order sits at a location that is not in the group holding the relevant rates — a new warehouse, a store added last month, a 3PL location connected by an app — the checkout has stock and no way to price its delivery.
This is the failure that appears immediately after an operational change and seems unrelated to it. Adding a location does not add it to your existing rate configuration.
Then check the zone, and then the rate's conditions
Two separate things can be missing. The destination country may not appear in any zone in that profile, which is the simple case. Or the country is in a zone, the zone has rates, and none of them match this order.
Condition mismatches are the ones people stare past. A weight-based rate covering 0–5 kg leaves anything heavier with no option. A price-based rate starting at a minimum order value leaves small carts with nothing. If your rates were built as tiers, check that the top tier has no upper bound, or that something catches orders above it. Products with no weight set will also fall outside weight tiers that start above zero.
Carrier-calculated rates fail for their own reasons
If the rate comes from a carrier rather than a table you wrote, the configuration check above cannot answer the question. The carrier may decline to quote for an address it cannot validate, refuse a parcel over its size or weight limit, or return nothing for a remote postal code that your zone list happily includes.
Test with the customer's real address. If a static rate appears and a calculated one does not, you have separated the two, and the remaining work is with the carrier settings rather than with Shopify's zones. Shopify's reference onsetting up shipping ratesis worth re-reading whenever the profile structure itself is in question.
A fallback rate is not a fix, but it is a good alarm
Some stores add a deliberately expensive catch-all rate to a zone so that checkout never dead-ends. That is a reasonable safety net, provided you treat every order that uses it as a signal to investigate. Left alone for a year, it quietly becomes your international shipping strategy.
Once you have changed something, run the same cart and address again rather than a convenient test cart. And if the product had been unbuyable for a while, check whether it wasunavailable for an earlier reason in the chainas well — publication and stock problems hide behind each other.