Arte SheetsLearn. Try. Understand.

Software Revenue Recognition & US GAAP ASC 606 / IFRS 15

ASC 606 / IFRS 15 Relative SSP Bundle Allocation Formula

Allocate Bundled Multi-Element Transaction Price Across Distinct Performance Obligations Using Relative Standalone Selling Prices (SSP), Point-in-Time License Recognition, Ratable PCS Support Revenue, and Deferred Revenue.

Allocate bundled contract discounts proportionally by Relative Standalone Selling Price (Step 4 of ASC 606)!

When an enterprise software or medical-device vendor sells a Perpetual On-Premise License bundled with 36 months of Post-Contract Customer Support (PCS) at a package discount—say $108,000 instead of $120,000 list—sales reps cannot simply slap "free Year-1 support" on the invoice and recognize $108,000 upfront! Under Step 4 of US GAAP ASC 606 and IFRS 15, Transaction Price is allocated across each distinct performance obligation in proportion to its Standalone Selling Price: Allocated_i = Transaction_Price * (SSP_i / SUM(SSP))! The point-in-time License allocation recognizes upon delivery, whereas the PCS Support allocation amortizes ratably over the 36-month service period, leaving unamortized balance in Deferred Revenue (Contract Liability)!

Verify on a 36-Month Enterprise Bundle—Discounted_Transaction_Price = $108,000 (B2), Software_License_SSP = $90,000 (B3), 36Month_PCS_Support_SSP = $30,000 (B4 -> Combined SSP = $120,000, a 10% bundle discount!), and Elapsed_Support_Months = 8 of 36 months (B5): Allocated Point-in-Time License Revenue is 108,000 * (90,000 / 120,000) = $81,000.00 (E2); Allocated 36-Month Support Pool is 108,000 * (30,000 / 120,000) = $27,000.00 (E3); Cumulative Revenue Recognized at Month 8 is 81,000 + 27,000 * (8 / 36) = $87,000.00 (E4); and Ending Deferred Revenue Liability is 108,000 - 87,000 = $21,000.00 (E5)!

ASC 606 Step-4 Metric ($108k Deal, $90k License SSP, $30k 36-Mo Support SSP, Mo 8)FormulaVerified Output
Allocated Upfront License ($)Deal_Price * (License_SSP / Total_SSP)$81,000.00
Allocated 36-Mo PCS Pool ($)Deal_Price * (Support_SSP / Total_SSP)$27,000.00
Cumulative Recognized Rev ($)Alloc_License + Alloc_Support*(Mo / 36)$87,000.00 ($108,000 @ Mo 36)
Ending Deferred Revenue ($)Deal_Price - Cumulative_Recognized_Rev$21,000.00 ($0.00 @ Mo 36)

ASC 606 Relative-SSP Cumulative Revenue Recognition Formula

Validate Transaction_Price > 0, License_SSP > 0, Support_SSP > 0, and 0 <= Elapsed_Months <= 36!

=LET(tp_d, B2, ss_l, B3, ss_s, B4, mo_e, B5, IF(OR(tp_d <= 0, ss_l <= 0, ss_s <= 0, mo_e < 0, mo_e > 36), "Invalid ASC 606 Bundle Input", LET(ts_p, ss_l + ss_s, al_l, tp_d * (ss_l / ts_p), al_s, tp_d * (ss_s / ts_p), ROUND(al_l + al_s * (mo_e / 36), 2))))

Full 36-Month Contract Completion Check (Set Elapsed Months = 36)

Advance Elapsed_Support_Months B5 to 36: Cumulative Recognized Revenue E4 reaches the full $108,000.00 contract price and Deferred Revenue Liability E5 amortizes cleanly to $0.00!

=IF(ISTEXT(E4), E4, ROUND(B2 - E4, 2))

Try the example

Use the original values or change them to test your understanding.

Further reading