Ember Electricity Data Scraper - Generation, CO2 Intensity
Ember Global Electricity Data Scraper
Pull country-level electricity-sector data from Ember, the leading independent global electricity think tank. Returns generation by fuel (TWh), capacity (GW), CO2 emissions (MtCO2), CO2 intensity (gCO2/kWh), and demand for ~250 countries — yearly back to 1985, monthly back to 2010. The closest free substitute for the IEA's paywalled Electricity Information product.
Ember Scraper Features
- Streams four Ember CSV datasets: yearly global, yearly EU, monthly global, monthly EU
- Returns 14 fields per record: country, ISO-3 code, continent, year, month, category, subcategory, variable, unit, value, source dataset
- Filters by period type (yearly, monthly, or both), geographic scope (global, Europe, or both), country list, year range, and variable name
- Covers ~250 countries plus Ember regional groupings, EU/OECD/G20/G7/ASEAN aggregates
- All data published under CC-BY 4.0 — no API key, no auth, no proxy
- Direct GCS download via stream-parsed CSV — fast and cheap
- Pay-per-event pricing tied to records returned
Who Uses Ember Electricity Data?
- Energy analysts — track fuel-mix shifts (coal vs. gas vs. renewables) across countries year over year
- Climate researchers — pull CO2 emissions and intensity series for grid decarbonization modeling
- Policy teams — benchmark national electricity mixes against EU, G20, or OECD aggregates
- ESG and sustainability reporting — feed gCO2/kWh figures into Scope 2 emissions calculations for facilities in any country
- Quant funds and traders — wire generation, demand, and capacity series into utility-sector models without paying IEA subscription rates
- Journalists and policy writers — cite Ember's open-license data for reporting on the energy transition
How Ember Scraper Works
- You pick a period type, geographic scope, and optionally a country list, year range, and variable filter.
- The scraper downloads the matching Ember CSV(s) directly from Ember's public GCS bucket — no API key, no rate limiting.
- Each CSV row is parsed in stream, filtered against your inputs, and normalized into a single output schema with year, month, and source-dataset fields.
- Records are emitted up to your
maxItemscap, batched in groups of 500 for efficient downstream consumption.
Input
CO2 intensity for Germany and France, 2015 to 2024:
{
"periodType": "yearly",
"scope": "europe",
"countries": ["Germany", "France"],
"variables": ["CO2 intensity"],
"yearFrom": 2015,
"yearTo": 2024,
"maxItems": 0
}
Global monthly generation since 2020:
{
"periodType": "monthly",
"scope": "global",
"yearFrom": 2020,
"yearTo": 2026,
"variables": ["Generation"],
"maxItems": 0
}
Everything Ember has on India:
{
"periodType": "both",
"scope": "global",
"countries": ["India", "IND"],
"maxItems": 0
}
| Field | Type | Default | Description |
|---|---|---|---|
| periodType | string | "yearly" |
Period granularity: yearly, monthly, or both |
| scope | string | "global" |
Geographic scope: global (~250 countries), europe (EU + wider Europe with more detail), or both |
| countries | array | [] |
Country names or ISO-3 codes to include. Empty = all countries. |
| yearFrom | integer | 2010 |
Earliest year (inclusive). Yearly data starts 1985; monthly starts 2010. |
| yearTo | integer | 2024 |
Latest year (inclusive) |
| variables | array | [] |
Variable names to include (e.g. "CO2 intensity", "Generation", "Share of generation"). Empty = all. |
| maxItems | integer | 10 |
Maximum number of records to return. 0 = no limit. |
Ember Scraper Output Fields
{
"country": "Germany",
"country_iso3": "DEU",
"continent": "Europe",
"ember_region": "Europe",
"period_type": "yearly",
"year": 2023,
"month": null,
"category": "Power sector emissions",
"subcategory": null,
"variable": "CO2 intensity",
"unit": "gCO2/kWh",
"value": 381.4,
"source_dataset": "ember-yearly-eu"
}
| Field | Type | Description |
|---|---|---|
| country | string | Country or region name (e.g. "Germany", "European Union") |
| country_iso3 | string | ISO-3 country code (e.g. "DEU") |
| continent | string | Continent (e.g. "Europe", "Asia") |
| ember_region | string | Ember's regional grouping (e.g. "Europe", "Latin America and Caribbean") |
| period_type | string | yearly or monthly |
| year | integer | Year (e.g. 2023) |
| month | integer | Month 1-12 for monthly rows, null for yearly rows |
| category | string | Data category (e.g. "Electricity generation", "Capacity", "Electricity demand") |
| subcategory | string | Fuel or subcategory (e.g. "Coal", "Gas", "Solar", "Wind", "Hydro", "Nuclear", "Clean", "Fossil") |
| variable | string | Metric name (e.g. "Generation", "Share of generation", "CO2 intensity", "Demand") |
| unit | string | Unit of measurement (TWh, GW, gCO2/kWh, MtCO2, %, MWh) |
| value | number | Numeric value in the indicated unit |
| source_dataset | string | Source dataset: ember-yearly-global, ember-yearly-eu, ember-monthly-global, or ember-monthly-eu |
FAQ
How do I get electricity generation data by country?
Ember Scraper accepts a country list (names or ISO-3 codes), a year range, and an optional variable filter. Run it and you get one record per country-year-fuel-variable combination. Generation, capacity, CO2 emissions, CO2 intensity, and demand all come from the same run.
Does Ember Scraper need an API key or proxies?
No. Ember publishes its full-release CSV datasets publicly under CC-BY 4.0. The scraper hits Ember's GCS bucket directly — no auth, no rate limit, no proxy.
What is the difference between Ember and IEA electricity data?
Ember Scraper pulls from Ember's annual and monthly global electricity datasets, which cover roughly the same surface as the IEA's Electricity Information product. Ember's data is free and CC-BY licensed. The IEA's equivalent costs several thousand dollars per year. Coverage differs slightly — Ember leans toward power sector and emissions; IEA covers a broader energy balance — but for grid-level generation, capacity, and CO2 work, they overlap heavily.
How far back does the data go?
Ember Scraper covers yearly data back to 1985 and monthly data back to 2010, for both global (~250 countries) and Europe (more granular EU coverage) datasets.
Can I get just one fuel type, like solar or coal?
Ember Scraper organizes fuel breakdowns under the subcategory field. Filter the output dataset by subcategory after the run — Solar, Coal, Gas, Nuclear, Wind, Hydro, Clean, Fossil, and a few more — or use the variables input to narrow the variable axis (e.g. Generation only).
What attribution is required?
Ember publishes under CC-BY 4.0, so attribute Ember as the data source in any published work. The exact citation Ember requests is on their site — typically "Source: Ember" with a link to ember-energy.org is sufficient.
Need More Features?
Need custom fields, filters, or a different target site? File an issue or get in touch.
Why Use Ember Scraper?
- Free substitute for IEA Electricity Information — Generation by fuel, capacity, CO2 intensity, and demand for ~250 countries, without the IEA subscription cost.
- CSV streamed direct from source — No HTML scraping, no rate limits, no auth — the actor downloads Ember's published CSVs and parses them in stream, so a full pull is cheap and fast.
- One unified schema across four datasets — Yearly global, yearly EU, monthly global, and monthly EU collapse into the same field structure, with
source_datasetandperiod_typeso you can recombine or split however you want.