CarboneWatch estimates the energy and carbon footprint of AI service usage from the volume of bytes exchanged — received for generation, sent for reading the context — without reading a single byte of content and without administrator rights. Here is how the calculation is set up, what it counts, and what it does not say.
Remote services — by volume exchanged. The energy of a remote inference follows the number of tokens produced, and the bytes received are the best available proxy for it without reading the traffic. A generation stream arrives token by token: the byte rate is the answer rate. For an agent it also follows the number of tokens read, for which bytes sent are the proxy: an agent resends its whole context every turn.
The energy of a generated answer rests on four published sources, brought to the same scope: two model-based estimates — EcoLogits, from the GenAI Impact association, and Jegham et al. (2025) —, a measurement campaign on recent hardware — CLEER, from the Sustainable AI Group (2026) — and the only measurement a provider has published on its own production, Google's for Gemini (Elsworth et al., 2025). The measurements give far less than the models; the value used sits between the two, and the range shown covers them all. A service running a smaller model, to translate or proofread a text, is counted at a fraction of a conversation.
Billing connection time, as the original prototype did, overshoots badly: claude.ai and ChatGPT keep HTTP/2 sockets alive, so an open, idle tab stays established for hours. On a byte delta, it weighs zero.
Local models — by inference time. Here the energy is this machine's: a constant power, the same for every machine, multiplied by the duration. The bytes, which travel over the loopback interface, change nothing. The rate used is bracketed by a sensor reading on one machine under load.
Reading is only counted where its bytes-per-token ratio has been measured on real traffic — a single service to date. It is billed at a fraction of the generation rate, and the share re-read from the provider's cache, which is the bulk of an agent's input, at a fraction of that fraction. Elsewhere, bytes sent are not billed: without a measurement, nothing on the wire tells a context from an uploaded file, and a named floor beats an invented figure.
Rate cap. A model does not generate faster than a certain token rate, and billable bytes are capped at the stream rate that represents, per service and per sample, all connections added together. Without it, loading the claude.ai interface — several megabytes of scripts — would cost more than an hour of conversation. It is a deliberate upper bound, not a sorting of bytes.
Noise floor. Below a threshold per service per sample, the traffic is protocol: keep-alive frames, TLS pings, session renewals. Without that floor, an open application would bill continuously.
Hourly media bound. The rate cap does not suit an image or a video, which arrive in one burst and are the payload themselves. What separates a generation from a false positive is not its rate but its duration: beyond an hourly volume per service, the bytes are still recorded and stop being billed. A video call passes that bound within minutes; an hour of intensive generation stays below it.
CarboneWatch starts from what the operating system exposes — bytes exchanged with known addresses, or failing that a duration of established connection — and derives a volume of tokens, then an energy, then a carbon figure, using the electrical intensity of the zone where the service computes rather than that of your machine. Manufacturing of the server is added to the carbon without passing through electricity.
Each conversion rests on a coefficient, drawn from a published source or from a measurement made here on real traffic, and most carry an interval. The detail — the values, the measurement protocols, the bounds and what remains unbounded — is in the methodology dossier, available on request. What follows states the boundary, the sources and the limits: enough to judge the figure, and to contradict it.
The browser extension runs the same calculation as the application, on what it sees: it is written once and shared between the two, tested against the same cases on both sides. An extension left behind in its store calculates with the previous method; its panel, like the application's settings, flags the gap. On a machine where both run, the application's figures prevail.
Location-based values — the real grid mix of the area — not market-based, which nets off the renewable certificates bought by the operator. The first is the only one that stays comparable between providers: nobody can lower their number by buying paper.
| Electricity grid | Code | Intensity |
|---|---|---|
| Norway | NO | 28 gCO₂e/kWh |
| Sweden | SE | 35 gCO₂e/kWh |
| Switzerland | CH | 39 gCO₂e/kWh |
| France | FR | 41 gCO₂e/kWh |
| Finland | FI | 57 gCO₂e/kWh |
| Brazil | BR | 110 gCO₂e/kWh |
| Denmark | DK | 114 gCO₂e/kWh |
| Austria | AT | 117 gCO₂e/kWh |
| Belgium | BE | 150 gCO₂e/kWh |
| Spain | ES | 154 gCO₂e/kWh |
| Canada | CA | 191 gCO₂e/kWh |
| European Union | EU | 210 gCO₂e/kWh |
| United Kingdom | GB | 217 gCO₂e/kWh |
| Netherlands | NL | 254 gCO₂e/kWh |
| Ireland | IE | 257 gCO₂e/kWh |
| Italy | IT | 285 gCO₂e/kWh |
| Germany | DE | 330 gCO₂e/kWh |
| United States | US | 384 gCO₂e/kWh |
| South Korea | KR | 417 gCO₂e/kWh |
| World | WORLD | 458 gCO₂e/kWh |
| United Arab Emirates | AE | 468 gCO₂e/kWh |
| Japan | JP | 477 gCO₂e/kWh |
| Singapore | SG | 497 gCO₂e/kWh |
| Australia | AU | 525 gCO₂e/kWh |
| China | CN | 525 gCO₂e/kWh |
| Poland | PL | 589 gCO₂e/kWh |
| India | IN | 670 gCO₂e/kWh |
| Saudi Arabia | SA | 692 gCO₂e/kWh |
| Missing or unknown region | — | 458 gCO₂e/kWh |
Source: Ember, Lifecycle carbon intensity of electricity, year 2025, compiled and harmonised by Our World in Data — the same dataset EcoLogits draws its electricity impact factors from. Retrieved 27 August 2026, extended on 21 September and reviewed on 30 September 2026. These are annual averages: neither the hour nor the month is taken into account.
The boundary matters, because depending on the one chosen France's intensity varies by a factor of two and a half. This one is life-cycle — combustion, but also fuel extraction and transport and the building of the generating assets, covering all greenhouse gases — on a production basis, with no adjustment for imports and exports. That is the boundary of the electricity, not of the estimate, which counts the electricity of inference and, since 0.2.14, the manufacturing of the server: model training and the transport network are still out of it.
“World” and “European Union” are the aggregates Ember publishes in the same dataset: 458 gCO₂e/kWh for the world in 2025, the figure of its Global Electricity Review 2026, and 210 for the twenty-seven. The average of the twenty-seven, weighted by their 2025 generation, does give 210 again. Values are rounded to the unit: the source gives 41.44 for France, but two decimals would lend this model a precision it does not have.
Energy is converted to CO₂e using the grid of the region where the service computes, not the user's. Remote inference does not happen here: talking to an American service from France burns American power, at 384 gCO₂e/kWh and not 41.
Every service therefore carries a region in the registry. It is read in the provider's documents — its list of subprocessors, its technical documentation, its terms —, never inferred from its nationality. A single country named: that country. Several European countries with no published shares: the European Union average, 210 g/kWh. Nothing declared: the world rate, 458 g/kWh — never the most favourable one. The machine's grid applies only to local models: they alone draw its power. Since 0.2.24 it is inferred from the time zone, or from the system region when the time zone says nothing, and can be changed in the settings.
The electricity of inference and, since 0.2.14, the manufacturing of the inference server, amortised over the tokens it serves, from embodied data published by BoaviztAPI and the lifetimes of its own archetypes. This term is a hypothesis not yet reviewed by a third party — a server's throughput and utilisation rate are published nowhere — and it does not depend on the country: negligible against the US mix, it can reach tens of per cent against the French mix. Still excluded: training amortised over requests, the transport network, end of life, and the manufacturing of the terminal.
A full life-cycle analysis, such as the one published by Mistral with Carbone 4 and the French ADEME, also counts the manufacturing of all the hardware, training and water. That is why two providers can publish figures far apart: they are not measuring the same thing. These figures now include part of that manufacturing — the inference server, neither training nor the terminal — and are therefore comparable only to figures sharing the boundary set out above.
Data-centre overhead, on the other hand, is counted. The per-token rate is that of the computation; cooling and power losses are added by an overhead factor. It is the operation EcoLogits sets out, with a per-provider figure; since the data centre serving a request remains unknown, even when the provider is known, CarboneWatch takes the top of that range rather than the bottom. An efficiency published by the host replaces this hypothesis, whether higher or lower. Local models are exempt: their consumption is already what is drawn from the wall.
In an organisation's inventory, this figure belongs to purchased services: GHG Protocol scope 3, category 1; item 4.5 of the French BEGES. That is a proposed mapping, for whoever keeps the inventory to confirm. If it replaces a spend-based estimate of that item, it takes its place rather than adding to it. It is given in energy and in carbon, on a location basis. The corporate AI accounting frameworks published in 2026 make the same core choices: electricity reported alongside carbon, training kept out of the main figure.
The ratio between bytes on the wire and tokens produced is the most uncertain parameter in the whole model. It depends not on the provider but on the protocol: the frame wrapping each token weighs far more than the text it carries, and compression, where the server grants it, divides the whole. Between two common protocols the measured gap is a factor of ten. The registry therefore ties each service to a protocol family, measured once for all its members; a measurement specific to one service takes precedence over its family's, and families without a measurement keep an assumed value, named as such in the sensitivity dossier. The upstream ratio depends on the client and is measured for a single one.
On Windows, the system exposes byte counts to no application without administrator rights. The estimate there falls back on established connection time — an open tab counts as if it were working. Figures are upper bounds, the application says so in its interface, and the shared footprint counts them separately.
Factors are the same on every installation and cannot be changed. These are orders of magnitude, not measurements — an estimator, not a meter.
Detection works on addresses, and several AI services are served by shared infrastructure — Cloudflare, CloudFront, Azure Front Door — whose addresses also carry unrelated traffic. A false positive remains possible. The registry admits a shared address only if its type is capped by the hour and it carries nothing but inference; a service caught out is retired with its history erased. A video call was nonetheless counted as image generation before the domain responsible was retired: that false positive is what made the cap get written, and then the rule of proof.
Reading the context rests on two hypotheses with no measurement at the provider: the energy of a token read relative to a generated one, which depends on how loaded the server is and which we take at the regime of a loaded server, as in production, and the cost of a token re-read from cache, taken from a published measurement on agent traffic, made on open models rather than at a provider. Nothing on the wire says whether a token is re-read or recomputed: the cache share comes from a single machine's token counts. That last parameter alone moves the reading term by a factor of six. And for every service without a measured upstream ratio — all but Claude Code to date — reading is not counted at all: those usages remain understated, and it is said rather than guessed.
Since 0.2.24, a service is counted only if its traffic is inference: an address that carries nothing else, a process that identifies it, or, in the browser, a known answer route. A web interface, a gallery or a gateway shared with other uses is not enough: people also go there to browse, upload or manage an account, and nothing on the wire tells those visits from a generation.
Those services are observed, not counted: recognised, but never shown nor added up. They are mostly web interfaces for generating images, video or sound, and a few websites of translation, writing or coding tools. For people who share their estimate with the shared footprint, their identifier and the hour are sent alone, with no energy nor carbon: enough to know what to go and measure. They are never sent to an organisation.
A service counted wrongly is retired for good, and its history erased from machines at startup. Version 0.2.24 retires two, which showed up for people who did not use them, and a third of which only the website was recognised. What is not counted, and why, is set out on the page of absent services.
The application and the extension translate the estimate into everyday references: smartphone charges, kilometres in a petrol or diesel car, hours of an LED bulb, glasses of water. These references enter no calculation.
The battery follows the capacity of common smartphones, as recorded by iFixit; a charge taken at the wall, charger losses included, uses more, so the number of charges shown is an upper bound. The car follows the tailpipe emissions of new petrol and diesel cars in Europe, published by the European Environment Agency and the ICCT; ADEME, which also counts the manufacturing of the vehicle, gives more. The bulb is the LED that replaces a 60 W incandescent, per the equivalence table of the European regulation on the energy labelling of light sources. The glass is a convention, that of a large glass: no institution sets its capacity.
No content is read, no connection is decrypted, no certificate is installed. Detection by the application works by address and by process name, never by hostname nor by inspecting traffic; the extension sees the address of requests made in the browser, and keeps only the service and the shape of the path. No administrator rights, no network extension, no account, no telemetry — and nothing leaves the machine until sharing to the shared footprint has been turned on, which it is not by default.