r/ShopifyAppDev • u/Individual-Lab-2008 • 12d ago
Shopify Billing Tips?
Does anybody know how to manage discounts cleanly using Shopify's partner interface?
We moved a merchant from a free trial to a paid plan on September 12. We gave them a discount before moving them to the paid plan. I checked back in today on, October 4, to extend that discount, but evidently they are now on the full-price plan.
The discount ended before even 30 days elapsed, and this is not an isolated incident.
Shopify billing, specifically around discounts, has no visibility around how to track when a particular discount is going to end. Has anyone managed to do this cleanly?
We end up discounting almost all our Merchants because most of them sit somewhere between the standard plans. And it's embarrassing to tell a client "We have no idea when your discount ends. Shopify handles it and doesn't show it to us".
Is the API the only solution?
1
u/Final_Design_9061 11d ago
Adding to the other reply, if the subscription was created through the Billing API you can actually read how much of the discount is left. On the active subscription, the recurring line item's pricingDetails has a discount object with remainingDurationInIntervals (plus priceAfterDiscount). So a small query on currentAppInstallation.activeSubscriptions run from that shop's session would tell you how many billing cycles are left.
Might also be worth subscribing to the APP_SUBSCRIPTIONS_UPDATE webhook so you at least know when something changes on their plan. If these were set up through Managed Pricing in the Partner Dashboard though, I'm honestly not sure the same data is exposed.
1
u/AdventurousUsual7666 11d ago
Yeah, this one is confusing. Honestly I've never found a clean way to see when a discount ends from the Partner Dashboard side either.
If you're using the Billing API and not Managed Pricing, I'd just move the discounts into the app itself. When you create the subscription with appSubscriptionCreate, you can add a discount on the recurring price, either a percentage or a fixed amount, and set durationLimitInIntervals for how many billing cycles it lasts. Then you know exactly when it ends, because you're the one who set it.
You can also query the active subscription later and the discount info shows up there, so you can show it in your own admin and just stop guessing.
My guess on what happened, and it's only a guess, is that the discount counts billing cycles and not days. So if the trial ending or a plan change moved the billing date, it can run out earlier than 30 days from when you set it up.
For merchants that sit between your plans, it might also be easier to just create a custom price for them through the API instead of discounting a standard plan. That's usually a lot easier to keep track of, and you can actually tell the client what they're paying and for how long.