Cap your AI bill: a usage-limit dashboard in a spreadsheet
Cap your AI bill: a usage-limit dashboard
Short answer: List every AI subscription and API key you pay for in one spreadsheet. Once a week, paste in usage from each provider's billing page, set a hard spend limit or budget alert wherever the provider offers one, and send simple, repetitive tasks to a cheaper model. The dashboard itself should cost $0–5/month (estimate to verify). What you save depends on what you cut.
The problem
AI spend leaks in two ways: subscriptions you forgot about and API usage that spikes (an agent loops, or a big model handles a job a small one could do). Fixed-price plans also have usage limits that reset on their own schedules, so "why am I rate-limited?" and "why is my bill $X?" are really the same question.
What you'll get
- One sheet with every AI cost in one place: fixed plans + metered API
- A weekly 10-minute update routine
- Spend limits/alerts turned on wherever your providers support them
- A short "routing rule" listing which tasks go to a cheaper model
Tools
- A spreadsheet (Google Sheets, Excel, or a CSV + a small script)
- Each provider's billing/usage page (consumer plans show usage in settings; for example, Claude says you can see where you stand in Settings > Usage, per https://claude.com/pricing)
- Optional: an agent to read exported CSVs and fill in the sheet
Setup steps
- Inventory. Go through your card statement and email receipts for the last 2–3 months. Add every AI-related charge as a row: vendor, plan, monthly price, billing day, account email, what you actually use it for.
- Build the sheet. Two tabs:
Plans: vendor | plan | $/mo | renews on | limit type (e.g., rolling 5-hour + weekly) | last time used | keep? (Y/N/?)Metered: week | provider | model | input tokens | output tokens | $ spent | project- Pull usage weekly. Each provider's console or settings page shows usage. Export CSV if it's offered, otherwise copy the totals by hand. (Optional: have an agent turn exported CSVs into
Meteredrows. Give it the files, not your account login.) - Set hard limits and alerts. In every API console that supports it, set a monthly spend limit and an alert threshold (for example, 50% and 80% of budget). For subscriptions, put a calendar reminder 2 days before each renewal. Both Anthropic and Cursor say you must cancel at least 24 hours before renewal to avoid the next charge (https://claude.com/pricing, https://cursor.com/pricing).
- Add a total and a budget line.
Total this month = SUM(Plans $/mo where keep≠N) + SUM(Metered $ this month). Turn the cell red when it goes over your budget. - Write a routing rule. For example: "Summaries, classification, and formatting → the cheapest model that passes a 10-sample spot check. Coding and multi-step reasoning → the main model." Test on 10 real examples before you switch.
- Monthly review (15 min). Sort
Plansby "last time used." Anything unused for 30+ days gets a "?" and a decision from you.
The bill (monthly, USD)
⚠️ All figures are estimates to verify. Pricing pages checked 2026-10-15. Taxes excluded.
Cost of the dashboard itself | Scenario | What you pay for | Est. cost/mo | Source | |---|---|---|---| | Low | Spreadsheet on an account you already have | $0 | — | | Typical | Same, plus a few cents of API tokens if an agent parses CSVs | ~$0–1 | Token rates: https://claude.com/pricing | | High | A paid spreadsheet/automation add-on | up to ~$5 | Verify with the specific add-on |
Reference prices to put in your Plans tab (verify, they change)
| Plan | Listed price | Source |
|---|---|---|
| Claude Pro | $20/mo monthly, $17/mo billed annually ($200 up front) | https://claude.com/pricing |
| Claude Max | From $100/mo (5x or 20x Pro usage) | https://claude.com/pricing |
| ChatGPT Go / Plus / Pro | $8 / $20 / $100, $200, or $500 per month | https://help.openai.com/en/articles/9793128-about-chatgpt-pro-tiers, https://howply.com/blog/chatgpt-claude-gemini-plans-compared/ |
| Cursor (plans as listed on its pricing page) | Free $0, Plus $8, Premium $30, Super $100, Ultra $200 per month; third-party models billed separately at API list price | https://cursor.com/pricing |
Model-routing example (API list prices per million tokens, input/output) | Model (Anthropic) | Input | Output | Source | |---|---|---|---| | Haiku 5.5 (prompts ≤100K tokens) | $0.50 | $2.50 | https://claude.com/pricing | | Sonnet 5.5 | $2 | $10 | https://claude.com/pricing | | Opus 5.5 | $4 | $20 | https://claude.com/pricing |
How to read this: at these list prices, the same token volume costs 4x less on Haiku 5.5 than on Sonnet 5.5, and 8x less than on Opus 5.5. That's a property of the price list, not a measured saving. Your real result depends on whether the cheaper model does the task well enough.
Where it could go over: an agent stuck in a retry loop on a metered API key. A hard spend limit is the only reliable guard, and alerts are only useful if someone reads them.
✋ What stays manual
- Choosing which plans to keep or cancel. The sheet shows you the data. You make the call.
- Clicking "cancel." Don't give an agent your billing login.
- Setting the budget number. Only you know what the work is worth to you.
- Judging quality after routing. A cheaper model that gives wrong answers isn't a saving.
Security notes
- Never paste API keys into the sheet. Track keys by a nickname and their last 4 characters only.
- Give the agent exported files, not account access. Billing consoles can usually also create keys and change plans.
- One key per project makes it obvious which project caused a spike, and lets you revoke one key without breaking everything.
- Rotate any key you've pasted into a chat, a repo, or a screenshot.
- Turn on 2FA on every AI vendor account that bills your card.
Common bugs & fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Sheet total ≠ card statement | Taxes, currency, annual plans charged in one month | Add a "billing cycle" column; split annual cost ÷ 12 |
| You hit a limit while the sheet says you're fine | Fixed plans limit usage, not dollars (e.g., rolling windows + weekly caps) | Track "times rate-limited this week" as its own column |
| Metered spend jumps one week | Long contexts, a loop, or a bigger model chosen by default | Check the model column first; then check for retries |
FAQ
Do I need code for this? No. A spreadsheet and 10 minutes a week is enough. Scripts are optional. Should I switch everything to the cheapest model? No. Route by task, and test on real examples first.