Software Growth

Proration

Proration charges or credits a customer for only the part of a billing period they used when they upgrade, downgrade, add seats or cancel mid-cycle.

Proration adjusts a bill to match the time a customer actually had a plan. If someone upgrades ten days into a 30-day cycle, they should not pay the full new price for the month, and they should not lose the value of the unused days on the old plan. The standard fix is to credit the unused time on the old plan and charge for the remaining time on the new one.

You need to decide how this works before a customer asks, because the first mid-cycle upgrade will arrive within days of launch.

How to calculate proration

Worked example: a mid-cycle upgrade

A customer is on a $49 plan with a 30-day cycle. On day 10 they upgrade to a $99 plan, leaving 20 days.

  • Credit for unused time on the old plan: $49 x 20/30 = $32.67
  • Charge for the remaining time on the new plan: $99 x 20/30 = $66.00
  • Amount due now: $66.00 - $32.67 = $33.33

At the next renewal, they pay the full $99. Stripe's documentation uses a simpler case: a customer moving from a $10 monthly plan to a $20 plan midway through is credited $5 for unused time and charged $10 for the remaining time, so the net charge is $5 (source).

Downgrades work the same way in reverse. Moving from $99 to $49 on day 10 gives a credit of $66.00 and a charge of $32.67, a net credit of $33.33. Whether that credit becomes a refund, a balance toward the next invoice or nothing is a policy choice. Stripe does not refund negative results automatically, and it does not invoice positive results immediately unless you ask it to.

Decisions to make

  • Charge immediately or at renewal? Billing the difference now is the cleaner experience for upgrades. Waiting until the next invoice avoids small charges but gives away days of the higher plan.
  • Credit downgrades? Many small SaaS apply downgrades at the next renewal with no credit, which avoids refund work. Say so on the pricing page.
  • Granularity. Stripe prorates to the second by default, and you can change it to days or other units with a proration customization. Day-level is easier for customers to check against their own math.
  • Discounts and trials. Stripe prorates using the discounted price, not list price, and it treats trial transitions as non-prorated.
  • Seat changes. Adding a seat mid-cycle is a proration, as is removing one. For per-seat pricing this is where most of your proration volume comes from.

What does not get prorated

Stripe notes that usage-based charges are not prorated, since they are billed after the period ends rather than in advance (metered billing). Prorations only apply to charges that happen before the billing period.

Accounting angle

Prorated credits and charges change what you can recognize and what is left as deferred revenue. Your MRR should reflect the new plan price from the upgrade date, not the prorated one-off amount, so keep the two separate in your reporting.

Common mistakes

  • Not previewing the amount. Stripe lets you preview an upcoming invoice before applying a change, so show the customer the number first.
  • Prorating for customers with an unpaid invoice. Stripe warns that a customer who changes plans with an unpaid invoice can receive credit for time they have not paid for, and suggests disabling proration in that case.
  • Having surprises in the middle. A customer who expects $99 and sees $33.33 is happy; one who expects $50 and sees $99 and then $66 is not. Explain it in the upgrade dialog.

Sources

Back to the SaaS glossary