SaaS FP&A & ASC 606 Revenue Accounting
SaaS RPO, Calculated Billings & Book-to-Bill Formula
Reconcile ASC 606 / IFRS 15 Calculated Billings (Revenue + Delta Deferred Revenue), Remaining Performance Obligations (RPO = Deferred Revenue + Unbilled Backlog), Contracted Net Bookings, and RPO Book-to-Bill.
Stop mistaking an invoice-cadence shift in Deferred Revenue for a SaaS bookings slowdown!
Under ASC 606 / IFRS 15, balance-sheet Deferred Revenue only captures UNEARNED INVOICED billings—so Calculated Billings = GAAP_Revenue + (Ending_Deferred_Rev - Beginning_Deferred_Rev) drops artificially whenever enterprise buyers switch from 3-year upfront invoicing to annual invoicing on a non-cancelable 3-year contract! Footnote-disclosed Remaining Performance Obligations (RPO) adds Unbilled Contracted Backlog directly onto Deferred Revenue: RPO_end = Ending_Deferred_Rev + Ending_Unbilled_Backlog! Reconciling both gives True Contracted Net Bookings = GAAP_Revenue + (RPO_end - RPO_beg) and RPO Book-to-Bill = Contracted_Net_Bookings / GAAP_Revenue (> 1.00x indicates expanding contracted backlog)!
Verify on Quarterly_GAAP_Revenue = $50.0M (B2), Beginning_Deferred_Rev = $80.0M (B3), Ending_Deferred_Rev = $85.0M (B4), Beginning_Unbilled_Backlog = $100.0M (B5 -> Beginning RPO = $180.0M), and Ending_Unbilled_Backlog = $115.0M (B6): Calculated Billings equals 50 + (85 - 80) = $55.00M (1.10x invoice billings ratio, E2); Ending Total RPO equals 85 + 115 = $200.00M (E3); Contracted Net Bookings equals 50 + (200 - 180) = $70.00M (capturing +$15.0M of unbilled multi-year commitments, E4); and RPO Book-to-Bill equals 70 / 50 = 1.40x (E5)! Now test shifting $10M from upfront invoicing into unbilled backlog (B4 = 75, B6 = 125): Calculated Billings plunges to $45.00M (< Revenue!), yet RPO ($200.00M), Net Bookings ($70.00M), and RPO Book-to-Bill (1.40x) stay completely immune!
| ASC 606 SaaS Backlog Metric (Rev=$50M, Def: $80M->$85M, Unbilled: $100M->$115M) | Formula | Verified Output |
|---|---|---|
| Calculated Billings ($M) | GAAP_Rev + (Def_End - Def_Beg) | $55.00M ($45.00M if annual-invoiced) |
| Ending Total RPO ($M) | Def_End + Unbilled_End | $200.00M (Unchanged by invoice timing) |
| Contracted Net Bookings ($M) | GAAP_Rev + (RPO_End - RPO_Beg) | $70.00M |
| RPO Book-to-Bill Ratio | Contracted_Net_Bookings / GAAP_Rev | 1.40x |
ASC 606 Contracted Net Bookings & RPO Book-to-Bill Formula
Validate GAAP_Revenue > 0 and non-negative Deferred Revenue and Unbilled Backlog balances!
=LET(rv_q, B2, df_0, B3, df_1, B4, ub_0, B5, ub_1, B6, IF(OR(rv_q <= 0, df_0 < 0, df_1 < 0, ub_0 < 0, ub_1 < 0), "Invalid ASC 606 Ledger", LET(rp_0, df_0 + ub_0, rp_1, df_1 + ub_1, bk_n, rv_q + (rp_1 - rp_0), ROUND(bk_n / rv_q, 2))))Calculated Billings vs RPO Bookings Divergence Check
Compare E4 - E2 (= Ending_Unbilled - Beginning_Unbilled) during earnings-model peer review so analysts spot multi-year billing-frequency changes immediately!
=IF(OR(B2 <= 0, B3 < 0, B4 < 0, B5 < 0, B6 < 0), "Invalid ASC 606 Ledger", ROUND(B2 + ((B4 + B6) - (B3 + B5)), 2))Try the example
Use the original values or change them to test your understanding.