Anshuman K. Yadav
Back to site

CarbonAug 2026 · 7 min

Measuring web carbon without lying about the error bars

Three carbon models disagree by 40%. Here's what to do with that instead of hiding it.

Ask someone how much carbon a web page emits and they’ll usually expect one number back. A tidy little “0.4 g CO2 per visit” you can put on a badge. The badge exists on plenty of sites already. What it almost never comes with is the thing that would make it honest: a range, and a note on which model produced it. I spent a chunk of this year building the measurement engine behind Balise, and the single biggest lesson was that the confident single number is usually the least trustworthy part of the whole pipeline.

Three models, three different physics

Carbon estimation for a web page usually breaks down into the same rough shape: measure data transferred, apply an energy-per-byte assumption for the network and the device, then multiply by a carbon intensity figure for the electricity grid involved. Every one of those three steps has more than one defensible way to do it, and different published models pick different defaults. Some assume a global average grid intensity, some let you plug in a region. Some model the data centre and network separately from the end user’s device, some lump them together. None of these choices are wrong exactly, they’re just different, and they compound.

Run the same page through three well-regarded models and it’s completely normal to see the estimates disagree by 30 to 40 percent. That’s not a bug in one of the models. That’s the actual uncertainty in the question you asked.

The same page load, scored by three different models. The shaded band is the honest answer: not one point, a range.

The instinct to average is the wrong instinct

The tempting move is to average the three and publish that, because a single number is easier to put in a table. I think this is close to the worst option available. Averaging implies the disagreement is noise that cancels out, when it’s actually signal about how little consensus exists on methodology. A page that scores consistently across models deserves to look different, on paper, from one where the models are all over the place, and an average erases exactly that distinction.

What we do instead is keep all three numbers, publish the spread alongside them, and let whoever’s reading decide how much weight to put on the estimate. If a client needs to make a procurement decision based on relative footprint between two vendors, a wide, overlapping range tells them something an average would have quietly hidden: that the two vendors might not actually be distinguishable given current methodology, and the decision should rest on something else.

A number with no error bar isn’t more precise. It’s just less honest about the same uncertainty.

What we actually built

The measurement side runs on Playwright, driving a real browser through a real page load, scoring six core metrics per run across all three carbon models rather than trusting a single static estimate. That output feeds a criteria engine that checks it against roughly eighty environmental standards written for French public procurement, and the result gets written to an append-only ledger so the score can’t be quietly edited after a client sees it once. Measurement, scoring, and evidence are three separate stages on purpose. Mixing them makes it too easy for a convenient number to slip in upstream of the part anyone actually checks.

Capture, trace, score, then commit to the ledger. Each stage only trusts the output of the one before it.

The honest version is still useful

None of this makes the measurement perfect, and it shouldn’t pretend to. What it does is stop the tool from being more confident than the underlying science currently allows. If you’re building anything that scores a page, a product, or a service on an environmental metric with more than one credible methodology behind it, the useful move is the same one every time:

  • Publish the range, not the average, when models disagree meaningfully.
  • Name the methodology next to the number, not in a footnote three clicks away.
  • Treat a tight cluster across models as a genuinely stronger signal than a single confident estimate.

The badge that says “0.4 g CO2” will always look cleaner than the one that says “0.3 to 0.5 g, depending on model.” Only one of them is telling you the truth.