Revenue Recognition (ASC 606 & IFRS 15)

Kantivo automates the bookkeeping you need to stay compliant with ASC 606 (US) and IFRS 15 (international): deferred revenue schedules, multi-obligation contracts, SSP allocation, modifications with audit trails, variable consideration, and every disclosure report your auditor will ask for.

What Is Rev Rec

Revenue recognition decides when revenue lands on your income statement. Under accrual, you recognize revenue as you earn it — not the day the customer pays. A 12-month subscription paid upfront isn't $12K of revenue on day one; it's $1K/month for 12 months, with the unearned balance sitting on the balance sheet as deferred revenue.

The governing standards are ASC 606 (US GAAP) and IFRS 15 (international). Both follow the same five-step model: identify the contract, identify performance obligations, set the transaction price, allocate it across obligations, recognize as each obligation is satisfied.

Kantivo handles the scheduling and posting so you don't run rev rec in spreadsheets or compute monthly entries by hand.

Who needs this: Any business that collects payment before fully delivering — SaaS, consulting, annual maintenance contracts, subscription boxes, construction, project-based service work.

Setting Up Contracts

Create a contract to start automated recognition:

  1. Open Revenue Recognition in the sidebar
  2. Click New Contract
  3. Fill in the details:
    • Contract name — descriptive (e.g., "Acme Corp Annual License 2026")
    • Customer
    • Total contract value
    • Start date / end date — service or delivery window
    • Recognition method — straight-line, milestone, or percent-complete
    • Frequency — weekly, monthly, quarterly, annual
    • Revenue account — income account to credit (e.g., 4000)
    • Deferred revenue account — liability account to debit (e.g., 2400)
  4. Click Save Contract

Kantivo generates the full recognition schedule on save. Every future entry is visible before any of them post.

Recognition Methods

Straight-Line

Equal slices across the service period. Fits subscriptions, licenses, retainers — anything where value flows evenly over time.

Example: $12,000 annual SaaS license starting Jan 1 → 12 monthly entries of $1,000, each debit Deferred Revenue / credit Revenue.

Milestone

Revenue posts when specific deliverables complete. Define the milestones and their values at contract creation; mark each one complete as you deliver.

Example: $50,000 website build, three milestones — Design $15K, Development $25K, Launch $10K. Each marks complete; each posts its slice of revenue.

Percent-of-Completion

Revenue follows the percentage of work delivered. Update completion periodically and Kantivo posts the right increment.

Example: $200,000 construction contract. Month 1 at 20% complete → $40,000 recognized. Month 2 reaches 45% → another $50,000.

MethodFitsHow it posts
Straight-lineSubscriptions, licenses, retainersEqual amounts each period
MilestoneProject work, deliverables-based consultingOn milestone completion
% of completionConstruction, long-term contractsProportional to work delivered

Posting Journal Entries

When recognition is due, Kantivo posts:

AccountDebitCredit
Deferred Revenue (liability)$1,000
Revenue (income)$1,000

That moves the dollar from the balance sheet to the income statement. Every entry carries:

Posting History

Open any contract and click Posting History to see every entry that's been generated — date, amount, journal reference, status. Click through to the full journal entry for details.

Tip: Configure auto-post or require manual approval per contract. Pick the workflow that matches your close cadence.

Revenue Dashboard

The rev rec dashboard rolls up your full pipeline:

An upcoming entries section shows what's scheduled to post next period — useful for forecasts and month-end prep.

Milestone Tracking

For milestone-based contracts, deliverables are managed inside the contract view.

Creating Milestones

  1. Open the contract
  2. Click Add Milestone
  3. Enter name, description, revenue amount
  4. Optionally set an expected completion date
  5. Save

The sum of milestones has to equal the contract value. Kantivo shows a live balance indicator so you can see when allocation is complete.

Marking Complete

  1. Open the contract
  2. Find the milestone
  3. Click Mark Complete
  4. Confirm the completion date

On completion, Kantivo immediately generates the corresponding journal entry.

Note: Milestones can't be uncompleted after the journal entry has posted. To reverse, create a reversing entry — preserves the audit trail.

Getting Started

  1. Add a Deferred Revenue account to your Chart of Accounts (liability, e.g., 2400). This is where unearned revenue sits until it's earned.
  2. Confirm your Revenue account exists (income, e.g., 4000)
  3. Create a first contract — start with a simple straight-line to see how the schedule generates
  4. Review the schedule before letting anything post
  5. Post your first entry manually or wait for auto-post
  6. Check the dashboard — deferred and recognized balances update live
  7. Run your Balance Sheet to confirm Deferred Revenue shows in the right place
Need help? Rev rec gets complex fast depending on your business model. If you're not sure which method fits or how to structure contracts, run it past your accountant before setup.

