Skip to main content
New in 1.4Writes and deletes are counted too

Catch runaway Firestore reads before a traffic spike finds them.

Code that looks right, yours or your AI agent's, can still run the same query five times. A localhost widget counts the reads behind every page and names the function, collection and execution count, so you fix it now instead of after a surprise bill.

$9 launch price · 50 left · Runs 100% locally · 30-day refund

Loading interactive demo...

Works with

  • Next.jsApp and Pages Router. Admin SDK reads with one wrap.
  • NuxtClient SDK reads in pages and composables.
  • ReactCreate React App or Vite.
  • ViteReact, Vue and Svelte. New files are tracked automatically.
  • AngularAdds the widget to src/index.html. Counts firebase/firestore reads, not AngularFire observables.
  • VueWith Vite, reads in .vue files are tracked automatically.

Firestore bills don't grow gradually. They jump.

Firestore charges per document read, not per query. A page that looks harmless in development can become expensive once real users start loading it.

Monthly reads from one of my own production apps, which uses every Firebase service.

Most read spikes come from code that looks correct.

Re-renders, sibling components and listeners quietly repeat the same query. Firebase shows you the monthly total, not the screen or function behind it.

ReadMeter makes those page-load patterns visible early, before you ship.

Measured on Learn with Odi, one of my apps

The query was already right. It still ran five times.

01

Widget named it

Page
/home
Collection
grade3
Caller
load
Executions
5×
Reads
605

02

Pasteable agent task

Refactor load() on /home · "Learn with Odi":
- Executes 5× and triggers 605 reads on grade3
- Two sibling mounts fetch the same collection
- Share one fetch + short TTL cache; do not add a limit()

03

Reload measured the cut

Before

605

After

270

reads on this load

5× → 1 shared fetch

~55% fewer reads on that load

Execution count and caller name mattered more than “add a limit.” The bug was identity of the fetch. Local development reload. Remaining ~270 reads are other /home work, out of scope for this pass.

  • Deep TraceSee exactly which function caused each read
  • AI-FixTurn read spikes into actionable prompts
  • Local HistoryTrack read trends across your dev session
  • JSON ExportExport evidence for reviews and reports

New in 1.3 · readmeter audit

Rather not go page by page? Audit the whole app.

One command loads every route, ranks what to fix across all of them, and writes one prompt for your AI agent. After the fixes, it measures again and shows what actually changed.

  1. 1 / 3

    Measure every page

    readmeter audit

    Each route is loaded several times with an empty cache. REPORT.md ranks the findings across pages, so a hook that over-reads on six routes is one fix.

  2. 2 / 3

    Your agent fixes, after your OK

    FIX_PROMPT.md

    FIX_PROMPT.md asks Claude Code, Cursor or any coding agent to show you a plan and wait for your approval before it edits anything.

  3. 3 / 3

    Measure again and compare

    readmeter audit --after

    COMPARE.md shows before → after per route, which findings are fixed, pages worth a second look, and read budgets to keep in CI.

Works with Claude Code and Cursor

readmeter add also installs a ReadMeter skill for both. Ask your agent to "audit Firestore reads" and it runs all three steps, and waits for your OK before it edits anything.

COMPARE.md · real run on the demo app
RouteBeforeAfter%
/leaderboard12020−83% · fixed
/discussions8080±0
/quiz-challenges4545±0
All 6 pages294194−34%

One finding fixed by an agent: the leaderboard now loads 20 rows with a "Show more" button instead of all 120. The other two findings are still open.

Runs on localhost with Playwright. Estimated document reads and writes, not a bill.

Built on real apps

Measured on my own Firebase apps

ReadMeter started as a tool for the Firebase apps I build and run. These are reads it caught there during development. Customer stories will appear here once they're submitted and verified.

Read the case study
ProjectReadsChange
The Globals logo
The Globals
  • Next.js

Education app with 6,600 daily users. ReadMeter's read sources pointed at a triple class query and a student page loading teacher data; five fixes cut reads per pass 31% for teachers and 25% for students.

Maker's project
314.4M → 236.0M↓ 25%
$47.04/mo

Maker's project: an app I build or maintain, measured with ReadMeter in development. Verified customer: a story submitted with a valid ReadMeter license and reviewed before publishing.

Saved per month: for the maker's projects, reads before and after are scaled to the app's real traffic (daily active users from Firebase, one pass through the app per user per day) at $0.06 per 100,000 reads, before the free tier. Customer figures are their own estimates.

Privacy

Your Firestore data never leaves your machine.

No access to your data

Reads are counted inside your browser (client SDK) and your local Node process (Admin SDK). Document contents are never sent anywhere.

No credentials needed

No service accounts, no Firebase console access, no API keys. ReadMeter only sees what your app already loads on localhost.

Localhost only

The widget stays inactive outside localhost and in production builds, so nothing ships to your users.

What leaves your machine, and when: Before you buy · Privacy Policy

Why not build it yourself?

A read counter takes an afternoon. Finding why a page costs 605 reads takes more.

A read counter takes an afternoon. Finding why a page costs 605 reads takes more.
What you needDIY counterReadMeter
SetupWrap every read call by handOne install command
Calling function and collection for each readManual tags on every call
Execution count (same query running 5×)
Writes and deletes, counted apart from readsWrap every write call too
Ready-to-paste fix prompt for your AI agentBuilt in
Whole-app audit with a before/after compareYou build itreadmeter audit
CostAn afternoon, plus upkeep$9 once

One duplicate fetch caught before launch is worth more than a surprise bill.

Less than one surprise bill.

$9 $19 launch price · one-time, no subscription

Launch price for the first 50 buyers: 50 left. Then $19, with every future update still included.

Dev-only: it counts reads while you build. Not a billing calculator, not production monitoring, and not a guarantee of a lower bill.

A runaway query is free to fix on localhost. On one of my own apps, monthly Firestore read costs fell from ~$190 to ~$75 after fixing what ReadMeter surfaced.

  • No subscription. Pay once and keep it.
  • Use it on up to 3 of your own machines, and move it any time with readmeter deactivate
  • Unlimited projects, every future update included
  • 30-day money-back guarantee, no questions asked
Get ReadMeter
Secure checkout via Gumroad30-day refundRuns locally

Before you buy