All datasets

Global demographic transition signals (aging, dependency, urbanization gauges)

Yearly demographic-structure signals for 200+ economies (1960 ->, keyless World Bank API): 65+ and working-age population shares, urbanization, and fertility, with 10-year changes, OLS trend slopes, 3-sigma anomaly flags vs a trailing 5-year baseline, 5-year linear-extrapolation forecasts, cross-country ranks, old-age dependency ratios, aging-speed gauges, super-aged (>20% 65+) and demographic-dividend flags, urbanization momentum, and below-replacement fertility flags. All rows carry normalized ISO country codes so they join cleanly with other macro data. Raw data: World Bank, World Development Indicators.

Source: Demographic Transition Signals (derived)57,768 rowsUpdated: 9/22/2026
demographicsagingdependency-ratiourbanizationfertilitypopulationworld-bankwdianomaly-detectionforecastingsignals

Quality

96

Attribution

World Bank, World Development Indicators (derived signals by Frontier Data Hub)

Schema

ColumnTypeDescription
datestringObservation year (World Bank API field date; mapped to YYYY-01-01).
countrystring
country_codestring
series_idstringWorld Bank indicator code: one of SP.POP.65UP.TO, SP.POP.1564.TO, SP.URB.TOTL.IN.ZS, SP.DYN.TFRT.IN.
series_labelstringOfficial World Bank indicator name as published in the indicator metadata.
valuefloatSP.POP.65UP.TO: Population ages 65 and above as a percentage of the total population. World Development Indicators, source 2.; SP.POP.1564.TO: Population ages 15-64 as a percentage of the total population. World Development Indicators, source 2.; SP.URB.TOTL.IN.ZS: Urban population as a percentage of the total population. World Development Indicators, source 2.; SP.DYN.TFRT.IN: Total fertility rate: the number of children that would be born to a woman if she were to live to the end of her childbearing years and bear children in accordance with age-specific fertility rates of the specified year. World Development Indicators, source 2.
change_10y_ppfloat
trend_slopefloat
anomaly_flaginteger
forecast_1mfloat
rankinteger
old_age_dependencyfloat
aging_speed_10y_ppfloat
super_aged_flaginteger
demographic_dividend_flaginteger
urbanization_momentumfloat
below_replacement_flaginteger

Sample rows

datecountrycountry_codeseries_idseries_labelvaluechange_10y_pptrend_slopeanomaly_flagforecast_1mrankold_age_dependencyaging_speed_10y_ppsuper_aged_flagdemographic_dividend_flagurbanization_momentumbelow_replacement_flag
1960-01-01ArubaABWSP.DYN.TFRT.INFertility rate, total (births per woman)4.5670695.229128478586902110
1961-01-01ArubaABWSP.DYN.TFRT.INFertility rate, total (births per woman)4.4220675.222316809639185110
1962-01-01ArubaABWSP.DYN.TFRT.INFertility rate, total (births per woman)4.2620645.256220664823507110
1963-01-01ArubaABWSP.DYN.TFRT.INFertility rate, total (births per woman)4.107-0.1540000000000006403.336999999999997635.302170073176886110
1964-01-01ArubaABWSP.DYN.TFRT.INFertility rate, total (births per woman)3.94-0.1569000000000003203.155499999999998615.382926753857094110

Download sample data

Download the full sample snapshot for this dataset (sample rows, not the complete dataset).

Use with an LLM

Point any LLM at the metadata endpoint — the documentation above is machine-readable too (JSON-LD + Croissant).

cURL

curl "https://datazimuts.com/v1/datasets/wb_demographic_signals/wb_demographic_transition_signals" | jq '{title, rows, columns_count, license}'

Python

import requests

ds = requests.get("https://datazimuts.com/v1/datasets/wb_demographic_signals/wb_demographic_transition_signals").json()
print(ds["title"], ds["rows"], "rows")

# Sample rows for an LLM context window
for row in ds.get("sample_rows", [])[:5]:
    print(row)

API endpoint: https://datazimuts.com/v1/datasets/wb_demographic_signals/wb_demographic_transition_signals

Tip: fetch /llms.txt for the full machine-readable catalog.