Revenue Recognition
Automate deferred revenue schedules and stay compliant with ASC 606 and IFRS 15.
What Is Revenue Recognition?
Revenue recognition determines when your business records income on the books. Under accrual accounting, revenue is recognized when it is earned, not necessarily when cash is received. If a customer pays upfront for a 12-month subscription, you cannot book the full amount as revenue on day one. Instead, you recognize it gradually over the service period.
ASC 606 (US GAAP) and IFRS 15 (international) are the governing standards. Both follow a five-step model: identify the contract, identify performance obligations, determine the transaction price, allocate the price, and recognize revenue as obligations are satisfied.
BizBooks Pro handles the scheduling and posting automatically so you do not need to manage this process in spreadsheets or calculate entries by hand.
Setting Up a Revenue Contract
To begin recognizing revenue automatically, create a revenue contract in BizBooks Pro:
- Navigate to Revenue Recognition in the sidebar
- Click New Contract
- Fill in the contract details:
- Contract Name: A descriptive label (e.g., "Acme Corp Annual License 2026")
- Customer: Select from your customer list
- Total Contract Value: The full amount of the agreement
- Start Date: When the service or delivery period begins
- End Date: When the service or delivery period ends
- Recognition Method: Straight-line, milestone, or percentage-of-completion
- Recognition Frequency: Weekly, monthly, quarterly, or annual
- Revenue Account: The income account to credit (e.g., 4000 - Revenue)
- Deferred Revenue Account: The liability account to debit (e.g., 2400 - Deferred Revenue)
- Click Save Contract
Once saved, BizBooks Pro generates the full recognition schedule based on your settings. You can review every future entry before any posting occurs.
Recognition Methods Explained
Straight-Line
Divides the total contract value evenly across the service period. Best for subscriptions, licenses, and any contract where value is delivered uniformly over time.
Example: A $12,000 annual SaaS license starting January 1. BizBooks Pro creates 12 monthly entries of $1,000 each, debiting Deferred Revenue and crediting Revenue.
Milestone-Based
Revenue is recognized when specific deliverables or milestones are completed. You define the milestones and their values when creating the contract, then mark each milestone as complete when the work is done.
Example: A $50,000 website build with three milestones: Design ($15,000), Development ($25,000), Launch ($10,000). Revenue is recognized as each phase is delivered and marked complete.
Percentage-of-Completion
Revenue is recognized in proportion to the work completed. You periodically update the completion percentage, and BizBooks Pro calculates and posts the appropriate amount.
Example: A $200,000 construction contract. After month one, the project is 20% complete. BizBooks Pro recognizes $40,000 in revenue. After month two, the project reaches 45%, and an additional $50,000 is recognized.
| Method | Best For | How It Works |
|---|---|---|
| Straight-Line | Subscriptions, licenses, retainers | Equal amounts each period |
| Milestone | Project work, consulting, deliverables | Recognized when milestone is marked complete |
| % of Completion | Construction, long-term contracts | Proportional to work completed |
Posting & Journal Entries
When a recognition entry is due, BizBooks Pro creates a journal entry with the following structure:
| Account | Debit | Credit |
|---|---|---|
| Deferred Revenue (liability) | $1,000 | |
| Revenue (income) | $1,000 |
This moves revenue from the balance sheet (deferred) to the income statement (earned). Each posted entry includes:
- Journal reference number for audit tracking
- Contract name linking back to the source agreement
- Period date showing which recognition period the entry covers
- Posting timestamp recording when the entry was created
Viewing Posting History
Open any contract and click the Posting History tab to see every journal entry that has been created. Each row shows the date, amount, journal reference, and status. You can click through to the full journal entry for details.
Revenue Dashboard
The Revenue Recognition dashboard gives you a complete picture of your deferred and recognized revenue. Key metrics include:
- Total Contract Value: The sum of all active revenue contracts
- Recognized Revenue: How much has been earned and posted to date
- Deferred Balance: Revenue collected but not yet earned
- Recognition Rate: Percentage of total contract value that has been recognized
- By Method: Breakdown of contracts by straight-line, milestone, and percentage-of-completion
The dashboard also shows upcoming recognition entries so you can see what will be posted in the next period. This is useful for forecasting and month-end preparation.
Working with Milestones
For milestone-based contracts, you manage deliverables directly within the contract view.
Creating Milestones
- Open a milestone-based contract
- Click Add Milestone
- Enter the milestone name, description, and revenue amount
- Optionally set an expected completion date
- Click Save
The total of all milestones must equal the contract value. BizBooks Pro shows a balance indicator so you can see if the milestones are fully allocated.
Marking Milestones Complete
- Open the contract
- Find the milestone in the list
- Click Mark Complete
- Confirm the completion date
When a milestone is marked complete, BizBooks Pro immediately generates the corresponding journal entry to recognize that portion of revenue.
Getting Started Checklist
Follow these steps to begin using revenue recognition in BizBooks Pro:
- Set up a Deferred Revenue account in your Chart of Accounts (liability type, e.g., account 2400). This is where unearned revenue sits on your balance sheet.
- Confirm your Revenue account exists (income type, e.g., account 4000). This is where earned revenue appears on your income statement.
- Create your first contract by going to Revenue Recognition and clicking New Contract. Start with a simple straight-line contract to see how the schedule generates.
- Review the generated schedule to make sure the amounts and dates look correct before any entries are posted.
- Post your first entry either manually or by letting the automatic posting run on schedule.
- Check the Revenue Dashboard to see your deferred and recognized balances update in real time.
- Run a Balance Sheet report to verify the Deferred Revenue liability appears correctly.
Multi-Obligation Contracts
The basic recognition contract above treats a deal as a single revenue stream. That works for a vanilla annual subscription, but real ASC 606 contracts often bundle several distinct deliverables: software, support, onboarding, training. Each of those is a separate performance obligation, and each earns revenue on its own clock.
Click 📑 Obligations on any contract card to open the multi-obligation editor. Inside, you can:
- Add as many obligations as the contract truly contains
- Pick the recognition pattern that matches each one: point-in-time (delivered all at once), ratable (over time), milestone, percent-complete, or usage-based
- Override the deferred-revenue and revenue accounts at the obligation level — handy when different products map to different income statement lines
- Reorder, edit, or remove obligations
Once obligations exist, the recognition cron posts entries against each obligation individually. The journal entry's description names the obligation, the obligation's running recognized total updates after every posting, and an obligation auto-marks complete once recognition reaches its allocated amount.
Standalone Selling Price (SSP)
To allocate the price of a bundled contract across its obligations, ASC 606 needs to know what each obligation would sell for on its own. That number is the standalone selling price. BizBooks Pro keeps an SSP per item with full effective-dated history.
Open the Products view and click SSP on any product row. The SSP modal exposes:
- The current SSP for that item, with the method used and the effective date
- A form to set a new SSP — pick a method (manual, observable median, observable average, residual), an effective date, and add notes
- Recompute (median) and Recompute (avg) buttons that pull from invoice line history with a sample-size guard so a thin history can't produce a misleading SSP
- A change history table showing every SSP version, when it took effect, who set it, and any notes captured
You can also set a default recognition method on the item. New obligations created from that item inherit the method automatically — useful when most of your software products are ratable and most of your service products are milestone-based.
Transaction-Price Allocation
With obligations defined and SSPs in the library, the allocation engine splits the contract's transaction price across the obligations. Open the obligations modal, set the transaction price and pick an allocation method in the header band, then click Allocate.
Allocation methods
- Relative SSP (default) — every obligation receives
(its SSP / total SSP) × transaction price. Penny rounding is absorbed by the largest obligation, so the allocation total always equals the transaction price exactly. - Residual — observable SSPs are deducted from the transaction price, and the remainder is assigned to a chosen residual obligation. Used when one obligation has no observable price. The engine refuses to run if the anchor SSPs already exceed the price.
- Manual — you allocate by hand. The engine still records the chosen method on the contract for audit purposes.
After running, the obligations table reloads with the freshly allocated amounts. Each obligation's recognition schedule is regenerated against the new amount, so subsequent recognition entries reflect the allocation.
Mid-Term Modifications
Customers expand, downgrade, extend, or cancel mid-stream. ASC 606 prescribes three different treatments for modifications, and applying the wrong one is a classic source of misstatement. BizBooks Pro recommends the right treatment for each modification, requires explicit accountant approval before applying it, and keeps a full snapshot of the contract before and after.
From the obligations modal, click 📝 Modifications:
- Click New Modification and choose a type — add_obligation, reduce_obligation, extend_term, price_change, or cancel
- The form shows different fields per type (the wizard adapts)
- BizBooks Pro auto-recommends one of three treatments based on the modification type and how much of the contract has already been recognized:
- Separate contract — the change is treated as a brand-new contract; the original keeps recognizing as before
- Cumulative catch-up — the modified terms are applied as if they had been in effect from inception, with a catch-up entry posted in the current period
- Prospective — the change applies only to remaining performance
- Save the modification — it lands as DRAFT
- An accountant clicks Approve; this is mandatory before any change can be posted
- Click Apply to mutate the contract / obligations and post any catch-up adjustment
Every modification stores a before_snapshot and an after_snapshot in JSON, the system's recommendation, the human's chosen treatment, and the names and timestamps of the approver and applier — exactly what an auditor needs to retrace how a contract evolved.
Variable Consideration & Constraint
Plenty of contracts have moving parts: refund estimates, rebates, performance bonuses, volume discounts. ASC 606 calls these variable consideration and requires that you estimate the variable amount and apply a constraint — only the portion you're highly confident in flows through to recognized revenue.
Open 🎲 Variable Consid. from the obligations modal:
- Pick a type: refund estimate, rebate, performance bonus, or volume discount
- Choose an estimation method: expected value (probability-weighted average) or most-likely amount
- Enter the estimated dollar amount
- Set a constraint % from 0 to 100. The constrained amount = estimated × (1 − constraint%/100), shown live as you type
- Optionally bind the entry to a specific obligation
If you skip the constraint %, BizBooks Pro applies the company-level default at Settings → Revenue Recognition → Default Variable Consideration Constraint %. Sophisticated users override per obligation; teams that want a consistent floor lean on the company default.
Invoice ↔ Contract Linking
Cash collected and revenue recognized rarely move on the same calendar. Customers prepay annual deals, get billed quarterly, sign milestone-based contracts. To compute contract assets (recognized exceeds billed) and contract liabilities (billed exceeds recognized), BizBooks Pro lets you bind invoice lines to specific obligations.
From the obligations modal, click 🔗 Invoice Links:
- Pick from the contract customer's eligible (non-void) invoices
- Bind a portion of the invoice's value to a specific obligation
- The form pre-fills the invoice's currently unbound balance and refuses to over-bind beyond that balance
- The reconciliation card at the top of the modal displays: contract value, transaction price, billed total, recognized total, contract asset, and contract liability — automatically
This reconciliation feeds straight into the contract asset / liability rollforward disclosure report.
Four Audit Disclosure Reports
Open 📑 Disclosures from the Revenue Recognition view to access the four reports auditors expect to see in any ASC 606 / IFRS 15 footnote. Pick a period start and end, choose Monthly / Quarterly / Annual grouping, and run.
1. Revenue Waterfall
Recognized + future scheduled revenue, bucketed by period and shown with a running cumulative total. The standard "what's been booked, what's coming" view.
2. Remaining Performance Obligations (RPO)
The un-recognized portion of every active obligation, groupable by recognition method, expected period, or contract. Each grouping serves a different question auditors typically ask.
3. Contract Asset / Contract Liability Rollforward
Beginning and ending CA / CL balances computed from billed-vs-recognized snapshots at each period boundary, with the net change for the period.
4. Deferred Revenue Rollforward
Beginning balance (allocated minus recognized at period start) + additions (new pending entries created in the period) − releases (entries recognized in the period) = ending balance. Reconciles to the deferred revenue line on your Balance Sheet.
All four reports include a Print button for clean PDF output and can be re-run on demand for any period.