Shopify
Shopify delivery customization at checkout in 2026
Shopify delivery customization is how I rename, reorder, or hide carrier rates at checkout without editing checkout.liquid or keeping a fragile Shopify Script alive. I am Alan Vo, a Gold Coast web developer with 18 years in production. When a Plus catalogue needs to demote express shipping for heavy lines, hide pickup for PO boxes, or prepend a lead-time note on a rate title, the Delivery Customization Function API is the supported path alongside the broader Shopify checkout extensibility migration.
This note is for merchants and developers who already ship on Online Store 2.0 themes and are moving checkout logic into Functions. It covers the cart.delivery-options.transform.run target, how delivery groups behave when an order splits between ship and pickup, plan availability for custom apps, and how I test before peak trading.
Why Shopify delivery customization matters in 2026
Shopify delivery customization matters because shipping presentation is a conversion lever and a support cost. Buyers abandon when the cheapest rate sits below the fold, when "Standard" hides a three-week made-to-order SKU, or when local pickup still appears for a cart that cannot fit in a store locker. Theme JavaScript can reorder DOM nodes on the cart page, but it does not run inside Shop Pay accelerated checkout, draft-order checkout, or many third-party wallets.
Delivery Customization Functions run in Shopify's checkout pipeline after fulfillment grouping and delivery method generation, in the sequence Shopify documents in its Function APIs overview. Your function receives cart and delivery group data through a GraphQL input query you control, then returns operations such as hide, rename, or move. Shopify applies those operations to the options the buyer actually sees on the shipping step.
Merchants activate a delivery customization through checkout rules and app deployment, similar to Shopify cart and checkout validation Functions. The difference is outcome: validation blocks progress; delivery customization reshapes the option list without changing underlying rates in admin. You still configure carriers, zones, and price rules in shipping settings. The Function only affects presentation and visibility at checkout.
Plan reality matters for custom builds. Shopify's help article on customizing checkout with apps states that public App Store apps with Shopify Functions work on Basic and higher, while custom apps that use Functions require Shopify Plus. If you are building a private app for one merchant, budget for Plus or partner with an app publisher who ships a public delivery customization app.
Shopify caps active delivery customization functions at twenty-five per store. That sounds generous until a stack of single-purpose apps each registers one function. I prefer one function with configurable rules in metafields over five micro-apps that each hide one carrier code.
How Delivery Customization Functions run at checkout
Delivery Customization Functions use the target cart.delivery-options.transform.run. Shopify CLI can scaffold the extension with shopify app generate extension --template delivery_customization, as described in Shopify's tutorial Build a delivery customization function.
The input object is GraphQL. You request only the fields your logic needs: delivery groups, delivery options with handles, titles, costs, buyer identity, cart attributes, line merchandise tags, or company location data on B2B stores. The Function returns a list of operations. Typical operations rename an option title (for example append "allow 5 to 7 business days"), change sort order with move operations, or hide options that match a predicate.
Execution order is not arbitrary. Cart transforms and discount Functions run earlier. Fulfillment constraints and order routing run before delivery methods are offered. Delivery customization runs after delivery methods exist but before payment customization and cart validation in the documented checkout sequence. That means your hide rule sees the same rates Shopify calculated from zones and profiles, not a pre-shipping fantasy list.
Split carts are the detail that breaks naive functions. Shopify checkout can ship some lines and hold others for pickup in one order. The API documentation warns that you must iterate delivery groups rather than assume one method for the entire cart. A function that hides pickup globally might still need to hide shipping on a pickup-only group, or the reverse. Test mixed carts if the merchant enabled ship and pickup in one order.
Surface compatibility also varies. Delivery customization is supported on checkout, B2B checkout, draft order checkout, and Storefront Accelerated Checkout according to the API compatibility table. It is not supported on cart, POS except limited ship-to-store cases, or subscription recurring orders. If the merchant sells subscriptions, do not promise delivery customization on every renewal checkout until you confirm current API notes.
Performance is part of the contract. Functions run on the purchase path with WebAssembly limits. Keep input queries tight. Avoid O(n^2) loops over lines and options when a cart attribute or tag on the first heavy line is enough.
Production checklist for Shopify delivery customization
The production checklist starts with shipping admin truth, then function logic, then checkout rules on a staging configuration.
- Document every carrier rate title and code as buyers see them today. Screenshot the shipping step for domestic, international, and B2B company locations if applicable.
- Write merchant-language rules: "Hide same-day when any line tag is
bulky," "Move free economy below express when cart subtotal is under $150," "RenameStandardto include cut-off time in AEST." - Scaffold the Function app and define the input query fields that map to those rules. Prefer cart attributes collected on the cart page over guessing from product titles.
- Implement operations with explicit handles. Hiding by fuzzy title match breaks when a carrier app renames a rate after an update.
- Deploy to a development store with representative shipping profiles. Confirm the function version in app releases matches what checkout rules reference.
- Activate the customization under checkout rules on a draft checkout configuration before touching the live configuration.
- Test single-group carts: one address, one delivery group, multiple rates. Verify sort order and renamed titles in standard checkout and in Shop Pay if the merchant uses it.
- Test split ship and pickup carts when the feature is enabled. Walk through each delivery group independently.
- Test draft order checkout if the sales team sends payment links. Delivery customization is supported on draft order checkout in the API table, but your shipping setup must mirror production.
- Test B2B buyer contexts if company locations change available methods. A rule that hides pickup for retail guests might need to stay visible for wholesale locations.
- Test PO box addresses against hide rules. Shopify's API caution notes that PO box detection for hiding options works reliably with carrier-calculated rates and third-party shipping apps, not always with simple built-in rate names. Validate with real addresses, not only
"123 PO Box". - Confirm you are under the twenty-five function limit including other apps' delivery customizations.
- Align with validation Functions so you do not hide every rate and leave the buyer with an empty shipping step that validation cannot explain. Pair hidden rates with clear remaining options.
- Document rollback: disable the checkout rule and pin the previous app version if rename copy confuses support during a sale.
What breaks when delivery customization goes live
The most common break is matching the wrong delivery option handle after a carrier app update. Symptoms are "the Function runs in logs but nothing changes." Fix by logging handles in staging and re-mapping when apps ship changelogs.
The second break is ignoring delivery groups on mixed ship and pickup orders. Buyers see pickup on lines that should ship, or shipping on a pickup-only group. Fix by branching logic per group and reading Shopify's split shipping documentation alongside your function tests.
The third break is hiding all options. Checkout cannot proceed without a selectable method. Always leave at least one valid option or block earlier with validation and a clear message.
The fourth break is duplicating Scripts or UI extensions that also rename rates. Buyers see double prefixes like "Express - Express (1 to 2 days)." Pick one layer: Function for server-side presentation, UI extension for purely cosmetic badges if needed.
The fifth break is plan mismatch. A custom Function app on a non-Plus store will not deploy the way a Plus build does. Merchants on Basic sometimes install public apps instead; developers should not promise a private delivery customization app without Plus.
The sixth break is accelerated checkout caching. If rename copy must reflect real-time cart attributes, confirm the attribute is set before the buyer enters checkout. Late cart updates might not re-run the shipping step until refresh.
How I measure Shopify delivery customization
Measurement starts with shipping step analytics, not only app logs. I compare shipping method selection rates before and after a rename or reorder. If economy selection rises when it is sorted first, the UX hypothesis worked. If abandonment rises on the shipping step, the option list may be confusing or too empty.
Support tickets mentioning "I could not see express" or "pickup was wrong" get tagged with checkout configuration id and cart composition. Spikes after enabling a rule usually mean a hide predicate is too aggressive.
For B2B, track company-location checkouts separately. Retail metrics can hide wholesale regressions.
If the store uses a Shopify custom pixel for Google Tag Manager, ensure shipping step events still fire when option titles change. Renamed strings break brittle regex triggers in legacy tags.
App-side telemetry should count operations applied per checkout without logging full addresses. Aggregate hide versus rename counts per function version so you can tie deploys to behavior shifts.
Related work on this site
On Their Nibs I shipped checkout and catalog changes where shipping expectations and conversion tracking had to stay aligned. Offporter is another Shopify build where carrier presentation and international zones needed clear buyer-facing copy. Tamannaah Fine Jewellery shows how premium catalogues combine tight merchandising with reliable checkout flows. Delivery customization sits in that same layer: small presentation changes with outsized impact on support load and shipping step completion.
FAQ
What is Shopify delivery customization in checkout?
Shopify delivery customization is a Shopify Function that runs at the shipping step to rename, reorder, or hide delivery options generated from your shipping settings. It uses the cart.delivery-options.transform.run target documented in the Delivery Customization Function API. It does not replace zones or carrier contracts in admin; it changes what buyers see during checkout.
Do Shopify delivery customization Functions work on every plan?
Public apps from the Shopify App Store that include delivery customization Functions can run on stores on Basic Shopify and higher, subject to each app's requirements. Custom apps you build for a single merchant require Shopify Plus, as outlined in Shopify's checkout apps availability table. UI extensions on the shipping page itself remain Plus-focused for custom placements; Functions follow the public versus custom app split.
How is Shopify delivery customization different from cart validation?
Shopify delivery customization reshapes the list of shipping, pickup, and local delivery options. Cart and checkout validation Functions decide whether checkout may continue and return errors that block progress. Both run as Functions in checkout, but delivery customization executes earlier in the pipeline than validation. Use customization for presentation and sorting; use validation when the cart itself must be rejected.
Can Shopify delivery customization handle ship and pickup in one order?
Yes, when the store supports split fulfillment, but your function must evaluate each delivery group separately. Shopify's API documentation stresses that orders may include multiple delivery methods. A rule that assumes one group will mis-hide options on mixed carts. Test ship-and-pickup scenarios on a development store before enabling the rule on the live checkout configuration.
Keep reading
Contact if you want this kind of work on a live store.