← Back to SOMA

How to account for AI usage in your Scope 3 inventory under CSRD (ESRS E1)

The whole job, in the order you would do it: find the services, get the usage, pick the method, apply the factor, write the line an auditor can follow. Factors dated , version soma-ai-ef-2026.09-lifecycle-v2.

Where does AI usage belong in a GHG inventory?

In Scope 3 Category 1, purchased goods and services. An AI API, an enterprise chat seat and a SaaS tool with AI features are all third-party services your company buys, so their emissions are upstream of you and belong in the same category as any other purchased service. They are not Scope 2: you are not buying the electricity, the provider is.

ESRS E1-6 asks for gross Scope 1, 2 and 3 emissions, and ESRS points at the GHG Protocol Corporate Standard and its Scope 3 Standard for how to measure them. The full text of the standards is in Delegated Regulation (EU) 2023/2772. Nothing below is legal advice about whether your company must report; it is the mechanics of producing the line once you have decided that AI is in scope.

Step 1: which AI services count?

All of them, including the ones IT did not buy. The single most common gap in an AI inventory is not a wrong factor, it is a missing service, and the services that go missing are the ones on a team credit card. Build the list from three places: the IT asset register, the finance system's vendor list, and the single sign-on log.

  • APIs with usage billing: OpenAI, Anthropic, Azure OpenAI, AWS Bedrock, Google Vertex AI, Mistral, Cohere, and anything your own product calls.
  • Seat-licensed AI products: ChatGPT Enterprise or Team, Claude for Work, Microsoft 365 Copilot, GitHub Copilot, Gemini for Workspace.
  • SaaS with embedded AI: the CRM, the note-taker, the support desk, the design tool. Usually invisible in usage terms and usually Tier 1.
  • Internal tools built on somebody else's API: the support chatbot, the document reader, the internal search. The usage sits in your own logs, which makes these the easiest of all to count precisely.

For each service, record the vendor, the contract type, the annual spend, the owner and the reporting period covered. That table is the skeleton of the inventory; everything after this is filling in cells.

Step 2: what should I ask each provider for?

Tokens by model and by month, for the reporting period. That one sentence covers every API provider, and each of them can already produce it — you are asking for something the billing system computes anyway.

  • OpenAI: the usage page in the platform console exports input and output tokens per model per day. For ChatGPT Enterprise or Team, the admin dashboard gives seats and message counts instead.
  • Anthropic: the console usage view exports tokens per model; Claude for Work reports seats and activity.
  • Azure OpenAI: token metrics per deployment through Azure Monitor, plus the invoice in Cost Management. The deployment region is stated, which removes the region guess.
  • AWS Bedrock: input and output token metrics in CloudWatch, or model invocation logging to S3 for per-call detail. The AWS region is the serving region.
  • Google Vertex AI: token counts through Cloud Monitoring and the billing export; the endpoint location is the serving region.
  • Microsoft 365 Copilot and GitHub Copilot: no token export. The admin centre gives assigned seats and active users, which is Tier 2b data.

Keep the export itself, not a figure copied out of it. When an auditor asks where a number came from, the answer should be a file with a date on it, not a recollection. If a vendor cannot produce usage at all, note that you asked and when — a documented refusal is what justifies dropping to a spend-based estimate for that line.

Step 3: which tier applies to this service?

Assign the tier per service, from the data you were able to get in step 2, never to the company as a whole. Most inventories end up with three tiers in the same table, and that is the expected outcome, not a failure.

Tier by available data. Uncertainty is the band SOMA reports with the figure.
TierData you haveMethodUncertainty
Tier 3A certified figure for your account from the providerUse it directly, no calculationProvider's own
Tier 2aExact token counts per modelTokens in millions × the factor for that class and region±40% to ±50%
Tier 2bMessage counts, or seats and an activity rateMessages × 400 tokens, then as Tier 2aWider than 2a
Tier 1An invoice total and nothing elseSpend in EUR × 0.1181 kg CO₂e±300%

The Tier 2b conversion of 400 tokens per exchange is a general business-use assumption and has to be disclosed as one. Raise it for coding and long-document work, lower it for short question-and-answer use, and do not use it at all for reasoning models, which generate 10 to 50 times more tokens per question — for those, get the billing tokens and use Tier 2a.

Step 4: which model class is my model?

One of three, and the choice matters more than the exact model name. Providers do not publish model sizes, so models are grouped by their published tier and benchmark behaviour, and the class decides the factor.

  • Class A — Small: gpt-4o-mini, claude-haiku, gemini-flash, llama-8b
  • Class B — Mid: gpt-4o, claude-sonnet, llama-70b
  • Class C — Frontier: claude-opus, gpt-4, o1, large MoE models

Getting the class wrong is the largest single error in this method — about four to five times, more than the uncertainty band on any factor (arXiv 2606.10660, section 7.3). Two traps to know about: "mini" in a model name does not always mean a small model, since some reasoning models carry it, and a mixture-of-experts model is classed on its active parameters rather than its total. If your export lists several models, split the tokens by model and apply each class separately rather than averaging.

Step 5: which region is my usage served from?

The region where the provider runs the model, not where your office is. On a cloud platform you already know it: an Azure deployment, an AWS Bedrock call and a Vertex endpoint all name their region, and it is in the same export as the tokens. On a consumer-style API you often do not, and the honest answer is to use the provider's usual serving region and record that you assumed it.

