Shopify Checkout Personalization
The Dynamic Yield Shopify Checkout integration enables merchants to deliver personalized content and experiences inside Shopify Checkout using Dynamic Yield campaigns, without custom checkout code.
Using this integration, you can place Dynamic Yield campaign banners and content blocks at strategic positions throughout the Shopify checkout flow. Campaign content is rendered as native Shopify checkout UI components, and engagement events (impressions, clicks) are automatically tracked back to Dynamic Yield for reporting and attribution.
How it works
The checkout extension uses the Dynamic Yield identifiers already present on the storefront (via the Dynamic Yield Shopify integration) to call the Choose API with a configured selector name. It renders the returned campaign variation as native Shopify checkout components and tracks engagement back to Dynamic Yield.
Storefront (Dynamic Yield Shopify Store integration active)
│
├─ Dynamic Yield identifiers synced to Shopify cart attributes
│
▼
Checkout Page
│
├─ Dynamic Banner extension reads identifiers from checkout attributes
├─ Calls the Dynamic Yield Choose API with the configured selector
├─ Renders the returned campaign content as native checkout UI
└─ Tracks impressions and clicks back to Dynamic Yield
Prerequisites
Before setting up checkout personalization, ensure the following are in place:
- Dynamic Yield Shopify integration installed and configured: The Dynamic Yield Shopify Store integration must be implemented with your Dynamic Yield API key and section ID configured. The DY Cookie Sync theme extension must be enabled so that user and session identifiers (
_dyid_server,_dy_app_jsession) are synced to Shopify cart attributes. See the [Shopify Store integration](https://dy.dev/docs) article for more information. - Shopify Plus: Checkout UI extensions require a Shopify Plus plan.
- At least one Dynamic Yield campaign configured in Experience OS with a selector name intended for checkout (for example,
checkout-toporcheckout-bottom).
Adding dynamic banners to checkout
You can place one or more Dynamic Banner blocks at different positions within the Shopify checkout.
- In your Shopify admin, go to Settings › Checkout.
- Click Customize checkout.
- In the checkout editor, navigate to the section where you want to add a banner (for example, the top of the checkout page or the order summary sidebar).
- Click Add app block and select Dynamic Banner.
- In the block settings, enter a Selector Name. This must match the selector name configured in your Dynamic Yield campaign (for example,
checkout-top). - Drag the block to your desired position.
- Click Save.
Repeat this process to add banners at multiple positions, each with a different selector name.
Selector names must match your Dynamic Yield campaignsThe selector name you enter in the checkout editor must exactly match a selector configured in your Dynamic Yield campaign. If they don't match, no content will be rendered for that position.
Creating campaigns in Experience OS
With the integration installed and configured, you create and manage your checkout personalization campaigns entirely in Experience OS — no code changes needed.
Campaign setup
- In Experience OS, create a new Experience API campaign.
- Set the selector name to match the one you configured in the checkout editor (for example,
checkout-top). - Design your variation using the supported component structure (see Supported Components in the following section).
- Configure your targeting rules. For example, target users based on cart value, audience segment, device type, or geography.
- Activate the campaign.
The Dynamic Banner extension calls the Dynamic Yield Choose API on each checkout page load, passing the selector name, user identity, session, device information, and locale. Dynamic Yield evaluates targeting rules and returns the winning variation, which is rendered as native Shopify checkout UI.
Supported components
Campaign content is defined as a JSON structure in Dynamic Yield and rendered as native Shopify checkout components. The following component types are supported:
| Component | Description | Example Use |
|---|---|---|
banner | A prominent notice block with optional heading, tone (info, success, warning, critical), and dismiss/collapse behavior | Free shipping threshold alerts, promotional messages |
heading | Styled heading text at various levels | Section titles |
text | Inline text with optional emphasis (bold, italic) and appearance (subdued, decorative, and so on) | Descriptive copy |
button | Interactive button (primary, secondary, plain) that can link to a URL | CTAs, promo links |
image | Image display with configurable aspect ratio and fit | Brand imagery, promo graphics |
icon | Shopify checkout icons | Visual accents |
badge | Small label badges with tone | Tags, labels |
divider | Visual separator | Section breaks |
blockStack | Vertical layout container with configurable spacing and alignment | Grouping elements vertically |
inlineStack | Horizontal layout container with configurable spacing and alignment | Side-by-side elements |
grid | Grid layout with configurable columns and rows | Multi-column content |
box | General-purpose container with padding | Wrapping content |
Example campaign payload
The following JSON structure in a Dynamic Yield campaign variation renders a success banner in the Shopify checkout:
{
"type": "banner",
"heading": "🎉 You qualify for free shipping!",
"tone": "success",
"children": [
{
"type": "text",
"content": "Your order of $75+ ships free. No promo code needed."
}
]
}A more complex layout with a promotional banner and a call-to-action:
{
"type": "blockStack",
"spacing": "base",
"children": [
{
"type": "banner",
"heading": "Limited Time Offer",
"tone": "warning",
"children": [
{
"type": "inlineStack",
"spacing": "base",
"blockAlignment": "center",
"children": [
{
"type": "text",
"content": "Add one more item to get 15% off your entire order."
},
{
"type": "button",
"content": "Browse Products",
"kind": "secondary",
"url": "/collections/all"
}
]
}
]
}
]
}Engagement tracking
The integration automatically tracks engagement events back to Dynamic Yield:
- Impressions: Tracked when a campaign variation renders in the checkout. Each variation is reported once per checkout session.
- Clicks: Tracked when a user interacts with a button in the rendered campaign.
These events are sent to the Dynamic Yield Engagement API with the variation ID and decision ID from the original Choose API response, enabling accurate attribution and reporting in Experience OS.
Targeting context
The checkout extension sends the following context to the Dynamic Yield API, enabling rich targeting rules in Experience OS:
- User and session identity: Inherited from the storefront via cart attributes, ensuring consistent targeting across the full shopping journey. For Buy It Now flows, identifiers are passed via line item properties.
- Device type: Detected as
DESKTOP,TABLET, orMOBILEbased on the user agent. - Browser: Detected as Chrome, Safari, Firefox, Edge, or Other.
- Locale: The buyer's language and country (for example,
en_US) as determined by Shopify's localization settings.
This enables you to create campaigns that target specific devices, browsers, or regions. For example, showing a mobile-specific banner or a region-specific promotion.
Use cases
Here are some common ways merchants use this integration:
| Use Case | How to Implement |
|---|---|
| Free shipping threshold | Create a campaign targeting users whose cart total is below the free shipping minimum. Show a banner encouraging them to add more items. |
| Loyalty program upsell | Target non-loyalty members with a banner promoting signup benefits at checkout. |
| Urgency messaging | Show time-sensitive promotional banners (for example, "Sale ends tonight!") to users in a specific audience segment. |
| Cross-sell promotions | Display product recommendations or bundle offers relevant to the items in the cart. |
| Geography-specific offers | Show region-specific promotions or shipping information based on the buyer's locale. |
| Device-targeted content | Show mobile-optimized banners for mobile users or desktop-specific layouts for desktop users. |
| A/B testing at checkout | Use Dynamic Yield built-in experimentation to test different checkout messages and measure conversion impact. |
Troubleshooting
No content appears at checkout
- Confirm that the selector name in the checkout editor exactly matches the selector in your Dynamic Yield campaign.
- Verify that the base Dynamic Yield Shopify integration is properly configured (API key, section ID, cookie sync enabled).
- In the browser developer tools, look for network requests to
direct.dy-api.comand inspect the responses.
Content appears on some visits but not others
- The Dynamic Yield campaign might have targeting rules that exclude certain users or sessions. Check your campaign targeting in Experience OS.
- The campaign might be in a test state. Verify that it's active and published.
Limitations
- Shopify Plus required: Checkout UI extensions are only available on Shopify Plus plans.
- Component types: Only the component types listed in Supported Components are rendered. Unsupported types in the campaign payload are ignored.
- No custom CSS: The rendered components use Shopify's native checkout UI styles. Custom CSS is not supported in checkout UI extensions.
- Single campaign per selector: Each Dynamic Banner block renders the result of one Choose API call for one selector. To show multiple campaigns, add multiple Dynamic Banner blocks with different selectors.