A merchandiser reinstalls the live-rate shipping app before a campaign weekend. The app page says installed. Checkout still opens. Then the shipping step loads with no carrier options at all, only a leftover flat rate or an empty list.
Nothing errors. Nobody gets an alert.
Shopify explained why on 26 June 2026. From Admin API version 2026-10, creating a carrier service registers it and stops there. It no longer drops the service into the General shipping profile. That version became the latest stable release on 1 October 2026, so fresh installs are hitting it now.
I call this the unplugged rate.
Think of a new lamp. The delivery arrives, the box is open, the lamp is on the table. It still gives no light until someone plugs it into the wall. For years Shopify plugged the lamp in for you, in General at least. On 2026-10 it leaves it on the table.
This piece is about finding every unplugged rate before a buyer does. Three checks do it: list the apps, check the plugs, place a test order.
Introduction
This article teaches that three-check inventory after the 2026-10 Admin API change. Confirming UK VAT on EU orders after the 29 September tax product move belongs in Shopify Tax Checklist: Confirm UK VAT on EU Orders Over £135. Peak gates that include fulfilment and support belong in A Shopify Black Friday Readiness Checklist for Brands That Already Scale.
This piece stays on carrier services. Attach the rate, then prove it at checkout.
| Checklist row | What you record | Pass criterion | Owner |
|---|---|---|---|
| Live-rate shipping app | App name, vendor contact, Admin API version, create path | Every app that can return a checkout rate is named | Ops / tech |
| Plan eligibility | Grow add-on, Advanced, Plus, or built-in Shopify Shipping only | The plan can show third-party calculated rates if you need them | Commerce |
| Profile and zone attach | General plus extra profiles, each zone, carrier-or-app rate present | Every zone that should show a live rate has the service attached | Ops |
| Test checkout | One cart per zone, plus a product that lives only in an extra profile | The expected carrier or app line appears on the shipping step | Commerce |
| Backup and name clash | Backup rate, leftover flat rate with the same title | Backup shows only on live-rate failure; titles do not hide the app line | Ops / tech |
| Vendor follow-up | Whether 2026-10 create now writes the profile, or staff must attach it | Written path for the next install or reinstall | Tech / vendor |
What Shopify actually changed
The developer changelog is plain about it. Starting with GraphQL Admin API version 2026-10, creating a carrier service no longer adds it to the shop's General shipping profile.
Both create paths are affected. That means GraphQL carrierServiceCreate and REST POST /admin/api/{version}/carrier_services.json. On earlier versions, an active API carrier service went into eligible zones on General as soon as create succeeded. On 2026-10 and later, create only registers the service. No profile, no zone.
The 2026-10 release notes say the same thing in the shipping section: set up carrier-calculated rates in a shipping profile before you expect them at checkout.
Older supported API versions keep the automatic add until they are sunset. That explains the confusing part. A vendor still on 2026-07 can look fine on one shop and fail on a fresh install that already calls 2026-10.
Same app. Different result.
Shopify gives two ways to plug the rate in after create. The app can send the merchant into admin to add the carrier-calculated rate on the right profile. Or the app can write the rate itself through the shipping profile APIs. Either works. Both need someone named as the owner. An install that only stores a callback URL will pass the app page and still fail the shipping step.
When it bites
Three moments create an unplugged rate, provided the app now calls 2026-10:
- a first install on a new shop
- a reinstall after a token rotation
- a vendor migration that recreates the carrier service
Checkouts that already show live rates sit outside the changelog's create story. Re-test after any of those three moments anyway. The failure is silent: checkout loads, the shipping step is empty, and Settings still lists the app.
Check the plan first
Sometimes the rate was never allowed in the first place. Shopify Help says third-party carrier-calculated shipping is included on Advanced and Plus. Grow stores can add it for an extra monthly fee or by switching to annual billing. Other plans do not include it.
Built-in Shopify Shipping carrier rates on supported fulfilment locations are a separate matter. They can appear on all plans.
If the store cannot buy third-party calculated rates, 2026-10 is the wrong diagnosis. Settle the plan with Choosing the Right Shopify Plan and come back once the plan can show the rate.
Know whose profile it is
App-owned delivery profiles keep using the delivery profile API. That holds even on shops that later opt into market-driven shipping. Merchant-owned profiles are the ones the changelog now leaves empty after create. Write down which kind you run before asking a vendor to "just enable rates".
Functions or a carrier callback
Scrumbles is a health and wellness subscription brand. Its fulfilment cost already varied by English postcode. We implemented Shopify delivery functions so checkout could allocate those zones in a stack the team owns.
That suits a brand that controls its own rate table. A carrier callback suits a quote that has to come from a 3PL or a carrier account you would rather not copy into Functions.
Either way, the buyer still needs to see a shipping option.
Check one: list every app that can quote shipping
Start in Settings, then Apps. Skip the theme footer. Write one row per install that calculates shipping. Typical rows are the carrier account connector, the 3PL live-rate app, a subscription shipper that injects a rate, and any custom app that registered a callback.
Each row needs the vendor contact and the Admin API version the vendor ships today. Add whether create still writes the profile or only registers the service.
Then ask the vendor a direct question. Which of Shopify's two paths do you use: a merchant prompt in admin, or an attach through the shipping profile APIs? If they cannot name it, assume your staff plug in the rate after every install.
If the vendor can show it, add the callback URL status and the last successful rate request. A healthy callback with no profile attach is the unplugged rate. A dead callback is a different ticket.
Note which products each app should cover. A bulky-item profile, a subscription box profile and the General catalogue can each miss the attach on their own.
Timing makes this worse. YuMOVE moved more than 300,000 subscription customers while support tools and storefront performance still had to hold. Swap a shipping app in the middle of a migration like that and an empty shipping step gets reported as "checkout is broken". The real cause, a profile never written, stays hidden.
Check two: look at every plug
Open Settings, then Shipping and delivery. Go one profile at a time.
Shopify Help still documents shipping profiles as the way to give specific products and locations their own rules. Shipping options by market roll out separately and migrate existing rates when a shop is upgraded.
On each profile, open every zone that should show a live rate. Confirm there is a rate set to use a carrier or app to calculate rates. Confirm the selected service matches the app on your list. A zone holding only last year's flat "Standard" rate will hide the problem until a buyer in that country reaches checkout.
Do the extra profiles too.
The old behaviour only ever plugged the service into eligible zones on General. Extra profiles never got that help. A mattress, a hazardous SKU or a gift-box bundle on its own profile can stay blank after a "successful" install, even on older API versions.
Screenshot the profile list before you touch anything. You will want it after a vendor patch.
Markets that already moved to shipping options by market need the same look at the market's shipping options. Duties, currency and catalogue gaps on those markets are covered in Shopify Markets Black Friday Traps: Duties, Currency, and Catalog Gaps. Here the only question is whether the carrier or app rate is attached.
Check three: place a test order
A settings page is a claim. Checkout is the proof.
Place a test order to every zone on your list. Use one product from General and one that lives only in an extra profile. Use a real destination postcode, because some callbacks ignore a half-filled address.
Write down what the shipping step shows: the carrier or app title, the price, and whether a backup rate also appeared.
Backup rates can fool you. Shopify Help says a backup shipping rate displays when calculated rates fail and no other eligible rate is available. Flat rates on the same destination always display when eligible. So a leftover flat option can sit next to the live rate, or in older behaviour hide a duplicate name. Developer reports this month describe both rates showing when titles match.
Record the titles you actually see. That is how you tell an unplugged rate from a name clash.
If the shipping step is empty while add-to-cart and the information step look healthy, stay here until the attach is proven. Payment and step failures after rates appear are a different problem, covered in How to Fix Shopify Checkout Abandonment When Your Funnel Looks Healthy. Shop Pay and agentic checkout handoffs have their own list in Shopify Shop Pay Delegated Payments: What Merchants Should Inventory.
Keep the test-order screenshots with the vendor's API version. That small packet is what you send when the app page says installed and checkout still has no live rate.
What this does not change
The Carrier Service callback remains the documented way for an app to return live rates once the service is active and attached. Shopify's 26 June note covers the automatic add into General, nothing more. Read it as the end of callbacks and you could start a Functions rebuild you do not need this week.
Market-driven shipping is a separate Markets programme. Shopify said merchant-owned shipping configuration is moving onto Markets. The feature preview opened on 1 July 2026 and merchant rollout started on 1 October 2026. The stated default date is 1 July 2027. App-owned delivery profiles keep the delivery profile API. Keep that upgrade on its own list.
Delivery option generator Functions are still a sound way to own rate logic, as on Scrumbles. Pick Functions when you want the quote inside code you maintain. Pick a carrier service when the quote has to come from a carrier or 3PL. 2026-10 leaves that architecture choice with you, and only stopped plugging the lamp in.
Conclusion
Write down who plugs it in next time, and the next reinstall will not go dark. You can now list each live-rate shipping app, confirm the carrier-calculated rate on every profile and zone you sell into, and prove the line on a test checkout after Admin API 2026-10.
If a 3PL app, a Markets option and a merchant-owned profile all write to the same shipping step, or your vendor cannot say whether 2026-10 create attaches the rate, book a shipping and integrations review or a stack assessment.



