The number most solo builders want is not "how much per million tokens": it's "how much per user per month, and what does that do to my margin?" That number depends on your workload shape: how many calls per user per day, how long the inputs and outputs run, and whether your system prompts repeat enough to cache.
At 1,000 daily active users, three workloads cover most AI SaaS products: a chat assistant, a document extraction pipeline, and a RAG knowledge base. Each has a different token profile and a different bill.
How the math works
Four inputs drive every calculation below:
- Input tokens per request: system prompt plus context plus the user's message
- Output tokens per request: what the model writes back
- Calls per user per day: your actual usage pattern, not a theoretical max
- Prompt cache hit rate: realistic at 70–90% for stable system prompts; batch discount (50% off) for async extraction jobs
All figures use September 2026 pricing: Claude Haiku 4.5 at $1/$5 per million tokens input/output (cache reads at $0.10/M), Claude Sonnet 5 at $2/$10 per million (cache reads at $0.20/M). The gap between them is a flat 2x on both input and output.
Workload 1: Chat (2 turns per user per day)
Token profile per turn: a 500-token system prompt (cached after the first request), 400 tokens of dynamic input (the new message plus recent history), and 400 tokens of output. At a 90% cache-hit rate on the system prompt:
| Metric | Haiku 4.5 | Sonnet 5 |
|---|---|---|
| Cost per turn | $0.00245 | $0.0049 |
| Turns per user per day | 2 | 2 |
| Monthly cost per user | $0.147 | $0.294 |
| Monthly bill at 1,000 users | $147 | $294 |
At $29/month per seat, Haiku 4.5 chat inference is under 1% of revenue. LLM cost is rarely the margin killer at this scale — it's users who run 10- or 20-turn sessions instead of 2. A 10-turn session costs roughly 5x a 2-turn one before any optimization. That is where sliding-window context compaction changes the math, not the model tier.
Workload 2: Document extraction (2 documents per user per day)
Extraction (invoices, PDFs, structured forms) is input-heavy with no useful caching. Every document is different, so the system prompt is short and the document dominates the token count.
Token profile: 3,000-token input (the document), 500-token output (a structured JSON payload). No prompt caching gain; batch-eligible for async jobs.
| Metric | Haiku 4.5 real-time | Haiku 4.5 batch | Sonnet 5 real-time | Sonnet 5 batch |
|---|---|---|---|---|
| Cost per document | $0.0055 | $0.00275 | $0.011 | $0.0055 |
| Monthly cost per user (2 docs/day) | $0.33 | $0.165 | $0.66 | $0.33 |
| Monthly bill at 1,000 users | $330 | $165 | $660 | $330 |
The Anthropic Message Batches API and OpenAI Batch API both offer 50% off for async processing, with a latency trade-off of minutes to hours. For extraction jobs where users submit a batch and check later, the discount is nearly always worth taking. For the full batch pricing math across Anthropic, OpenAI, and Google, the batch API cost breakdown by provider has the numbers side by side.
One upgrade case for Sonnet 5 on extraction: if your downstream pipeline rejects malformed JSON and retries, a 5% retry rate on Haiku 4.5 adds $0.017 per user per month. If Sonnet 5 reduces retries to 1%, the cost difference narrows and the latency improves. Run a small sample before committing to the cheaper tier on schema-critical work.
Workload 3: RAG answer synthesis (3 queries per user per day)
RAG queries are more expensive than plain chat because every question injects retrieved context alongside the system prompt.
Token profile: 300-token system prompt (cached), 1,000 tokens of dynamic context (the query plus four retrieved chunks at roughly 250 tokens each), 600-token output.
| Metric | Haiku 4.5 | Sonnet 5 |
|---|---|---|
| Cost per query | $0.00403 | $0.00806 |
| Queries per user per day | 3 | 3 |
| Monthly cost per user | $0.363 | $0.725 |
| Monthly bill at 1,000 users | $363 | $725 |
RAG costs 2.5x more per call than the chat workload above, even though the output is the same length. The reason is the 1,000 tokens of uncached retrieval context. A retriever that pulls four chunks when two are sufficient is billing for content the model mostly ignores. Tightening retrieval precision often cuts costs more than a model downgrade does, and the answer quality usually improves as a side effect.
The full bill at 1,000 daily users
| Workload | Haiku 4.5 | Sonnet 5 |
|---|---|---|
| Chat ($0.147 per user) | $147/mo | $294/mo |
| Extraction batch ($0.165 per user) | $165/mo | $330/mo |
| RAG ($0.363 per user) | $363/mo | $725/mo |
| Total | $675/mo | $1,349/mo |
| Per active user | $0.68/user/mo | $1.35/user/mo |
The gap between tiers is $674 per month at this scale, or $8,088 per year. Before defaulting to Sonnet 5 across all three workloads, benchmark whether the quality difference is detectable by actual users on each one. In practice, most extraction jobs and short-context chat replies show no measurable quality difference between the two tiers.
Break-even: when Sonnet 5 earns its 2x cost
Three situations where the upgrade to Sonnet 5 pays for itself:
Output quality drives retention directly. If a user gets one bad extraction or one wrong answer and churns, the lifetime revenue lost exceeds months of the $0.67 per-user-per-month upgrade cost. High-stakes verticals (legal, medical, financial) belong on the better model.
Retry loops eat the savings. On strict schema validation, Haiku 4.5 may fail 8–12% of the time and Sonnet 5 may fail 2–3%. Each retry doubles the cost of that call. At scale, those retries can close the gap or cross it.
Users write long outputs. Output tokens cost 5x input tokens within the same tier. A model that writes tight, useful answers in 400 tokens beats one that needs 700 to cover the same ground. "Cheaper per token" does not always mean cheaper per useful answer.
A mixed-tier setup handles all three workloads efficiently: Haiku 4.5 for extraction and first-pass chat, Sonnet 5 for final RAG synthesis where answer quality drives retention. That typically lands around $0.80/user/month instead of $0.68 or $1.35.
Set up per-user cost guardrails in Node.js before you hit 1,000 users. Without them, a handful of heavy users can double the monthly bill while the median user costs a tenth of the average. The LLMTest proxy logs input tokens, output tokens, and USD cost per call, which lets you see the actual per-user distribution rather than a single monthly aggregate. Start tracking that number from day one, not after the first surprise invoice.