DEV Community

Cover image for I Built a SaaS Analytics Tool That Stores Zero Customer Data: Here's the Architecture
Jules
Jules

Posted on

I Built a SaaS Analytics Tool That Stores Zero Customer Data: Here's the Architecture

Article

Most SaaS analytics tools work the same way: connect your payment provider, we ingest your data, store it in our database, and show you dashboards. Simple, proven, and... a privacy nightmare.

When I built NoNoiseMetrics, I went a different route. Session-only architecture: your Stripe data is fetched, processed, and displayed in real time — then discarded. Nothing is persisted on our servers. Ever.

Here's why, and how it works.

The Problem with Traditional Analytics Pipelines

Tools like ChartMogul and Baremetrics follow the same pattern:

Stripe API → ETL → PostgreSQL → Dashboard
Enter fullscreen mode Exit fullscreen mode

Your raw financial data — every invoice, every customer, every charge — lives on someone else's server, indefinitely. For bootstrapped SaaS founders, that creates three issues:

  1. GDPR compliance becomes your problem AND theirs
  2. Data breach surface area doubles
  3. Trust is harder to build when you're asking for full Stripe access

The Session-Only Alternative

NoNoiseMetrics flips the pipeline:

Stripe API (read-only key) → Real-time processing → Browser render → Session ends → Data gone
Enter fullscreen mode Exit fullscreen mode

Here's what happens under the hood:

  • User connects a restricted Stripe API key (read-only — we can't modify anything)
  • On each session, we call the Stripe API to pull the relevant objects: subscriptions, invoices, charges, customers
  • Metrics are computed server-side in memory: MRR waterfall, churn cohorts, NRR, LTV
  • Results are sent to the frontend and rendered
  • When the session ends, nothing is retained

No database stores your financial data. No background sync. No data warehouse.

The Tradeoffs (Being Honest)

This architecture isn't free lunch:

Traditional (ChartMogul/Baremetrics) Session-only (NNM)
Historical data Pre-computed, instant Fetched each session
Dashboard load time ~1s ~3-8s (depends on Stripe data volume)
Offline access Yes No
Data stored on 3rd party Yes, all of it None
GDPR surface Shared responsibility Minimal — session data only
Background alerts Yes Not yet

For indie hackers tracking MRR under $100K, the tradeoff is worth it. You get your metrics without handing over your financial data to yet another SaaS.

The Stack

For anyone curious about the infrastructure:

  • Frontend: React, deployed on Vercel
  • Backend: Node.js on Railway
  • Auth & minimal state: Supabase (user accounts only — no Stripe data)
  • Payments: Stripe (yes, we use Stripe to analyze Stripe)
  • Blog/SEO: Astro (separate from the React SPA)

Monthly infrastructure cost: under $50.

Key Metric Computations

Here's a simplified version of how I compute MRR breakdown from raw Stripe data:

function computeMRRWaterfall(subscriptions, period) {
  const waterfall = {
    newMRR: 0,
    expansionMRR: 0,
    contractionMRR: 0,
    churnedMRR: 0,
  };

  for (const sub of subscriptions) {
    const current = getMRRForPeriod(sub, period);
    const previous = getMRRForPeriod(sub, previousPeriod(period));

    if (previous === 0 && current > 0) {
      waterfall.newMRR += current;
    } else if (current > previous) {
      waterfall.expansionMRR += (current - previous);
    } else if (current < previous && current > 0) {
      waterfall.contractionMRR += (previous - current);
    } else if (current === 0 && previous > 0) {
      waterfall.churnedMRR += previous;
    }
  }

  return waterfall;
}
Enter fullscreen mode Exit fullscreen mode

The real implementation handles edge cases (prorations, trials, multi-currency), but the core logic stays straightforward.

Why This Matters for Indie Hackers

If you're a bootstrapped founder, you probably care about three things:

  1. MRR growth — is the trend going up?
  2. Churn — who's leaving and why?
  3. NRR — are existing customers growing?

You don't need a data warehouse for this. You need a clean dashboard that tells you the truth and doesn't store your financial data on servers you don't control.

That's what I built with NoNoiseMetrics. It's free to start, and your data stays yours.


If you want to dig deeper into Stripe analytics, I wrote a full guide on what Stripe's native dashboard misses and how to fill the gaps.

What's your approach to SaaS analytics? Do you care about where your financial data lives, or is it a non-issue? Curious to hear.``

Top comments (0)