Plan changes and pro-rata: upgrades priced fairly, automatically
Plan changes in the Membership accelerator flow through the same billing orchestration as signup, freezes, and cancellations. Upgrades generate an immediate pro-rata charge (price difference, scaled by days remaining in the period) from shared calculation logic; downgrades change the fee going forward. Changes can be scheduled with an effective-from date, and billing picks them up only once due.
What does the capability do?
It makes moving between plans a routine, correctly-priced event instead of a manual adjustment with a calculator.
- One calculation, every trigger. The pro-rata logic is shared code inside the billing layer: the price difference multiplied by days remaining in the period over days in the month. Whether the change comes from the admin, the member, or an API integration, the charge is identical.
- Upgrades charge, downgrades do not. An upgrade produces an immediate pro-rata charge for the richer plan’s remainder of the period. A downgrade simply takes the lower fee forward, avoiding the goodwill-burning micro-refunds that mid-period downgrade charges create.
- Scheduled changes. A member-level change can carry an effective-from date. Billing reads the scheduled values only once the date arrives, the same substitution mechanism that powers scheduled price changes at package level.
- The same orchestration as every lifecycle event. Plan changes run through the account-update strategy layer shared with signup, freezes, and cancellations, committing atomically so a failed change leaves nothing half-applied.
Why shared logic is the headline
Pro-rata bugs are rarely wrong formulas; they are the same formula implemented three times. When the admin flow, the member flow, and the overnight billing job each carry their own arithmetic, they drift, and the drift surfaces as a member disputing a charge that staff cannot reproduce. Centralising the calculation in one billing path, used by every lifecycle event, removes the drift by construction. It is the same design decision behind the platform’s freeze handling, and it is why the Billing Engine can treat plan changes as ordinary events rather than special cases.
Why it matters
Plan changes are a growth lever: members who can move up a tier in one click do, and members who can step down instead of cancelling stay. Both only work commercially when the pricing at the boundary is trustworthy. Pro-rata from shared logic, scheduled changes with clean effective dates, and atomic commits make the boundary boring, which is exactly what a member expects it to be.
Frequently asked questions
How is a mid-month upgrade charged?
Do downgrades generate a mid-period charge?
Can a plan change be scheduled for a future date?
More Membership capabilities
Membership freezes: pause the member, keep the billing honest
How the Membership accelerator handles freezes: date-bounded records, freeze fees replacing recurring charges, previews before committing, and derived status.
Scheduled price changes: set the rise, walk away
How the Membership accelerator applies future-dated price changes: per package and per site, covering recurring, registration, and freeze fees, with full audit.
Dynamic price bands: multi-site pricing without the spreadsheet
How the Membership accelerator manages per-site package pricing: dynamic bands that form from the prices themselves, band-wide or per-site changes, and scheduled updates.
See this working in a demo
Book a consultation and we will demonstrate this capability on the Membership accelerator, against your own scenarios.
Book a demo