It is worth the effort to find out. In the worked example below, the same usage costs 39.3 kg CO₂e served from US East and 10.1 kg served from EU Sweden — a difference of 29.2 kg for identical work. Factors are location-based, the grid average for the region, so this is a fact about where the electrons come from and not about the provider's renewable contracts. The per-region tables are at /ai-factors.

Step 6: a worked example, end to end

A 100-person company. 80 people use an AI assistant, about 2,000 messages each per month, on a mid-size model. No token export is available, so this is Tier 2b.

  1. Messages for the year: 80 × 2,000 × 12 = 1,920,000.
  2. Tokens: 1,920,000 × 400 = 768,000,000, which is 768 million.
  3. Class: Class B — Mid. Region: US East, the provider's default.
  4. Electricity: 768 × 0.044 = 33.79 kg CO₂e.
  5. Embodied hardware: 768 × 0.00303 = 2.33 kg. Amortised training: 768 × 0.00408 = 3.13 kg.
  6. Total for the line: 39.25 kg CO₂e, ±50% on the electricity term, with the wider lifecycle bands disclosed separately.
  7. Water, reported beside it: 310 litres for the year.

The same company, same usage, served from EU Sweden: 10.07 kg CO₂e — but 756 litres of water, more than twice as much, because that grid's low carbon comes with high water intensity. Both numbers come from the same token count; neither is a substitute for the other.

Notice the size of the result. A hundred-person company running AI hard all year is at a few tens of kilogrammes of CO₂e, not tonnes. The reason to do this work is not the magnitude, it is that the category is reportable, an assurance provider will ask about it, and an answer of "we did not look" is worse than a small number with a method behind it.

Step 7: how do I state uncertainty and boundary?

Next to the figure, in the same row, not in a footnote nobody reads. A Tier 2a line carries ±50% on the electricity term; the embodied and training terms carry their own, wider bands, which is why they are reported as separate components rather than folded silently into one number.

The boundary is as much a part of the disclosure as the number. These factors cover inference: the energy to serve the tokens grossed up for facility overhead, plus the share of the server hardware and the amortised training. They exclude data-centre construction, provider offices and research, network transport and your own devices. Embedding, image, speech and video models are outside this factor version altogether and should be reported separately rather than priced at a chat factor. Full detail on the methodology page.

Step 8: what does the inventory line have to say?

Enough for somebody else to rebuild the number without asking you a question. In practice that is seven fields per service:

  1. Activity data: tokens, messages or spend, with the period covered.
  2. Source of the activity data: which export, from which console, downloaded when.
  3. Method and tier: Tier 2a, 2b or 1, and why that tier and not a better one.
  4. Emission factor: the value, the model class and the region it belongs to.
  5. Factor version and source: here, soma-ai-ef-2026.09-lifecycle-v2, with the dataset DOI (10.5281/zenodo.20443585).
  6. Uncertainty: the band, and any assumption that widens it, such as the tokens-per-message conversion.
  7. Estimated flag: whether the line is a measurement, a conversion or an estimate, following the GHG Protocol data-quality hierarchy that ESRS E1 refers to.

A well-documented uncertain estimate is worth more to an assurance provider than a precise-looking figure with no method behind it. The second one has to be defended from memory; the first one defends itself.

What will an auditor ask about the AI line?

  1. How do you know the list of AI services is complete, and who checked it?
  2. Where did this token or message count come from, and can I see the export?
  3. Which factor did you apply, what version is it, and who published the underlying data?
  4. Why that model class and that region, and what happens to the figure if the region is wrong?
  5. Is the figure location-based or market-based, and is it consistent with the rest of the inventory?
  6. What is excluded, and is that exclusion disclosed?
  7. If the factors are updated next year, can you still reproduce this year's number?

All seven are answerable in advance. The last one is the one that catches people: if the factor source is a web page that changes silently, last year's figure cannot be rebuilt. Versioned factors with a citable DOI, and the version recorded on the line, are what make that answer a yes.

Why does the spend-based factor overstate AI usage?

Because it measures money, not electricity. The spend-based route multiplies the invoice by 0.1181 kg CO₂e per EUR (EXIOBASE 3.8.2 — Computer and related services), a sector-average factor built from economy-wide input-output tables that mix software development, IT consulting and cloud services of every kind, with an uncertainty of ±300%. An API price contains margin, research and training recovery, none of which has a physical counterpart at inference time.

The worked example makes the size of it concrete. The physical estimate was 39.25 kg CO₂e for the year. To produce that same figure, the spend-based route would need the annual invoice for that usage to be about €332. Any realistic invoice for 1,920,000 messages is well above that, which is how a spend-based AI line ends up an order of magnitude or more above a physically derived one — 10 to 40 times, on the comparison in the method paper.

That does not make the spend-based factor wrong; it makes it a fallback. Use it where no usage data exists, label it an upper bound covering the whole subscription rather than its AI part, and treat it as a prompt to go back to the vendor for usage data next year.

Get the audit-ready figure for your organisation

SOMA turns your providers' usage exports into the finished Scope 3 Category 1 entry, with the tier, factor, version, sources and uncertainty attached, ready for your auditor. The factors and their sources are on the methodology page, the tables at /ai-factors, and if you are reconciling two different published numbers, start with why AI footprint estimates differ. Write to lili@somaai.earth.