If you work in SaaS finance, deferred revenue is not optional —it is the core of your balance sheet. Every annual contract billed upfront, every quarterly invoice sent before the service period begins, creates a liability that you need to track, amortize, and reconcile every single month.

Most SaaS controllers track this in Excel. And for the first 20 or 30 contracts, it works fine. But the schedule has to be built correctly from day one, or you end up with reconciliation gaps that consume hours of close time every month.

This post walks through exactly how to build a deferred revenue waterfall schedule in Excel —the structure, the formulas, the journal entries, and the reconciliation logic. If you have been stitching this together from scratch every time you start a new company, this will save you significant time.


What Is Deferred Revenue (and Why SaaS Companies Always Have It)

Deferred revenue is cash you have collected from a customer for services you have not yet delivered. Under accrual accounting, you cannot recognize that cash as revenue until you fulfill the performance obligation.

In SaaS, the performance obligation is typically “provide access to the software for the subscription period.” If a customer pays $120,000 upfront for a 12-month annual contract, you record $120,000 as a liability (deferred revenue) on day one. Each month, as you deliver the service, you recognize $10,000 of revenue and reduce the liability by the same amount.

This is not a technicality. Deferred revenue is usually the largest current liability on a SaaS company’s balance sheet. Auditors scrutinize it. Investors use it to calculate billings metrics. Getting it wrong means restating financials.


The Accounting: ASC 606 and Recognition Timing

Under ASC 606, revenue is recognized when (or as) you satisfy a performance obligation. For a standard SaaS subscription with no significant implementation services, revenue is recognized ratably over the service period —straight-line, month by month.

The key timing distinction:

  • Billing date: when you invoice the customer and record the receivable (or collect cash)
  • Recognition date(s): each month of the service period when you recognize a portion of the total contract value

Three common billing patterns in SaaS:

PatternBillingRecognition
Annual upfrontFull year billed at contract start1/12 per month over 12 months
QuarterlyQuarter billed at start of each quarter1/3 per month over 3 months
MonthlyBilled each monthRecognized immediately (no deferral)

Monthly billing creates no deferred revenue —you bill and recognize in the same period. Annual and quarterly billing are where the waterfall schedule matters.

For a deeper look at how ASC 606 applies to commissions tied to these contracts, see How to Capitalize Sales Commissions Under ASC 606.


Building a Deferred Revenue Waterfall in Excel

The waterfall schedule is the workhorse. It tracks every contract and shows exactly how much revenue is recognized in each period.

Structure

  • Rows = individual contracts (one row per contract or billing event)
  • Columns = months (your reporting periods)
  • Each cell = revenue recognized that month for that contract
  • Summary rows at the bottom: total recognized revenue per month, total deferred balance remaining
  • Summary columns on the right: total contract value, cumulative recognized, remaining deferred balance

Step 1: Set Up the Contract Input Area

Create a table with contract-level details. This is your source data.

ColumnFieldExample
AContract IDC-001
BCustomer NameAcme Corp
CBilling Date2026-01-15
DService Start2026-02-01
EService End2027-01-31
FTotal Contract Value (TCV)$120,000
GBilling FrequencyAnnual
HService Months12

The Service Months column can be calculated:

=DATEDIF(D2, E2, "M")

Or, if you prefer to avoid DATEDIF quirks:

=(YEAR(E2)-YEAR(D2))*12 + MONTH(E2) - MONTH(D2) + 1

Step 2: Build the Monthly Recognition Columns

Starting in column J (or wherever your first month column is), each column header is a month-end date: 2026-01-31, 2026-02-28, 2026-03-31, etc.

For each cell in the waterfall grid, the formula checks: is this month within the service period for this contract? If yes, recognize the monthly portion. If no, zero.

=IF(AND(J$1 >= $D2, J$1 <= $E2), $F2 / $H2, 0)

Breaking this down:

  • J$1 is the column month-end date (absolute row reference so it stays on row 1)
  • $D2 is the service start date (absolute column reference so it stays on column D)
  • $E2 is the service end date
  • $F2 / $H2 is the monthly recognition amount (TCV divided by service months)

This single formula copies across the entire grid. Every cell either shows the monthly recognition amount or zero.

Step 3: Add Summary Columns

After the last month column, add three summary columns:

Total Contract Value (already in column F, but repeat it here for readability):

=$F2

Cumulative Recognized to Date —sum of all monthly recognition columns for this contract:

=SUM(J2:AJ2)

Remaining Deferred Balance:

=$F2 - SUM(J2:AJ2)

Step 4: Add Summary Rows

At the bottom of the contract rows, add:

Total Recognized Revenue per Month —sum down each month column:

=SUM(J2:J50)

Cumulative Recognized Revenue:

=SUM($J$51:J51)

Where row 51 is your total recognized row. Use a running sum that accumulates left to right.

Total Deferred Revenue Balance (end of each month):

=SUM($F$2:$F$50) - SUM($J$51:J51)

This is total billings minus cumulative recognized revenue. It should match your balance sheet deferred revenue balance.


Worked Example: Five Contracts

Here are five contracts with different billing terms:

ContractCustomerBilling DateService StartService EndTCVFrequencyMonthly Rev
C-001Acme Corp2026-01-152026-02-012027-01-31$120,000Annual$10,000
C-002Beta Inc2026-01-012026-01-012026-12-31$60,000Annual$5,000
C-003Gamma LLC2026-03-012026-03-012026-05-31$9,000Quarterly$3,000
C-004Delta Co2026-02-012026-02-012027-01-31$36,000Quarterly$3,000
C-005Epsilon Ltd2026-01-012026-01-012026-06-30$18,000Semi-Annual$3,000

Waterfall Output (Jan - Jun 2026)

