Billing Plan naming when two Shopify App Pricing plans differ only by trial timing

Dear Dev Community,

We are preparing a new public app using Shopify App Pricing and would appreciate clarification about plan naming and what merchants see after a free trial ends.

The app has one paid subscription—not multiple feature tiers. The subscription has a fixed monthly charge plus several usage meters.

We would like to offer merchants two ways to begin the same subscription:

  1. Select the subscription with a 30-day free trial.

  2. Activate the full subscription immediately without taking the trial.

[What we really want is to let a merchant voluntarily end the trial early and begin the standard paid subscription immediately. Shopify App Pricing does not appear to support early trial termination, so Shopify Developer Support suggested creating two separate plan definitions.]

During the 30-day trial, our application provides a limited allowance of certain features. We enforce that allowance in our application rather than through Shopify usage caps. If the merchant does nothing, the trial ends naturally, the recurring charge begins, and our application automatically removes the trial restrictions.

If the merchant uses the trial allowance before the 30 days have elapsed, we would offer a button that sends them to an otherwise identical plan definition with no trial. This would let them activate the full subscription immediately.

Our concern is the permanent merchant-facing plan name.

If we name the first plan something like “30-Day Trial,” will that remain the merchant’s displayed plan name after the trial has ended—even several months or years later?

More specifically:

  1. After a Shopify App Pricing trial ends naturally, what plan name does the merchant see under Settings → Apps → Billing and usage charges?

  2. Is that the localized plan display name configured in Pricing content, an item description, the internal plan handle, or another value?

  3. Does the displayed plan name remain unchanged when trialEndsAt becomes null and the first paid billing cycle begins?

  4. Can two public plan definitions have the same localized display name while using different internal plan handles and trial configurations?

    For example, could both plans be displayed as “Example App,” with one configured for a 30-day trial and the other configured with no trial?

  5. If identical display names are allowed, how clearly does Shopify’s hosted plan-selection page distinguish the trial option from the immediately active option?

  6. If identical display names are not allowed, what naming pattern does Shopify recommend when the plans provide exactly the same paid subscription and differ only in how the merchant begins?

  7. Is there a supported way to direct a merchant to the specific no-trial plan, rather than asking them to choose again from every public plan on the hosted plan-selection page?

  8. Is creating a second, otherwise identical no-trial plan still the recommended method for allowing a merchant to end a trial early?

Our goal is to avoid a merchant paying for the full subscription three years from now while their Shopify admin still describes their plan as a “30-Day Trial.” We also want to avoid presenting these as separate product tiers when they are simply two activation paths into the same subscription.

If anyone has tested this with the current Shopify App Pricing system, screenshots or a description of the merchant experience before and after trial expiration would be extremely helpful.

Thank you!

The name is exactly what you pass to appSubscriptionCreate’s name argument, it’s static text on that AppSubscription record, so it won’t auto update once the trial ends and paid billing kicks in. That’s the part to avoid “30-Day Trial” in. Whether two plan definitions can share an identical display name on the hosted plan selection page I haven’t verified, I’d confirm that specific bit with Shopify support before shipping.

@Mubashir_Hassan yes, exactly.
What I really want is the ability for the merchant to “end the trial now”, but that doesn’t seem to be an option.

Let’s say the merchant completes their onboarding and testing and decides they really like the app after 3 days, which is not unrealistic. They’re going to want unlimited metered usage, and we want to let them easily jump from the trial to production.

Shopify Dev Support in chat told me this isn’t possible, and they told me that I should make a post here four possible solutions.

Until the new metered billing deployed, this was never a consideration or an issue.

Shopify Dev Team, what do you suggest?

@Jeremy_R confirmed, there’s no mutation to end a trial early in place, appSubscriptionTrialExtend only adds days, it can’t shorten one. Two plan definitions really is the only route: give both the same display name, the hosted plan selection page only ever renders the single plan a merchant is confirming, so nothing enforces uniqueness across your plan list. Clicking into the no-trial option just runs a normal confirmation, same as any other subscription change.

@Mubashir_Hassan thx for confirming the same thing as the Shopify Dev Support rep re merchant “ending the trial early”

