A SaaS company stopped reconciling MRR before every board meeting
Stripe, the finance model and the CRM each showed a different MRR. We agreed one set of definitions with finance, sales and product, built the data model, and replaced a hand-built board pack with Power BI dashboards that refresh daily.
5 min readPublished with the client's approvalUpdated September 2026
Three versions of MRR, and a board pack rebuilt by hand every month.
What we did
Agreed metric definitions, built one SQL data model and three Power BI dashboards.
Result
[n] days of reporting removed each month, and one number in every meeting.
The challenge
Every board meeting started with a reconciliation
Stripe counted annual plans as revenue on the day they were paid. Finance spread them over twelve months. Sales reported bookings from the CRM. All three were defensible, so the first twenty minutes of every board and leadership meeting went on explaining the gap.
Board confidenceInvestors kept asking why the numbers moved between decks.
Slow decisionsPricing and hiring waited for a reconciled number.
Analyst time[n] days a month went on copying exports into slides.
Starting point
What we had to work with
The data was all there, spread across billing, CRM and the product database, with no shared account ID between two of them.
BillingStripe subscriptions, invoices, upgrades and refunds.
CRMHubSpot deals, account owners and contract dates.
Product dataUsage events from the application database.
ConstraintMid-month upgrades and annual prepaid plans broke the simple monthly totals.
What we did
Four steps, one decision that mattered
Agreed the definitionsWorkshops with finance, sales and product on MRR, net revenue retention and churn. Week 1Led to finding 1
Built the data modelJoined Stripe, HubSpot and product data in SQL with one account ID. Weeks 2 to 3Led to finding 2
Designed the dashboardsBoard, sales and product views, each built around the questions that team asks. Weeks 3 to 5
Handed overTraining, documentation and a daily refresh with failure alerts. Week 6
The key decision
We normalised annual and prepaid plans into monthly revenue and counted upgrades from the day they took effect, so MRR matched how finance reports revenue.
Results
What changed
Before
Three MRR numbers in three tools
A board pack rebuilt by hand monthly
Expansion revenue invisible
After
One MRR definition, documented
Dashboards that refresh every morning
Expansion tracked by account
Finding 1 from step 1
[x]% of the MRR gap came from annual plans counted up front
Most of the disagreement was a definition problem, not a data problem.
Sample data shape. Replace with the anonymised chart from the project.
So what: one definition closed most of the gap before any dashboard was built.
Finding 2 from step 2
Expansion from existing accounts drove [x]% of growth
Growth was coming from customers upgrading, not only from new logos.
Sample data shape. Replace with the anonymised chart from the project.
So what: the company moved a customer success hire ahead of a new sales hire.
"[One or two sentences from the client about the result, in their own words. The most specific number wins.]"
[ ]
[Name][Role], [B2B SaaS company]
Approved for publishing
Facing a similar problem?Tell us what's going on. We'll say honestly whether we can help, and how.
Review expansion accounts monthly with customer success
Earlier upgrade conversations
High
Set a net revenue retention target for the board
A growth goal everyone can track
Medium
Add product activation data next
Earlier churn signals
Medium
Honest limits
What this project can't tell you
Data before [year] was incomplete, so trends start from [year].
Revenue in other currencies was converted at month-end rates.
Figures are rounded and anonymised with the client's approval.
Technical appendix
For the analysts in the room
Buyers can skip this. Technical reviewers usually want to see it.
DefinitionsMRR, NRR, expansion
MRR: recurring revenue normalised to one month; annual plans divided by 12. Net revenue retention: revenue this month from customers who existed 12 months ago, divided by their revenue then.
Methodwhy this approach, not another
Definitions came first because most of the gap was definitional. Building dashboards on the old numbers would have automated the argument, not settled it.
Data and toolssources, volumes, stack
Stripe and HubSpot loaded into PostgreSQL, modelled in SQL, reported in Power BI with a daily refresh.
Check the workcode sample
The key step: turning every plan, monthly or annual, into monthly recurring revenue.
-- Normalise every active subscription to monthly recurring revenueSELECT date_trunc('month', m.month) AS month,
SUM(CASE s.interval
WHEN'year'THEN s.amount / 12.0
WHEN'month'THEN s.amount
END) AS mrr
FROM months m
JOIN subscriptions s
ON m.month BETWEEN s.start_date ANDCOALESCE(s.end_date, m.month)
GROUP BY 1 ORDER BY 1;
For revenue metrics, usually yes. Adding the CRM and product data makes expansion and churn signals much stronger.
Will investors trust numbers from a dashboard?
Yes, when the definitions are written down and match finance. That is why definitions come before dashboards.
Can our team change the dashboards later?
Yes. Everything is built in your Power BI tenant and documented for whoever takes it over.
What would a similar project cost us?
Projects start at $6,000 and are fixed from a written scope. The pricing page has an estimator.
Reconciling MRR before every board meeting?
Most SaaS teams we talk to have the same three-way argument between billing, finance and sales. In 30 minutes we can tell you how much of it is definitions and what fixing it would take.