---
title: "Bill audit — Undominated.ai"
canonical: https://undominated.ai/audit/
description: "Drop an OpenRouter activity CSV. See, per model you paid for, whether something else is strictly better and cheaper at your observed input:output mix. Runs in your browser — the file never uploads."
---

# Bill audit — Undominated.ai

> Drop an OpenRouter activity CSV. See, per model you paid for, whether something else is strictly better and cheaper at your observed input:output mix. Runs in your browser — the file never uploads.

# Bill audit

Import OpenRouter activity or a normalized OpenAI or Anthropic usage CSV. We keep unmatched models and rejected rows visible. Supported workloads compare catalogue rates at the supplied input:output mix and mean prompt length. Missing spend stays unknown. The file is read with FileReader only; nothing is uploaded, and parse plus verdict use the catalogue already on this page.

Checking a repository rather than a bill export? [Check a repo](https://undominated.ai/check-repo/) reads a README or package.json in this browser too.

 Import format Detect from unambiguous headers OpenRouter activity CSV OpenAI usage — normalized CSV Anthropic usage — normalized CSV

Choose a provider when the headers are ambiguous. OpenAI and Anthropic support uses the normalized formats shown here, not an assumed native dashboard layout.

 Example headers and limits

**OpenRouter activity CSV**

 date,model,provider_name,requests,prompt_tokens,completion_tokens,usage

**OpenAI usage — normalized CSV**

 model,input_tokens,output_tokens,num_model_requests,input_cached_tokens,input_cache_write_tokens,batch,service_tier,spend_usd,currency

**Anthropic usage — normalized CSV**

 model,uncached_input_tokens,output_tokens,requests,cache_read_input_tokens,cache_creation_input_tokens,service_tier,spend_usd,currency

Required: model and both token columns. Counts must be non-negative whole numbers. Supply a request count for a mean prompt length. Missing or blank spend is unknown; explicit 0 is zero. Currency must be USD. Cached tokens, batch, non-standard service tiers, and unrecognised billing columns withhold affected comparisons. For normalized imports, missing cache or tier flags also withhold comparisons. Do not turn unknown fields into zero.

 CSV file Or paste CSV Audit paste Try the transparent sample

Every sample is synthetic demonstration usage, not a customer bill. The transparent OpenRouter sample and normalized provider samples use the same parser as your file. Each includes an unmatched model. Normalized samples also demonstrate unknown spend.

## Questions this page answers

 Does this audit upload my bill?

No. The CSV is read with FileReader in your browser. Parse and verdict use the catalogue already on this page. Nothing is uploaded.

 What does strictly dominated mean here?

At the observed input:output mix and mean prompt length, another catalogue model scores at least as high and costs no more under standard uncached rates, with at least one strict improvement and a matching capability envelope. This is a catalogue scenario, not invoice savings. Unrated is not scored zero. Unmapped rows stay in a visible bucket.

 Are Artificial Analysis scores used?

No. Public dominance verdicts on this page use the LMArena lens already in the catalogue. Artificial Analysis figures are not published as ranking headlines here.

## Continue your investigation

 - [Check a repo](/check-repo/)
- [Check a model](/check/)
- [OpenRouter or direct](/openrouter-vs-direct/)
- [Independence](/independence/)
