Posting this because it comes up constantly, and I think it's a quick win for HL.
Right now, if a customer wants to move from a monthly plan to the annual version of the same plan, they have to cancel and resubscribe. That's the only route. And every time it happens, it creates the same chain of events:
  • Customer messages support saying they want to switch to annual
  • We explain the workaround
  • They cancel
  • They resubscribe (sometimes)
  • Our team has to figure out how to link the new subscription to the Saas account, but (and this is really annoying for our CRM) those details don't sync with the customer record in our own sub-account so we can't easily segment people into smart lists etc.
Some customers don't come back. They get distracted, their card fails on the new sub, they second-guess the bigger payment, or they just feel weird about a process that involves cancelling something they actually love. We're losing expansion revenue at the exact moment the customer has decided to spend more money. That's a strange place to have friction.
Why this matters for HighLevel
Annual plans are one of the strongest retention levers in SaaS. Customers on annual billing churn significantly less than monthly, and the upgrade from monthly to annual is widely considered one of the highest ROI moves a subscription business can make because the customer has already made the decision to pay more. Adding friction here works directly against that.
It's also worth saying that this is a solved problem everywhere else. Stripe, Paddle etc all handle plan-cycle switches natively with prorated credits. Most SaaS tools our customers have used before do this with a single click in the billing portal. When they hit the cancel-and-resubscribe wall on HL, they find it weird AF.
For those of us white-labelling the platform, it becomes our job to explain a billing limitation that isn't really about the product itself. Which is a bit awkward.
What I'd love to see
A "switch to annual" option inside the customer portal that:
  • Calculates a prorated credit for the unused portion of the current monthly cycle
  • Applies that credit to the new annual subscription
  • Updates the billing cycle without cancelling the underlying subscription
  • Keeps all data, integrations and access intact
  • Sends a confirmation email
Stripe's API already supports this pattern (proration_behavior: 'create_prorations' on a subscription update), so the lift should be a lot smaller than building from scratch.
Reverse direction (annual to monthly) would be nice eventually, but the upgrade path is where the actual money is.
If this is also driving you mad please upvote and drop a comment with how often this comes up for you, any workarounds you've found, or whether you've lost a customer in the cancel-resubscribe gap. The more we can show the team this is a pattern, the easier it is to prioritise.
Thanks 🙌