Teardown

Why your ARR is three different numbers

Ask three people at your SaaS company what your ARR is, and you'll get three answers. That's not a data-quality problem to be embarrassed about — it's arithmetic. Here's why the numbers diverge, and how to tell which one is right.

The CFO quotes one number in the board deck. The VP of Sales quotes a bigger one in the QBR. Finance's billing system shows a third. Nobody is lying, and nobody is wrong — they're each reading a different stage of the same revenue. The trouble starts when someone has to reconcile them under a board-meeting deadline and can't say, in one sentence, why they don't match.

Let's take them one at a time, using a representative $4.9M-ARR SaaS company.

The three numbers

Sales · CRM
$4,896,000
Bookings
What sales closed — every closed-won opportunity in the CRM. The number the go-to-market org lives and dies by.
Billing
$4,812,000
Billings
What you're actually invoicing — the sum of active subscriptions in the billing system. The number ops and cash planning use.
Finance · GL
$4,740,000
Recognized
What finance has recognized under ASC 606 in the general ledger. The GAAP number the board and your auditor should be quoting.

Three systems, three grains, one company. A $156,000 spread from top to bottom — about 3.2% of ARR. Big enough that if two teams quote different ends of it in the same meeting, someone loses trust in all of it.

Why they diverge

The spread isn't noise. It's the sum of two legitimate, explainable timing gaps — and once you name them, the whole thing reconciles.

1. Closed-won in the CRM, not yet billing. Sales marked the deal won, but it hasn't been provisioned into the billing system yet — a late paperwork step, a start date in the future, a hand-off that slipped. In our example that's $84,000 across 3 accounts. Real revenue, sitting between "sold" and "invoiced."

2. Billed, but not yet recognized (deferred). You've invoiced it, but under ASC 606 you can only recognize revenue as you deliver it — so annual prepayments and mid-period starts sit in deferred revenue until they're earned. Here, $72,000 is billed-but-deferred. This gap is supposed to exist; it's correct accounting.

The reconciliation — bookings → billings → recognized
Bookings (CRM, closed-won)$4,896,000
− Closed-won, not yet billing3 accounts, sold but not provisioned−$84,000
Billings (active subscriptions)$4,812,000
− Billed, not yet recognizeddeferred under ASC 606 — expected timing−$72,000
Recognized (GL, ASC 606)$4,740,000
Every dollar of the $156,000 spread is accounted for. Nothing is missing — it's just in a different place in the pipeline.

(There's arguably a fourth number: cash. Even the $4,812,000 you billed isn't the $4,812,000 you collected — subtract aged AR, failed payments in dunning, and disputes and you get a smaller number again. That's the "ARR is growing but the bank balance isn't" conversation, and it's a whole teardown of its own.)

So which one is right?

All of them — for different questions. Quote bookings to measure the sales team. Quote billings to plan cash and headcount. Quote recognized revenue to the board, your auditor, and any acquirer's diligence team, because it's the one that's GAAP-defensible.

The mistake isn't having three numbers. It's not being able to walk from one to the next, on demand, without a spreadsheet and half a day.

"Which number is right" is the wrong question. The right question is: can you reconcile them in minutes, and does every figure trace to the exact rows that produced it? If yes, the three numbers are a feature — a clean view of revenue at every stage. If no, they're a standing liability that surfaces at the worst possible moment: the board meeting, the audit, the data room.

How to reconcile it in practice

The manual version is what most RevOps and finance teams actually do: export the CRM, export billing, pull the GL, line them up in a spreadsheet, and hunt down the deltas by hand — usually the Friday before the board call. It works, but it's slow, it's stale the moment it's done, and it lives in one person's head.

The durable version is a standing reconciliation with three properties:

Tie out, top to bottom. Bookings → billings → recognized, as a bridge, so the spread is always a sum of named steps — never an unexplained gap.
Itemize every delta. "$84,000 not yet billing" is a shrug; "these 3 accounts, closed-won on these dates, not yet provisioned" is an action item you can hand to ops.
Cite every figure. Each number should link to the exact query and source rows behind it — so when someone asks "does this tie out?" the answer is "yes, and here's why," not "let me get back to you."

Do that, and the three-numbers problem stops being a problem. You stop reconciling and start reporting.

What we build

Truacta is the standing reconciliation — read-only, from your warehouse.

It ties bookings → billings → recognized across your CRM, billing, and GL, itemizes every gap to the accounts behind it, and cites every figure back to the SQL that produced it. Your rows never leave your warehouse; the number is never a guess. We're taking on a few design partners.