SaaS Bookkeeping in 2026: How Do You Handle ASC 606 Revenue Recognition in Beancount?

I’m building out accounting infrastructure for a SaaS client doing $500K ARR (annual recurring revenue). Revenue is $42K/month in new billings, but we’ve got a wrinkle: customer contracts are annual ($500/year), billed upfront. One customer pays in January = $500 cash in bank. But we recognize $41.67/month as revenue (ASC 606).

My client’s accountant (trained on QuickBooks) keeps telling me to book revenue when cash arrives. But that violates the standard. Here’s my question: how are you handling this in Beancount? Can you model deferred revenue + monthly recognition cleanly, or does ASC 606 force you into spreadsheets for the math?

actually i track subscription at cash received, then monthly accrual reversal. booked $500 revenue in jan, then post journal entry: debit revenue, credit deferred revenue, $458.33. then recognize $41.67/month. keeps beancount clean.

works better than trying to book deferred upfront.

keeping beancount clean

That works for simple subscriptions. But mid-churn: customer cancels in May (of annual Jan contract). Do you reverse the deferred revenue? How do you handle the 7-month refund?

I’ve handled this in a few ways. Most reliable: book subscription at cash, create liability account liabilities:deferred_revenue:subscriptions. Each month, trigger a scheduled transaction that recognizes revenue + reverses liability. On cancellation, adjust the liability. It’s not elegant, but it survives audits. Real complexity hits when you have: different contract terms (annual, monthly, quarterly), multi-year upfront billing, and usage-based add-ons. Then you need either Python scripts to calculate recognitions or admit defeat and use QuickBooks + Excel.

yeah, ASC 606 is why people bail on plain text.