Hey IH — Suraj here, 2nd year CS student in India, building a fractional Revenue Analyst practice for B2B SaaS.
I can't afford a RevOps job to get experience, so I built one myself:
End-to-end revenue turnaround on a synthetic B2B SaaS dataset — 2,000 accounts, 2.2M rows, benchmarked against ProfitWell/OpenView.
What I found:
• Net New MRR collapsed to $852 in Jan 2024 — churn absorbed almost all gross gains
• Enterprise churn hit 13.8%, vs 8% on Pro — each Enterprise logo is 3-5x MRR, so that's disproportionate revenue risk
• $411K in MRR flagged at silent risk from usage decay, 30-60 days before cancellation
• SSO / Webhook / Integration adoption mapped as retention moats — adopters churn ~30% less
• Churn model: 98% recall, 70% precision, 0.82 F1 — optimized for recall, missing a real churner costs MRR, a false positive costs a CS call
• Packaged into a live Streamlit churn predictor for CS teams.
Portfolio: https://suraj-saas-analytics.netlify.app
Churn predictor: https://velocity-saas-churn-predictor.streamlit.app/
GitHub: https://github.com/SURAJRAJPUT2006
The ask:
I'm looking for 2 early-stage B2B SaaS founders ($5K–$100K MRR) to run a Revenue Leak Diagnostic on real data.
• Diagnostic #1: free, in exchange for a brutally honest testimonial + permission to write up findings (anonymized if you want)
• Diagnostic #2: $99, find $10K+ ARR at risk or it's free
What you get, 72hr turnaround:
• MRR waterfall breakdown
• Churn segmentation (plan / industry / channel)
• Usage decay & silent churn analysis
• High-risk account list, CS-ready, CSV export
• Executive dashboard + 1-page action memo
• Loom walkthrough
What I need: Stripe export / subscription CSV / even just MRR by month. I work with messy data.
Full transparency: no corporate clients yet, this is a synthetic dataset project. That's exactly why I'm doing the first diagnostic free — I need real-world validation and a testimonial, you get a free second set of eyes on your revenue. Fair trade.
Comment or DM if interested. Happy to answer any questions about the model / methodology publicly here too.
The silent risk framing is the part that stands out to me. I deal with a version of this across three different businesses I run, the accounts or shifts or tickets that are quietly decaying never show up until they are already a loss. Curious whether your model could generalize beyond SaaS churn to other kinds of early warning signs, that is the exact space I am building in.
Hi Stacy thanks for commenting, the silent risk framing is what made this click for me too.
yeah it generalizes. At the core it's just "something that was active goes quiet, then dies" - whether that's SaaS accounts, shifts, or tickets. Features change per domain, but the decay-then-loss pattern is the same.
Just read about FounderFlow — you're attacking this from the comms side, I'm coming from usage metrics. Kind of complementary honestly.
Happy to compare notes, and if you have any anonymized data I can test the model on non-SaaS signals, would love to see where it breaks. DMs open.
Agreed on the complementary angle, usage decay and comms decay are basically the same signal measured from two different ends. I do not have SaaS churn data to hand over since none of my three businesses are subscription software in that sense, but I would be curious whether your model transfers to something like attendance drop-off in a care setting or repeat-visit decay in a small retail business, same "active goes quiet" shape, very different domain. Good luck with the two diagnostics, that free-plus-paid structure is a smart way to get real validation.
Yeah, exactly. I don’t think the SaaS model would work as-is for care or retail, but the basic idea probably does: understand what normal activity looks like, spot when it starts dropping, and catch it before the person or customer disappears.
Retail might be easier to test first. I’d be curious how you define a “lost” customer there.
Good question. For the cafe, I've landed on something simple: a regular who drops from their normal weekly/biweekly visits to zero for 3+ weeks with no seasonal excuse. The hard part isn't spotting the silence, it's ruling out false positives, someone just switched to takeout I don't track, or is traveling. So "lost" is less a hard cutoff and more "quiet long enough that it's worth someone checking in." Curious if your precision/recall tradeoff translates to that kind of soft judgment call, or if it needs a harder line to work at all.
Yeah, I think it translates, but I wouldn’t make the output “lost” or “not lost.” I’d make it a check-in list ranked by risk. Three weeks would be a trigger, not proof. Someone who normally comes every week, suddenly stops, and has no travel or takeout signal would rank higher than someone with an irregular pattern.
Precision and recall would still depend on how many people the cafe can realistically check in with. Honestly, I’d probably start with a simple score before using ML. The useful question may be “was this customer worth checking in on?” rather than “did they definitely churn?” Do you already have visit history per customer, or is that mostly manual right now?