Dynamic Links
Dynamic links allow you to personalize checkout experiences by passing URL parameters. Toggle on Dynamic to enable parameter processing for your link.
URL Parameters
When Dynamic is enabled, your link accepts these URL parameters:
Line Items ?li=
Add products to the cart with optional selling plan and line item attributes.
?li=variantId,quantity,sellingPlanId,[key,value:key,value]
Examples:
Example
Description
?li=12345,2
Add 2 units of variant 12345
?li=12345,2:67890,1
Add multiple products
?li=12345,1,9251324219
Add with selling plan (subscription)
?li=12345,2,[Gift,true]
Add with line item attribute
?li=12345,1,9251324219,[Gift,true:Message,Hello]
Selling plan + multiple attributes
Customer ID ?c=
Pre-fill checkout with a customer's saved details using their Shopify customer ID or Klaviyo profile ID.
?c=customerId
Examples:
Example
Description
?c=7654321098765
Shopify customer ID
?c=01KAMJGT9S99DT546Z2J6BVCP1
Klaviyo profile ID
Inline Customer Data ?c=
Pre-fill checkout with customer data passed directly in the URL.
?c=[key,value:key,value]
Examples:
Example
Description
?c=[email,[email protected]]
Email only
?c=[email,[email protected]:firstName,John:lastName,Smith]
Email with name
?c=[firstName,John:lastName,Smith:city,London:country,GB]
Name and address
Available fields:
Field
Description
email
Customer email address
phone
Customer phone number
firstName
First name
lastName
Last name
address1
Street address
address2
Apartment, suite, etc.
city
City
province
State or province
zip
Postal or ZIP code
country
Country code (e.g., US, GB, CA)
company
Company name
Cart Attributes ?attr=
Add custom attributes to the cart.
?attr=[key,value:key,value]
Examples:
Example
Description
?attr=[Gift,true]
Single attribute
?attr=[Delivery-Date,2026-01-25]
Date attribute
?attr=[Gift,true:Message,Hello]
Multiple attributes
Cart Note ?note=
Add a note to the order.
?note=URL encoded text
Examples:
Example
Description
?note=Please%20gift%20wrap
Gift wrap request
?note=Deliver%20after%205pm
Delivery instructions
?note=Leave%20at%20door
Drop-off instructions
Abandonment ?a=
Restore an abandoned cart using a Shopify abandonment ID.
?a=abandonmentId
Reorder Items
When Dynamic is enabled, a Reorder items checkbox appears in the Cart card. When checked, the link will automatically add items from the customer's previous order.
This requires passing a customer ID via ?c= parameter.
Combining Parameters
You can combine multiple parameters in a single URL:
https://yourstore.com/link?li=12345,1&c=7654321098765&attr=[Gift,true]¬e=Please%20gift%20wrap
Use Cases
Bundle Builder Landing Page
Create one link, change the URL based on customer selection:
const bundleLink = 'https://store.com/go/bundle-page';
document.querySelector('#3-pack').onclick = () => {
window.location = `${bundleLink}?li=44012345678901,3`;
};
document.querySelector('#6-pack').onclick = () => {
window.location = `${bundleLink}?li=44012345678901,6`;
};
document.querySelector('#12-pack').onclick = () => {
window.location = `${bundleLink}?li=44012345678901,12`;
};
Result: One link handles all bundle sizes. Promotions configured on the link apply automatically.
Klaviyo Abandoned Cart
Use Klaviyo template variables to build dynamic cart links:
https://yourstore.com/go/recover?li={% for item in event.extra.line_items %}{{ item.variant_id }},{{ item.quantity|floatformat:0 }}{% if not forloop.last %}:{% endif %}{% endfor %}&c={{ person.id }}
Shopify Flow / Zapier / Make
Build URLs programmatically from any automation:
Shopify Flow:
- Trigger: Customer tagged "VIP"
- Action: Send email with dynamic link containing recommended products
Zapier:
- Trigger: Form submission
- Action: Build checkout URL from form data -> Send to customer
Subscription Landing Page
Send customers directly to checkout with a subscription pre-selected:
https://store.com/go/subscribe?li=44012345678901,1,123456789
With multiple subscription options:
const subLink = 'https://store.com/go/subscribe';
document.querySelector('#monthly').onclick = () => {
window.location = `${subLink}?li=44012345678901,1,111111111`;
};
document.querySelector('#yearly').onclick = () => {
window.location = `${subLink}?li=44012345678901,1,222222222`;
};
Result: One link, customer chooses frequency, goes straight to checkout with subscription attached.
Promotions & Security
How promotions work with dynamic links
Promotions are configured on the link itself, not in the URL. This means:
- Customers get the discount you configured
- Bad actors can't change or guess discount codes
- Your promotion rules always apply
- Line item discounts in URLs are ignored on dynamic links
Recommended: Use tiered promotions with caps
For dynamic links, we recommend setting a maximum discount value:
Tier 1: 10% off for carts $0-50
Tier 2: 15% off for carts $50-100
Maximum discount: $100
This limits exposure if someone adds unexpected items to the cart.
Need product-level restrictions?
If you need discounts to only apply to specific products:
- Create a discount code in Shopify with product/collection restrictions
- Add that discount code to your link in the Checkout Links UI
- Shopify enforces the restrictions automatically
For advanced discount logic, we recommend Discount Kit.
Important Notes
Dynamic mode must be enabled
URL parameters are ignored unless you enable Dynamic Mode on the link. This is a security feature.
URL length limits
Most browsers support URLs up to 2,000 characters. For QR codes, keep URLs under 500 characters for easy scanning.
Tips for shorter URLs:
- Use
?c=with a Shopify Customer ID instead of full address fields - Create customers in Shopify first for returning buyers
- Keep cart attribute keys short
Analytics
Dynamic links track analytics the same as regular links. All clicks and orders roll up to the link you created.
Want granular tracking? Create separate links:
summer-campaign-emailfor email sendssummer-campaign-socialfor social postssummer-campaign-smsfor SMS
Each tracks separately, all can use dynamic parameters.