Glossary

Stripe Proration

A Stripe proration is an adjustment line created when a subscription changes mid-cycle, crediting the unused part of what was already billed and debiting the remaining part at the new price, so the customer pays for what they actually used rather than for the plan they started the period on.

Also called: proration, prorated charge, proration credit, mid-cycle adjustment

Definition

A proration gets called a discount when it reduces a bill and a refund when it produces a credit. It is neither. A discount lowers a price before it is charged. A refund returns money that has already moved. A proration does something narrower and stranger than both: it reopens a period you have already billed and restates it.

Stripe describes the mechanism as charging "a percentage of a subscription's cost to reflect partial use". The important structural detail is that this almost never arrives as one number. A customer who upgrades halfway through a month gets two lines, not one. Stripe's own worked example makes the shape plain: a customer moving from a 10 USD plan to a 20 USD plan halfway through the period sees "Unused time on original 10 USD plan (credit)" at -5 USD and "Remaining time on new 20 USD plan (debit)" at +10 USD, netting to 5 USD.

That pairing is why prorations confuse reconciliation. The invoice total is the answer to a subtraction, and the two operands are the interesting part. Read only the total and a mid-cycle upgrade looks like a small odd charge. Read the lines and it is a credit against a period you already recognised revenue in, plus a charge for a period that has not finished.

By default Stripe calculates all of this "down to the second", which is why prorated amounts are rarely round and why they rarely match anything a spreadsheet would produce independently.

Key points

  • +Stripe on the mechanism: the customer "is charged a percentage of a subscription's cost to reflect partial use".
  • +A mid-cycle change normally produces two lines: a credit for unused time and a debit for remaining time.
  • +Stripe on discountability: "If true, discounts will apply to this line item. Always false for prorations."
  • +Stripe on a proration period: it "starts when the proration was calculated, and ends at the period end of the subscription".
  • +On a proration line, quantity is "the quantity of the subscription that the proration was computed for", not units delivered.
  • +By default Stripe "calculates prorations down to the second".
  • +Stripe: "Negative prorations aren't automatically refunded and positive prorations aren't immediately billed."
  • +Changing price, quantity, items, trial end, billing cycle anchor or cancel_at triggers prorations. Changing a discount alone does not.
  • +Stripe: "Usage-based billing isn't subject to proration."
  • +The same change can produce different amounts depending on whether the subscription uses classic or flexible billing mode.

Not a discount, and the difference is enforced

The clearest evidence that a proration is not a discount is that Stripe will not let you discount one.

The invoice line item object carries a discountable flag, documented as "If true, discounts will apply to this line item. Always false for prorations." The coupons documentation states the consequence directly: "You can't discount proration line items further on the invoice that's generated."

This is not the same as saying prorations ignore your pricing. Stripe is precise about where the discount does apply: "When calculating proration credits or debits, Stripe uses the subscription's discounted price, not the original price. However, no additional discounts are applied to the proration line items themselves because they're marked discountable=false."

So the discount is inside the number and cannot be applied to it a second time. That distinction matters when an invoice mixes both kinds of line. Stripe notes that a discount on an invoice containing prorations and non-prorations "only apply to the invoice items and invoice line items that aren't prorations". A customer on a 20 percent coupon who upgrades mid-cycle sees the coupon reflected in how the proration was computed, and sees no coupon line against the proration itself.

The practical version: if you are reconciling a discount total against invoice lines, proration lines will never carry a discount amount, and that is correct rather than a gap.

A proration covers a different window than the line next to it

Every Stripe invoice line has a period, and a proration's period is defined differently from a subscription's.

For subscription lines, Stripe says the period "is the subscription period". For prorations, it "starts when the proration was calculated, and ends at the period end of the subscription". Those are not the same window, and they can appear on the same invoice.

So a single invoice can carry a subscription line covering a full upcoming month and a proration line covering eleven days of the month currently in progress. The document has one date on it. Its lines describe two different spans, one of which is partly in the past.

This is the detail that makes prorations a period-boundary problem rather than a pricing problem. The credit half of a proration pair restates a period you have already closed books on, if the change lands after your close. The amount is small, the accounting question is not: revenue recognised last month is being adjusted by a line dated this month.

