Skip to main content

Upgrade your app for market-driven shipping

Shopify is introducing market-driven shipping, a new model that lets merchants manage shipping rates inside each market they sell to. Merchants get more control over how rates combine at checkout, and can configure Point of Sale and B2B shipping separately. As part of this rollout, the existing deliveryProfile and deliveryProfiles Admin API surfaces are being deprecated for merchant-owned shipping configuration.

If your app reads or writes Shopify's delivery profile APIs, you may need to update your integration before merchants move to the new model. This guide describes what's changing, who needs to take action, and the upgrade paths available to you.

The Market-driven shipping feature preview is available so you can test your integration on a dev store before existing merchants begin opting in. Select it when creating a development store, or enable it on an existing dev store from the developer dashboard.


Today, every shop has one or more delivery profiles that hold zones, locations, and rates. Apps interact with shipping through the deliveryProfiles / deliveryProfile Admin API in two ways:

  • App-owned delivery profiles. An app creates, reads, and modifies its own delivery profile via deliveryProfileCreate and deliveryProfileUpdate.
  • Merchant delivery profiles. An app reads from or modifies the merchant's delivery profiles — for example, to add zones and rates on the merchant's behalf.

Under market-driven shipping:

  • Merchant shipping configuration moves to Markets. Merchants configure rates inside each market they sell to, with product and location conditions determining which products and locations each rate applies to. The merchant-facing concept of a delivery profile goes away.
  • App-owned delivery profiles still exist, and are more flexible. Apps that create their own delivery profile keep using the existing APIs. An app's profile can now use coversAllItems to cover all items in the shop, rather than being limited to a specific set of products. Products in an app profile can also be included in a merchant's market rates, so the same products may receive rates from both the app and the merchant's markets.
  • Merchants can no longer edit app rates. Merchants can enable or disable an app's rates on their store, but they can't change rate values or configuration. This prevents merchants from overwriting app rates.
  • deliveryProfiles and deliveryProfile are being deprecated for merchant-owned shipping configuration. They continue to work during the transition for shops that haven't moved to market-driven shipping.

Anchor to Who needs to take actionWho needs to take action

The table below maps app behavior to recommended action. If your app spans multiple behaviors, follow the path for each.

If your app...Action required
Only creates and manages its own app-owned delivery profiles, and does not read merchant profilesNo changes required. Your integration continues to work on shops that move to market-driven shipping.
Reads merchant delivery profiles (for example, to surface rates or sync with external systems)Update your read path. See Upgrade path: readers.
Creates or modifies the merchant's delivery profilesUpdate your write path. See Upgrade path: writers.

If you're not sure which case applies to your app, audit your app's GraphQL operations for uses of deliveryProfile, deliveryProfiles, deliveryProfileCreate, deliveryProfileUpdate, and deliveryProfileRemove. Anything that targets a profile not created by your app is a merchant-profile interaction.


Anchor to Upgrade path: readersUpgrade path: readers

This section applies to apps that read merchant shipping configuration. If your app also reads app-owned profiles, that path is unchanged — continue to use deliveryProfile / deliveryProfiles.

You have two options for reading merchant shipping configuration.

Contextual Product Feeds are available to apps that operate as a sales channel. If your app is a sales channel — or can become one — this is the recommended path for receiving rate information for the markets and contexts your app cares about, whether to display to buyers or to feed into external catalogs.

Info

Delivery option estimates in Contextual Product Feeds are only available on development stores until early July 2026, when they become available on all shops.

Advantages:

  • No dependency on the merchant's shipping model. You don't need to branch on whether a merchant is on market-driven shipping or the legacy model.
  • Single source of rates. Contextual Product Feeds return rate information from both the merchant's market rates and app-owned delivery profiles in one response, so you don't need to query each source separately.

You should:

  1. Identify the rate data your app currently reads from deliveryProfile / deliveryProfiles.
  2. Switch to Contextual Product Feeds to receive the same data.
  3. Confirm coverage across the markets and contexts your app supports.

This path requires the read_product_listings scope. See Manage access scopes for how to add it to your app.

Anchor to Option B: Read from the Markets APIOption B: Read from the Markets API

