How to grandfather users

We would like to update the subscription price of our application and in the process to keep the current users on the pricing they subscribed on.

Is there any guides to do that?
Is there any guides to do that with Rails template?

Sadly, I can’t find anything explicit about grandfathering in the Rails template guide.
Anyone can share a link?

Hi @Antonio,

There’s no direct guidance on grandfathering subscriptions that we have available in our documentation, and how you would implement this depends on how you are managing your app subscriptions currently.

If you are using the Billing API:

You currently can not update existing recurring subscriptions with new prices. To do so you would need to create a whole new subscription with the appSubscriptionCreate mutation (Shopify.dev docs), using the new pricing point that you can apply for new merchants installing your app moving forward, while keeping existing merchants on the old subscription plan that they currently have active with the old price point.

If you did want to update an existing merchant with a new subscription plan, when you create the new plan with appSubscriptionCreate you can specify the replacementBehavior input argument to determine what happens with existing plans and when the merchants is updated to the new plan.

If you are using the Shopify Managed App Pricing:

To update the pricing, you would want to update the existing Public subscription plan with the new price point. To grandfather the existing merchants with the old price point, you can either provide them with a permanent discount on the public plan, or you can create a new Private subscription plan just for them. See the documentation linked above for more information on these processes.

1 Like

Thank you for these valuable guides that you shared @Kellan-Shopify

We are using the manual pricing method with the billing API.

If I understood your explanation properly to keep my current users on the same price and set a new price for the new users I just need to change the lineItems → plan → appRecurringPricingDetails → price → amount of the current appSubscriptionCreatemutation. By doing this amount change my current users won’t see anything change because they are already subscribed and the new users will be immediately on the new pricing.
I also need to update the listing page to reflect the new price.

Am I right? Do I miss something?

The only scenario that might be annoying for my current users is if one them uninstall and reinstall the application they will get the new price. I think it’s completely acceptable and I can manage that with a good communication.

Hi @Antonio,

You are absolutely correct here in your understanding of this workflow.

Current users won’t see a price change as they will keep their existing subscriptions, and by updating the appSubscriptionCreate mutation in your app logic with the new price, it will create the app subscription with the new price for merchants installing the app moving forward. And you would need to update your listing page to reflect this change accordingly.

Regarding merchants uninstalling and reinstalling the app, you may be able to work around this with external data storage to keep track of merchants that had installed the app previously, however we can’t provide any direct advice on how or where to store data externally, and we do recommend reviewing our API Terms of Service in regards to Merchant Data storage and retention with your own legal counsel as needed to ensure you are in compliance with the API TOS.

I won’t try a work around to deal with the uninstalling/reinstalling case. I’ll just communicate with my users.

1 Like

You can just load the user’s plan with its amount and show that same amount on the UI. If the user doesn’t have a plan, you can display your new pricing. If they do have a plan, you can query how much they pay per month. I used this approach to grandfather my pricing

1 Like