Annual plans, spread across the months they cover
When a customer pays $2,900 up front for a year, only a twelfth of it is revenue this month. Bookkeepers want that as a schedule: billings, revenue recognised and deferred revenue by month, plus journal entries. Stripe sells this as an add-on priced on your volume. Rev Rec builds it from your paid invoices and credit notes. Try it below on an invoice-line export (nothing is uploaded), then run the open-source server with a read-only key.
Try it on an invoice export
One row per invoice line. Needs columns for amount, billing date and period start; period end, id and currency are used when present. Put credit notes in as negative amounts, or in parentheses. Or load made-up sample data.
Rows marked ↗ are future months of revenue that is already invoiced. Closing deferred revenue is billed to date minus recognised to date.
Why someone would use this
| Today | Cost / catch |
|---|---|
| Stripe Revenue Recognition | Accounting-grade and supported, but billed as a share of volume; more than a small SaaS needs for a monthly close |
| A spreadsheet of annual invoices | Free, but the day-count maths, proration lines and refunds drift after a few months |
| Your bookkeeper, by hand | Billable hours every month for something a script does the same way every time |
| Rev Rec | Free, MIT, read-only key, your server. Honest limits: one currency per instance, daily straight-line only (no usage-based or milestone rules), credit notes hit the month they are issued |
Run it yourself
git clone https://github.com/Duncan-Haywood/fp-monorepo && cd fp-monorepo/ventures/rev-rec STRIPE_SECRET_KEY=rk_live_... ADMIN_KEY=$(openssl rand -hex 16) \ COMPANY_NAME=Acme node server.mjs # open http://localhost:8080 and sign in with any user name and ADMIN_KEY
The key needs Invoices: read and Credit notes: read and nothing else. A one-click Render deploy and Docker are in the README.
Related tools
Same buyer: MRR Pulse shows MRR and churn, Dunning Engine recovers failed cards, and Stripe Payout to Journal turns payouts into cash-side entries.
Questions
How is this different from Stripe Revenue Recognition?
Stripe Revenue Recognition is a paid add-on billed as a share of your Billing volume, with accounting-grade reports, multi-entity features and support. Rev Rec produces the core schedule most small SaaS companies hand to a bookkeeper (billings, revenue recognised, deferred revenue by month and the journal entries) on a server you run with a read-only key. It does not replace an audit-ready system.
What does it recognise, exactly?
Each paid invoice line is spread evenly per day across its service period, net of discounts and of tax that is included in the price. One-off charges are recognised on their date. Credit notes reduce revenue in the month they are issued.
Can it change anything in my Stripe account?
No. It lists paid invoices and credit notes with a restricted key (Invoices: read, Credit notes: read) and the tests assert every request is a plain GET.
Where does my Stripe key live?
In the environment of the server you deploy in your own account. The author runs nothing in between and never sees your key or your numbers.
Is this accounting advice?
No. It is a working schedule for your bookkeeping. Your revenue policy, your jurisdiction and your accountant decide what is correct for your books.