Market-Driven Shipping: Audit and Update Your Custom App

Shopify is moving shipping into Markets from October 1, 2026. Why apps that use delivery profiles see stale data or silent no-op writes, and how to fix yours.

In this guide
  1. What changes for the store
  2. Why apps break quietly
  3. Who is affected
  4. Step 1: Audit your code
  5. Step 2: Detect which stores have moved
  6. Step 3: Fix the reader path
  7. Step 4: Fix the writer path
  8. Step 5: Test on a preview store
  9. Step 6: Confirm compatibility and roll out
  10. What to tell the store team
  11. When to have it updated for you
  12. FAQ

Your shipping integration has run for years. It reads rates to show delivery estimates, or it writes rates from a spreadsheet or an ERP into Shopify. Then a store gets upgraded, and something quietly goes wrong: the estimates no longer match checkout, or the sync reports success while the live rates do not change.

The cause is market-driven shipping. Shopify is moving merchant shipping settings out of delivery profiles and into Markets. Shopify’s changelog says the rollout to merchants starts on October 1, 2026, and all merchants are expected to be on it by July 1, 2027.

This guide explains what changes, why an app that touches merchant-owned delivery profiles breaks without throwing errors, and how to audit and update a custom app or integration.

What changes for the store

Today, merchant shipping is set up as a chain: delivery profile → location group → shipping zone → rates. With market-driven shipping, Shopify’s feature preview guide describes a new chain: market → shipping options → rate variations by product and location conditions.

Shopify’s help center article on what’s changing with shipping adds the details merchants will notice:

Area Before With market-driven shipping
Where shipping is managed Shipping profiles and zones in Settings > Shipping and delivery Shipping options per market, in Markets
Product-specific rates Products assigned to a profile Rates apply to all products or to specific collections, not single products or variants
Several matching rates in one option Depends on profile setup Only the highest matching rate is charged
Split shipping Could be off Turned on for every upgraded store
Staff who edit shipping Existing staff access Need the Markets permission, which is not granted automatically

Existing profiles and zones are migrated automatically. Shopify creates unpublished [Shipping] collections to match old profile groupings and may add sub-region markets. Merchants can see which system they are on in Settings > Shipping and delivery: shipping profiles mean the old system, a Shipping options section means the store has been upgraded. After upgrading, there is an opt-out window to switch back, but the help center does not say how long it lasts.

Why apps break quietly

On July 1, 2026, Shopify published a deprecation notice: merchant-owned delivery profile APIs are deprecated for market-driven shipping. It lists these Admin GraphQL fields and mutations, when used on merchant-owned profiles:

  • deliveryProfile, deliveryProfiles, deliveryProfilesCount
  • deliveryProfileLocationGroup, deliveryProfileLocationGroups
  • deliveryProfileCreate, deliveryProfileUpdate, deliveryProfileRemove

On a store that uses market-driven shipping, they “no longer reflect the shop’s live merchant-owned shipping setup.” In practice:

  • Reads may return a stale snapshot of the old configuration.
  • Writes may succeed without errors but will not update the merchant’s live shipping settings.

That second point is the dangerous one. Your logs show green, your sync job reports success, and checkout keeps charging the old rates. Nobody finds out until a customer or the finance team does.

There is one exception. App-owned delivery profiles, the ones your app created for itself, are unaffected and continue to work as before.

Who is affected

Use this table to place your app or integration.

What your app does Affected? Path
Only manages delivery profiles it created itself No No changes needed
Reads merchant shipping rates (delivery estimates, feeds, quotes, reports) Yes Reader path
Writes merchant shipping rates (sync from an ERP, spreadsheet or rate table) Yes Writer path
Moves products between merchant profiles Yes Writer path; rates now follow collections
Provides carrier-calculated rates at checkout Check Shopify says app-provided rates still appear alongside merchant rates; test on a preview store

The paths come from Shopify’s upgrade guide for market-driven shipping.

Step 1: Audit your code

Search every GraphQL operation in the app or integration for these names:

deliveryProfile
deliveryProfiles
deliveryProfileCreate
deliveryProfileUpdate
deliveryProfileRemove

Shopify’s rule for the audit: any operation that targets a profile your app did not create is a merchant-profile interaction. List each one with three facts: what it reads or writes, which feature depends on it, and which stores use that feature.

Do not forget the places code hides: scheduled jobs, webhook handlers, admin scripts someone runs by hand, and middleware such as an integration platform that calls Shopify on your behalf. If you still have REST calls to shipping endpoints, plan those too; our REST to GraphQL migration guide covers that move.

Step 2: Detect which stores have moved

For a while, some of your stores will be on the old model and some on the new one. Your app has to handle both. Shopify’s upgrade guide says to check the marketDrivenShipping field on the ShopFeatures object, then branch:

  • marketDrivenShipping is false: keep the existing delivery profile path.
  • marketDrivenShipping is true: use the new reader or writer path below.

