Shipping rates not showing at checkout › Market-driven shipping
Shopify checkout diagnosticsMarket-driven shipping: what can break at checkout
Shopify is moving every store's shipping configuration out of delivery profiles and into Markets. Rollout started on 1 October 2026. For most stores it will be uneventful. The risk is concentrated in one situation: you switch before the apps that touch your shipping are ready — and nothing tells you they have stopped working.
The timeline
| Date | What happens |
|---|---|
| July 2026 | Feature preview for developers. Admin API version 2026-07 adds market-level shipping configuration. |
| 1 August 2026 | The merchant-owned delivery profile APIs are deprecated for stores on market-driven shipping. |
| 1 October 2026 | Merchant rollout begins. Existing merchants can opt in. Merchants installing an app not yet marked compatible see a warning. |
| 1 July 2027 | All merchants are on market-driven shipping. |
What actually changes
- Shipping options attach to markets. Instead of zones inside delivery profiles, each market carries its own shipping options.
- Product-specific rates become conditions. Where you used a separate profile for heavy or special items, rates now vary by product and location conditions inside a single option.
- The delivery profile disappears as a merchant concept. Profiles created by apps remain, and their products can be included in your market rates.
- App rates are on/off for you. You can enable or disable an app's rates on your store, but not change their values or configuration.
The failure that makes no noise
Apps that read or edit your shipping settings — rate tables, shipping rules, ERP and 3PL syncs that push rates into Shopify — have been doing it through the delivery profile API. For a store on market-driven shipping, Shopify's developer changelog is explicit about what happens to an app that has not been upgraded:
“Reads may return a stale snapshot of the legacy configuration, and writes may succeed without errors but will not update the merchant's live shipping settings.”
Read that from the merchant's side. The app's dashboard keeps showing your old rates, because it is reading a frozen copy. When it pushes a change, it gets a success response, so it reports success to you. Your checkout never receives the change. Nothing errors, anywhere.
Shopify's own guidance to developers is that it will not move a store automatically until the store's apps are confirmed compatible, so breakage only happens if a merchant opts in manually before an app has been upgraded. Which is exactly the merchant who reads the announcement and switches early.
Before you opt in
- List every app that touches shipping. Not just rate apps: anything that syncs rates, edits profiles, or assigns products to profiles.
- Ask each vendor one question: is the app marked compatible with market-driven shipping? Developers mark compatibility through a form Shopify provides, so the answer is yes or no, not "we're looking into it".
- Record what buyers see today. For each country you sell to, note which delivery options a cart gets, with their prices. This is your baseline; without it you cannot tell what changed.
- After switching, check the same carts again — twice, a few minutes apart, because configuration changes take time to settle.
Checking from the buyer's side
First rule out the cause that has nothing to do with shipping: whether the product is sellable in the destination's market at all. The quickest way is our free store check.
Then ask the Storefront API for the delivery options a real cart would get.
This creates a throwaway cart — oneTimeUse keeps the address from
being saved — and returns what the checkout would offer:
mutation($input: CartInput!) {
cartCreate(input: $input) {
cart {
deliveryGroups(first: 10) {
edges { node {
deliveryOptions {
title
estimatedCost { amount currencyCode }
}
} }
}
}
userErrors { message }
warnings { message }
}
}
{
"input": {
"lines": [{ "merchandiseId": "gid://shopify/ProductVariant/…", "quantity": 1 }],
"buyerIdentity": { "countryCode": "DE" },
"delivery": { "addresses": [{
"address": { "deliveryAddress": {
"address1": "Unter den Linden 1", "city": "Berlin",
"zip": "10117", "countryCode": "DE"
}},
"selected": true,
"oneTimeUse": true,
"validationStrategy": "COUNTRY_CODE_ONLY"
}]}
}
}
Two practical details. Use a plausible address rather than a country code alone: for countries with provinces, such as the US and Canada, a bare country code is not enough to price shipping. And rates from carrier-calculated services are not returned by this simple form of the query; it covers the rates you configure in Shopify itself.
Run it per country before switching, save the output, run it again after. Any option that disappears, or changes price without you meaning it to, is your answer.
Related
Last checked 2 October 2026 against Shopify's developer changelog (“Merchant-owned delivery profile APIs are deprecated for market-driven shipping”, “Market-driven shipping Admin API”) and the guide “Upgrade your app for market-driven shipping”. The Storefront query above is the one we run against a live store.