A

Glossary

Anniversary Billing

Anniversary billing is a subscription arrangement where each customer's billing period starts on the day they signed up and renews on that same day at every interval. Every customer keeps a private renewal date, so invoice dates spread across the month according to when each subscription began.

Key Takeaways

  • Anniversary billing takes each renewal date from signup or activation, so 400 customers can sit on 28 separate cycle boundaries.

  • Signup dates past the 28th clamp to the month's last day. Stripe's docs state that an anchor of 31 January bills 28 February, then 31 March, then 30 April.

  • An annual plan sold on 29 February resolves to 28 February for the next three years, because the day does not exist again until the following leap year.

  • A subscription anchored on the 20th runs a 31-day period from 20 March, so a 5 April upgrade prorates over 15 remaining days rather than the 26 a month-start period would leave.

  • The clamped date needs to stay separate from the requested day-of-month, or a single February renewal permanently shortens every period after it.

How does anniversary billing work?

Anniversary billing stores the signup timestamp as an anchor and repeats that day at the plan's interval for the life of the subscription. Where the day sits in the month is the only input.

The mechanics on a single subscription:

  • The interval repeats the day, not the gap. A monthly plan anchored on the 6th renews on the 6th, whether that falls 28, 30, or 31 days later.

  • Activation can override signup. Where a trial runs first, the anchor moves to trial end, which is why two customers who signed up together can still renew a fortnight apart.

  • Proration measures against the private period, so a 5 April change means something different for a customer anchored on the 20th than on the 2nd.

Clamping is worth writing down before you ship. Stripe documents it plainly: an anchor of 31 January bills 28 February, 29 February in a leap year, then 31 March, then 30 April.

Anchor day

Renewal in a 30-day month

Renewal in February, non-leap

 

15th

15th

15th, no clamp needed

30th

30th

28th

31st

30th

28th

29 February, annual

not applicable

28 February

Keep the requested day-of-month on the record. Overwriting it with a clamped value shortens every later billing period by the same few days.

Should you bill on anniversary dates or calendar months?

Anchor to the signup date when a full first period matters more than a shared boundary, since anniversary alignment never needs a partial opening period or a decision about whether to charge for it. The trade shows up in the proration arithmetic.

A customer signs up 20 March on a $120 monthly plan and upgrades to $300 on 5 April, prorated straight-line by day. The anniversary period runs 20 March to 19 April, so 15 days remain; a period anchored to the month start would leave 26:

Line

Anchored 20 March, 31-day period

Anchored to the 1st, 30-day period

 

Days left from 5 April

15

26

Credit, unused old plan

120 x 15/31 = -$58.06

120 x 26/30 = -$104.00

Charge, new plan remainder

300 x 15/31 = $145.16

300 x 26/30 = $260.00

Net

$87.10

$156.00

Anniversary alignment shows a smaller net here purely because the customer is further through their period on 5 April, and the same upgrade a week earlier would flip the comparison. What the anniversary side buys you is a clean first invoice; what it costs you sits on the other page, so weigh this against calendar billing before you pick.

What goes wrong with anniversary billing?

Dates that do not exist in every month cause the first wave of problems, and a renewal calendar with no quiet day causes the second.

  • Silent anchor drift. A February clamp that overwrites the stored anchor moves the subscription permanently, and nobody notices until a customer compares two invoices.

  • Leap-day annuals. A plan sold on 29 February renews on 28 February for three years, then needs a decision about year four.

  • Periods that straddle the accounting month. A 20th-to-19th period sits in two accounting months, so recognised revenue needs a daily split the invoice itself never shows.

  • Timezone drift. Stripe stores the anchor in UTC, so a subscription created at 5 PM Eastern records as 10 PM UTC and can renew a day later than the customer expects.

Anchor drift is the one I'd fix first, because it's the only item here that changes what a customer pays without anyone deciding to. Resolve the stored day-of-month fresh each period against the billing cycle rather than saving over it.

Related terms

Neighbouring entries worth reading next:

  • billing cycle covers the recurring period an anchor defines and what proration does inside it.

  • billing period treats the period as a unit of measurement rather than a schedule.

  • billing frequency covers how often you bill, a separate decision from when the period starts.

  • billing in advance covers charging for a period before you deliver it.

  • calendar billing covers the alternative arrangement and what a shared boundary costs.

  • subscription lifecycle covers the states a subscription moves through between its first anchor and its last.

FAQ

Does anniversary billing behave differently on annual plans?

It follows the same anchor rule with a wider gap, so the edge cases arrive once a year instead of monthly. The month of the year matters as well as the day of the month. A 29 February signup is the case that bites: three consecutive renewals resolve to 28 February before a leap year returns.

Can you change a customer's anniversary date after signup?

Yes, and the intervening days have to be settled either way. Resetting the anchor without proration charges the customer twice for time they've already paid for, which is why Stripe pairs an anchor reset with proration_behavior=create_prorations. A trial ending on the target date shifts the anchor without issuing a proration line.

Does anniversary billing work for usage-based pricing?

It works, and it adds a reconciliation step. Usage has to aggregate over a window that opens mid-month, so any check against a monthly usage report needs a daily split before the two figures agree. Teams running metered charges on anniversary anchors usually build that split once and reuse it.

Back to glossary

Get Instant Feedback on Your Pricing | Join the Flexprice Community with 400+ Builders on Slack

Join the Flexprice Community on Slack