Home › Blog › Bookings vs Revenue: a CFO-grade reconciliation in one spreadsheet
Bookings vs Revenue: a CFO-grade reconciliation in one spreadsheet
June 9, 2026 · 8 min read · Revenue FinanceMost companies do not have a bookings vs revenue problem. They have a bookings vs revenue reconciliation problem, which is different. The numbers are fine in both systems. What is missing is the bridge that explains why they do not agree. This is the five-step bridge that closes 95% of the gap, plus how to build it as one spreadsheet that does not lie.
The eternal argument
Every quarter, Sales reports a bookings number. Every quarter, Finance reports a revenue number. The two never match. The conversation about why becomes a forensic accounting exercise: three people on a Zoom call walking through emails, contract amendments, and the date someone counter-signed a redline at 11:47 PM on the last day of the quarter. By the time the variance is explained, the meeting is over and nobody understands the business better than they did 60 minutes ago.
The reason this happens is simple. Bookings and revenue measure different things. Bookings measures the contract value that was committed in the period. Revenue measures the value that was earned in the period under ASC 606. The two numbers diverge whenever contract terms include a ramp, an amendment, a partial-period start, a multi-year commitment, or a non-cash consideration. Which is almost always.
The reconciliation problem is not figuring out which number is right. They are both right. The reconciliation problem is documenting the bridge: every dollar of difference, attributed to a specific bridging item, in a format that survives next quarter.
What ASC 606 actually requires, in plain English
Since ASC 606 took effect, the revenue recognition standard has boiled down to five steps. You identify the contract, identify the performance obligations inside it, determine the transaction price, allocate price to performance obligations, and recognize revenue when (or as) those obligations are satisfied.
For a typical B2B SaaS contract, the practical implication is this. Subscription revenue recognizes ratably over the subscription term, professional services recognize as delivered, and any one-time setup fees recognize at delivery (unless they are non-distinct, in which case they roll into the subscription stream). Multi-year ramps recognize at the average annual contract value per year, with a contract asset or deferred revenue balance accruing or unwinding depending on the billing schedule.
That is the entire framework most B2B SaaS finance teams use. The complications come from the edge cases: amendments, partial-month starts, churned customers with refunds, swap deals where the customer trades one SKU for another mid-contract. Those edge cases are where the reconciliation work happens.
The five bridging items that account for 95% of the gap
I have rebuilt this reconciliation at three different B2B SaaS companies. The categories of bridging items are remarkably consistent across all of them.
1. Ramp deals. Take a three-year contract at $100K Year 1, $150K Year 2, $200K Year 3. Total Contract Value is $450K, booked in the period the deal closes. Revenue recognizes ratably at the average annual value of $150K per year. Assume the customer is billed annually matching the contract schedule: $100K in Y1, $150K in Y2, $200K in Y3. In Year 1, GAAP revenue is $150K but billings are only $100K, so the company records a $50K contract asset (unbilled receivable). No deferred revenue is created in this scenario, because billings never exceed recognized revenue. By the end of Year 3, the contract asset has unwound to zero ($50K created in Y1, unchanged in Y2 at $150K billed against $150K recognized, then drawn down by $50K in Y3 when $200K is billed against $150K recognized). The bridge: bookings $450K, Year 1 revenue $150K, Year 1 billings $100K, contract asset created $50K. Most reconciliation arguments are someone forgetting one of those four numbers, or worse, confusing contract asset (revenue earned ahead of billing) with deferred revenue (cash collected ahead of revenue).
2. Mid-term amendments. A customer upgrades from $50K/year to $80K/year nine months into a 12-month contract. The annualized uplift is $30K of incremental ARR, and that is the number Sales should publish on the ARR walk. But only three months of contract term remain, so the in-period incremental bookings figure is 3/12 × $30K = $7.5K of remaining-term value. Revenue catches up over those three months at the new $80K rate, and the deferred revenue from the original contract continues to release as if nothing changed for the unupgraded portion. The bridge column shows "Amendment uplift" with both figures called out: ARR delta and remaining-term TCV delta. Picking one number without labeling which is which is how this category causes recurring arguments.
3. Partial-period starts. A contract that begins on the 17th of the month creates two partial months: the start month with 14 days of revenue and a final month that may or may not be partial depending on when the term ends. Most spreadsheets compute revenue with daily proration. Some compute it with monthly proration. The two methods produce different numbers, and if Sales and Finance are using different methods, the reconciliation breaks every quarter.
4. Non-distinct add-ons. A customer buys the platform for $60K and "Premium Support" for $20K. Are those two distinct performance obligations or one? Under ASC 606, the answer depends on whether the support is meaningfully separable. If not, both recognize ratably as a single stream, which means $80K over 12 months instead of $60K plus $20K-at-delivery. Sales books the $20K as if it were upfront. Finance recognizes ratably. Bridge: "Non-distinct deferral."
5. Cancellations and refunds. A customer churns 7 months into a 12-month contract with a refund. Bookings reverse for the unbilled portion. Revenue reverses for any over-recognized amount. The deferred revenue balance drops to zero. Most reconciliation tools handle this poorly because they treat the contract as a single line item rather than a stream that needs to be unwound. The bridge: "Churn reversal" with the refunded amount called out separately from the unrecognized future revenue.
The 20-deal worked example
The smallest model that actually works has 20 deals, enough to cover every category above. Pick five new business contracts (clean), four multi-year ramps, three mid-term amendments, three partial-period starts, three non-distinct add-on bundles, and two cancellations. Walk each deal from contract date through monthly recognition through the end of the term.
Build it in three tabs. Tab one: the deal taxonomy, one row per deal, columns for contract date, term, ACV, TCV, billing schedule, amendment markers, cancellation date. Tab two: the monthly recognition grid, one column per month, one row per deal, populated by a formula that reads the taxonomy and applies the right recognition rule. Tab three: the bridging summary, bookings minus revenue, attributed to each of the five bridging categories with contract asset and deferred revenue tracked as separate columns.
The reconciliation works when the bridging summary mathematically explains the variance between bookings and revenue to the dollar. Not "approximately." To the dollar. If it does not, one of the five categories has a missing case.
Why CFOs do not trust the bookings number
The bookings number, as Sales reports it, is almost always inflated relative to what Finance can recognize over the contract term. Not because Sales is dishonest. Sales counts TCV as a single number while Finance has to apply discounting, ramp averaging, and non-distinct deferrals to that same TCV.
The fix is to publish bookings at multiple granularities: TCV, ARR, MRR, billings, recognized revenue. Each measures something different and each is correct for a different conversation. Forecast meetings should use ARR. Cash-flow models should use billings. Income statement discussions should use recognized revenue. When Sales and Finance start using the right number for the right conversation, the arguments mostly disappear.
When to graduate to software
The one-spreadsheet reconciliation works through about 200-500 active contracts. After that, three things break. The spreadsheet gets slow, the manual entry burden becomes a full-time job, and the audit trail becomes too long for a human to defend. That is the point where Maxio, Sage Intacct, Chargebee, or one of the niche RevRec vendors earns its price tag.
Below 200 active contracts, the spreadsheet usually beats the software on flexibility. You can model an edge case in 20 minutes. The software needs a configuration project. Most teams I see migrate to software around 300-400 active contracts, which is roughly when the spreadsheet starts losing more time than the software costs.
The half-day setup
If your bookings and revenue numbers do not reconcile cleanly today, here is the half-day intervention:
- Identify the last 20 representative deals. Make sure all five bridging categories are covered. (1 hour)
- Build the three-tab spreadsheet model. (2 hours)
- Have one Sales leader and one Finance leader walk through the bridging summary together. (1 hour)
- Write a one-page policy document that codifies the bridging rules. Publish it. (30 minutes)
- Schedule a quarterly review of the bridging categories. New edge cases get added to the policy, not papered over. (15 minutes calendar setup)
That is the entire intervention. It does not require new software, new headcount, or a 90-day consulting engagement. It requires four hours and a willingness to write down the policy that everyone has been improvising for years.
Want to apply this to your team?
I work with B2B SaaS teams and operators in the US and Mexico. Start with a 30-minute conversation.
Start a Conversation