Guides / llm cost accrual
Accruing LLM spend you have incurred but not been billed for
LLM cost accrual is booking model spend in the month it was incurred, before the provider invoice arrives. Accruing from last month's total under-books any service still growing. Culpa, a local-first LLM cost, margin, and forecast ledger, prices every call as it happens, so the month's figure exists on the last day of the month rather than a week later.
Why this happens
Accounting wants cost recognised in the period it was incurred, and providers invoice after the period ends. That gap is ordinary and every finance team handles it with an accrual. What makes LLM spend awkward is that the usual accrual basis, last month's actual, assumes the thing is roughly flat, and a growing AI product is the least flat line on the ledger. So the accrual is wrong by roughly the growth rate, every month, in the same direction, and it corrects as a prior-period adjustment that makes the following month look worse than it was. Run that for a few quarters and gross margin is understated during growth and overstated during a slowdown, which is precisely backwards from what anyone reading the numbers needs. The fix isn't a better estimate. It's to stop estimating: if every call was priced when it happened, the month's cost is a sum on the 30th and the invoice becomes a reconciliation rather than a revelation.
What this usually looks like
- You accrue AI spend from last month's invoice because nothing else is available.
- Every month opens with a prior-period adjustment for the last one.
- Gross margin gets restated after the provider invoice lands.
- Nobody can give finance a cost figure until the invoice arrives.
- Your accrual has been under by a similar percentage several months running.
Free, no card, no account
Run the free Cost Leak Scan
It shows your most expensive conversation before you install anything.
Mistakes that cost the most
| Mistake | Why it hurts | Do instead |
|---|---|---|
| Accruing from last month's invoice total. | It assumes flat usage, so a growing service is under-accrued by roughly its growth rate every month. | Accrue from calls actually made in the period, priced when they were made. |
| Treating the provider invoice as the source of truth for the period. | It arrives after the close and covers a billing window that may not match your month. | Close on your own priced ledger and reconcile the invoice against it afterwards. |
| Ignoring a dated price change inside the accrual period. | A rate that rises mid-month makes an average of the month wrong for both halves of it. | Price each call at the rate in effect on its own date, which a versioned book does by default. |
| Booking all model spend as one line. | It closes the month without telling anyone which product or customer the cost belongs to. | Carry the same attribution into the accrual that you use for margin. |
Run this check tonight
- Find the last three months' accruals and the invoices that settled them, and size the gaps.
- Check whether the gaps run in the same direction, which tells you the cause is bias rather than noise.
- Ask whether you could produce a cost figure for this month on its last day.
- Check whether your provider's billing period actually matches your accounting month.
A growing month, accrued from a flat one
Illustrative example
A modelled service on Claude Haiku 4.5 at real rates of $1.00 and $5.00 per million from the price book effective 2026-07-02. March runs 8,000M input and 900M output tokens. April grows to 11,000M and 1,300M. Finance closes April on the 30th and accrues at March's actual, because that's the only figure it has. Token volumes are modelled.
April closes $5,000 light, which is 28.6% of what it actually cost, and the correction lands in May as somebody else's problem. Nothing here is an estimating failure. The figure existed on the 30th of April, in the call log, unpriced.
Every number, with its confidence and source
| Figure | What it means | Confidence | Source |
|---|---|---|---|
| $5,000, or 28.6% | modelled under-accrual from booking a growing month at last month's actual | calculated | March at 8,000M input and 900M output on Claude Haiku 4.5 at real rates of $1.00 and $5.00 per million from the price book effective 2026-07-02 is $8,000 + $4,500 = $12,500. April at 11,000M and 1,300M is $11,000 + $6,500 = $17,500. Accruing April at March's actual leaves $5,000 unbooked, which is 28.6% of $17,500. Token volumes are modelled. |
What a generic answer can’t know
The provider knows what it will bill you and tells you on its own schedule, which is a billing question rather than an accounting one, and it may not line up with your close. The only way to have the number on the last day of the month is to have priced each call as it was made, from a rate book that knows what was in effect on that date. Culpa does that in exact decimal, keeps the ledger on infrastructure you control, and carries the same customer, team and feature attribution into the accrual that it carries into margin, so the month closes split the way the business is actually run. The invoice then reconciles against it, and a difference becomes a question about the provider rather than a restatement of your own numbers.
Questions founders ask next
How do you accrue LLM costs before the invoice?
Price the calls you made in the period at the rates in effect on the dates you made them, and sum. That's an accrual built from your own records rather than an estimate from last month, and it's available on the last day of the period rather than a week into the next one.
Why does accruing from last month under-book a growing service?
Because it assumes usage was flat. In the modelled example March cost $12,500 and April cost $17,500, so accruing April at March's actual left it $5,000 light, which is 28.6% of the real figure. The bias runs the same direction every month while growth continues.
What happens when a price change lands mid-period?
Averaging the month gets both halves wrong. Each call has to be priced at the rate in effect on its own date, which is what a price book versioned by effective date does without anyone having to remember. Claude Sonnet 5's introductory pricing ending on 2026-09-01 is the near example.
Should the accrual be split by product or customer?
If your margin reporting is, yes, otherwise the two never reconcile. The attribution is already on the call if you recorded it there, so carrying it into the accrual costs nothing extra and saves the argument about why cost of goods sold doesn't match the product P and L.
On your infrastructure
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.
How Culpa works
Find the culprit. Not just the total.
Your dashboard shows what you spent. It stops short of who spent it. Culpa shows the conversation, the user and the feature behind it.
Your prompts stay local.
Culpa runs on your own infrastructure. What you send to a model reaches us at no point.
Every dollar has a name.
Follow any charge to the conversation, the user, the feature and the customer behind it.
See the bill before it lands.
Cost your next feature before you ship it. You get the likely bill and the worst case, at best, median, p90 and p99.
Three steps to your first answer.
Change one base URL.
Or drop in the Python or TypeScript library.
Find your most expensive conversation.
In the first session, not the first week.
Cost your next feature before you ship it.
Why the bill went up
Example dashboardCalls traced
418,209
across 3 projects
Spend this week
$378.41
+ $182 vs last week
Failed calls
312
74% retried, and you paid for all of them
+ $182 this week traced to one culprit
Spend over 14 days
Most expensive users
Next week forecast
Graded against reality. Accuracy shown as results land.
Keep reading
Sources: Anthropic pricing. Last reviewed 2026-08-05, rates effective 2026-07-02. Plain text version.