How to Make a Shopify Checkout Link That Keeps the Subscription
You want to put a link in an email, a bio, a text message or on a box that drops someone straight into checkout with your subscription already selected. Shopify's documentation is blunt about the obvious route: cart permalinks don't support selling plans. Paste a /cart/12345:1 link into a campaign and the customer arrives with a one-time purchase in the basket, and your subscription attach rate quietly drops.
There is a second route that does carry the plan. It has been passed around Shopify community threads since 2021, most subscription platforms bury a version of it in their help centers, and the free generator people used to recommend for it has since gone offline. This post gives you a working builder for that link, explains where the IDs live, is honest about what breaks, and compares the apps that exist to do it properly.
A disclosure before we start: Zerglo makes one of those apps, DropLink. The hand-built method below is free and works today. Use it if it fits.
Why the normal permalink drops the subscription
The classic cart permalink is a path: /cart/{variant_id}:{quantity}. It accepts a discount and a few tracking parameters, but there is nowhere in that format to name a selling plan. The cart is built without one, so the checkout shows a one-time price.
The route that does work is the cart's add endpoint, called through a redirect. The /cart/add endpoint accepts an items[] array and each item can carry a selling_plan. Wrap it in /cart/clear?return_to=… so the customer's existing cart is emptied first, and finish with return_to=/checkout so they skip the cart page entirely.
https://YOUR-STORE.com/cart/clear?return_to=/cart/add?items[][id]=VARIANT_ID
%26items[][quantity]=1
%26items[][selling_plan]=SELLING_PLAN_ID
%26return_to=/checkout
The %26 is not a typo. It is an encoded ampersand. The outer URL has one real parameter, return_to, and everything after it has to travel inside that parameter. Use a plain & and Shopify splits the URL at the wrong place, the plan is lost, and you are back to a one-time cart. We tested the format above against a live Shopify Plus store on the day this was published and it landed in checkout with the plan and its "every 2 weeks" cadence attached.
Finding the two IDs
Variant ID. Open the product in Shopify admin, click the variant, and the number at the end of the URL is the variant ID. On single-variant products, add .js to the storefront product URL and read variants[0].id.
Selling plan ID. This is the one people struggle with, because the admin never shows it. The storefront does. Every Shopify product has a JSON view at /products/{handle}.js, and each variant in it lists selling_plan_allocations with a selling_plan_id. Match the price and frequency to the plan you want. Recharge, Skio, Smartrr, Appstle and Shopify Subscriptions all create standard selling plans, so this works whichever platform you run.
Find the JSON for a product
Open that link and search the page for selling_plan_id. The number next to it is what you need below.
Build the link
Runs in your browser. Nothing you type here is sent to Zerglo.
What breaks with the hand-built link
The link works. These are the reasons teams stop using it after the second campaign.
-
1
Plan IDs are not stable. Delete and recreate a selling plan, migrate subscription apps, or let a colleague "tidy up" the plan group, and every link that named the old ID silently falls back to a one-time cart. Nothing errors. You find out in the attach-rate report weeks later.
-
2
No attribution. The URL has no identity of its own, so you cannot tell which link, channel or influencer produced an order without wrapping it in UTMs and trusting your analytics to keep them through checkout. Subscription revenue from the link is invisible.
-
3
It is ugly and long. Two hundred characters of encoded IDs do not fit a bio, an SMS, or a QR code you want to be scannable from a shelf. A URL shortener fixes the length but adds another hop and another place to lose tracking.
-
4
It empties the cart. The
/cart/clearwrapper is needed so the plan lands cleanly, but it also throws away anything the customer already had in their basket. Drop the wrapper and the subscription item is added to whatever was there. -
5
No way to test offers. Want to know whether the 20% first-box discount or the free-treats bundle recruits more subscribers? You need two links, two shorteners, and a spreadsheet. Nobody keeps the spreadsheet.
The apps, compared honestly
Three Shopify apps generate checkout links with selling plans attached. Details below are from their App Store listings as of 7 September 2026 and will drift, so check the listing before you decide.
| Option | Cost | Subscription links | Tracking | Best for |
|---|---|---|---|---|
| Hand-built URL | Free | Yes, by plan ID | None built in | One-off links, internal testing |
| Mika: Cart Permalinks | Free | Yes | UTM parameters | Generating links without leaving the admin; new app, no reviews yet |
| Checkout Links | $25/month, 7-day trial | Yes | Click and conversion tracking | Pre-checkout landing pages and popups; the longest track record (37 reviews, 5.0) |
| DropLink (ours) | Free for 3 links; $9, $29, $99 tiers | Yes, on the free plan | Clicks free; revenue split by subscription vs one-time, and A/B tests, on paid tiers | Subscription brands that want to know which link recruited which subscriber; API and webhooks for agencies |
All three sit on top of the same Shopify selling-plan API, so if your subscription platform creates standard selling plans, all three will see them. The differences are in what happens after the click: whether the link is short and branded, whether the order is attributed back to it, and whether you can run two offers against each other.
Which to use
Sending one link, once? Build it above, test it in a private window, ship it. Set a reminder to re-test it the next time anyone touches your selling plans.
Running campaigns every month? Use an app. The plan ID problem alone will cost you more than any of them charge, because the failure is silent. Pick on the feature you will actually use: landing pages, attribution, or price.
Care about subscriber acquisition specifically? Make sure whatever you choose reports subscription orders separately from one-time orders per link. An offer that drives lots of one-time sales and few subscribers looks like a winner on total revenue and is the opposite once you count lifetime value.