Inspiration We kept noticing the same thing about modern software companies: they charge by usage — API calls, tokens, gigabytes, transactions — but the system that prices customers and the system that measures what they used are completely separate. Pricing lives in Stripe or Chargebee; usage lives in a database or warehouse. Nobody sits down each month and checks that the two actually agree. So money the business already earned quietly slips away — an overage that never got billed, a discount that should have expired six months ago, a price increase everyone agreed to but nobody applied. We wanted to build the thing that catches all of that.

What it does MeterSave reconciles what a customer should have been billed against what they were billed, and then helps you actually recover the difference. It runs ten detectors over your accounts — under-billed overages, expired discounts still being applied, missing price upticks, failed payments, FX and credit mistakes, and more — and turns each one into a finding with a dollar value and a severity. Then it goes a step further than a dashboard: for every finding it tells you exactly how to fix it, drafts a customer email and an internal correction memo, lets you track it from Open to Recovered, and can even push a draft correction back into Stripe. You can feed it data four ways: a live scan of your AWS databases, a CSV, a PDF, or a direct Stripe import — and whatever you load drives the whole app.

How we built it The app is Next.js and TypeScript on Vercel, with server actions keeping anything sensitive off the browser and passwordless email login through AWS SES. The data sits across two AWS databases that mirror how a real company is set up: billing — plans, contracts, invoices — in Aurora PostgreSQL Serverless v2, which we talk to over the RDS Data API so there's no connection pooling to manage, and usage events in DynamoDB. The heart of it is a reconciliation engine we wrote as pure, dependency-free TypeScript, so the exact same logic runs on the server for a live scan and in the browser for an uploaded file — which means the numbers are reproducible and verifiable. On top of that we built a real Stripe importer and a safe, draft-only write-back

Challenges we ran into A lot of the hard parts were the unglamorous ones. Getting Aurora's Data API working took a while — the free account tier quietly blocks it, and it took some digging to figure that out. Stripe's data model doesn't line up neatly with a clean billing schema, and it has a limit on how deep you can expand a query, which forced us to restructure how we pull pricing tiers. Making an upload genuinely take over every page — dashboard, findings, finance, the topbar — without leaving stale numbers somewhere took a few iterations. And we had to be honest with ourselves about PDFs: a single invoice can't be reconciled on its own, because you need the usage and the contract too, not just what was charged.

Accomplishments that we're proud of We're proud that it actually closes the loop — it doesn't just point at a problem, it hands you the fix. The AWS path is real and verifiable: our seeded dataset reproduces the exact same recoverable figure end to end, so we know the wiring is correct rather than just hoping it is. The Stripe integration genuinely pulls live data and writes back safely as drafts, never as charges. And four different data sources all run through one engine, which kept the whole thing coherent instead of becoming four half-products.

What we learned The biggest lesson was that the value isn't in any single system — it's in joining two systems that were never designed to talk to each other. Reconciliation only works when you have both halves: what should have been billed and what actually was. We also learned that detection alone isn't really a product. The moment it became interesting was when a finding turned into an action — a drafted email, a corrected invoice, a status you could move forward. That's the part that would make someone pay for it.

What's next for MeterSave Next up is reading arbitrary, messy invoice PDFs with AI extraction and a review step, so it isn't limited to clean structured files. We want deeper write-back — generating fully corrected invoices, not just draft line items — and more connectors beyond Stripe, like Chargebee, Metronome, and Orb. After that, scheduled scans with alerts so leakage gets caught the moment it happens, a running tally of revenue recovered over time, and opening up sign-ups once our email sending is out of sandbox.

Built With

  • aws-aurora
  • aws-dynamodb
  • aws-rds-data-api
  • aws-secrets-manager
  • aws-ses
  • next.js
  • stripe
  • tailwindcss
  • typescript
  • vercel
Share this project:

Updates