Imagine it is the end of the quarter. Your sales team heavily discounted a multi-year deal that includes a paid pilot, recurring subscription, and custom training. While the sales floor celebrates the booking, you are stuck staring at a fragile spreadsheet trying to untangle distinct performance obligations. You know that cash in the bank does not equal revenue on the income statement, and a misstep here leads to messy audits and uncomfortable board meetings later.
That challenge is exactly why you need a good grasp of ASC 606. When you nail the nuances of revenue recognition, you build a metrics engine that investors trust.
This guide replaces the confusion with a clear roadmap. We cover the essentials of the ASC 606 five-step model and provide actionable steps to put it into practice. You will also see how to operationalize these rules in Runway to keep your financial storytelling accurate and efficient.
Understanding ASC 606 revenue recognition basics
ASC 606 is an accounting standard set by the Financial Accounting Standards Board (FASB). Here’s the core idea: recognize revenue when you hand over control of goods or services to your customer and the amount matches what you expect to get paid.
This is important because GAAP says you recognize revenue when it’s earned (accrual accounting) instead of when you get paid (cash accounting). If you have recurring contracts, you spread revenue over the period you deliver the service, not when you collect cash.
Let’s say you sell a $12,000 annual SaaS subscription in January. On the books, you record $1,000 each month. But you get all the cash in January. Revenue is even over time. Cash is not.
ASC 606 applies everywhere, but it’s especially important for SaaS and subscription businesses with complex contracts, usage charges, or services grouped with recurring access.
The five-step model under ASC 606
ASC 606 gives you a five-step process for revenue. Every step builds on the last. You’ll know when you can recognize revenue, and how much.
Step 1: Identify the contract with a customer
First, you need a valid contract before you recognize any revenue. A contract exists if it’s approved, has commercial substance, and you’ll probably collect.
Your contract should include:
- Clear agreement terms between both sides
- Payment terms you can point to
- High chance you’ll collect payment
- Legally enforceable rights and obligations
Don’t recognize revenue unless you’re sure you’ll get paid. If payment is uncertain, wait until you’re confident before adding revenue to your books.
Step 2: Identify distinct performance obligations
Performance obligations are what you’ve promised to deliver. “Distinct” means the item works alone and is separate from other promises in the deal.
For SaaS, common performance obligations are:
- Subscription access to your platform
- Implementation or onboarding services
- Training sessions
- Premium support
- Data migration
Sometimes, implementation is so tailored or tied into the subscription that you can’t separate it. In that case, combine it with the subscription and recognize revenue together over time. Treating obligations as distinct lets you recognize some revenue earlier. Combine them, and revenue spreads over the full period.
Step 3: Determine the transaction price
The transaction price is the total you expect to receive, from fixed to variable amounts, like usage charges or discounts.
- Fixed subscription fees
- Variable charges, like usage or bonuses
- Financing elements (if timing of payments matters)
- Non-cash
- Credits or rebates
Variable parts need estimates. ASC 606 lets you use two methods: expected value (weighted average) or most likely amount.
Here’s the key: only include variable consideration if it’s likely you won’t need to reverse it. This stops you from pulling forward revenue you might have to back out later.
Step 4: Allocate the transaction price
Once you know the total price, you split it across each performance obligation using stand-alone selling prices (SSP).
SSP is the price you’d charge for just that item. Use real sales data if you have it. If you don’t, estimate with:
- Adjusted market assessment: What would the market pay?
- Expected cost plus margin: Add margin to your costs
- Residual approach: Subtract SSPs you know from the total price (only if prices vary a lot or you’ve never sold the item alone)
If you bundle a $1,000 subscription with $500 onboarding for $1,200, split it based on SSP, so $800 to the subscription, $400 to onboarding. How you allocate matters. These methods often shift 5-15% of the deal between obligations.
Step 5: Recognize revenue
You recognize revenue as you meet each performance obligation over time or at a single point.
Use over-time revenue if you meet any of these:
- Customer gets and uses the service as you deliver
- You’re building or improving something the customer controls
- The deliverable only fits this customer, and you’re owed for work done so far
For SaaS subscriptions, you usually meet the first point. So, spread revenue evenly across the subscription period. If none of these fits, recognize revenue all at once when control passes over, like when a client accepts a distinct deliverable.
Over-time vs. point-in-time recognition
Deciding between over-time and point-in-time recognition sets your revenue pace.
Over-time recognition is common for:
- SaaS subscriptions
- Support and maintenance
- Long-term projects or consulting
- Managed services
To recognize over time, pick a measure of progress. Here’s what works:
- Input methods: Count costs or hours spent
- Output methods: Use milestones, units delivered, or months elapsed
For SaaS, a simple time-based approach does the job. With a 12-month subscription, book 1/12 of the revenue each month.
Use point-in-time for:
- Perpetual software licenses
- Hardware sales
- Single deliverables
- Professional services milestones
When control switches at a set moment, add all allocated revenue for that obligation right then. For example, log all implementation revenue when a client signs off on delivery.
Allocating stand-alone selling price and handling variable consideration
SSP allocation and variable consideration challenge almost every team working with ASC 606.
You need a clear, defensible SSP method. Use real prices if you have them, but if not:
- Use adjusted market assessment. Compare to competitor pricing or market trends
- Try expected cost plus margin. Add a fair margin to your internal costs
- Apply the residual approach only when prices are highly variable or items aren’t ever sold separately
Document your process. Auditors will check that you stick to these methods contract after contract.
To estimate variable consideration, pick expected value or the most likely amount. Then, apply the constraint: only include variable amounts you expect won’t need reversal. For usage-based models, this usually means recognizing that revenue as usage numbers come in, not for the whole year at once.
Don’t skip the constraint. Recognizing all expected revenue upfront often creates reversal risk and isn’t allowed.
Contract modifications and their impact
Contracts can shift. Customers add seats, upgrade, extend terms, or change scope. Each change deserves its own accounting review.
ASC 606 gives you three routes for contract changes:
- Separate contract: For new goods or services at stand-alone selling price, treat as a new contract
- Termination and new contract: If remaining items are distinct but pricing changes, close out the old contract and create a new one
- Cumulative catch-up adjustment: If new deliverables aren’t distinct from previous ones, adjust your revenue as if the change was there from day one
You’ll see plenty of contract tweaks, upgrades, added seats, tier changes. Keep a log that tracks every amendment and how you treated it. This keeps your audit trail clean and your numbers consistent.
Key considerations for GAAP compliance and financial statements
ASC 606 works hand in hand with other accounting areas.
Deferred revenue connects directly to revenue recognition. If customers pay before you deliver, record deferred revenue and reduce it as you earn revenue. For SaaS with annual billing, deferred revenue often equals 40-60% of ARR, then drops as you deliver the service.
ASC 340-40 guides how you handle capitalized commissions. You must capitalize sales commissions tied directly to contract wins, then amortize them over the expected benefit period. For annual contracts with long customer relationships, this often means capitalized commissions make up 50-150% of a quarter’s commission expense, amortized over 4-5 years.
Your revenue recognition approach impacts ARR and MRR. Tie your ARR bridge back to GAAP revenue. ARR is all signed contract value. GAAP revenue follows the rules above. Draw a clear line between the two, especially when contracts run long or include significant usage pricing.
Audit readiness starts with documentation. Synchronoss Technologies took a $190 million revenue correction after the SEC flagged their revenue practices. Auditors focus heavily on revenue testing for SaaS and subscription companies.
If you’re thinking about IPO or M&A, ASC 606 compliance is non-negotiable. Investors, buyers, and bankers want to see revenue that stands up to scrutiny.
Benchmarks and rules of thumb for SaaS and subscription businesses
While every company’s a little different, certain patterns show up across SaaS and subscription models.
For most SaaS teams, recognize subscription revenue evenly over the contract as the service is provided. That’s a straight line between contract length and monthly recognized revenue.
Professional services bundled with SaaS typically get recognized as delivered, over time if tracked by hours or milestones. These services usually make up 5-20% of total revenue. If implementation or onboarding isn’t a distinct obligation, defer the revenue and spread it across the subscription period.
Complexity often enters when companies bundle pricing, sign multi-year contracts, layer in usage fees, or add professional services to subscriptons.
Properly setting up ASC 606 often takes two to six months for finance teams. It usually requires one to three dedicated people while you’re getting started. Monthly upkeep fits right into your close process.
The variable consideration rule means you’ll probably recognize usage-based or performance fee revenue after the fact, not upfront. That keeps your numbers tied closer to actual activity.
Common pitfalls to avoid
Even skilled finance teams can miss key details with ASC 606. Here’s where things usually trip people up:
- Recognizing revenue at contract signing or invoicing instead of when you fulfill performance obligations
- Treating the whole contract as a single obligation when several distinct deliverables deserve their own recognition schedules
- Skipping SSP allocation and just using stated contract prices for each part of the deal
- Not building or documenting a reliable SSP approach, especially for items never sold on their own
- Recognizing usage-based or variable revenue before the uncertainty is resolved
- Treating all contract changes the same. Each needs its own review
- Capitalizing all sales compensation as contract costs, without checking if they’re truly incremental
- Amortizing commissions only over the first contract term instead of the benefit period with renewals
- Recognizing onboarding or implementation at once when it should be spread across the full subscription
- Missing significant financing elements in contracts with odd payment terms
- Using different recognition policies for similar contracts or segments
- Treating free or discounted periods as zero-revenue instead of spreading revenue across the entire term
- Not bringing in sales and deal desk teams to understand revenue impacts of their terms
- Not documenting every judgment call and estimate for things like SSP or variable consideration
How to track revenue recognition in Runway
Runway gives your team a solid framework for ASC 606, even if your contracts get complicated. Here’s how to get set up:
Step 1: Build your contracts database
Create a database with the key facts for revenue recognition. Tag each contract with a unique ID and customer name.
- Contract ID and customer name for segments
- Contract start date as a date driver
- Contract value as a number
- Contract term (months) as a number
- Payment cadence as a metadata field
This setup is where your recognized revenue schedule comes from.
Step 2: Calculate contract end dates
Use DateAdd() to get the contract end date using start date plus term length. Wrap units like months with single quotes.
If you already have start and end dates, just use DateDiff() to calculate contract term length.
Step 3: Create a monthly recognized revenue driver
Add this as a number column called monthly recognized revenue.
Step 4: Reference contract value with date filters
In your monthly recognized revenue driver, pull in contract value as a database reference (like Database Name.Contract Value). Using a database reference gives you flexible date filters.
Step 5: Apply date filters for revenue recognition
Use the driver pill and add these rules so revenue only hits between contract start and end dates:
- Contract start date.month is on or before this month
- Contract end date.month is after this month
- Segment is this segment (allows all your segments to get correct treatment)
Step 6: Spread contract value over the term
Divide by contract term length in months. This spreads the value evenly.
Step 7: Validate the recognition schedule
Select all monthly values. Check that the count and sum match your contract term and value. Your formula works if these line up.
Step 8: Connect to your revenue forecast
Go to your revenue driver in the P&L model. In the forecast, use sum() and point to monthly recognized revenue all customer names all contract IDs. This aggregates recognized revenue to your topline.
Step 9: Enable drill-through and auditability
Click the carat beside the revenue driver to dive into contract details. This lets you check each contract’s revenue driver matches your totals.
Each monthly recognized revenue driver has an arrow for details—see all the underlying formulas, inputs, and plans.
Step 10: Tie into ARR and retention metrics
For multi-year agreements or custom revenue models, build recognition schedules in Runway to match your ARR bridge with GAAP revenue. It’s easy to show both side by side, so your team can stay aligned.
For net revenue retention, use recognized revenue to calculate NRR. This factors in real revenue timing, not just bookings or cash.
Build audit-ready revenue recognition with Runway
ASC 606 compliance supports accurate financials, investor confidence, and stress-free audits. You don’t need to dread it.
Runway lets you model complex revenue situations, track contracts at a detailed level, and audit every number. Build recognition schedules tied to actual contracts, roll them into your revenue, and drill down from the P&L to every line item.
Finance teams use Runway to bring ASC 606 into the real world. You’ll avoid rigid templates, handle bundles, allocate SSP, filter for over-time recognition, and match GAAP and ARR—on your own terms, without vendor bottlenecks.
Ready to book revenue with confidence and control? Get started with Runway today.