Annual recurring revenue (ARR) is the yearly run-rate of recurring subscription revenue. Once monthly recurring revenue already counts each contract as one month of value, ARR equals that MRR multiplied by 12. Cash collected over the last year, one-time charges, and a raw sum of yearly price tags are different numbers.
Formula
ARR = MRR × 12, and only after MRR has normalized every interval to one month. A $120 yearly plan is $10 of MRR and $120 of ARR. It is not $120 of MRR and not $1,440 of ARR.
| Starting point | ARR |
|---|---|
| Normalized MRR | MRR * 12 |
| Yearly price already expressed per year | The yearly price itself, not that price times 12 |
| Cash collected in the trailing 12 months | Not ARR |
Worked example
Every figure in this example is hypothetical. It is not the public demo and not a customer account. Use the same book as the MRR example: normalized MRR is $1,800.
- ARR = 1,800 * 12 = $21,600.
- The 10 yearly plans contribute 10 * $120 = $1,200 of that ARR, which is 10 * $10 * 12.
- If yearly prices were left in full inside a fake MRR of $2,900 and then multiplied by 12, the result would be $34,800. That overstates ARR by counting each yearly contract twelve times on top of an already-annual price.
How to compute it from Stripe
- Build normalized MRR from subscription items, including quantity, currency minor units, interval, and interval_count. Follow Stripe auto-pagination through every active subscription.
- Multiply that monthly total by 12.
- As a check, a contract billed yearly should contribute its yearly price once. A contract billed monthly should contribute twelve times one month.
- Keep trailing twelve-month billings in a separate sum of paid invoices or succeeded charges. Do not label that sum ARR.
What Data Lighthouse shows
The signed-in overview cards are Revenue (7, 14, or 30 days), Avg daily revenue, Monthly recurring revenue, Annual recurring revenue, Revenue per visitor, Visitor conversion rate, and Visitors online. The Annual recurring revenue card is that normalized MRR multiplied by 12. The Monthly recurring revenue card reads GET /api/datalighthouse/revenue for a signed-in Clerk user. The route lists every subscription with status active through Stripe auto-pagination, which leaves trialing subscriptions out. For each subscription item it multiplies price.unit_amount by quantity, converts that minor-unit amount for the price currency, and normalizes the recurring interval to one month. A year is divided by 12, a week is multiplied by 52/12, a day is multiplied by 365/12, and interval_count divides the result. Percent-off and amount-off coupons that still apply (duration forever, or repeating and not yet ended) are included. A coupon with duration once is left out, because it does not recur. Item coupons apply before subscription coupons. A coupon that lives only on the Stripe Customer is not included. Prices with no unit_amount, such as tiered or metered prices, are skipped. The route assumes one currency, the currency of the first priced active item, and leaves items in any other currency out of the sum. Zero-decimal currencies such as JPY are not divided by 100. The three-decimal currencies BHD, JOD, KWD, OMR, and TND are divided by 1000. The card shows that normalized total. A percent change needs a stored starting snapshot, which this route does not keep.
The public demo does not call Stripe or Postgres. Revenue, visitors, monthly recurring revenue, and annual recurring revenue are a seeded sample. ARR in the sample is the sample MRR times 12. Each day's visitors are seeded on their own, separate from that day's revenue, and the chart subtitle labels the series as sample data. Checkout for the $59 template license uses Polar after GitHub sign-in. Stripe is the optional revenue source inside the dashboard you host, through STRIPE_SECRET_KEY. If that key is missing, the revenue API returns an error and the overview says it could not load Stripe revenue.
Questions
What is annual recurring revenue?
Annual recurring revenue (ARR) is the yearly run-rate of recurring subscription revenue. After monthly recurring revenue already counts each contract as one month of value, ARR equals that MRR multiplied by 12.
Is ARR the same as revenue collected in the last year?
No. ARR is a run-rate. Cash collected over the last twelve months includes one-time charges, annual prepayments, and refunds. Those belong in a cash or billings report, not in ARR.
Does Data Lighthouse show an ARR card?
Yes. The annual recurring revenue card is the normalized MRR multiplied by 12. A $120 yearly plan is $10 of MRR and $120 of ARR.
Related reading
- Next.js Stripe analytics dashboard template
- Public live demo
- Template checkout
- Monthly recurring revenue (MRR)
- Churn rate
- Customer lifetime value (LTV)