Atlas (country data API)
A country-profile API and dashboard that unifies 18 open data sources, with forecasts, citable snapshots and licence-aware sourcing.
- Python
- FastAPI
- SQLite
- TimesFM
- Stripe
- JavaScript
- Caddy
Atlas is a country-profile API and dashboard: you pick a country and get its identity card and its economic and social indicators, with history, comparison, world ranking and regional aggregates. I built it alone between late July and late September 2026 (about 590 commits), and it is served as a product, with an interface and error messages in four languages (French, English, Spanish, German).
The problem
Country data is scattered across providers that each have their own API, codes, units and update rhythm. A dashboard that mixes them has to hide all of that.
Approach
Each provider is one small adapter module exposing the same function, registered in a source registry. The catalogue has 117 curated indicators in 11 themes, plus a long tail of 3,584 searchable indicators that are never displayed by default. In production the API reports 216 countries and 18 sources, among them the World Bank, Our World in Data, Eurostat, the OECD, the ECB and the BLS. Adding an indicator is one line in the catalogue. Adding a source is one module.
A few decisions mattered more than the code:
- Aggregates are recomputed. Regional aggregates (EU, OECD, G20...) are recalculated from member countries.
- A snapshot is evidence. A "capture" freezes a selection and its actual values under a stable identifier, then exposes the same object in 12 formats.
Results and checks
Cold calls on poorly covered countries could take over 30 seconds. After caching work and a separate warm-up script, a warm call measured about 0.1 second on the production server. Per-IP rate limits, API keys with tiers and Stripe billing are in place. I also added subdivision-level data (regions, states, counties) for some countries, hreflang routes per language and a browser extension.
Limits
Tests run offline and cover aggregation rules, refusal to invent values and catalogue consistency. The routes themselves are not tested: I check them by hand, and there is no type checker. World Bank data is annual and can lag by one to three years, so every value carries its year.
Next
SEO and acquisition work, a PowerPoint extension for charts, and new sources, always more sources.