# Attributing an LLM cost change to the deploy that caused it > A release can raise cost per call 15% while the monthly total rises 3.5%, because traffic moved too. Tag the release or you'll never separate them. URL: https://getculpa.com/llm-cost-per-deploy Last reviewed: 2026-08-03 Rates effective: 2026-07-02 ## Answer Tracking LLM cost per deploy means recording which release produced each call, then comparing cost per call across releases rather than comparing monthly totals. Traffic and code change at the same time, so a total can't separate them. Culpa, a local-first LLM cost, margin, and forecast ledger, tags every call with its release and prices it individually. ## Why this happens A deploy is the most common cause of a cost change and the hardest to prove, because two things move at once. The release alters cost per call, through a longer prompt, an extra retrieval step, a different model or one more retry. Meanwhile traffic does whatever traffic does. The monthly total mixes them, and mixing isn't reversible: a 15% rise in unit cost alongside a 10% fall in volume shows up as a 3.5% rise in the total, which reads as noise and gets ignored. Worse, the two can cancel completely, and then a genuine regression leaves no trace at all. The fix is unglamorous and it works. Record the release identifier on every call, then compare cost per call between releases, which holds volume constant by construction. That comparison is only available if the tag was written at the time. Adding release tracking after a suspicious month tells you about next month, never about the one you're investigating. ## What this usually looks like - Cost rose after a release and nobody can prove the release caused it. - Your bill looks flat and cost per call has been climbing for three deploys. - A rollback fixed spend and nothing recorded which version was responsible. - You compare months, and deploys happen weekly. - Two changes shipped together and only one of them was the expensive one. ## Common mistakes - Comparing monthly totals across a release. Why it hurts: Traffic and unit cost both move, and a total can't tell you which one did. Do instead: Compare cost per call between releases, which holds volume constant by construction. - Adding release tracking after a suspicious month. Why it hurts: The tag is written at call time, so it can never describe calls that already happened. Do instead: Tag from now on, and accept that the current investigation stays a judgement call. - Shipping several changes in one release and pricing the release. Why it hurts: You learn the release cost more without learning which change did it. Do instead: Where cost matters, ship the cost-affecting change alone and measure it. - Treating a cost regression as a bug rather than a decision. Why it hurts: A longer prompt that improves quality is a trade, and it should be priced rather than reverted on reflex. Do instead: Put the unit-cost change beside the quality change and decide deliberately. ## Self-check - Find your last three releases and your cost per call in the week either side of each. - If you can't produce that, your ledger has no release tag and that's the finding. - Take your most recent unexplained cost movement and see whether a deploy sits at its start. - Check whether your release identifier reaches calls made inside libraries you didn't write. ## A 15% regression that looks like 3.5% (illustrative) A modelled service at 2,000,000 calls a month, priced on Claude Haiku 4.5 at real rates of $1.00 and $5.00 per million from the price book effective 2026-07-02. A release adds retrieval context, taking input from 2,000 to 2,600 tokens a call while output holds at 400. In the same month, traffic falls 10% for unrelated reasons. Token shapes and volumes are modelled. before, per call: 2,000 in x $1.00/M + 400 out x $5.00/M = $0.0020 + $0.0020 = $0.0040 after, per call: 2,600 in x $1.00/M + 400 out x $5.00/M = $0.0026 + $0.0020 = $0.0046 unit cost rose 15.0%, all of it on the input side before: 2,000,000 x $0.0040 = $8,000.00 after, with traffic at 1,800,000: 1,800,000 x $0.0046 = $8,280.00 the total moved $280.00, or 3.5%, on a 15% unit-cost regression A 3.5% monthly movement is inside the range nobody investigates. The regression behind it runs more than four times larger, and unlike the traffic fall it sticks. It stays invisible for as long as the comparison is made on totals. ## Cost figures Every figure carries its confidence and its source. No figure on this page is provider-reported. - $280.00, modelled monthly movement from a 15% unit-cost regression, masked by a 10% traffic fall [calculated] Source: Per call, 2,000 input and 400 output tokens cost $0.0040, and 2,600 input and 400 output cost $0.0046, both on Claude Haiku 4.5 at real rates of $1.00 and $5.00 per million from the price book effective 2026-07-02, a 15.0% rise. At 2,000,000 calls before and 1,800,000 after, $8,000.00 against $8,280.00, a $280.00 or 3.5% movement. Token shapes and call volumes are modelled. ## FAQ Q: How do I tell whether a deploy raised my LLM costs? A: Compare cost per call between releases rather than totals between months. A total mixes unit cost with traffic and the mix isn't reversible. Cost per call holds volume constant, which is what makes the difference attributable to the code. Q: Why can a 15% regression look like a 3.5% rise? A: Because traffic moves too. In the modelled example a 15% rise in cost per call landed alongside a 10% fall in volume, so the monthly total rose only 3.5%, which reads as noise. The two can also cancel exactly, leaving a real regression with no trace in the total at all. Q: Can I add release tracking retroactively? A: Not exactly. A time-based join to your deploy timestamps approximates it, and doing so is worthwhile. The tag itself is written when the call is made, so it only describes calls from that point forward. Worth setting up before you need it, because the moment you want it always lands during an investigation into something that already happened. Q: What should I record on each call? A: The release or commit identifier, the model version, the prompt version, the customer and the run. Those five make almost every cost question a query rather than a reconstruction, and they cost almost nothing to carry compared to the trace payload most platforms bill you to store. ## Sources - Anthropic pricing: https://platform.claude.com/docs/en/docs/about-claude/pricing Run the free Cost Leak Scan: https://app.getculpa.com/scan?source=pseo&slug=llm-cost-per-deploy&cluster=problem Machine-readable index of every guide: https://getculpa.com/api/pages Human-readable index of every guide: https://getculpa.com/guides Site overview: https://app.getculpa.com/llms.txt Privacy: Culpa runs on your infrastructure. Your prompts and responses never leave it. Culpa counts calls to run your plan, and it fails open, so if it ever breaks your app keeps running.