Multi-Obligation Contracts

Vanilla contracts assume a single revenue stream — fine for a simple annual subscription. Real ASC 606 contracts often bundle several distinct deliverables (software, support, onboarding, training), and each one is its own performance obligation with its own recognition schedule.

Click 📑 Obligations on any contract to open the multi-obligation editor:

Recognition entries post against each obligation individually. Journal entry descriptions name the obligation, the obligation's recognized total updates after each posting, and an obligation auto-marks complete when recognition reaches its allocated amount.

Backward compatibility: Pre-existing contracts auto-migrate on first server start — Kantivo creates one synthetic obligation per legacy contract that mirrors its schedule. Old behavior stays identical; new features become available when you reach for them.

Standalone Selling Price (SSP)

ASC 606 needs to know what each obligation would sell for on its own — the standalone selling price — to allocate the bundled price across them. Kantivo stores SSP per item with full effective-dated history.

Open Products and click SSP on a product row. The SSP modal lets you:

Items can also carry a default recognition method. New obligations created from an item inherit the method automatically — handy when most software products are ratable and most service products are milestone-based.

Transaction-Price Allocation

With obligations defined and SSPs in place, the allocation engine splits the contract's transaction price across them. Open the obligations modal, enter the transaction price, pick a method, click Allocate.

Methods

After allocation runs, the obligations table reloads and each obligation's recognition schedule regenerates against its newly allocated amount.

Modifications

Customers expand, downgrade, extend, cancel. ASC 606 prescribes three different treatments depending on the type of change and how much has already been recognized — picking the wrong one is a classic source of misstatement. Kantivo recommends the right treatment, requires explicit accountant approval, and snapshots the contract before and after every change.

From the obligations modal, click 📝 Modifications:

  1. New Modification → pick a type: add_obligation, reduce_obligation, extend_term, price_change, or cancel
  2. The form adapts to the chosen type
  3. Kantivo recommends one of three treatments based on the type + recognition progress:
    • Separate contract — the change is its own new contract; original keeps recognizing unchanged
    • Cumulative catch-up — modified terms applied retroactively, with a catch-up entry posted in the current period
    • Prospective — change applies only to remaining performance
  4. Save as DRAFT
  5. An accountant Approves — mandatory before any change can be posted
  6. Click Apply — Kantivo mutates the contract and posts any catch-up adjustment

Every modification stores a JSON before_snapshot and after_snapshot, the system's recommendation, the human's chosen treatment, and the names + timestamps of the approver and applier. This is exactly the trail an auditor needs to retrace contract evolution.

Overrides: Accountants can override the recommended treatment — Kantivo flags the override so the decision itself shows up in the audit trail.

Variable Consideration & Constraint

Refund estimates, rebates, performance bonuses, volume discounts — ASC 606 calls these variable consideration and requires you to estimate them and apply a constraint so only the portion you're confident in flows into recognized revenue.

Open 🎲 Variable Consid. in the obligations modal:

Skip the constraint % to use the company default at Settings → Revenue Recognition → Default Variable Consideration Constraint %. Per-obligation overrides for sophisticated cases; the company default for consistency.

Invoice ↔ Contract Linking

Cash and revenue rarely move on the same calendar. To compute contract assets (recognized exceeds billed) and contract liabilities (billed exceeds recognized), Kantivo lets you bind invoice lines to specific obligations.

From the obligations modal, click 🔗 Invoice Links:

This reconciliation feeds directly into the contract-asset / contract-liability rollforward disclosure.

Audit Disclosures

Open 📑 Disclosures from the Revenue Recognition view for the four reports auditors expect in any ASC 606 / IFRS 15 footnote. Set period start/end, pick Monthly / Quarterly / Annual grouping, run.

1. Revenue Waterfall

Recognized + future scheduled revenue, bucketed by period with a running cumulative total. The "what's booked, what's coming" view.

2. Remaining Performance Obligations (RPO)

The unrecognized portion of every active obligation, groupable by recognition method, expected period, or contract.

3. Contract Asset / Contract Liability Rollforward

Beginning and ending CA / CL balances computed from billed-vs-recognized snapshots at each period boundary, with net change for the period.

4. Deferred Revenue Rollforward

Beginning balance (allocated − recognized at period start) + additions (new entries created in the period) − releases (entries recognized in the period) = ending balance. Reconciles to the Deferred Revenue line on your balance sheet.

Every disclosure has a Print button for clean PDF output and can be re-run on demand for any period.

Marketing note: Kantivo "supports ASC 606 / IFRS 15 with multi-obligation contracts, SSP allocation, contract modifications, and required disclosures." Until your specific deployment has been validated by your audit firm, avoid claiming "audit-certified" — the framework is in place, but the formal sign-off is engagement-specific.