Stop using annual averages for Scope 2 grid emissions
Ask a sustainability officer for the carbon intensity of the French grid and you will get a single static number — say 55 gCO2/kWh. For annual Scope 2 accounting on a static building, that average is fine. For trading carbon, optimising battery dispatch, or running carbon-aware compute, an annual average is detached from physical reality.
The grid is dynamic; your data should be too
Electricity is not fungible across hours. The mix at 2pm on a sunny Tuesday is nothing like 8pm on a windless Thursday. During the afternoon solar peak the marginal unit is often zero-carbon; by evening, as solar fades and demand ramps, the operator spins up gas or coal. Shift a 10 MWh workload from 8pm to 2pm and you have avoided real atmospheric emissions — but you can only prove and monetise that with interval-level grid carbon intensity.
Calculating real-time gCO2/kWh
The true carbon intensity of a bidding zone in a given interval is a generation-weighted average of lifecycle emission factors: take the ENTSO-E generation-by-fuel feed, map each production type to its IPCC AR5 lifecycle factor (lignite ~1050 gCO2/kWh, offshore wind ~12), multiply by the MW generated that interval, and divide by total generation. Done historically across European bidding zones that means parsing tens of millions of rows of XML, handling anomalous negative generation (battery charging), and normalising 15-minute data onto a consistent grid.
The environmental data, already built
We compute the generation-weighted carbon intensity for European bidding zones at half-hourly resolution, and pair it with the annual and industrial views:
- European Carbon Intensity — interval-level gCO2/kWh per bidding zone (€29).
- Country Electricity Carbon Intensity — the annual, country-level series for reporting (€9).
- EU-ETS Emissions Allowances and European Industrial Emissions — the regulated-market and heavy-industry ground truth.
- European Carbon-Power Panel — carbon and power fundamentals pre-joined.
Build honest carbon models on interval data, not a yearly constant. Everything is analysis-ready Parquet with a documented licence — browse the catalog.
Stop building parsers. Start at the analysis.
We've already cleaned, documented and QC'd sources like the one in this post into query-ready Parquet - with a free sample on every dataset. Buy a file from €9, or go All-Access for the lot.