Observatory · energy transition

Promethean

Renewable-first, data-complete

Global renewable energy and transition observatory: deployment costs, grid and system balancing, emissions trajectories, and transition finance. Collectors for Ember, IRENA, IEA, Climate Watch, OWID energy and CO2 datasets, and World Bank SDG7 indicators. Same FastAPI + SQLite + APScheduler pattern as sibling observatories. Default port 8009.

52
Collectors
4
Engines
~195
Countries
8009
Default port

What this observatory promises

Project Economics

Levelized costs, capacity factors, investment volumes, and auction prices for solar, wind, hydro, and storage. Tracks the cost trajectory that makes renewables the default choice in most markets.

Balance and Emissions

Generation mix, electricity demand, carbon intensity of power, CO2 emissions by sector, and methane. Maps the gap between installed capacity and actual decarbonization progress.

Grid and System

Installed capacity by technology, transmission and distribution losses, energy access (SDG7), per-capita consumption, and fossil fuel dependency ratios. The supply-side fundamentals.

Transition Finance

Climate finance flows, green bond issuance, fossil fuel subsidies, carbon pricing coverage, and clean energy investment shares. Where money moves (and where it does not).

Data providers

Collectors pull from Ember (electricity generation and carbon intensity), IRENA (capacity and costs), IEA (energy balances), Climate Watch (emissions by sector), OWID (energy and CO2 compilations), and World Bank WDI (SDG7, fossil fuel rents, renewable shares). Each source has its own collector with paced requests, retries, and schema validation.

Embergeneration
IRENAcapacity
IEAbalances
CWATCHemissions
OWIDenergy/co2
WBsdg7

Production surface

FastAPI with Starlette middleware: gzip, security headers, X-Request-ID on every response, optional JSON log lines via LOG_JSON. Readiness runs SELECT 1 against SQLite. Optional GET /metrics exposes promethean_http_* counters and latency histograms.

  • Warehouse: WAL SQLite, tuned page cache and mmap, optimize on shutdown.
  • Ingestion: paced requests per source API, retries on 400/429/5xx, openpyxl for Excel sources.
  • Scheduling: APScheduler cron jobs, staggered across engines to reduce burst load.
  • OpenAPI: /docs and /redoc on the running service.

Route map (read-only data)

All under /api/data/. Query parameters support filtering, year windows, pagination, and multi-series panels (up to 30 codes per panel request). Admin routes under /api/admin/ require X-Admin-Key when configured beyond the default placeholder.

GET /api/data/sources: filter, sort, paginate registered sources.
GET /api/data/series/{code}: observations for one series; optional country and year range.
GET /api/data/series/{code}/summary: means, extremes, CAGR, latest YoY change.
GET /api/data/series/{code}/persistence: AR(1), half-life, jump ratio for one country.
GET /api/data/series/{code}/features: YoY growth, rolling vol, shock flags.
GET /api/data/series/{code}/comparators: cross-country ranking for the series.
GET /api/data/country/{iso3}: all series for one economy; optional topic or year.
GET /api/data/country/{iso3}/topics: coverage by topic.
GET /api/data/panel: long-format multi-series extract with balancedness diagnostics.

What operators should know

From the promethean/ directory:

make setup && make collect-all && make serve

Then open http://127.0.0.1:8009/docs or call /api/data/sources and /api/data/series/ember.carbon_intensity.

The full manual (schema, every query parameter, deployment notes) lives in the repo:

promethean/README.md