All datasets

Age and sex breakdown of forcibly displaced persons, by origin and asylum country

Annual UNHCR demographics of forcibly displaced persons by country of origin and country of asylum: female and male counts in age bands 0–4, 5–11, 12–17, 18–59, 60+ and the provider's residual 'other' category, plus per-sex and grand totals. Coverage from 2001. Melted long: one row per origin x asylum x year x sex x age band. The provider marks missing observations with "-" (stored as null and dropped).

Source: UNHCR — Refugee Population Demographics1,751,715 rowsUpdated: 9/22/2026License: CC-BY-4.0
refugeesdisplacementmigrationdemographicsagesexunhcr

Quality

100

Attribution

UNHCR Refugee Population Statistics Database

Schema

ColumnTypeDescription
datetimestampReference year of the observation, mapped to January 1 of that year. UNHCR's population statistics are end-of-year figures.
coo_namestringCountry of origin name (provider's wording).
coostringCountry of origin UNHCR code ("-" in the global-aggregate dataset).
coo_isostringCountry of origin ISO code.
coa_namestringCountry of asylum name (provider's wording).
coastringCountry of asylum UNHCR code ("-" in the global-aggregate dataset).
coa_isostringCountry of asylum ISO code.
sexstringSex of the displaced persons: female, male, or all. Decoded from the provider's own field prefixes: "f_" = female, "m_" = male; "all" is the grand total across sexes (the provider's "total" field).
age_groupstringAge band decoded from the provider's field names: 0_4 (ages 0–4), 5_11 (ages 5–11), 12_17 (ages 12–17), 18_59 (ages 18–59), 60 (age 60 and over), total (all ages), and "other", the provider's own residual age category, which the source does not define further.
series_idstringStable machine identifier built from the provider's own codes plus the bin: UNHCR country-of-origin code, country-of-asylum code, sex and age band, e.g. "AFG.AUL.female.0_4". For the global dataset the provider's origin/asylum codes are "-".
series_labelstringHuman-readable series name using the provider's own country names, e.g. "Afghanistan → Australia — Female, age 0–4".
unitstring"persons": all measures are counts of people.
valueintegerObserved count for the sex x age band. The provider marks missing observations with "-"; these become null and are dropped from the canonical frame. Zeroes are the provider's values as published.

Sample rows

datecoo_namecoocoo_isocoa_namecoacoa_isosexage_groupseries_idseries_labelunitvalue
2021-01-01T00:00:00ArubaABWABWArubaABWABWalltotalABW.ABW.all.totalAruba → Aruba — All sexes, all agespersons6000
2022-01-01T00:00:00ArubaABWABWArubaABWABWalltotalABW.ABW.all.totalAruba → Aruba — All sexes, all agespersons1700
2021-01-01T00:00:00ArubaABWABWArubaABWABWfemale0_4ABW.ABW.female.0_4Aruba → Aruba — Female, age 0–4persons0
2022-01-01T00:00:00ArubaABWABWArubaABWABWfemale0_4ABW.ABW.female.0_4Aruba → Aruba — Female, age 0–4persons0
2021-01-01T00:00:00ArubaABWABWArubaABWABWfemale12_17ABW.ABW.female.12_17Aruba → Aruba — Female, age 12–17persons0

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/unhcr_demographics/unhcr_displaced_age_sex" | jq '{title, rows, columns_count, license}'

Python

import requests

ds = requests.get("https://datazimuts.com/v1/datasets/unhcr_demographics/unhcr_displaced_age_sex").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/unhcr_demographics/unhcr_displaced_age_sex

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