Skip to main content
BlogOctober 23, 2026

Contract asset and contract liability rollforward: a worked example for SaaS

A contract asset and contract liability rollforward for SaaS, worked through one quarter: billings, revenue, reclasses to receivables and the GL tie-out.

Zuny FesterBy Zuny Fester, Head of Operations and Marketing
Reviewed by Zuny Fester
Published Editorial policy

Part of the revenue recognition guide.

A waterfall chart rolls an opening blue balance through increases and a dashed decrease to a closing blue balance, with an arc linking start to end.

A contract asset is revenue you have earned but cannot yet bill, and a contract liability is cash received or due for service you have not yet delivered. The rollforward explains how each balance moved in a period: opening balance, plus billings or revenue, minus reclassifications or revenue, equals closing balance. Most SaaS teams can define both terms. Where they get stuck is tying each line to the billing system and the GL at quarter-end. This post works one hypothetical book of four contracts through a quarter, line by line, so every number traces to a source record.

Key takeaways

  • A contract asset is a conditional right to payment for work already done. It becomes a receivable when only the passage of time stands between you and payment (ASC 606-10-45-3 and 45-4).
  • A contract liability is recorded when payment is made or due, whichever is earlier (ASC 606-10-45-2). An invoice issued before its due date and still unpaid is not grossed up on the balance sheet.
  • Each contract is presented as one net position, a contract asset or a contract liability, with receivables shown separately.
  • The rollforward has to tie to revenue. In our hypothetical quarter, $30,000 released from contract liabilities plus $42,500 added to contract assets equals $72,500 of revenue.
  • Billing-system deferred revenue and GAAP contract liabilities can differ. In the example, one advance invoice creates a $60,000 reconciling item.
  • Loopfour, the deterministic finance workflow automation platform, builds the rollforward from the same contract, invoice and revenue records every quarter, so the tie-out is the same each time.

What are contract assets and contract liabilities?

Contract assets and contract liabilities are the two balance sheet positions ASC 606 uses for the gap between what you have delivered and what the customer has paid or owes. When you deliver first, the contract is an asset. When the customer pays or owes first, it is a liability (ASU 2014-09, 606-10-45-1).

PositionASC 606 definition (paraphrased)Typical SaaS cause
Contract assetRight to consideration for goods or services transferred, conditioned on something other than the passage of timeRamp deals, milestone-billed implementation, revenue ahead of billing
ReceivableRight to consideration that is unconditional; only time must passAny invoice for delivered service that is due or will be due
Contract liabilityObligation to transfer goods or services for which consideration has been received or is dueAnnual or quarterly billing in advance

The receivable line is the one teams often blur. If your question is how unbilled receivables differ from contract assets, our article on unbilled AR and how it differs from a contract asset covers that boundary. For a side-by-side of the two positions, see the difference between a contract asset and a contract liability.

When does a billing hit the contract liability?

A billing hits the contract liability when the customer pays or the payment falls due, whichever comes first. It does not hit when the invoice is issued. ASC 606's Example 38 shows this for a noncancellable contract: the receivable and contract liability are recorded on the due date. If the invoice is issued before the due date, the company does not present the receivable and contract liability gross, because the right to payment is not yet unconditional (606-10-55-285 and 55-286).

This is a common source of a gap between the billing system and the GL. Billing systems record an open invoice and deferred revenue on the invoice date. The GAAP balance sheet waits for payment or the due date.

Why is each contract one net position?

ASC 606 presents each contract as either a net contract asset or a net contract liability, not both. The Transition Resource Group discussed this, and the net position is determined at the contract level (PwC Viewpoint). Receivables sit outside the netting and are always shown on their own line.

The worked example: four SaaS contracts, one quarter

The example below is hypothetical, and every figure is illustrative. A SaaS company closes the quarter ended September 30, 2026. It has four noncancellable contracts. Revenue for subscriptions is recognized evenly over the service period. Implementation revenue is recognized over time using a cost-to-cost measure of progress.

ContractTermsStatus at July 1, 2026
A: annual prepaid$120,000 a year, billed each August 1 for the year ahead, net 30. Renewal invoice paid August 20One month of the prior year's prepayment left: $10,000
B: ramp deal24 months from January 1, 2026. Billed $5,000 a month in year one and $10,000 a month in year two, on the first of each month, net 30. Revenue $7,500 a monthSix months in. Revenue exceeds billings by $15,000
C: implementation$40,000 fixed fee. $20,000 billed at design sign-off, $20,000 at go-live30% complete, nothing billed: $12,000 earned
D: new annual prepaid$60,000 a year, service from October 1. Invoice issued September 15, due October 15Not signed yet