Ordering compounds the confusion. Stripe documents the invoice line sort as pending invoice items, including prorations, in reverse chronological order first, then subscription items, then invoice items added after creation. That is why a proration commonly appears above the subscription charge it relates to rather than below it.

The same change can produce two different numbers

This is the part that surprises people who assume a proration is arithmetic with one right answer.

Stripe offers two calculation modes for credit prorations, selected by the subscription's billing mode, and documents a scenario where they disagree. A 10 USD subscription is upgraded to 20 USD with prorations switched off, then downgraded back to 10 USD ten days later with prorations switched on.

Under classic billing mode, Stripe "creates a credit proration based on the current price, even though the customer never paid the 20 USD monthly rate", producing an invoice total of -3.34 USD. Under flexible billing mode, it "creates a credit proration based on the last price billed for the subscription item", and the credit and debit cancel out to an invoice total of 0 USD.

Same customer, same two actions, same dates. A refund in one mode and nothing at all in the other.

The modes also differ on how a coupon is weighted into a credit. Stripe walks through cancelling a 10 USD item from a 25 USD subscription carrying a 5 USD coupon: classic distributes the coupon evenly and calculates -0.5 x (10 USD price - 5 USD coupon) for -2.50 USD, while flexible uses the proportionally allocated discount, -0.5 x (10 USD price - 1.66 USD discount amount), for -4.17 USD.

The reason to know this is diagnostic. If a prorated credit does not match what you expected, the first question is not whether Stripe miscalculated. It is which billing mode the subscription is on, and what price was last actually billed on it.

What creates a proration, and what only looks like it should

Stripe draws the line at whether a change affects the billable amount for the current cycle.

Changes that do trigger prorations by default: adding or removing subscription items, changing an item's price, changing an item's quantity, adding a trial end to an active subscription, changing the billing cycle anchor, and setting a cancellation date inside the current period.

Changes that do not: payment method, collection method, automatic tax, metadata, billing thresholds, pausing collection, and cancelling at period end. Stripe explains the rule as a group: these "don't change the billing amount for the current period".

Discounts sit in that second group and are the common surprise. Stripe: "Updating subscription-level promotion codes, coupons, or discounts by themselves doesn't create proration invoice items." Adding a coupon mid-cycle does not credit the customer for the part of the month they paid full price on. The coupon applies from the next invoice.

There is a compound case worth holding onto, because it is the one that produces unexpected numbers. If a discount change is bundled into the same API call as a proration-triggering change, the proration is computed against the modified discount. Change a quantity and remove a coupon in one call and the proration reflects the post-removal price.

One more boundary: prorations "only apply to charges that occur ahead of the billing period", and Stripe states plainly that "Usage-based billing isn't subject to proration". Metered usage is billed for what was used, so there is nothing unused to credit back.

A proration is calculated immediately and billed later

Two timing facts do most of the work in explaining why prorations show up where they do.

The first: "The prorated amount is calculated as soon as the API updates the subscription." The number is fixed at the moment of the change, using the current period's start and end.

The second: it does not necessarily move money then. Stripe is explicit that "Negative prorations aren't automatically refunded and positive prorations aren't immediately billed, although you can do both manually." Under the default proration behaviour, proration items sit as pending invoice items and are "only invoiced immediately under certain conditions". Otherwise they wait for the next invoice.

That gap between calculation and billing is why an upgrade can produce no charge on the day it happens and a strange-looking total three weeks later. Anyone reconciling by date will look for the money on the change date and not find it.

A third fact is worth flagging because it produces credits that feel wrong. Stripe calculates prorations "assuming that any previous invoices for the subscription will eventually be paid", so a customer who changes plans while carrying an unpaid invoice "might receive a credit for unused time on the higher-priced plan, even if they haven't paid for that time yet". The credit is real, the payment behind it may never arrive.

How prorations reach QuickBooks

Acodei documents no proration-specific handling, and the accurate description is that a proration arrives as an ordinary invoice line and is treated as one.