ContractJanFebMarAprMayJunCum. RecognizedRemaining
C-001$10,000$10,000$10,000$10,000$10,000$50,000$70,000
C-002$5,000$5,000$5,000$5,000$5,000$5,000$30,000$30,000
C-003$3,000$3,000$3,000$9,000$0
C-004$3,000$3,000$3,000$3,000$3,000$15,000$21,000
C-005$3,000$3,000$3,000$3,000$3,000$3,000$18,000$0
Total$8,000$21,000$24,000$24,000$24,000$21,000$122,000$121,000

Notice how C-001 starts recognizing in February (service starts Feb 1), and C-003 is fully recognized by May. The remaining deferred balance column tells you exactly what sits on the balance sheet for each contract at the end of June.


Journal Entries

At Billing (Annual Upfront —Contract C-001)

When you invoice $120,000 for an annual contract:

AccountDebitCredit
Accounts Receivable$120,000
Deferred Revenue (Current Liability)$120,000

No revenue hits the P&L at billing. The full amount sits in deferred revenue.

Monthly Recognition (Contract C-001, February 2026)

Each month during the service period:

AccountDebitCredit
Deferred Revenue$10,000
Revenue - SaaS Subscription$10,000

This entry repeats every month for 12 months until the deferred balance for this contract reaches zero.

Quarterly Billing (Contract C-004)

For quarterly billing, you record a smaller deferral each quarter. When the first quarter is billed ($9,000 for Q1):

AccountDebitCredit
Accounts Receivable$9,000
Deferred Revenue$9,000

Then each month within that quarter:

AccountDebitCredit
Deferred Revenue$3,000
Revenue - SaaS Subscription$3,000

The key point: the journal entry structure is identical regardless of billing frequency. Only the amounts and timing change. Your waterfall schedule drives the recognition amounts, and the JE Generator pulls directly from it.


Reconciliation: The Deferred Revenue Rollforward

The waterfall tells you how much to recognize each month. But you also need a rollforward schedule that ties directly to the balance sheet. This is what auditors ask for first.

The rollforward has four lines:

LineFormula
Opening Deferred RevenuePrior month’s closing balance
(+) New BillingsSum of all contracts billed this month
(-) Revenue RecognizedSum from waterfall total row
(=) Closing Deferred RevenueOpening + Billings - Recognized

Rollforward for Jan - Jun 2026

JanFebMarAprMayJun
Opening Balance$0$190,000$205,000$181,000$157,000$133,000
+ New Billings$198,000$36,000$9,000$0$0$0
- Recognized($8,000)($21,000)($24,000)($24,000)($24,000)($21,000)
Closing Balance$190,000$205,000$190,000$157,000$133,000$112,000

The closing balance must match the sum of all remaining deferred balances across individual contracts. If it does not, you have a reconciliation break that needs to be investigated before close.

In Excel, add a variance check row:

=ClosingBalance - SUMPRODUCT((ContractTCV) - (CumulativeRecognized))

If this is anything other than zero, something is wrong. Highlight it in red with conditional formatting so it is impossible to miss.

This reconciliation discipline is similar to what we cover in the Month-End Close Checklist for Controllers —deferred revenue is one of the most common close items that trips up SaaS finance teams.


The Excel Maintenance Problem at Scale

The waterfall approach described above works well for 10 to 30 contracts. You can build it in an afternoon, and monthly maintenance takes 15 to 20 minutes.

At 50+ active contracts, things start to break down:

  • Row management: Adding new contracts means inserting rows and making sure every SUM range, every SUMPRODUCT, and every named range expands correctly. One missed range reference and your totals are wrong silently.
  • Mid-term changes: A customer upgrades mid-contract, downgrades, or churns early. You need to handle the remaining deferred balance —accelerate recognition, write off, or reallocate. Each scenario requires manual adjustment rows.
  • Multi-element arrangements: Some contracts bundle implementation, training, and subscription. ASC 606 requires you to allocate the transaction price across performance obligations. Your simple one-row-per-contract waterfall cannot handle this without significant rework.
  • Audit trail: When the auditors ask “why did deferred revenue change by $47,000 this month,” you need to trace that back to specific contracts. In a 200-row waterfall, that means manual filtering and cross-referencing.
  • Period-end cutoff: Contracts that start or end mid-month require proration logic. The simple TCV / months formula does not handle partial months without additional date math.

None of these problems are unsolvable in Excel. But solving all of them in a single workbook —with proper protection, input validation, and reconciliation checks —takes substantial upfront design work.


A Better Starting Point

We are building a Deferred Revenue Waterfall Workbook that handles all of this out of the box: contract input table with validation, automatic waterfall generation, journal entry output, rollforward reconciliation, and period selection for monthly, quarterly, or annual reporting.

If you want early access, email hello@kdeskaccounting.com.

In the meantime, if you are dealing with related SaaS accounting workflows, these templates are available now:

Each one is built for the same audience —SaaS finance teams managing technical accounting in Excel who need audit-ready output without enterprise software.


Key Takeaways

  1. Deferred revenue is a liability, not a memo. Track it with the same rigor you apply to debt schedules.
  2. The waterfall structure (rows = contracts, columns = months) is the standard approach and scales reasonably well to about 50 contracts.
  3. Every cell in the waterfall uses one formula: if the month falls within the service period, recognize TCV / service months. Otherwise, zero.
  4. The rollforward (opening + billings - recognized = closing) is your reconciliation anchor. If it does not tie, do not close the books.
  5. Journal entries follow directly from the waterfall totals. Automate the JE output so your monthly close is a formula, not a manual exercise.
  6. At scale, the manual waterfall becomes a liability of its own. Purpose-built workbooks with validation, protection, and reconciliation checks save hours every month.

KDesk Accounting builds audit-ready Excel tools for finance teams. Browse all templates →