Step 1: Roll forward the contract liability

The contract liability moves only when payment is received or due in advance of service, and when service is delivered. In this quarter, contract A is the only contract in a liability position.

Contract liability, Q3 2026AmountSource record
Opening balance, July 1$10,000Prior quarter's closing balance (contract A, July service)
Add: received or due before performance$120,000Contract A renewal, paid August 20
Less: revenue from the opening balance($10,000)Contract A, July
Less: revenue from amounts added this quarter($20,000)Contract A, August and September
Closing balance, September 30$100,000Contract A, October to July

The split of the revenue line is not optional for public companies. ASC 606-10-50-8(b) requires disclosure of revenue recognized in the period that was included in the opening contract liability. Here that figure is $10,000.

Step 2: Roll forward the contract asset

The contract asset grows as you recognize revenue you cannot yet bill, and shrinks when the right to payment becomes unconditional. That second movement is a reclassification to receivables.

Contract asset, Q3 2026Contract BContract CTotal
Opening balance, July 1$15,000$12,000$27,000
Add: revenue recognized$22,500$20,000$42,500
Less: reclassified to receivables when billed($15,000)($20,000)($35,000)
Closing balance, September 30$22,500$12,000$34,500

Contract B shows why ramp deals create contract assets. Revenue is $7,500 a month, but the year-one invoice is $5,000, so the asset grows by $2,500 every month until year two's $10,000 invoices start drawing it down. Contract C shows a milestone reclassification. Progress moved from 30% to 80% ($32,000 earned to date), and the design sign-off invoice of $20,000 moved that amount from contract asset to receivable on August 15.

Step 3: Roll forward receivables

Receivables pick up every reclassification from the contract asset and every amount that falls due, and drop with collections.

Receivables, Q3 2026AmountSource record
Opening balance, July 1$5,000Contract B, June invoice
Add: reclassified from contract assets$35,000Contract B (July to September), contract C (milestone)
Less: collections($35,000)Contract B (June to August invoices), contract C (paid September 14)
Closing balance, September 30$5,000Contract B, September invoice

Contract A's renewal never touches receivables in this quarter. It was paid on August 20, before its August 31 due date, so the entry is cash to contract liability.

Step 4: Tie the rollforward to revenue

The two rollforwards together must equal revenue for the quarter. If they do not, a contract is missing from one of the schedules or a billing was posted to the wrong account.

Revenue tie-out, Q3 2026Amount
Released from contract liabilities (contract A)$30,000
Added to contract assets (contracts B and C)$42,500
Revenue per the rollforwards$72,500
Revenue per the GL (A $30,000 + B $22,500 + C $20,000)$72,500
Difference$0

Want to see your own rollforward built from your contracts and invoices? Book a workflow review.

Step 5: Reconcile the billing system to the GL

The billing system and the GL disagree by exactly one contract in this example, and the reason is timing, not error. Contract D's invoice was issued September 15 and is not due until October 15. The billing system shows it as an open invoice and as deferred revenue. Under Example 38, the GAAP balance sheet does not.

At September 30, 2026Billing systemGL (ASC 606)DifferenceExplanation
Open receivables$65,000$5,000$60,000Contract D invoiced, not yet due or paid
Deferred revenue / contract liability$160,000$100,000$60,000Same invoice
Contract assetsNot tracked$34,500n/aBuilt from revenue schedules less billings

Document the reconciling items every quarter, with the contract ID on each. For other reasons the two systems drift, see why deferred revenue doesn't match the general ledger.

Is a contract liability the same as deferred revenue?

A contract liability is usually what finance teams call deferred revenue, but the two are not always the same number. ASC 606-10-45-5 allows alternative labels, so "deferred revenue" on a balance sheet is acceptable. Deloitte's Roadmap notes that a contract liability "is commonly referred to as deferred revenue" (Deloitte).

The numbers diverge in three common situations:

  • Advance invoices not yet due or paid. A billing system's deferred revenue report includes them. The ASC 606 contract liability does not (contract D).
  • Contract-level netting. If one contract has both a billed-in-advance element and an earned-but-unbilled element, the contract liability is the net figure.
  • Labels in reports. A deferred revenue report from the billing system is a subledger view. The contract liability is the balance after GAAP presentation rules.