When a Stripe invoice is finalized, Acodei creates a QuickBooks invoice that its documentation says "reproduces every line-item, and tax lines, as allowed by the user's mapping settings". Each line uses the product returned by Multiple Product Mapping when that is enabled, and the default product otherwise. A proration line is mapped by the same rules as any other line, and Acodei documents no rule type that matches on whether a line is a proration.

That has a consequence worth stating carefully. Acodei's documented mapping techniques match on description, transaction value, Stripe product and price, metadata, and Stripe account. Stripe generates proration descriptions itself, in the shape of "Unused time on Silver plan after 01 Sep 2020", and the amount is a to-the-second calculation rather than a catalogue price. So a description rule written against a product name will not match a proration for that product, and an amount rule cannot match one at all. Acodei separately documents that it does not support matching multiple lines from the same transaction.

Two documented behaviours matter for the credit half of a proration pair. Where a Stripe invoice comes out with a negative total, because credits exceed charges, Acodei documents converting it to a Credit Memo, or splitting it into a memo plus a zero invoice depending on the amount paid. And where an invoice nets to zero while still carrying non-zero lines, which is exactly what flexible billing mode produces in Stripe's own worked example, Acodei documents a separate admin toggle, Enable $0 Invoices, described as allowing invoices whose amount due is zero and which have at least one line item above zero to sync. Its documented default is off, and invoices with no non-zero lines are skipped regardless.

One limitation is worth knowing before you plan around any of this: Acodei documents that mapping rules are not versioned, and that changing a rule takes effect for future transactions only.

Want to see this on your own Stripe data?

Start a free trial

Frequently asked questions

What is a Stripe proration?

It is an adjustment created when a subscription changes mid-cycle. Stripe describes it as charging the customer "a percentage of a subscription's cost to reflect partial use". In practice it usually appears as two lines rather than one: a credit for unused time on what was already billed, and a debit for the remaining time at the new price.

Is a proration a refund?

No. A credit proration reduces what is owed on an invoice, but Stripe states that "Negative prorations aren't automatically refunded and positive prorations aren't immediately billed, although you can do both manually". Money only moves if you make it move, or when the next invoice settles.

Why can I not apply a coupon to a proration line?

Stripe excludes them by design. The discountable field is documented as "If true, discounts will apply to this line item. Always false for prorations", and the coupons documentation adds that "You can't discount proration line items further on the invoice that's generated". The subscription's existing discount is already used when the proration is calculated, because Stripe "uses the subscription's discounted price, not the original price".

Does adding a coupon mid-cycle credit the customer for the rest of the month?

No. Stripe states that "Updating subscription-level promotion codes, coupons, or discounts by themselves doesn't create proration invoice items", because a discount change does not alter the billable amount for the current cycle. The discount applies from the next invoice.

Why does my proration credit not match what I calculated?

Two likely reasons. Stripe calculates prorations "down to the second" by default, so the figure rarely matches a day-count estimate. And the subscription's billing mode changes the basis: classic mode calculates a credit from the current price, while flexible mode calculates it from the last price actually billed for that item. Stripe documents a case where the same two actions produce -3.34 USD under classic and 0 USD under flexible.

What period does a proration line cover?

Not the subscription period. Stripe defines a proration period as starting "when the proration was calculated" and ending "at the period end of the subscription", so a proration line and the subscription line beside it on the same invoice describe different windows.

Do prorations apply to usage-based billing?

No. Stripe states that prorations "only apply to charges that occur ahead of the billing period" and that "Usage-based billing isn't subject to proration". Metered usage bills for what was consumed, so there is no unused portion to credit.

How does a proration appear in QuickBooks?

As an ordinary invoice line. Acodei documents that a synced QuickBooks invoice "reproduces every line-item, and tax lines, as allowed by the user's mapping settings", with each line using the product returned by Multiple Product Mapping when enabled and the default product otherwise. No proration-specific handling is documented, and no mapping rule type matches on whether a line is a proration.

What customers say about running Stripe through Acodei

Stripe Verified Partner BadgeQuickBooks Intuit Badge
If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.
RyanOwner at Indie Music Academy
Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.
AndresCo-founder and CEO at Kanguro Collections and Reinsurance

Ready to try Acodei?

Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.