Revenue & MRR Movement Da
MRR waterfall (new/expansion/contraction/churn) and cohort retention dashboard
Tracking SaaS metrics in fragile spreadsheets means the numbers never tie out and nobody trusts the churn figure. This module turns your recurring-revenue records (mrr.subscription) into a board-ready dashboard: a reconciled MRR movement waterfall classifying new, expansion, contraction, reactivation and churn so opening plus movements always equals closing. It rolls up net and gross retention, MRR and logo churn, ARR, ARPA, a sign-up cohort retention table and a growth/churn-based forecast. Built for SaaS founders, finance leads and CFOs, it is pure Odoo data depending only on base and mail — so it runs in Community with no external analytics service.
Key Features
Recurring revenue subscriptions
mrr.subscription records a customer, plan, mrr_amount and start/end dates with a trial/active/paused/churned state. arr_amount (mrr × 12), cohort_month and is_active are computed automatically, and action_activate, action_pause and action_churn drive the lifecycle with chatter tracking.
Reconciled MRR movement waterfall
mrr.snapshot.build_snapshot classifies every subscription's mrr_on(period) against one month earlier into new, expansion, contraction, reactivation and churned MRR. A _check_reconciliation constraint enforces that opening + movements = closing to within a penny, so the waterfall always ties out.
The retention metrics investors ask for
Each snapshot's _compute_derived produces net_new_mrr, ARR, ARPA, gross_churn_rate, net_retention_rate and logo_churn_rate from real stored movement figures. These are the SaaS health numbers boards and investors expect, computed not estimated.
Cohort retention table
mrr.cohort.build_cohort groups subscriptions by their sign-up cohort_month and walks forward month by month, writing mrr.cohort.line points with retained_mrr, retained_customers and retention_pct. action_rebuild_all_cohorts regenerates every cohort so you can read retention curves across the whole base.
MRR forecasting
mrr.forecast projects forward from a base_mrr over a horizon applying monthly_growth_pct and monthly_churn_pct. action_derive_rates averages the trailing six snapshots to set realistic rates, and action_compute generates one mrr.forecast.line per month with projected MRR, new, churn and ending ARR.
One-click snapshot building and ranges
action_rebuild_current snapshots the current month-end on demand, action_recompute refreshes a chosen period, and rebuild_range builds a snapshot for every month-end between two dates. Helpers like total_mrr_on and mrr_active_on compute live MRR for any reference date.
Customer counts and ARPA roll-up
Snapshots store active_customers, new_customers and churned_customers, and derive ARPA as closing MRR over active customers. Together with logo_churn_rate this separates revenue movement from customer movement so you see whether churn is a few big accounts or many small ones.
Pure Odoo data, no external service
All models — mrr.subscription, mrr.snapshot, mrr.cohort and mrr.forecast — are plain Odoo records depending only on base and mail. No Stripe or third-party analytics account is required, so the entire dashboard runs in Community on data you already own.
Use Cases
Screenshots
Cohorts
Forecasts
Subscriptions
Why Choose This Module
Stop tracking SaaS metrics in fragile spreadsheets. This module turns your recurring-revenue lines into a board-ready dashboard: the MRR movement waterfall (new, expansion, contraction, reactivation, churn) reconciled so opening + movements = closing, net and gross retention, churn rates, cohort retention and ARR. Everything is plain Odoo data — works in Community with no external service.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: base, mail
- Support: support@pokutsoft.com
Update date: 2026-07-02