SaaS Metrics & Cohort Retention Report (MRR, Churn, NRR)
Pricing
Pay per usage
SaaS Metrics & Cohort Retention Report (MRR, Churn, NRR)
Turn a subscription export (CSV, JSON or dataset) into monthly MRR bridge, churn, NRR, ARPA and cohort retention, plus a formatted Excel report. Pure calculation: no scraping, no logins.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Clean Cell Co.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Turn a subscription export into standard SaaS metrics: a monthly MRR bridge (new, expansion, reactivation, contraction, churn), ARR, logo churn, gross MRR churn, net revenue retention (NRR), ARPA and cohort retention by signup month. You also get a formatted Excel report with charts and a heat-mapped cohort table.
Pure calculation. It doesn't scrape or log in to anything, and it doesn't call any third-party API, so a site change can't break a run.
What you can feed it
- Use one data source per run. If you paste CSV text, link a CSV or pick a dataset, the SAMPLE demo rows in "Subscriptions (JSON)" are ignored automatically; you can also delete them.
- JSON rows pasted into the input, or CSV text, or a CSV URL for your own export (public http(s) link, max 50 MB; private, local and internal addresses are blocked), or an Apify dataset ID.
- One row per subscription period:
customer_id,start_date,end_date(blank if still active), and eithermrroramount+interval(month,quarter,year,week). Annual plans are normalized to monthly. - Column names differ? Use
fieldMapping, e.g.{"customer":"Customer ID","start":"Created","end":"Canceled At","amount":"Amount","interval":"Interval"}. Map the columns from your billing export withfieldMapping; exports from different billing tools vary, so check the first run. Amounts must be in currency units (49.00), not cents (4900). Thecurrencyinput is a label only; no conversion is done. - Plan changes (upgrade or downgrade): end the old row and add a new row for the same customer, with the new row's
start_dateequal to the old row'send_date. The change is counted as expansion or contraction.
What you get
| Where | Content |
|---|---|
| Dataset | One row per month with every monthly metric above (cohort retention is in COHORTS and the Excel report) |
Key-value store REPORT | Excel workbook: Summary (KPIs + 2 charts), Monthly, Cohorts (logos), Cohorts (revenue) |
Key-value store COHORTS | Cohort retention as JSON |
Key-value store OUTPUT | Headline numbers: current MRR, ARR, active customers |
Example monthly row:
{"month":"2026-03","startingMrr":250,"newMrr":0,"expansionMrr":50,"reactivationMrr":0,"contractionMrr":0,"churnedMrr":50,"endingMrr":250,"arr":3000,"customers":2,"logoChurnRate":0.3333,"netRevenueRetention":1.0}
Definitions
- A customer counts as active in a month if subscribed at month-end.
- The MRR bridge is checked on every run: starting + new + expansion + reactivation − contraction − churn = ending. The run fails loudly if it doesn't balance.
- NRR = (starting MRR − churn − contraction + expansion) / starting MRR. New and reactivated MRR are excluded.
- Invalid input (bad dates, missing columns, negative MRR, end before start) stops the run with a clear message.
Use it from code or AI agents
Call it through the Apify API, MCP or integrations (Make, Zapier, n8n). Schedule it monthly against a fresh export to keep an up-to-date metrics workbook.
Pricing
Free during launch; pricing may be added later with notice.
Privacy
Only customer IDs, dates and amounts are needed. Don't include names or emails. Use pseudonymous customer IDs. The data stays in your own Apify run storage and follows your plan's retention. The Actor makes no outbound calls except fetching your csvUrl, and it runs with limited permissions: it can only use its own run storages and a dataset you explicitly pick as input.
Sample output
OUTPUT record:
{"months": 9,"subscriptionRows": 5,"currentMrr": 280.0,"currentArr": 3360.0,"activeCustomers": 3,"excelReportKey": "REPORT"}
A sample Excel report is in samples/output/sample_report.xlsx.
Disclaimer
Calculated metrics for informational purposes only; not accounting, financial or investment advice. Verify the numbers before sharing them with investors or using them in financial statements.
Built with AI assistance.