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

Info: The customer's saved name, email, and shipping address are pre-filled at checkout. Klaviyo profile IDs require the Klaviyo integration to be configured.

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

Info: This parameter is used with abandonment recovery integrations. The abandonment ID is provided by Shopify's abandoned checkout data.

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]&note=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:

  1. Create a discount code in Shopify with product/collection restrictions
  2. Add that discount code to your link in the Checkout Links UI
  3. 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-email for email sends
  • summer-campaign-social for social posts
  • summer-campaign-sms for SMS

Each tracks separately, all can use dynamic parameters.