SAAS PAYMENTS

Prorated Charges for SaaS: Upgrade and Downgrade Examples

Anyway Team

· 9 min read ·

A half-highlighted calendar and invoice illustrate a mid-cycle subscription adjustment.

Prorated charges bill a customer for only part of a service period. In a subscription upgrade, that often means subtracting the unused portion of the old plan and adding the remaining portion of the new one.

A $40 customer upgrading to a $100 plan halfway through a month might owe $30 now, not $60 or $100. But the calculation is only half the explanation. They also need to know when the new features start, when the adjustment will be collected, and what the next renewal will cost.

We'll work through an upgrade, a downgrade, and a partial first month, including what each invoice should say. The numbers are hypothetical; the billing policy is stated before each calculation.

A half-highlighted calendar and invoice illustrate a mid-cycle subscription adjustment.

Start with the billing policy, then calculate the amount

Before producing a prorated invoice, answer these questions:

Decision

Example policy used in this guide

When does a plan change take effect?

Immediately at the agreed change time

Does the renewal date move?

No; it stays on the first of the following month

How is unused time measured?

Days, using exact UTC boundaries

Has the existing period been paid?

Yes

What happens to a positive adjustment?

It is collected when the change takes effect

What happens to a negative adjustment?

It becomes account credit unless a separate refund policy applies

These are choices for the examples, not universal subscription rules. A product that schedules all downgrades for the next renewal might have no mid-cycle credit to calculate. A product that resets the billing cycle needs a different calculation from the one below.

Taxes, discounts, usage charges, payment fees, and currency conversion are excluded here. Each can affect a production invoice.

How to calculate prorated subscription charges

For a fixed-price subscription with an unchanged billing period:

Remaining fraction = unused service time ÷ total service time Unused old-plan credit = old period price × remaining fraction Remaining new-plan charge = new period price × remaining fraction Net adjustment = remaining new-plan charge − unused old-plan credit
Remaining fraction = unused service time ÷ total service time Unused old-plan credit = old period price × remaining fraction Remaining new-plan charge = new period price × remaining fraction Net adjustment = remaining new-plan charge − unused old-plan credit
Remaining fraction = unused service time ÷ total service time Unused old-plan credit = old period price × remaining fraction Remaining new-plan charge = new period price × remaining fraction Net adjustment = remaining new-plan charge − unused old-plan credit

Use the same unit of time in the numerator and denominator. Don't divide remaining days by a period measured in seconds. Also, don't assume every month has 30 days.

Our sample period runs from June 1 at 00:00 UTC to July 1 at 00:00 UTC. The end boundary is excluded, so the period contains 30 days. A change on June 16 at 00:00 UTC leaves 15 days:

Remaining fraction = 15 ÷ 30 = 0.5
Remaining fraction = 15 ÷ 30 = 0.5
Remaining fraction = 15 ÷ 30 = 0.5

Using explicit boundaries avoids the common question of whether the change day is counted twice.

Example 1: a $40-to-$100 mid-cycle upgrade

The customer paid $40 on June 1. They upgrade on June 16, and the new plan starts immediately. The billing date remains July 1.

Adjustment line

Calculation

Amount

Credit for unused old plan, June 16–July 1

$40 × 15/30

−$20.00

New plan for June 16–July 1

$100 × 15/30

$50.00

Amount due for the change

$50 − $20

$30.00

The customer pays $70 in total for that service period: the original $40 plus the $30 adjustment. This corresponds to half a month on each plan. Their next full renewal is $100 on July 1.

The difference between the full plan prices is $60, but charging all of that difference now would ignore the half-month already elapsed.

What the confirmation should say

Your new plan starts June 16. We'll credit $20 for unused time on your current plan and charge $50 for the rest of this period. Your amount due now is $30 before any applicable tax. Your next renewal is $100 on July 1.

That wording explains the change, the credit, and the next bill without expecting the customer to understand the term “proration.” Your actual confirmation must reflect your tax and payment configuration.

Example 2: a mid-cycle downgrade creates a credit

Reverse the plans. The customer paid $100 on June 1 and moves to the $40 plan on June 16, with an immediate reduction in features.

Adjustment line

Calculation

Amount

Credit for unused higher-tier plan

$100 × 15/30

−$50.00

Lower-tier plan for the remaining period

$40 × 15/30

$20.00

Net adjustment

$20 − $50

−$30.00

A negative $30 adjustment does not automatically mean $30 has returned to the customer's bank account. Under our example policy, it is an account credit. If that credit is fully eligible to offset the next $40 renewal, the next amount collected would be $10 before other adjustments.

You could instead schedule the downgrade for July 1. In that case the customer keeps the higher-tier service through June 30, and the next period starts at $40. There is no mid-cycle downgrade adjustment under that policy.

The choice must be visible before the customer confirms. “Downgrade” should not conceal whether access changes today or at renewal. Keep the resulting treatment consistent with your published SaaS refund policy.

Example 3: a partial first month before a fixed renewal date

