Audit your LLM API bill.
Drop last month's usage export and see what the same usage would cost on cheaper models, what prompt caching would have saved, and how your workload mix compares to the published indices.
Audit your real usage
Generic format always works: model, input tokens, output tokens per line. We also auto-detect the major providers' export columns.
Parsed in your browser. Nothing you paste is uploaded, logged or shared. Open your network tab and check.
Ranked purely on computed cost. No affiliate deals, no paid placement, rates from the open LiteLLM dataset.
No account, no paywall, no trial. Email is only ever asked if you want the report sent.
What the audit checks
The cache gap first. Instructions and schemas that repeat on every call bill at a fraction of the standard rate when cached. The audit prices your input against each profile's assumed cache share, because that saving needs no model change at all.
A like-for-like switch. Your exact token counts priced on every current first-party model, ranked. Comparisons stay within tier: pointing you from a flagship at a bargain model is not a saving, it is a different product.
Your mix against the index. Every row is matched to the published workload profile with the nearest output share and compared to that profile's basket average, using published thresholds.
The audit is arithmetic on your token counts. It cannot see your latency budget, your evaluation results, or the one prompt that only works on the model you are already paying for. A written review by a person is free for the first five.
What file to drop on it
Either a CSV with a header row or a JSON array of usage records. It does not matter which provider produced the file, because columns are matched by name rather than by position. Input is read from any of input_tokens, prompt_tokens, n_context_tokens_total or native_tokens_prompt; output from the matching completion or generation column; and the cached share from cached_tokens, cached_input_tokens or cache_read_input_tokens. A column it cannot identify is left out of the arithmetic rather than guessed at, and the parser tells you which rows it read.
Cached input is counted separately from standard input, and that distinction is the reason to use a tool rather than a spreadsheet. In most exports the cached figure is a subset of the input figure rather than an addition to it. Add the two columns together, as almost every hand-built sheet does, and you inflate your input volume by exactly your cache hit rate, which makes your current model look more expensive than it is and every alternative look better than it is. The audit subtracts before it prices.
Reading the result
Three numbers carry the finding. The first is what you actually spent, recomputed from your own token counts at published rates, which is worth checking against the invoice on its own: a gap between the two usually means retries, a second workspace, or a model you forgot was still wired up somewhere. The second is what the identical usage would have cost with caching applied at the share your export shows you are already achieving, which is the saving available without changing anything a user would notice. The third is the like-for-like switch, and it is deliberately conservative: comparisons stay inside a tier, because moving a flagship workload onto a bargain model is not a saving, it is a different product with different output.
Order matters when you act on it. Caching changes no output at all, so it is free to try and free to undo. A model switch inside the same tier changes output slightly and needs a look at your evaluations. A tier change changes the product. Work down that list and you capture most of the money before you take any risk, which is the opposite of the order most teams try.
Related: How to audit your bill · Reading the OpenAI usage CSV · Verifying your Anthropic cache rate · Estimate a project instead →
Questions this tool tends to raise
Does my usage data leave my browser?
No. The file is parsed by JavaScript on this page and the arithmetic runs on your device. There is no upload endpoint to send it to. You can confirm that by opening your browser network tab before you drop the file: no request is made when the audit runs.
My total does not match my invoice. Which one is wrong?
Usually neither. The audit prices the rows in the file you gave it at published on-demand rates. An invoice can also carry retries you were billed for, usage from another key or workspace, batch or committed-spend discounts, and taxes. Treat a gap as a question about scope rather than an arithmetic error, and start by checking whether the export covers every key on the account.
Why does it not just recommend the cheapest model on the list?
Because cost is the only thing this site measures, and the cheapest model on a price table is frequently the wrong answer for the work. We publish no quality score for any model. The comparison is held inside a tier so that the switch it suggests is one where output is comparable, and anything more aggressive is left as your decision with the numbers in front of you.
What if my export has no cached-token column at all?
Then the audit prices your whole input at the standard rate, which is almost certainly what you are paying. Older exports predate cache reporting on some providers. It is worth checking whether your provider now reports it, because a workload with a large repeated prefix and no cache column is the single most common place a large saving is sitting unclaimed.
How current are the rates it prices against?
They come from the same nightly capture that feeds the rest of the site, and the snapshot date is stated on the page rather than implied. Every rate here was observed in a capture and recorded with its date. We publish no estimated, interpolated or projected price anywhere on this site.
Should I audit this month or last month?
Last month, or any month that has closed. A complete month is a record; the current month is a partial one that will mislead you about your monthly total, and it will mislead you differently depending on which day you run it. If you want to know whether a change you made actually worked, compare two closed months rather than watching a running total.