🧾 MYCLOUDBILLS

All your AI & cloud spend,
in one place you actually own.

AWS, LLMs, voice, gateways β€” each bills in its own dashboard and its own units. MyCloudBills pulls them into one bucket you own and shows them in one page in your browser: open source, keys never leave your tab, $5/month flat on Cloudflare.

See the live demo β†’ Install guide β†’ 🍺 Buy me a beer

Why you'd care

πŸ¦†

It's just Parquet β€” no lock-in

Your data is standard Parquet, in your own bucket. Download one file with the ⬇ button, then query it with DuckDB, Polars, or pandas β€” or point DuckDB straight at your bucket. duckdb -c "SELECT vendor, round(sum(cost_usd),2) usd FROM 'ai-spend.parquet' GROUP BY 1 ORDER BY usd DESC"

πŸ”­

One view, not five dashboards

Every AI vendor and cloud in one table. Sort it. Filter it. Group by vendor, model or service, and period.

πŸ”’

Local-first and private

Keys stay in your browser tab. Data lands in your bucket. The page is static and open source; read exactly what it does.

πŸ“Š

KPIs, already computed

The page picks the right metric for each source: cache-hit rate and effective $/Mtok for LLMs, $/day by service for cloud, credits for voice. Each sits beside its totals. No dashboards to wire up.

How it works

1 Β· Your vendors & clouds
AWSCloudflareFireworks CartesiaOpenRouter+ add one
↓a tiny collector you run (a scheduled Cloudflare Worker, Rustβ†’WASM) Β· read-only billing access only
2 Β· One bucket you own
R2 bucket Β· yours
aws/fireworks/cartesia/openrouter/
each collector writes a small daily rollup (Parquet) under its own prefix
↓one read-only key Β· fetched straight from your bucket
3 Β· The page β€” in your browser
πŸ”’ mycloudbills.com/ai-spend.html
$38.76 this month Β· 3 sources
sign + fetch + decode + all the math run locally (Rust β†’ WebAssembly). Credentials never leave this tab.
No backend of ours is ever in the path. We can't see your keys or your numbers β€” by construction. Use the hosted page as-is (it's static & open source), or self-host it on your own domain β€” same guarantees either way.

Get started in 3 steps

β‘ 

Deploy a collector

A small WASM Worker on a Cron Trigger. Three commands: cd <vendor>2parquet/worker, wrangler secret put your read-only key, wrangler deploy.

β‘‘

It writes to your bucket

Each run pulls that vendor's billing API and writes a daily Parquet rollup under its own prefix in your R2 bucket. Add more vendors anytime β€” the page picks them up automatically.

β‘’

Open the page

Go to the viewer, paste a read-only token, and it lists every prefix and does the math locally. Try the demo β€” no setup.

That's the whole path. Full install guide β†’ has the details (and everything optional).

What it costs

$5 / month flat β€” no usage surprises more collectors Β· more history β†’ $/mo

Put it on Cloudflare's $5/month Workers Paid plan and stop thinking about it. It includes 250 cron triggers, 10M requests, and 30M CPU-ms a month β€” a real multi-vendor fleet uses under 1% of that, so you never see a usage bill (and each run's CPU is capped, so a bug can't run away). Cloudflare's entry tier is too limited for this β€” 5 cron triggers and 10 ms CPU/run β€” so put the account on the $5 plan and forget about limits.

$5/mo flat Workers Paid β€” 250 cron triggers, 10M requests + 30M CPU-ms/month included; a real fleet uses under 1%
why $5 Cloudflare's entry tier is too limited for this β€” 5 cron triggers & 10 ms CPU/run β€” the $5 plan removes both
no surprises each run's CPU is capped, so a bug can't run away; Cloudflare's own hourly-collector example (3 minutes CPU/run) is only $6.99/mo β€” ours are ~3,600Γ— lighter
+~$0.30/mo only if you add AWS β€” Cost Explorer bills $0.01/call, one daily pull
Put the account on the $5/month Workers Paid plan and you don't have to think about limits. Each vendor you add brings just its own read-only billing credential.

Under the hood

πŸ¦€

One language, end to end

The same Rust/Parquet code writes the lake (collectors) and reads it (compiled to WASM in the browser). No drift between writer and reader.

🧩

Add a vendor in an afternoon

A collector is ~one small file: map the vendor's billing API to a daily rollup. The page picks up the new prefix automatically β€” zero UI changes.

🌐

Multi-cloud, unit-aware

Tokens, credits, minutes, dollars β€” each vendor keeps its native unit, and the KPIs adapt (LLM cache economics vs. cloud $/day).

πŸͺΆ

Tiny and cheap

Collectors are small WASM jobs on Cloudflare Cron Triggers. A month of rolled-up data is a few KB. It all runs for a flat $5/month β€” well inside what that plan includes, with no usage bill to watch.

Collectors β€” live and on the way

Priority order. Want one bumped up, or a vendor we're missing? πŸ‘ vote or request it on GitHub β†’

Live now
βœ“ AWSβœ“ Cloudflareβœ“ Twilioβœ“ OpenAIβœ“ Anthropicβœ“ Fireworksβœ“ Cartesiaβœ“ OpenRouter
Next up (vote to reorder)
Google Vertex / GeminiAzure OpenAIGCPGroqTogetherReplicateElevenLabsDeepgram
🍺 Buy me a beer Open source · local-first · your keys stay in your tab. Live demo

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.