A new customer joins a $40 monthly plan on June 16. You want all renewals to occur on the first day of the month.

First partial period = $40 × 15/30 = $20 First full renewal on July 1 = $40
First partial period = $40 × 15/30 = $20 First full renewal on July 1 = $40
First partial period = $40 × 15/30 = $20 First full renewal on July 1 = $40

There is no old-plan credit because the customer has not paid for an earlier plan in this period. Show the $20 initial charge and the $40 renewal separately at checkout.

An alternative is to start a full subscription period on June 16 and renew on the corresponding date next month. That is a different billing anchor, not a proration error. The checkout copy should make the chosen approach clear.

What changes in a production calculation?

Time precision and short months

A half-period example makes the arithmetic readable. Real changes can happen at 14:37, in a 31-day month, or near a daylight-saving change.

Billing engines don't all use the same precision. Chargebee documents day-based and millisecond-based modes; Paddle documents minute-based proration. Align a preview with the configured engine rather than rebuilding a different “close enough” calculation in the interface.

Discounts and rounding

Suppose the customer paid a discounted $32 rather than the old plan's $40 list price. If your policy prorates the discounted price, half a period gives a $16 credit, not $20. If the new $100 plan has no discount, its remaining half costs $50, so the adjustment becomes $34. Decide which discount applies to each line before showing the total.

Keep sufficient precision during calculation, then round according to the billing system and currency rules. Rounding each intermediate fraction can differ from rounding the final invoice lines. Don't promise an exact checkout total from a client-side approximation.

Unpaid invoices

Crediting unused time assumes there is something to credit. An unpaid old invoice makes that assumption unsafe. Stripe's proration guide specifically calls out the risk of crediting time on an unpaid invoice.

Check payment status before applying your adjustment policy. Depending on the intended workflow, you may need to collect the existing balance, defer the change, or prevent an automatic credit. Document the decision rather than silently treating an unpaid period as paid.

Usage billed after consumption

The examples above divide a fixed subscription price by time. They don't tell you how to charge for API calls already consumed, credits already spent, or minimum commitments. Calculate those using the contract's usage rules. A lower plan price shouldn't erase usage that has already been delivered.

Separate the change date from the collection date

“Prorate this change” doesn't answer when to collect the adjustment. You might invoice now or carry it to the next renewal. Paddle's documented billing modes illustrate that timing is an explicit choice.

Before enabling the new entitlement, decide what happens if collection fails. The customer should not see a successful paid upgrade while the application and billing system disagree about whether it was paid for.

Also distinguish these events in your records:

  1. The customer requests and approves a change.

  2. The billing system creates the relevant adjustment.

  3. Payment succeeds, fails, or remains unresolved.

  4. Your application applies the appropriate access policy.

Some workflows deliberately grant temporary access before collection. If yours does, make that a named policy with an expiry and recovery path. Don't let it happen accidentally because the success page loaded.

Check the provider's actual plan-change flow

Do not assume a subscription product supports every calculation in this article. Identify the specific plan-change operation and its supported timing before promising the customer an immediate adjustment.

For Anyway, the current customers and subscriptions documentation describes recurring Card/USD subscriptions and cancellation at period end. It does not establish an automatic mid-cycle upgrade-proration feature. Confirm that requirement before designing a checkout promise around it.

If customers can wait until renewal to change plans, a scheduled change may be easier to explain and operate. If immediate upgrades are essential, use the $30 adjustment above as an acceptance case and verify the provider's preview, collection, and access behavior together. A subscription checkbox is not enough evidence.

Before releasing a prorated billing flow

Use a test account to compare the customer's preview, the resulting invoice, and the application's access state. Check at least one change on the first day, one halfway through the period, and one near renewal. Add an unpaid-invoice case and a repeated request.

For each case, retain the period boundaries, prices, discount state, effective time, invoice reference, and expected renewal amount. A duplicate request should not create a second adjustment. An uncertain payment result needs reconciliation before another collection attempt.

The release check is simple: can the customer see what changes now, what they owe now, and what they will pay next time? If any answer differs between checkout, invoice, and account settings, fix that before enabling the flow.

Our invoice and receipt guide covers the customer-facing documents; the payment-webhook guide addresses the events that keep application access in sync.

Frequently asked questions

What does a prorated charge mean on an invoice?

It is a charge for part of a normal billing period. It commonly appears when service begins mid-period or a plan changes before renewal. A useful invoice states both the service dates and the calculation basis.

Are prorated charges always extra charges?

No. An upgrade can create an amount due, while a downgrade can create a credit. Whether that credit becomes a cash refund is a separate policy and processing decision.

Does cancelling a subscription produce a prorated refund?

Not automatically. A cancellation scheduled for period end usually means the customer keeps the already purchased service until that date under that policy. Any earlier termination or refund depends on the applicable terms and obligations.

Should I always use 30 days to prorate a month?

Only if that is the agreed billing convention. Otherwise use the actual period boundaries and the precision of your billing engine. The 30-day month here is an explicit example, not a general formula for every month.

You might also like