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.
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"
Every AI vendor and cloud in one table. Sort it. Filter it. Group by vendor, model or service, and period.
Keys stay in your browser tab. Data lands in your bucket. The page is static and open source; read exactly what it does.
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.
A small WASM Worker on a Cron Trigger. Three commands: cd <vendor>2parquet/worker, wrangler secret put your read-only key, wrangler deploy.
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.
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).
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.
The same Rust/Parquet code writes the lake (collectors) and reads it (compiled to WASM in the browser). No drift between writer and reader.
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.
Tokens, credits, minutes, dollars β each vendor keeps its native unit, and the KPIs adapt (LLM cache economics vs. cloud $/day).
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.
Priority order. Want one bumped up, or a vendor we're missing? π vote or request it on GitHub β β or send a PR: a connector is ~one function, and COLLECTORS.md has a paste-ready prompt plus the test bar to clear.
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.