If you need to read the merchant's shipping configuration directly, the steady-state path is to read the delivery field on the Market object.

While some merchants are still on the legacy model, you'll need to branch on which model a merchant is on:

  • For merchants on market-driven shipping, read the delivery field on the Market object.
  • For merchants still on the legacy model, read from deliveryProfiles.

You can detect which model a merchant is on using the marketDrivenShipping field on ShopFeatures. Once all merchants are on market-driven shipping (July 2027), the deliveryProfiles branch is no longer needed.

This path requires the read_markets scope. See Manage access scopes for how to add it to your app.


Anchor to Upgrade path: writersUpgrade path: writers

This section applies to apps that create or modify the merchant's delivery profiles. If your app also manages its own app-owned profiles, that path is unchanged — continue to use deliveryProfileCreate / deliveryProfileUpdate against your own profile.

You have two options for writing merchant shipping configuration.

Rewrite your integration to create and manage an app-owned delivery profile instead of modifying the merchant's profiles. An app's profile can now use coversAllItems to cover all items in the shop, which makes this viable even for apps that create broad rates on behalf of merchants.

This option has two significant advantages:

  • No additional scopes. You keep using the same access your app already has for its own profiles.
  • Forward-compatible. App-owned delivery profiles continue to work on shops that move to market-driven shipping.

You should:

  1. Create an app-owned delivery profile using deliveryProfileCreate, scoped to the products and locations your app fulfills (or coversAllItems if that matches your use case).
  2. Run your new app-profile path alongside your existing integration and verify that rates are correct.
  3. Stop writing to merchant deliveryProfiles and maintain rates on your own profile going forward.

Anchor to Option B: Write through the Markets APIOption B: Write through the Markets API

If becoming an app-profile integration isn't viable, write merchant shipping configuration through the Markets API. The steady-state path is to write through marketCreate and marketUpdate, keeping rates in sync as merchants update their Markets configuration.

While some merchants are still on the legacy model, you'll need to branch on which model a merchant is on:

  • For merchants on market-driven shipping, write through marketCreate / marketUpdate.
  • For merchants still on the legacy model, write to deliveryProfiles.

You can detect which model a merchant is on using the marketDrivenShipping field on ShopFeatures. Once all merchants are on market-driven shipping (July 2027), the deliveryProfiles branch is no longer needed.

This path requires both the read_markets and write_markets scopes. See Manage access scopes for how to add them to your app.


The following milestones apply to apps that touch merchant delivery profiles. Dates are targets and may shift. Your app should be upgraded before any of your merchants moves to market-driven shipping. Merchants on your app aren't moved automatically until Shopify confirms your app is compatible, so your existing merchants won't be switched onto a broken experience. Until you're confirmed compatible, two things to plan for, both starting October 1, 2026: new installs see a compatibility warning, and any merchant who opts in manually will hit breakage if your app isn't upgraded.

DateMilestoneWhat it means for your app
July 2026Feature preview availableYou can enable the Market-driven shipping feature preview on a dev store and validate your integration against the new APIs.
October 1, 2026Merchant rollout beginsTwo things start: newly installing merchants see a warning if your app isn't marked compatible, and existing merchants can opt in. Shopify won't move merchants on your app automatically until it confirms your app is compatible, so breakage only happens if a merchant opts in manually before you've upgraded. Aim to upgrade and confirm compatibility before this date.
July 1, 2027All merchants on market-driven shippingMarket-driven shipping is on for all shops. The legacy deliveryProfile / deliveryProfiles APIs are deprecated for merchant-owned shipping configuration.

Anchor to Test your integrationTest your integration

  1. Create a dev store with the Market-driven shipping feature preview enabled.
  2. Run your app's read and write paths against the dev store and verify the expected behavior.

Anchor to Confirm compatibilityConfirm compatibility

Once you've upgraded and verified your integration, submit the compatibility self-attestation form to have your app marked compatible with market-driven shipping. This clears the warning shown to merchants and lets Shopify automatically move merchants on your app to market-driven shipping, so they transition smoothly once you're ready. Shopify will also try to detect compatibility automatically, but submitting the form guarantees it.


Was this page helpful?