Check it at run time, not once at install. A store can be upgraded at any point during the rollout, and can opt out again during the opt-out window.

Step 3: Fix the reader path

If your app reads merchant shipping rates, Shopify offers two options.

Option Use when What to read Scope
A. Contextual Product Feeds (recommended) You are a sales channel or can become one Delivery option estimates per variant read_product_listings
B. Markets API You need the merchant’s configuration itself The delivery field on the Market object; deliveryProfiles on stores not yet upgraded read_markets

Remember the new rules when you interpret what you read. Rates attach to collections, not single products, and when several conditions in one shipping option match a cart, the highest rate is charged rather than the sum. Any estimate logic that added rates together needs to change.

Step 4: Fix the writer path

If your app writes rates, the two options are:

Option How Scope
A. App-owned delivery profile (recommended) Create and update your own profile with deliveryProfileCreate and deliveryProfileUpdate, optionally with coversAllItems. Stop writing to merchant profiles No extra scopes
B. Markets API On upgraded stores, use marketCreate and marketUpdate; on legacy stores, keep writing deliveryProfiles read_markets, write_markets

Option A has a trade-off to explain to the merchant. Shopify’s preview guide notes that merchants cannot edit the details of app-owned rates, though they can enable or disable them. If your team edits rates by hand in the admin after the sync runs, agree who owns which rates before you switch.

Whichever option you choose, add a read-back check after every write. If the value you read back does not match what you wrote, log it as a failure. That one check turns a silent no-op into an alert. It is the same principle as the checklist in Shopify integrations that don’t break.

Step 5: Test on a preview store

Shopify’s testing steps:

  1. Create a development store with the Market-driven shipping feature preview enabled. You cannot add the preview to an existing store.
  2. Run your read and write paths against that store and check the results.
  3. If you are moving writes to an app-owned profile, run the new path alongside the existing integration and confirm the rates are correct.

Add your own cases on top: a cart with products from two locations, a product in two shipping collections, a market with sub-regions, and a store that has opted out again. Check what checkout actually charges, not just what the API returns.

Step 6: Confirm compatibility and roll out

The upgrade guide says that from October 1, 2026, newly installed apps not marked compatible show a warning, and the help center says stores that rely on incompatible shipping apps may be upgraded later, with a banner flagging them. For public apps, Shopify offers a compatibility self-attestation form linked from the upgrade guide, and also tries to detect compatibility automatically.

For a custom app on a single store, the practical rollout is:

  1. Ship the code with both paths and the marketDrivenShipping check.
  2. Watch the read-back checks for a week on the current model.
  3. Once the store is upgraded, compare checkout rates against your expected rates for your top shipping cases.
  4. Remove the old merchant-profile path after July 1, 2027, when Shopify expects every store to be on market-driven shipping.

What to tell the store team

A few changes affect people, not code:

  • Staff who manage shipping need the Markets permission after the upgrade. Review it alongside your other staff permissions.
  • Product-level rate rules become collection-level. Check the auto-created [Shipping] collections make sense.
  • A missing rate at checkout can block orders. The help center points to app compatibility as the first thing to check.

When to have it updated for you

If you wrote the integration yourself and have the code, the steps above are a few focused changes and a good test pass. If the developer who built it has moved on, or the app also runs on an old API version, it may be worth combining this work with a broader API version upgrade. The team behind Storefleet Store Ops audits and updates custom apps and integrations like this; our custom solutions page explains what we take on.

Other 2026 changes may hit the same app. If your checkout logic used Scripts, read migrating Shopify Scripts to Functions. If tracking on your Thank you page went quiet, see the Thank you and Order status page upgrade.

FAQ

When will my store move to market-driven shipping?

Shopify’s rollout to merchants started on October 1, 2026, and all merchants are expected to be on it by July 1, 2027. Stores move at different times. Where it is offered, a store can opt in early with Get early access in Shipping and delivery.

Will my app get an error if it writes to a merchant delivery profile on an upgraded store?

Not necessarily. Shopify says writes may succeed without errors but will not update the merchant’s live shipping settings. That is why a read-back check after each write matters.

Do app-owned delivery profiles still work?

Yes. Shopify says app-owned delivery profiles are unaffected and continue to work as before. App profiles can now also target all products, and adding a product to an app profile no longer affects the merchant’s configuration.

How do I know if a store uses market-driven shipping?

In the code, check the marketDrivenShipping field on ShopFeatures. In the admin, open Settings > Shipping and delivery: a Shipping options section means the store is upgraded, shipping profiles mean it is not.

Can I test before my store is upgraded?

Yes. Create a new development store with the market-driven shipping feature preview enabled. The preview cannot be added to an existing store.

Sign in to your workspace

Each workspace has its own address: <workspace>.getstorefleet.com. Enter your workspace name, or paste its address, and we take you to its sign-in page.

You will go to

New to StoreFleet? Create a workspace