So, back to my original challenge…
Trying to wrap my head around what I should name the two so-called “plans”

  1. Plan 1 has the 30-day trial, but limited usage during the trial;
  2. Plan 2 has no trial period, metered usage after the base usage;

Merchant can change to plan #2 once they are ready/after onboarding - that’s easy.

I really DO NOT want to put “30 Day Trial” into the plan1 plan name (which will be visible to the merchant forever, if they wait the 30-days before the trial ends.)

I am hoping someone from Shopify Dev Team can jump in with an option we are not considering.
Thank you.

Why don’t you just manage the trial yourself, stamp the shop on install, give 30 days, and if a merchant wants to start a subscription, you call appSubscriptionCreate.

That sidesteps the naming question entirely since you’d only ever need one plan definition. Just know you lose Shopify’s own 180 day trial reuse tracking on that plan, so you’d need to record trial eligibility in your own DB if you want to stop a shop from getting a fresh trial on reinstall.

Closing the loop for anyone who lands on this thread later. I took the approach discussed here to Shopify Developer Support today, and an escalated specialist confirmed it. Here is where it landed.

@Luke’s suggestion is the right one:

  • manage the trial yourself
  • stamp the shop on install
  • give 30 days
  • and only create a subscription when the merchant is ready.

One correction on the mechanism, from Support and from the docs:
Under Shopify App Pricing you do NOT call appSubscriptionCreate. That mutation belongs to the Billing API (manual pricing), and the App Pricing API documentation says explicitly not to call it once App Pricing is enabled. Support put it plainly: the two are not mixed. The way you “create the subscription” under App Pricing is to redirect the merchant to the hosted plan-selection page and let Shopify create it when they approve.

So the final shape, restated in App Pricing API terms:

  1. One public plan. One display name, the monthly charge, the usage meters. Free trial duration set to 0. No second plan.

  2. The trial is ours. On install we record the date in our own database. For 30 days the merchant uses the app with no subscription in Shopify at all, and our app enforces its own limited allowance during that period.

  3. No redirect to the plan page at install. The merchant installs from the App Store, approves the permissions, and lands in the app. They agree to no charge, because none exists yet.

  4. A “Start my subscription” button, available from day one, redirects to the hosted plan-selection page. If they never press it, on day 30 the app gates itself and shows the same button. Same plan, same page, and the first moment they approve a charge. Shopify sends them to the welcome link, we confirm through the Partner API’s Active Subscription query, and the allowance lifts.

What Shopify Developer Support confirmed today:

(a) Nothing under App Pricing forces the plan-selection page at install. The app decides when to redirect, and this architecture is, in their words, “consistent with how App Pricing is designed.”

(b) The plan name a merchant sees under Settings > Apps > Billing and usage charges is the display name from Pricing content, and it does not change based on how many trial days the plan has. So a plan with 0 trial days never carries a stale trial label. That was my original worry, and it is gone.

(c) No platform-side gotcha on install, uninstall and reinstall inside the 30 days. Shopify’s 180-day trial proration does not apply to a 0-day plan and does not interfere. As noted upthread, you do carry trial eligibility in your own database, and it has to survive whatever cleanup you do on uninstall, or a reinstall gets a fresh 30 days.

Still open, escalated to the App Store review team, answer expected by email: whether saying “$X/month, first 30 days free” in the plan’s feature text and listing copy is fine under requirement 4.2 when the plan itself is configured with 0 trial days, and whether a reviewer would flag a listing that mentions a trial no plan configures. I will post that answer here when it arrives.

Summary for the next person:
One plan, zero trial days, the trial is a timestamp you own, and the merchant reaches the plan page only when they choose to or when your clock runs out. No second plan, no appSubscriptionCreate, no plan name that goes stale.

Thanks, @Luke , and @Mubashir_Hassan for jumping in here!

Good catch, thanks for closing the loop. That split is easy to miss since the App Pricing docs just say not to call appSubscriptionCreate once it’s enabled, without spelling out what happens if you do, so it’s good to have this confirmed by Support.