Read the analytics
Read the analytics
The console surfaces revenue and retention analytics from real subscription and invoice data. This recipe maps each number to where it comes from. Background: Analytics.
The console surfaces
| Screen | Route | Shows |
|---|---|---|
| Dashboard | / |
MRR/ARR, churn rate, outstanding, open-invoice count, plan breakdown. |
| Analytics → Revenue | /analytics/revenue |
MRR movement, ARR waterfall, cohorts. |
| Analytics → Retention | /analytics/retention |
Net revenue retention, customer churn. |
All figures render in the account's primary currency (RevenueMetrics::primaryCurrency()).
How MRR movement is computed
MRR movement (new / expansion / contraction / churn) is recorded incrementally:
as subscriptions change, SubscriptionMrrMovementRecorder writes movement rows into
subscription_mrr_movements. The movement report (RevenueAnalytics::movement())
then reads committed facts for a period rather than recomputing history from scratch —
so the numbers are stable and auditable.
What each number means
- MRR / ARR — recurring revenue, monthly and annualized. The plan breakdown splits MRR by plan.
- ARR waterfall — the annualized bridge across a period (
arr()). - NRR (net revenue retention) — revenue retained + expanded within a cohort
(
retention()), independent of new logos. - Customer churn — the rate of customers lost over the period (
customerChurn()); the dashboard'schurnRate()is the top-line figure. - Cohorts — a retention matrix across a set of periods (
cohorts()), withmonthLabels()for the axis. - Outstanding / open invoices — unpaid balance and count (
outstanding(),openInvoiceCount()).
Captured cancellation reasons/feedback (from retention) enrich churn analysis.
Where the math lives
The MRR/NRR/ARR/cohort computations are the engine's reporting module; the app's
RevenueMetrics / RevenueAnalytics read models select and present them. For the
reporting internals see
https://github.com/cboxdk/laravel-billing/tree/main/docs → reporting.