For the plain definition of the term, see what deferred revenue is.

What do you have to disclose?

Public companies disclose opening and closing contract balances, revenue recognized from the opening contract liability, and an explanation of significant changes. Private companies can elect out of most of that, but must still give opening and closing balances.

DisclosureParagraphPublic business entitiesOther entities
Opening and closing receivables, contract assets, contract liabilities606-10-50-8(a)RequiredRequired, if not presented elsewhere (50-11)
Revenue recognized from the opening contract liability606-10-50-8(b)RequiredMay elect out
Revenue from obligations satisfied in prior periods606-10-50-8(c)RequiredMay elect out
How timing of performance relates to timing of payment606-10-50-9RequiredMay elect out
Significant changes in contract balances, qualitative and quantitative606-10-50-10RequiredMay elect out

The rollforward is the working paper behind all five rows. ASC 606-10-50-10 lists the changes auditors expect explained, including business combinations, cumulative catch-up adjustments, impairment of a contract asset, and changes in when a contract asset becomes a receivable.

How to run the rollforward every quarter

Run the rollforward from contract-level records, not from GL account balances. A GL balance tells you the total. Only the contract-level schedule tells you why it moved.

LinePull fromCheck
Opening balancesPrior quarter's closing scheduleAgrees to the prior quarter's GL
Billings received or due in advanceBilling system invoices with due date and payment dateOnly invoices paid or due by quarter-end
Revenue recognizedRevenue schedules by contractAgrees to GL revenue
Reclassifications to receivablesInvoices for service already delivered or milestones reachedAgrees to receivables additions
Net positionContract-level scheduleOne position per contract
Reconciling itemsBilling system vs GLEach item has a contract ID and a reason

Where Loopfour fits

Loopfour builds and runs the quarterly rollforward as a fixed workflow on your existing systems. The workflow pulls contracts from Salesforce or HubSpot, invoices and payments from Stripe or your billing system, and balances from NetSuite, QuickBooks or Sage Intacct:

contract and invoice records pulled → contract-level schedule built on fixed rules → rollforward and revenue tie-out generated → differences routed to the revenue accountant in Slack → controller approves → schedule and evidence stored

Every line in the output traces back to a contract ID and an invoice. Where a contract term exists only in a PDF, AI is used only to extract it, and anything below the confidence threshold goes to a person before it enters the schedule. We build it, run it and maintain it. More on the revenue side is in our revenue recognition hub.

Frequently asked questions

What is a contract asset under ASC 606?

A contract asset is a right to consideration for goods or services already transferred to the customer, when that right is conditioned on something other than the passage of time, such as further performance. Once only time stands between the company and payment, the amount is reclassified to a receivable.

Is a contract liability the same as deferred revenue?

Often, but not always. ASC 606 lets companies label a contract liability as deferred revenue. The two diverge when a billing system counts an advance invoice that is not yet due or paid, which ASC 606 keeps off the balance sheet, or when a contract's liability is netted against a contract asset on the same contract.

What goes into a contract liability rollforward?

A contract liability rollforward starts with the opening balance, adds amounts received or due before performance, subtracts revenue recognized, and ends with the closing balance. Splitting the revenue line between the opening balance and amounts added during the period gives the figure ASC 606-10-50-8(b) requires public companies to disclose.

Do private companies have to disclose a contract balance rollforward?

No. A private company may elect not to provide the contract balance disclosures in ASC 606-10-50-8 through 50-10. It must still disclose the opening and closing balances of receivables, contract assets and contract liabilities, if they are not presented separately elsewhere.

Can one contract show both a contract asset and a contract liability?

No. ASC 606 presents each contract as a single net position, either a contract asset or a contract liability. Unconditional rights to payment are carved out and shown separately as receivables.

Why does a ramp deal create a contract asset?

When a fixed-fee contract bills less in year one than in year two for the same service, revenue is usually recognized evenly across the term. Revenue then runs ahead of billings in year one, and the difference sits in a contract asset until the higher year-two invoices catch up.

Conclusion

A contract asset and contract liability rollforward is four lines per balance, but each line needs a source record behind it. Build it from contracts and invoices, tie it to revenue, and list every difference from the billing system by contract. Then the disclosure, the audit request and the quarter-end review all start from the same schedule.

Tell us the one workflow your team dreads. We will show it running. Book a demo.

Sources