๐Ÿงพ MYCLOUDBILLS ยท FAQ

Questions, answered honestly

The short version of how this works, what it costs, and what it deliberately won't do.

Privacy & trust

Where do my API keys go?

Into your browser tab, and straight to your own bucket โ€” never to us. You paste a read-only bucket token into the page; it signs requests and reads your Parquet directly from your R2 bucket. There is no backend of ours in the path, so we can't see your keys or your numbers. The page is static and open source โ€” you can read exactly what it does.

Is putting a key in a browser actually safe?

A key in a tab is still a key, so we make it a read-only token scoped to the one bucket โ€” it can't change or delete anything, and it can't see the rest of your account. The browser sandbox protects your device from the code, not the key from the code; the real guarantee is that the code is open and auditable. A strict Content-Security-Policy on the page pins network access to R2 as defense-in-depth. Write access stays with the collectors, never the viewer.

Do you store my prompts? Is this an observability tool?

No, and no. This takes the cost slice and stops there โ€” days, services, dollars, and usage units. Your prompts, completions, and traces never go into it. If you want request-level tracing, that's a different kind of tool; this one is deliberately just the money.

Hosting, cost & self-hosting

What does it cost?

$5/month, flat โ€” paid to Cloudflare, not to us. Everything runs in your own Cloudflare account on the $5 Workers Paid plan. A real multi-vendor fleet uses under 1% of what that plan includes, so there's no usage bill to watch. The viewer itself is free (a static page on R2, zero egress). We earn $0 on the self-hosted path โ€” tips only.

Why Cloudflare, and why the $5 plan?

Two reasons. The free tier caps you at 5 Cron Triggers and 10 ms CPU per run โ€” a Rust/WASM Parquet collector needs more than that, so a multi-collector setup is a non-starter on free. And R2 has zero egress fees, which is the whole reason the browser can read your data directly without a server in the middle. $5 removes the caps and keeps the architecture simple.

Can I self-host the whole thing?

Yes โ€” but you own the ops, and for most people that's more hassle than the $5. There's nothing proprietary in the path: it's a static page plus a WASM module plus a bucket you control. To run it entirely yourself you need:

You can run the store yourself with MinIO (or Garage / SeaweedFS), but then you're keeping a server up 24/7 โ€” TLS, CORS, backups, patching โ€” just to hold a few KB of rolled-up billing data. That's real work, and if the box is down when you open the page, you see nothing. It's genuinely doable; it's just more babysitting than a $5 bucket that someone else keeps running.

Honest bottom line: self-host if you already run object storage and want zero third parties in the loop. Otherwise the $5 Cloudflare path exists precisely so you don't have to.

Can I use AWS S3, Google Cloud Storage, or Backblaze instead of R2?

For the browser read, yes โ€” the reader signs S3-style SigV4 requests, so any S3-compatible store works as long as you can set CORS on it. Two catches: those providers charge for egress (the page reads your rollups on each load โ€” small, but not free like R2), and the collectors currently write through Cloudflare's R2 binding, so pointing them at a different store is a code change, not a config toggle.

Data, vendors & scope

Which vendors are supported?

Today: AWS (Cost Explorer), OpenAI, Anthropic, Twilio (SMS / voice / numbers), Fireworks, Cartesia, OpenRouter, and Cloudflare (Workers + R2 usage). More are on the roadmap, and you can vote on what's next. Any vendor with a billing or usage API can become a collector. (A vendor needs a billing/usage API to be collectable โ€” e.g. Fly.io has no cost API yet, so it can't be one until it does.)

Can I add a vendor you don't cover?

Yes โ€” and PRs are very welcome. A collector is essentially one function: map a vendor's billing API to a daily (day, service, cost) rollup under its own prefix. The reader picks up new prefixes automatically โ€” zero changes to the page. COLLECTORS.md has the full recipe, a paste-ready prompt that does most of the work, and a clear acceptance bar every connector must pass (a fixture test proving the cost math, a clean wasm build, additive-only schema, no secrets). Clear the bar and we'll merge it. (Want a private or internal billing source wired in for your company? That bespoke work is something we can do for you.)

How fresh is the data?

Collectors run hourly, except AWS runs daily โ€” AWS's own Cost Explorer data lags by up to a day, so a faster cron would just re-read the same numbers (and cost $0.01 per call). Each run overwrites the current month's rollup in place.

What are "category" and "tags" in the viewer?

Two ways to slice spend beyond vendor and service. Category is the FOCUS ServiceCategory (Compute, Storage, AI and Machine Learning, โ€ฆ) โ€” it groups by what the spend is for, so all your LLM inference lands together whether it billed via Fireworks, OpenRouter, or Bedrock. Tags are your own dimensions (team, product, environment) that you define with simple rules in the page โ€” computed in your browser, saved only in that browser, never sent anywhere.

How do I query the raw data?

The โฌ‡ Parquet button in the viewer merges every vendor into one standard Parquet file. Open it with DuckDB, Polars, or pandas and run whatever you want โ€” it's your data in an open format, not locked in a dashboard.

How it compares to SaaS FinOps tools

How is this different from hosted SaaS FinOps tools?

They're hosted multi-tenant SaaS: to see your costs, your billing telemetry has to flow into their cloud, behind their credentials. MyCloudBills is local-first and zero-trust by construction โ€” data flows straight from vendor read-only APIs into your own R2/S3 bucket, and every aggregation and KPI runs in WebAssembly in your browser. Keys never leave the tab; there's no backend of ours in the path. It's the difference between "trust our SaaS with your billing data" and "nothing ever leaves your boundary."

Am I locked into your viewer?

No โ€” that's the point of using open Parquet in a bucket you own as the storage layer. Our page is just one reader. You can point DuckDB, Polars, pandas, or a BI tool straight at the same bucket and write your own one-line query. Enterprise tools keep your data in a proprietary portal; here the raw lake is yours, in a standard format, forever.

Why not just use an enterprise FinOps tool?

Two reasons. Cost: those are closed-source with custom enterprise pricing โ€” often tens of thousands a year, frequently scaled as a percentage of your cloud spend. MyCloudBills is $5/month flat (or free self-hosted), with no vendor tax that grows as you do. Fit: they're built for generalized multi-cloud infra (AWS/Azure/GCP, Kubernetes, Snowflake) and struggle with API-driven AI billing. MyCloudBills is tuned for the modern AI stack โ€” AI-native units like effective $/Mtok, cache-hit efficiency, and voice credits sitting right next to AWS $/day and Cloudflare usage. Same Rust code writes the lake and reads it, so there's zero schema drift between collector and viewer.

Odds & ends

Why is it called "MyCloudBills"?

Because it does what it says: it shows you your cloud and AI bills, in one page, in a bucket you own. No cleverness, no mascot to decode โ€” just the thing, named for the thing.

โ† Home Install Launch the app

AWS, Cloudflare, Fireworks, Cartesia, OpenRouter, OpenAI, Anthropic, and Twilio are trademarks of their respective owners. MyCloudBills is an independent open-source project and is not affiliated with or endorsed by these providers.