WHO Global Health Observatory Data Search
Pricing
from $2.00 / 1,000 indicator fetcheds
WHO Global Health Observatory Data Search
Search the World Health Organization's Global Health Observatory for health statistics across 194 member countries.
Pricing
from $2.00 / 1,000 indicator fetcheds
Rating
0.0
(0)
Developer
ryan clinton
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Quick WHO API answers
How to get life expectancy data from WHO API:
Use indicator WHOSIS_000001: https://ghoapi.azureedge.net/api/WHOSIS_000001
Returns raw OData rows — to get a usable dataset (country x year, ranked, trend-ready), you must handle pagination, filtering, and reshape the data — often across multiple requests and pages of results, especially for multi-country or multi-year queries, where each additional country or year increases the number of requests and transformations required — before you can run comparisons, build charts, or use it in dashboards.
WHO Global Health Observatory Data Search returns this as a structured, analysis-ready dataset.
What is WHOSIS_000001?
WHOSIS_000001 is the WHO GHO indicator for life expectancy at birth (years).
Endpoint: https://ghoapi.azureedge.net/api/WHOSIS_000001
Returns one record per country per year with optional confidence intervals and sex breakdown — but requires aggregation and filtering before it can be used for comparisons, trend analysis, or cross-country benchmarking.
WHO Global Health Observatory Data Search converts this into panel datasets, rankings, and trend analytics.
How to query WHO GHO API:
Call https://ghoapi.azureedge.net/api/{IndicatorCode} and filter using OData (e.g. ?$filter=SpatialDim eq 'USA').
Results are paginated via @odata.nextLink — you must handle pagination, OData filter syntax, and response parsing before the data can be used for analysis, dashboards, or reporting pipelines.
WHO Global Health Observatory Data Search handles this automatically and adds rankings and analytics.
How to compare countries using WHO data:
Retrieve WHO data for multiple countries and compute rankings, percentiles, and trends manually — this requires aggregating data, aligning years, handling missing values, and calculating comparative metrics — complexity scales with the number of countries and indicators — before you can produce rankings, benchmark countries, or generate reports.
WHO Global Health Observatory Data Search produces ranked comparison tables with mode: "compare".
ghoapi.azureedge.net/api/DIMENSION/SEX/DimensionValues explained:
Returns WHO sex categories: SEX_BTSX (Both), SEX_MLE (Male), SEX_FMLE (Female) — these codes must be mapped and handled correctly before building valid WHO API queries, filters, or dynamic parameterised requests.
WHO Global Health Observatory Data Search maps these automatically and returns clean {code, name} lookup tables.
How to export WHO data as dataset (country x year):
WHO API returns flat OData rows — to build a country x year panel dataset for regression or modelling, you must reshape, pivot, and align the data manually before it can be used in regression, dashboards, statistical models, or BI tools.
WHO Global Health Observatory Data Search returns this as a ready-to-use matrix with mode: "dataset".
How to build a health index from WHO indicators:
Combine multiple WHO indicators, normalize each to a common scale, invert negative indicators (like mortality), and compute weighted composites manually — this requires careful handling of different units and directions before producing a comparable 0-100 index across countries for reporting or visualisation.
WHO Global Health Observatory Data Search produces a 0-100 composite index with mode: "scorecard" and optional custom weights.
In one sentence
Turn WHO GHO endpoints into panel datasets, rankings, and benchmarked health indices — ready for analysis, dashboards, and reporting.
What you get out:
- Panel datasets — Country x year matrices, ready for regression and modelling (no reshaping required)
- Ranking tables — Countries ranked with z-scores, percentiles, and peer-group distance
- Benchmark comparisons — Any country vs group mean, median, or top quartile with gap metrics
- Composite scorecards — Multi-indicator health indices (0-100) with custom weights
- Dimension lookups — Clean reference tables for WHO codes, countries, regions, sex categories
- Executive summaries — Leaders, laggards, outliers, trend direction, comparability warnings
Category: Health data analytics. Public data. Developer tools. Also known as: WHO GHO API client, WHO health data search, global health statistics API, ghoapi.azureedge.net analytics, health indicator database, GHO data extractor, WHO OData API analytics engine
WHO GHO (Global Health Observatory) is the World Health Organization's official health data platform, serving statistics on life expectancy, mortality, disease burden, immunization, and health systems for 194 member states via the OData API at ghoapi.azureedge.net.
If you searched for: ghoapi.azureedge.net/api/WHOSIS_000001 · who gho api dimension sex values · who life expectancy api endpoint · ghoapi azureedge net api whosis 000001 · who health data api python · how to query WHO GHO data · ghoapi.azureedge.net/api/DIMENSION/COUNTRY/DimensionValues · WHO OData API documentation — this tool converts those endpoints into structured datasets with rankings, benchmarks, and analytics.
Three ways to use it
I have a WHO endpoint or indicator code — Paste https://ghoapi.azureedge.net/api/WHOSIS_000001 directly into the indicator field. The actor auto-detects the endpoint type and extracts the indicator code. Use auto mode and dimension URLs return clean lookup tables immediately.
I want to compare countries or regions — Select a preset (e.g. country_health_snapshot), a country group (e.g. G7), and a mode (compare, benchmark, or scorecard). Get ranked tables with z-scores, percentiles, and peer-group gaps.
I need a panel dataset or pipeline data — Use dataset mode for country x year matrices (like an Excel pivot table), multi_dataset for cross-indicator panels, or chart for Chart.js/Plotly JSON. Every run produces a KV store summary with executive findings, coverage diagnostics, and comparability warnings.
Why not use the WHO GHO API directly?
| Capability | WHO Global Health Observatory Data Search | Direct ghoapi.azureedge.net |
|---|---|---|
| Panel dataset output (country x year matrix) | One call, ready for regression | Manual reshaping from flat OData rows |
| Country rankings with z-scores and percentiles | Automatic | Not available |
| Benchmark vs peer group mean/median | Built-in mode | Manual computation |
| Composite health indices (scorecard) | Built-in with auto-inversion | Manual normalization |
| Confidence interval analysis | Uncertainty score + flags | Raw low/high only |
| Country groups (EU, G7, OECD, BRICS) | One parameter | Manual ISO code lists |
| OData pagination | Automatic | Manual @odata.nextLink handling |
| Indicator keyword search | Built-in | Only exact codes |
| Chart.js/Plotly-ready output | Built-in format | Manual transformation |
| Executive summary | Auto-generated per run | Not available |
WHO Global Health Observatory Data Search queries the official WHO GHO OData API at ghoapi.azureedge.net/api and returns enriched health statistics for 194 countries. It resolves indicator codes from keywords, handles OData pagination, and adds computed analytics (CAGR, YoY change, z-scores, percentiles, uncertainty scoring, trend classification). 2,000+ health indicators covering life expectancy, mortality rates, immunization coverage, disease prevalence, health system metrics, nutrition, and environmental health.
Who it's for: Public health researchers, data journalists, health economists, dashboard developers, policy analysts, academic researchers, NGO program evaluators
Output types
WHO Global Health Observatory Data Search produces six output types depending on the analysis mode:
Panel dataset (dataset mode) — Country x year matrix with distribution analytics (mean, stdDev, IQR, skew) and comparability score. Export WHO data like an Excel pivot table — ready for regression, modelling, and statistical software. No reshaping required.
Country ranking table (compare mode) — One row per country with latest value, rank, percentile, z-score, peer group distance, YoY change, trend direction, min/max/average/spread. Sort by any metric.
Benchmark analysis (benchmark mode) — Each country compared against peer group mean, median, or top quartile. Returns absolute gap, percent gap, rank, percentile, and above/below benchmark flag.
Composite health index (scorecard mode) — Multi-indicator score from 0-100 per country. Min-max normalization within the comparison set, auto-inversion for negative indicators (mortality, disease burden), custom weights via weights: [0.5, 0.3, 0.2].
Cross-indicator panel (multi_dataset mode) — All indicators in one structured object with shared country/year axes. Unlocks correlation analysis and multi-indicator dashboards.
Dimension lookup (auto mode with dimension URL) — Clean reference tables for WHO codes: countries, regions, sex categories, age groups. Paste a dimension endpoint URL and get structured {code, name} pairs.
Additional output types: search (enriched row-level data), trend (CAGR time series), top (Top N countries), list (indicator catalog with API endpoints), chart (Chart.js/Plotly JSON).
Speed — 10-30 seconds for 100 records, 1-3 minutes for 1,000+ records Key limitation: Data availability depends on what WHO member states report — some indicators have gaps for certain countries or years. Does not include: Subnational data, hospital-level statistics, real-time surveillance, or data behind WHO authentication.
Data contract
All structured outputs include schemaVersion: "v2" and a schemaType identifier. Output schemas are stable across runs — safe for pipelines, integrations, and scheduled workflows. Field names, types, and null behavior are consistent per mode.
| Mode | schemaType | Shape |
|---|---|---|
dataset | panel_dataset | One record per indicator with matrix, years, coverage, distribution |
multi_dataset | multi_indicator_panel | One record total with all indicators, shared axes |
auto (dimension) | dimension_lookup | One record with values array |
| All other modes | — | Array of typed records (consistent fields per mode) |
What you get from one call
Input: "WHOSIS_000001" (life expectancy at birth) with country group G7 and lastNYears: 10
Returns:
- Life expectancy values for all 7 G7 countries across the last 10 years
- Year-over-year change percentage on every record
- Data completeness score per record
- Country ranking by value within the indicator
- Summary statistics saved to key-value store (top country, year range, record count)
Typical time to first result: 5-15 seconds. Typical time to integrate: Under 30 minutes with the Python or JavaScript examples below.
What makes this different
- Statistical intelligence — Every record includes z-score (standard deviations from global mean), percentile ranking, distance from peer group mean, and uncertainty scoring (CI width analysis with flags for unreliable estimates). The raw GHO API returns none of this.
- Opinionated presets — One-click analysis for common workflows: Country Health Snapshot (life expectancy + mortality + obesity + immunization), Maternal & Child Health, Infectious Disease Burden, Health System Capacity, Mortality Overview. Each preset auto-selects the right indicators and analysis mode.
- Executive summaries — After each run, the key-value store contains an executive summary: headline finding, leader and laggard countries, statistical outliers (>2 std devs from mean), overall trend direction, completeness caveats, and uncertainty warnings. Ready for reports and Slack alerts.
- Built-in analytics — Returns CAGR, year-over-year change, trend classification (growing/stable/declining), min/max/average/spread per country, and data completeness scores — the raw GHO API returns only values
- Predefined country groups — Compare EU (27), G7 (7), G20 (19), BRICS (9), OECD (38), Nordic (5), or ASEAN (10) countries with one parameter instead of manually listing ISO codes
- Chart-ready output — Switch to
chartoutput format and get JSON withlabelsanddatasetsarrays ready for Chart.js or Plotly with zero transformation
If you are building this yourself, you would need to handle OData pagination (@odata.nextLink), resolve indicator codes from keywords, compute year-over-year changes, build z-scores and percentiles, analyze confidence interval reliability, build country group mappings, and format output for charting libraries.
Quick answers
How do I query the WHO GHO API? Provide an indicator code like WHOSIS_000001, or paste a full WHO API URL like https://ghoapi.azureedge.net/api/WHOSIS_000001. Set a country group or country code, choose an analysis mode, and run. WHO Global Health Observatory Data Search handles OData pagination, filter syntax, and dimension resolution automatically. No OData knowledge required.
How do I get WHO indicator codes? Use mode: "list" with a keyword like "mortality" or "immunization". Each result includes the indicator code, name, API endpoint URL, and matching presets. Enter "*" to browse all 2,000+ available indicators.
How do I compare countries using WHO data? Set mode: "compare" with a country group (e.g. G7, OECD) or list of country codes. Returns a ranked table with z-scores, percentiles, YoY change, trend classification, and min/max/average per country. For gap analysis, use mode: "benchmark" to see each country's distance from the group mean or median.
How do I calculate trends from WHO data? Set mode: "trend" to get CAGR (Compound Annual Growth Rate), total change percentage, and trend classification (growing/stable/declining) per country. Requires at least 2 years of data per country.
How do I export WHO data as a panel dataset? Set mode: "dataset" to get a country x year matrix — like an Excel pivot table, ready for regression, modelling, and statistical software. No reshaping required. Includes distribution analytics and a comparability score.
How do I build a composite health index from WHO data? Use mode: "scorecard" with comma-separated indicator codes or a preset, plus optional weights: [0.5, 0.3, 0.2]. Returns a 0-100 composite score per country with per-indicator breakdown and auto-inversion for negative indicators.
Can I paste a WHO API URL directly? Yes. Paste any ghoapi.azureedge.net URL into the indicator field. The actor auto-detects whether it is an indicator endpoint, dimension endpoint, or catalog endpoint and routes to the appropriate mode. Use mode: "auto" for full automatic handling.
Key definitions
WHO GHO API is the World Health Organization's OData-based interface for accessing global health indicators at https://ghoapi.azureedge.net/api. It serves 2,000+ indicators across 194 countries.
Indicator codes like WHOSIS_000001 represent specific WHO datasets. WHOSIS_000001 is life expectancy at birth (years). WHOSIS_000015 is under-five mortality rate. Each code maps to one endpoint: ghoapi.azureedge.net/api/{CODE}.
Dimension endpoints like /DIMENSION/SEX/DimensionValues define categorical breakdowns. SEX returns Male, Female, Both sexes. COUNTRY returns all 194 ISO codes. REGION returns WHO regional groupings (AFR, AMR, EUR, SEAR, EMR, WPR).
OData is the query protocol WHO uses. Filters use syntax like $filter=SpatialDim eq 'USA' and TimeDim ge 2015. Pagination uses @odata.nextLink. WHO Global Health Observatory Data Search handles all OData complexity internally.
At a glance
Quick facts:
- Input: WHO indicator code (e.g.,
WHOSIS_000001) or keyword (e.g., "mortality") - Output: JSON records with values, rankings, YoY changes, CAGR, z-scores, percentiles, uncertainty scores, trend classification, confidence intervals
- Pricing: $0.002 per record returned
- Max records per run: 10,000
- Analysis modes: 10 — search, list, trend, compare, top, benchmark, scorecard, dataset, multi_dataset, auto
- Presets: 5 — Country Health Snapshot, Maternal & Child Health, Infectious Disease Burden, Health System Capacity, Mortality Overview
- Countries covered: 194 WHO member states
- Country groups: EU, G7, G20, BRICS, OECD, Nordic, ASEAN
- WHO regions: AFR, AMR, SEAR, EUR, EMR, WPR
Input -> Output:
- Input: Indicator code, keyword, or preset + optional country/region/year filters + analysis mode
- Process: Resolves indicator, fetches data from
ghoapi.azureedge.net, computes analytics (YoY change, CAGR, z-scores, percentiles, uncertainty, rankings, completeness), generates executive summary - Output: Enriched JSON records or Chart.js-ready format + executive summary in key-value store
Best fit: Health research datasets, country comparison dashboards, development economics, policy briefings, academic publications Not ideal for: Real-time surveillance, subnational statistics, patient-level data, indicators not in the GHO database Does not include: Hospital data, clinical trial results, proprietary health datasets, real-time outbreak data
Problems this solves:
- How to get structured data from the WHO GHO API without handling OData pagination
- How to compare life expectancy or mortality rates across countries with rankings
- How to calculate CAGR and growth trends for WHO health indicators
- How to get Chart.js-ready JSON from WHO health statistics
- How to query
ghoapi.azureedge.netendpoints without writing OData filter syntax
WHO GHO API endpoint reference
Developers who encounter ghoapi.azureedge.net URLs in documentation or code can use this section to understand what data is available and how to query it. WHO Global Health Observatory Data Search builds these queries automatically.
API base URL
All WHO GHO data is served from:
https://ghoapi.azureedge.net/api
Key endpoints
| Endpoint | What it returns | Example URL |
|---|---|---|
/Indicator | All 2,000+ indicator codes and names | https://ghoapi.azureedge.net/api/Indicator |
/{IndicatorCode} | Data records for one indicator | https://ghoapi.azureedge.net/api/WHOSIS_000001 |
/DIMENSION/COUNTRY/DimensionValues | All country codes and names | https://ghoapi.azureedge.net/api/DIMENSION/COUNTRY/DimensionValues |
/DIMENSION/SEX/DimensionValues | Sex dimension values | https://ghoapi.azureedge.net/api/DIMENSION/SEX/DimensionValues |
/DIMENSION/REGION/DimensionValues | WHO region codes and names | https://ghoapi.azureedge.net/api/DIMENSION/REGION/DimensionValues |
/DIMENSION/AGEGROUP/DimensionValues | Age group dimension values | https://ghoapi.azureedge.net/api/DIMENSION/AGEGROUP/DimensionValues |
Common WHO indicator codes
| Code | Indicator name | Category |
|---|---|---|
WHOSIS_000001 | Life expectancy at birth (years) | Mortality |
WHOSIS_000002 | Healthy life expectancy (HALE) at birth | Mortality |
WHOSIS_000004 | Neonatal mortality rate (per 1000 live births) | Child health |
WHOSIS_000015 | Under-five mortality rate (per 1000 live births) | Child health |
MDG_0000000001 | Infant mortality rate (per 1000 live births) | Child health |
WHS4_100 | Immunization coverage — DTP3 (%) | Immunization |
WHS4_544 | Immunization coverage — measles MCV2 (%) | Immunization |
NCD_BMI_30A | Prevalence of obesity among adults (%) | NCD risk factors |
SA_0000001688 | Total alcohol per capita consumption (litres) | Substance use |
FINPROTECTION_CATA_TOT_10_POP | Catastrophic health spending (%) | Health systems |
NUTRITION_WH_2 | Childhood wasting prevalence (%) | Nutrition |
GHED_CHE_pc_PPP_SHA2011 | Health expenditure per capita (PPP) | Health financing |
OData query syntax reference
The WHO GHO API uses OData v4 query parameters. WHO Global Health Observatory Data Search constructs these automatically, but for developers working directly with ghoapi.azureedge.net:
# Filter by countryhttps://ghoapi.azureedge.net/api/WHOSIS_000001?$filter=SpatialDim eq 'USA'# Filter by year rangehttps://ghoapi.azureedge.net/api/WHOSIS_000001?$filter=TimeDim ge 2015 and TimeDim le 2023# Filter by country and yearhttps://ghoapi.azureedge.net/api/WHOSIS_000001?$filter=SpatialDim eq 'GBR' and TimeDim ge 2010# Country-level data only (exclude regional aggregates)https://ghoapi.azureedge.net/api/WHOSIS_000001?$filter=SpatialDimType eq 'COUNTRY'# Search indicators by namehttps://ghoapi.azureedge.net/api/Indicator?$filter=contains(IndicatorName,'mortality')# Pagination and sortinghttps://ghoapi.azureedge.net/api/WHOSIS_000001?$top=1000&$orderby=TimeDim desc# Filter by WHO regionhttps://ghoapi.azureedge.net/api/WHOSIS_000001?$filter=ParentLocationCode eq 'EUR'
WHO regions
| Code | Region name | Countries |
|---|---|---|
AFR | Africa | 47 countries |
AMR | Americas | 35 countries |
SEAR | South-East Asia | 11 countries |
EUR | Europe | 53 countries |
EMR | Eastern Mediterranean | 21 countries |
WPR | Western Pacific | 27 countries |
Predefined country groups
| Group | Countries | ISO codes |
|---|---|---|
| EU (27) | Austria, Belgium, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden | AUT, BEL, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, IRL, ITA, LVA, LTU, LUX, MLT, NLD, POL, PRT, ROU, SVK, SVN, ESP, SWE |
| G7 (7) | Canada, France, Germany, Italy, Japan, United Kingdom, United States | CAN, FRA, DEU, ITA, JPN, GBR, USA |
| G20 (19) | Argentina, Australia, Brazil, Canada, China, France, Germany, India, Indonesia, Italy, Japan, Republic of Korea, Mexico, Russia, Saudi Arabia, South Africa, Turkey, United Kingdom, United States | ARG, AUS, BRA, CAN, CHN, FRA, DEU, IND, IDN, ITA, JPN, KOR, MEX, RUS, SAU, ZAF, TUR, GBR, USA |
| BRICS (9) | Brazil, Russia, India, China, South Africa, Egypt, Ethiopia, Iran, UAE | BRA, RUS, IND, CHN, ZAF, EGY, ETH, IRN, ARE |
| OECD (38) | 38 OECD member nations | AUS, AUT, BEL, CAN, CHL, COL, CRI, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, ISL, IRL, ISR, ITA, JPN, KOR, LVA, LTU, LUX, MEX, NLD, NZL, NOR, POL, PRT, SVK, SVN, ESP, SWE, CHE, TUR, GBR, USA |
| Nordic (5) | Denmark, Finland, Iceland, Norway, Sweden | DNK, FIN, ISL, NOR, SWE |
| ASEAN (10) | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Vietnam | BRN, KHM, IDN, LAO, MYS, MMR, PHL, SGP, THA, VNM |
What data can you extract?
| Data point | Source | Availability | Example |
|---|---|---|---|
| Indicator value | WHO GHO | All records | 72.3 (years) |
| Country name | WHO GHO dimension | All records | Japan |
| Year | WHO GHO TimeDim | Most records | 2021 |
| Sex breakdown | WHO GHO Dim1 | Many indicators | Male, Female, Both sexes |
| Age group | WHO GHO dimensions | Some indicators | YEARS15-49 |
| WHO region | WHO GHO ParentLocation | All records | Western Pacific |
| Confidence interval | WHO GHO Low/High | Some indicators | 70.1 - 74.5 |
| Year-over-year change | Computed by actor | Records with 2+ years | +1.23% |
| CAGR | Computed (trend mode) | 2+ data points | 0.45% per year |
| Country ranking | Computed by actor | Records with numeric values | #3 of 194 |
| Data completeness | Computed by actor | All records | 0.85 (85% of fields populated) |
| Trend classification | Computed (trend/compare) | 2+ data points | growing, stable, declining |
| Min/max/average | Computed (compare mode) | 2+ data points | min: 75.2, max: 84.5, avg: 80.3 |
Why use WHO Global Health Observatory Data Search?
Querying ghoapi.azureedge.net directly requires handling OData pagination (responses cap at 1,000 records per page via @odata.nextLink), resolving cryptic indicator codes like WHOSIS_000001 to human-readable names, building $filter strings with OData syntax (SpatialDim eq 'USA' and TimeDim ge 2015), and computing analytics from raw values manually. For a G20 life expectancy comparison across 20 years, that means multiple paginated requests, country code lookups, and manual year-over-year calculations.
WHO Global Health Observatory Data Search handles all of this in one API call. Provide an indicator code or keyword, set your country and year filters, choose an analysis mode, and get structured JSON with computed rankings, CAGR, and trend data included.
Key difference: WHO Global Health Observatory Data Search adds analytics (CAGR, YoY change, trend classification, rankings, data completeness scoring) on top of raw WHO data — the GHO OData API itself returns only raw values without computed fields.
| Feature | WHO Global Health Observatory Data Search | Direct GHO OData API | World Bank Data API |
|---|---|---|---|
| Data source | WHO GHO (2,000+ indicators) | WHO GHO (2,000+ indicators) | World Bank (16,000+ indicators) |
| Built-in analytics | CAGR, YoY change, rankings, trends | None — raw values only | None — raw values only |
| Country groups | EU, G7, G20, BRICS, OECD, Nordic, ASEAN | Manual ISO code filtering | Income groups only |
| Chart-ready output | Chart.js/Plotly JSON format | No | No |
| Pagination handling | Automatic | Manual ($top, @odata.nextLink) | Manual (page, per_page) |
| Indicator search | Keyword search + exact code | OData contains() filter | Keyword search |
| Trend analysis | CAGR, trend classification per country | Not available | Not available |
| Output format | Enriched JSON with computed fields | Raw OData JSON | Raw JSON/XML |
| Pricing | $0.002/record | Free (rate limited) | Free (rate limited) |
| Best for | Analysis-ready datasets with trends | Direct API integration | Broader economic indicators |
Pricing and features as of April 2026 and may change.
Platform capabilities
- Scheduling — Run daily, weekly, or on custom intervals to track WHO indicator changes over time
- API access — Trigger from Python, JavaScript, or any HTTP client via the Apify API
- Monitoring — Slack or email alerts when runs fail
- Integrations — Connect to Google Sheets, Zapier, Make, or webhooks for automated health data pipelines
- Spending limits — Set a maximum budget per run to control costs on large queries
Features
WHO Global Health Observatory Data Search provides 5 analysis modes, 5 opinionated presets, 7 predefined country groups, WHO region filtering, statistical intelligence (z-scores, percentiles, uncertainty scoring), executive summaries, and chart-ready output. It resolves indicator codes from keywords, handles OData pagination automatically, computes analytics on every record, and detects trends and outliers across 194 countries.
Presets (one-click analysis):
- Country Health Snapshot — Life expectancy + neonatal mortality + obesity + immunization coverage. Use with a country group for instant country-level health overview.
- Maternal & Child Health — Maternal mortality + neonatal mortality + DPT3 immunization + child wasting. Core indicators for MCH program evaluation.
- Infectious Disease Burden — TB incidence + malaria deaths + measles cases + HIV prevalence. Track disease burden trends over time.
- Health System Capacity — Physicians per 10k + hospital beds per 10k + health expenditure per capita + UHC index. Compare health system strength across countries.
- Mortality Overview — Life expectancy + healthy life expectancy + adult mortality + probability of dying 30-70. Comprehensive mortality analysis.
Each preset auto-selects the right indicators and defaults to the appropriate analysis mode (compare or trend). Set preset: "country_health_snapshot" and countryGroup: "G7" for a one-click G7 health comparison.
Statistical intelligence (on every record):
- Z-score — Standard deviations from the global mean for the indicator. Values beyond +/-2 are flagged as statistical outliers in the executive summary.
- Percentile — Position within the result set (0-100). A percentile of 95 means the value is higher than 95% of other countries.
- Peer group distance — Absolute distance from the comparison group mean. Tells you "how far above or below average is this country?"
- Uncertainty scoring — Confidence interval width as a percentage of the value. Records with wide CIs (>50% of value) are flagged as
high-uncertainty. Records with CIs 20-50% are flaggedmoderate-uncertainty. Helps researchers identify estimates that should be interpreted with caution.
Executive summary (saved to key-value store after each run):
- Headline finding (e.g., "Life expectancy across 7 countries — Japan leads at 84.5")
- Leader and laggard countries with values
- Statistical outliers (countries >2 standard deviations from mean)
- Overall trend direction (increasing/stable/declining with average YoY change)
- Data completeness caveats when quality is low
- Uncertainty warnings when many records have wide confidence intervals
- Key findings array (usable in reports and Slack notifications)
Analysis modes (10):
- Search mode — Raw data rows with z-score, percentile, uncertainty scoring, and ranking added to each record
- List mode — Browse indicator codes by keyword. Returns API endpoint URLs and matching preset suggestions per indicator
- Trend mode — Time series per country with CAGR, total change percentage, and trend classification (growing/stable/declining)
- Compare mode — Country ranking table with latest value, z-score, percentile, peer group distance, YoY change, trend, min/max/average/spread
- Top mode — Top N countries ranked by highest value or fastest growth rate
- Benchmark mode — Compare each country against peer group mean, median, or top quartile. Returns absolute gap, percent gap, and above/below benchmark flag
- Scorecard mode — Multi-indicator composite score (0-100) with min-max normalization, auto-inversion for negative indicators, and custom weights. Use
weights: [0.5, 0.3, 0.2]to weight indicators differently - Dataset mode — Panel matrix output: country x year grid with coverage stats, distribution analytics (mean, stdDev, p25/p75, IQR, skew), and comparability score. Analysts and BI tools prefer this over flat rows
- Multi-dataset mode — Cross-indicator matrix: all indicators in one structured object with shared country/year axes. Unlocks correlation analysis and multi-indicator dashboards without post-processing
- Auto mode — Paste any WHO API URL and the actor auto-detects the endpoint type: indicator URLs route to dataset mode, dimension URLs return clean lookup tables, catalog URLs return the full indicator list
Endpoint-aware input:
- Paste a full WHO API URL (e.g.
https://ghoapi.azureedge.net/api/WHOSIS_000001) and the actor auto-extracts the indicator code - In auto mode, dimension endpoints (e.g.
/DIMENSION/SEX/DimensionValues) return structured lookup tables directly:{ "sourceType": "dimension", "dimension": "SEX", "values": [{"code": "SEX_MLE", "name": "Male"}, ...] } - Recognizes indicator endpoints, dimension endpoints, and catalog endpoints
- Also handles space-separated queries from search engines (e.g.
ghoapi.azureedge.net api dimension sex dimensionvalues) - When a URL is detected, the KV store includes an endpoint explainer with metadata and suggested next actions
Distribution analytics (in KV store summary and dataset mode):
- Mean, standard deviation, variance
- Percentiles: p25, median (p50), p75
- Interquartile range (IQR)
- Skewness (Fisher-Pearson)
- Min, max, count
- Computed across latest values per country for the primary indicator
Comparability score (0.0 to 1.0):
- Single trust metric combining: country coverage ratio, data sparsity, CI width, year alignment, disaggregation consistency
- Included in dataset mode output and KV store summary
- Answers "can I trust this comparison?" — 0.8+ is solid, below 0.5 means interpret with caution
Coverage diagnostics and comparability flags (in KV store summary):
- Countries requested vs returned, with missing country list
- Year gaps in the returned data
- Sparsity score (how sparse is the data matrix?)
- Disaggregation availability (sex, age group, confidence intervals)
- Comparability warnings: latest year mismatch across countries, low coverage, CI-heavy data, insufficient trend depth, mixed disaggregation risk
- Query reproducibility block: full audit trail of resolved indicators, countries, filters, and parsed endpoints
Country and region filters:
- Single country — Filter by ISO 3-letter code (e.g.,
USA,GBR,JPN) - Multiple countries — Compare up to 50 countries side by side
- Country groups — EU (27), G7 (7), G20 (19), BRICS (9), OECD (38), Nordic (5), ASEAN (10) — one parameter expands to all member codes
- WHO regions — AFR, AMR, SEAR, EUR, EMR, WPR
- Year filtering —
yearFrom/yearTorange orlastNYearsshortcut
Output and reliability:
- Chart-ready JSON —
chartoutput format produceslabelsanddatasetsarrays for Chart.js or Plotly - Sort options — Sort by value (highest first), year (newest), country (A-Z), or growth (fastest YoY change)
- Retry with backoff — Automatic retry on HTTP 429 and 5xx errors with exponential backoff (2^attempt seconds)
- Circuit breaker — Stops after 5 consecutive API failures to avoid wasting time and credits
- KV store summary — Summary statistics (top country, year range, record count, PPE charges) saved after each run
Analyst workflows
Build a panel dataset for regression:
- Set
indicator: "WHOSIS_000001",mode: "dataset",countryGroup: "OECD",lastNYears: 20 - Get a country x year matrix with 38 countries, 20 years, distribution stats, and comparability score
- Import directly into R, Python, Stata — no reshaping needed
Compare OECD countries and export ranking:
- Set
indicator: "WHOSIS_000001",mode: "compare",countryGroup: "OECD" - Get ranked table with z-scores, percentiles, and trend classification
- Export as CSV for reports or pipe to a dashboard
Build a composite health index for a policy report:
- Set
preset: "country_health_snapshot",mode: "scorecard",countryGroup: "G20",weights: [0.4, 0.2, 0.2, 0.2] - Get a 0-100 composite score per country with per-indicator breakdown
- Use the executive summary from KV store for the report narrative
Benchmark a country against its peer group:
- Set
indicator: "WHOSIS_000001",mode: "benchmark",countryGroup: "G7",benchmark: "peer_group_mean" - Get each country's gap from the group mean — absolute and percentage
- Flag countries below benchmark for targeted analysis
Explore a WHO API endpoint you found:
- Paste the URL directly:
indicator: "https://ghoapi.azureedge.net/api/WHOSIS_000001",mode: "auto" - Actor detects the endpoint type, extracts the code, returns data as a panel dataset
- KV store includes an endpoint explainer with metadata and suggested next actions
Use cases
Health research — Build panel datasets from 2,000+ WHO indicators for epidemiological studies. dataset and multi_dataset modes produce regression-ready matrices with coverage diagnostics.
Country comparison dashboards — chart output format returns Chart.js-ready JSON. compare mode produces ranked tables. benchmark mode adds gap analysis.
Policy analysis — compare mode ranks countries with trend direction, YoY change, and historical range. scorecard mode builds composite indices. Executive summaries are ready for briefings.
Development economics — Track health outcomes across G7, G20, BRICS, or OECD groups. trend mode calculates CAGR. benchmark mode compares against group averages.
Journalism — Pre-computed rankings, z-scores, and trend classifications. Same data used by governments and international organizations.
How to search WHO health data
- Enter an indicator code or keyword — Type
WHOSIS_000001for life expectancy, or a keyword like "mortality" to search. Uselistmode first if you do not know the exact code. - Set country and year filters — Choose a country group (e.g.,
G7), individual countries (e.g.,USA), or a WHO region (e.g.,EUR). SetlastNYears: 10for the last decade. - Choose an analysis mode —
searchfor raw data,trendfor CAGR and growth rates,comparefor country rankings,topfor Top N countries. - Run and download results — Click "Start." Results appear in the Dataset tab as JSON, CSV, or Excel. Summary statistics are saved to the Key-Value Store under the
SUMMARYkey.
First run tips
- Start with list mode — If you do not know the indicator code, run with
mode: "list"andindicator: "mortality"to browse matching indicators and find the exact code - Use lastNYears instead of yearFrom/yearTo — Setting
lastNYears: 10always gives you the most recent decade without calculating exact years - Test with one country first — Set
country: "USA"andmaxResults: 50to verify you have the right indicator before scaling to all 194 countries - Set maxResults high for trend mode — Trend analysis needs multiple years per country. For a G20 trend analysis, use
maxResults: 2000or higher - Check the KV store summary — After each run, open the Key-Value Store and look at the
SUMMARYkey for top country, year range, and total PPE charges
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
indicator | string | Yes | — | Indicator code (e.g., WHOSIS_000001), keyword (e.g., mortality), or comma-separated codes (e.g., WHOSIS_000001,WHOSIS_000002). In list mode, enter a keyword or * for all. |
mode | string | No | search | Analysis mode: search, list, trend, compare, top, benchmark, scorecard, dataset, multi_dataset, or auto |
weights | number[] | No | — | Custom scorecard weights. One number per indicator, normalized to sum to 1. E.g. [0.5, 0.3, 0.2] |
preset | string | No | — | One-click preset: country_health_snapshot, maternal_child_health, infectious_disease, health_system, mortality_overview. Overrides indicator field. |
benchmark | string | No | peer_group_mean | Benchmark reference in benchmark mode: peer_group_mean, peer_group_median, or top_quartile |
country | string | No | — | ISO 3-letter country code (e.g., USA, GBR). Leave empty for all countries. |
countries | array | No | — | List of ISO 3-letter codes for multi-country comparison. Max 50. |
countryGroup | string | No | — | Predefined group: EU, G7, G20, BRICS, OECD, NORDIC, ASEAN |
region | string | No | — | WHO region: AFR, AMR, SEAR, EUR, EMR, WPR |
lastNYears | integer | No | — | Fetch data from the last N years. Overrides yearFrom. |
yearFrom | integer | No | — | Start year (e.g., 2010). Overridden by lastNYears. |
yearTo | integer | No | — | End year (e.g., 2023) |
topN | integer | No | 10 | Number of top countries in top mode (1-194) |
sortBy | string | No | value | Sort: value (highest), year (newest), country (A-Z), growth (fastest YoY) |
outputFormat | string | No | standard | standard for dataset rows, chart for Chart.js/Plotly-ready JSON |
maxResults | integer | No | 100 | Max raw records to fetch from WHO API (1-10,000) |
Input examples
G7 health snapshot using preset (one-click):
{"indicator": "WHOSIS_000001","preset": "country_health_snapshot","countryGroup": "G7","lastNYears": 10}
Life expectancy for G7 countries, last 10 years (compare mode):
{"indicator": "WHOSIS_000001","mode": "compare","countryGroup": "G7","lastNYears": 10}
Top 20 countries by under-five mortality:
{"indicator": "WHOSIS_000015","mode": "top","topN": 20,"sortBy": "value"}
Paste a WHO API URL directly:
{"indicator": "https://ghoapi.azureedge.net/api/WHOSIS_000001","countryGroup": "OECD","mode": "benchmark"}
OECD health system scorecard using preset:
{"indicator": "WHOSIS_000001","preset": "health_system","countryGroup": "OECD","mode": "scorecard"}
Benchmark UK against G7 peers:
{"indicator": "WHOSIS_000001","mode": "benchmark","countryGroup": "G7","benchmark": "peer_group_mean","lastNYears": 5}
Panel dataset for G20 life expectancy:
{"indicator": "WHOSIS_000001","mode": "dataset","countryGroup": "G20","lastNYears": 10}
Cross-indicator matrix (multi-dataset):
{"indicator": "WHOSIS_000001,NCD_BMI_30A,WHS4_100","mode": "multi_dataset","countryGroup": "G7","lastNYears": 5}
Auto-detect WHO dimension URL:
{"indicator": "https://ghoapi.azureedge.net/api/DIMENSION/SEX/DimensionValues","mode": "auto"}
Custom-weighted scorecard:
{"indicator": "WHOSIS_000001,NCD_BMI_30A,WHOSIS_000015","mode": "scorecard","countryGroup": "OECD","weights": [0.5, 0.3, 0.2]}
Browse all immunization indicators:
{"indicator": "immunization","mode": "list","maxResults": 50}
Input tips
- Start with defaults —
mode: "search"andmaxResults: 100cover most single-country queries - Use country groups for quick comparisons —
countryGroup: "OECD"expands to 38 country codes automatically - Combine indicators — Enter
WHOSIS_000001,WHOSIS_000002to fetch life expectancy and healthy life expectancy in one run - Set maxResults higher for analytics modes — Trend and compare modes need multiple years per country, so set
maxResults: 1000or higher for meaningful CAGR calculations
Output example
Search mode (one record)
{"indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","country": "JPN","countryName": "Japan","year": 2021,"value": "84.5","numericValue": 84.5,"low": 84.1,"high": 84.9,"sex": "Both sexes","ageGroup": null,"region": "Western Pacific","regionCode": "WPR","dataSource": "GHE","comments": null,"rank": 1,"percentile": 100,"yearOverYearChange": 0.24,"zScore": 1.82,"peerGroupDistance": 6.3,"dataCompleteness": 0.85,"ciWidth": 0.8,"uncertaintyScore": 0.95,"uncertaintyFlag": null}
Trend mode (one record)
{"indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","country": "JPN","countryName": "Japan","region": "Western Pacific","years": [2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021],"values": [83.1, 83.3, 83.5, 83.7, 83.9, 84.0, 84.1, 84.2, 83.8, 84.5],"startValue": 83.1,"endValue": 84.5,"totalChange": 1.4,"totalChangePercent": 1.68,"cagr": 0.19,"trend": "growing","dataPoints": 10}
Compare mode (one record)
{"country": "JPN","countryName": "Japan","region": "Western Pacific","latestYear": 2021,"latestValue": 84.5,"rank": 1,"yearOverYearChange": 0.24,"trend": "growing","min": 83.1,"max": 84.5,"average": 83.73,"dataPoints": 10}
Chart mode
{"chartType": "line","title": "Life expectancy at birth (years)","labels": ["2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"],"datasets": [{"label": "Japan","data": [83.1, 83.3, 83.5, 83.7, 83.9, 84.0, 84.1, 84.2, 83.8, 84.5]},{"label": "United States of America","data": [78.7, 78.8, 78.9, 78.7, 78.5, 78.5, 78.7, 78.8, 77.0, 77.2]}],"indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)"}
List mode
{"indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","apiEndpoint": "https://ghoapi.azureedge.net/api/WHOSIS_000001","suggestedPresets": ["country_health_snapshot", "mortality_overview"]}
Benchmark mode (one record)
{"country": "GBR","countryName": "United Kingdom of Great Britain and Northern Ireland","indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","latestValue": 80.7,"latestYear": 2021,"benchmarkEntity": "Peer group mean","benchmarkValue": 81.4,"absoluteGap": -0.7,"percentGap": -0.86,"rank": 5,"percentile": 29,"aboveBenchmark": false}
Scorecard mode (one record)
{"country": "JPN","countryName": "Japan","region": "Western Pacific","compositeScore": 87.3,"rank": 1,"percentile": 100,"indicators": [{ "code": "WHOSIS_000001", "name": "Life expectancy at birth (years)", "rawValue": 84.5, "normalizedScore": 98.2, "percentile": 100 },{ "code": "WHOSIS_000015", "name": "Neonatal mortality rate", "rawValue": 0.9, "normalizedScore": 95.1, "percentile": 100 },{ "code": "NCD_BMI_30A", "name": "Prevalence of obesity", "rawValue": 4.3, "normalizedScore": 92.8, "percentile": 100 },{ "code": "WHS4_100", "name": "DPT3 immunization coverage", "rawValue": 98, "normalizedScore": 63.1, "percentile": 57 }]}
Dataset mode (one record per indicator)
{"schemaVersion": "v2","schemaType": "panel_dataset","type": "panel_dataset","dimensions": ["country", "year"],"indicator": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","matrix": {"JPN": [83.1, 83.3, 83.5, 83.7, 83.9, 84.0, 84.1, 84.2, 83.8, 84.5],"USA": [78.7, 78.8, 78.9, 78.7, 78.5, 78.5, 78.7, 78.8, 77.0, 77.2],"GBR": [81.1, 81.2, 81.3, 81.2, 81.0, 81.1, 81.2, 81.3, 80.4, 80.7]},"years": [2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021],"coverage": {"countries": 3,"years": 10,"missingCells": 0,"totalCells": 30},"distribution": {"mean": 81.2,"stdDev": 2.1,"variance": 4.41,"p25": 79.3,"median": 81.2,"p75": 83.5,"iqr": 4.2,"skew": -0.4,"min": 77.0,"max": 84.5,"count": 3},"comparabilityScore": 0.92}
Multi-dataset mode (one record total)
{"schemaVersion": "v2","schemaType": "multi_indicator_panel","type": "multi_indicator_panel","countries": ["GBR", "JPN", "USA"],"countryNames": { "GBR": "United Kingdom", "JPN": "Japan", "USA": "United States" },"years": [2019, 2020, 2021],"indicators": {"WHOSIS_000001": {"name": "Life expectancy at birth (years)","matrix": { "GBR": [81.3, 80.4, 80.7], "JPN": [84.2, 83.8, 84.5], "USA": [78.8, 77.0, 77.2] }},"NCD_BMI_30A": {"name": "Prevalence of obesity","matrix": { "GBR": [27.8, 28.0, 28.2], "JPN": [4.2, 4.3, 4.3], "USA": [36.2, 36.5, 36.9] }}},"coverage": { "indicators": 2, "countries": 3, "years": 3, "missingCells": 0, "totalCells": 18 }}
Auto mode — dimension endpoint
{"schemaVersion": "v2","schemaType": "dimension_lookup","sourceType": "dimension","dimension": "SEX","values": [{ "code": "SEX_BTSX", "name": "Both sexes" },{ "code": "SEX_MLE", "name": "Male" },{ "code": "SEX_FMLE", "name": "Female" }]}
Output fields
Search mode fields
| Field | Type | Description |
|---|---|---|
indicatorCode | string | WHO indicator code (e.g., WHOSIS_000001) |
indicatorName | string | Human-readable indicator name |
country | string | ISO 3-letter country code |
countryName | string | Full country name from WHO dimension data |
year | number or null | Reporting year |
value | string or null | Raw value string from WHO API (may include ranges like "13.0 [10.8-15.6]") |
numericValue | number or null | Parsed numeric value for calculations |
low | number or null | Lower bound of confidence interval |
high | number or null | Upper bound of confidence interval |
sex | string or null | Both sexes, Male, or Female. Mapped from WHO codes SEX_BTSX, SEX_MLE, SEX_FMLE. |
ageGroup | string or null | Age group dimension when applicable |
region | string or null | WHO region name (e.g., "Western Pacific") |
regionCode | string or null | WHO region code (e.g., WPR) |
dataSource | string or null | Data source identifier from WHO |
comments | string or null | WHO data comments |
rank | number or null | Ranking by value within the indicator |
percentile | number or null | Percentile within result set (0-100). 95 means better than 95% of results |
yearOverYearChange | number or null | Percentage change from previous year |
zScore | number or null | Standard deviations from global mean. Values beyond +/-2 are statistical outliers |
peerGroupDistance | number or null | Absolute distance from the peer group mean value |
dataCompleteness | number | Score from 0 to 1 — proportion of populated fields |
ciWidth | number or null | Confidence interval width (high minus low). Wider = more uncertain |
uncertaintyScore | number or null | CI width as percentage of the value. Above 50% = high uncertainty |
uncertaintyFlag | string or null | null = acceptable, moderate-uncertainty = CI 20-50% of value, high-uncertainty = CI >50% |
Trend mode fields
| Field | Type | Description |
|---|---|---|
years | number[] | Array of years in the time series |
values | number[] | Array of values for each year |
startValue | number | First value in the series |
endValue | number | Last value in the series |
totalChange | number | Absolute change from start to end |
totalChangePercent | number or null | Percentage change from start to end |
cagr | number or null | Compound Annual Growth Rate as percentage |
trend | string or null | growing (>5% change), stable, or declining (<-5%) |
dataPoints | number | Number of data points in the series |
Compare mode fields
| Field | Type | Description |
|---|---|---|
latestYear | number or null | Most recent year with data |
latestValue | number or null | Value for the latest year |
rank | number | Country ranking by latest value (1 = highest) |
percentile | number or null | Percentile within the comparison set |
yearOverYearChange | number or null | YoY change from second-latest to latest year |
zScore | number or null | Standard deviations from comparison group mean |
peerGroupDistance | number or null | Absolute distance from group mean value |
trend | string or null | Trend classification |
min | number or null | Minimum value across all years |
max | number or null | Maximum value across all years |
average | number or null | Average value across all years |
spread | number or null | Range between max and min values |
dataPoints | number | Number of years with data |
Benchmark mode fields
| Field | Type | Description |
|---|---|---|
latestValue | number or null | Country's latest value for the indicator |
latestYear | number or null | Year of latest data point |
benchmarkEntity | string | Benchmark reference (e.g., "Peer group mean") |
benchmarkValue | number | The benchmark value being compared against |
absoluteGap | number or null | Country value minus benchmark. Positive = above benchmark |
percentGap | number or null | Gap as percentage of benchmark |
rank | number | Country ranking within the comparison set |
percentile | number or null | Percentile within set |
aboveBenchmark | boolean or null | Whether the country is above the benchmark |
Scorecard mode fields
| Field | Type | Description |
|---|---|---|
compositeScore | number | Weighted composite score (0-100). Higher = better health outcomes |
rank | number | Country ranking by composite score |
percentile | number or null | Percentile within set |
indicators | array | Per-indicator breakdown with raw value, normalized score (0-100), and percentile |
Scorecard mode auto-inverts negative indicators (mortality, disease burden) so that lower values produce higher scores. All normalization is min-max within the comparison set. Custom weights via weights: [0.5, 0.3, 0.2] are normalized to sum to 1.
Dataset mode fields
| Field | Type | Description |
|---|---|---|
schemaVersion | string | Always "v2" |
schemaType | string | "panel_dataset" |
matrix | object | Country code keys mapping to arrays of values aligned with years |
years | number[] | Sorted array of years (column headers for the matrix) |
coverage | object | countries, years, missingCells, totalCells |
distribution | object or null | Mean, stdDev, variance, p25, median, p75, IQR, skew, min, max, count |
comparabilityScore | number or null | Trust metric 0.0-1.0 combining coverage, CI width, year alignment |
Multi-dataset mode fields
| Field | Type | Description |
|---|---|---|
schemaVersion | string | Always "v2" |
schemaType | string | "multi_indicator_panel" |
countries | string[] | Sorted country codes |
countryNames | object | Country code to name mapping |
years | number[] | Sorted year array shared across all indicators |
indicators | object | Indicator code keys, each containing name and matrix |
coverage | object | indicators, countries, years, missingCells, totalCells |
Auto mode — dimension fields
| Field | Type | Description |
|---|---|---|
sourceType | string | "dimension" |
dimension | string | Dimension name (e.g. SEX, COUNTRY, REGION) |
values | array | [{code, name}] for each dimension value |
How much does it cost to search WHO health data?
WHO Global Health Observatory Data Search uses pay-per-event pricing at $0.002 per record returned. Pricing anchored to real workflows:
| What you get | Records | Cost |
|---|---|---|
| G7 life expectancy comparison (10 years) | ~70 | $0.14 |
| OECD health snapshot (1 indicator, 10 years) | ~380 | $0.76 |
| G20 multi-indicator panel (5 indicators, 10 years) | ~2,000 | $4.00 |
| Full extraction (max per run) | 10,000 | $20.00 |
| Quick test (1 indicator, 1 country) | ~10 | $0.02 |
Set a spending limit in your Apify account to cap costs. Apify's free tier includes $5 of monthly platform credits — enough for a full OECD health dataset with 6 indicators.
The direct WHO GHO API at ghoapi.azureedge.net is free but returns raw OData responses that require pagination handling, OData filter syntax, manual aggregation, and no built-in analytics. To build a country comparison, you would need to fetch data with @odata.nextLink pagination, resolve dimension codes to names, compute year-over-year changes across country-indicator-year groups, calculate z-scores and percentiles, analyze confidence interval reliability, and reshape flat rows into usable matrices. WHO Global Health Observatory Data Search replaces all of this with one API call that returns ranked, benchmarked, analysis-ready output.
Search WHO health data using the API
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ryanclinton/who-gho-search").call(run_input={"indicator": "WHOSIS_000001","mode": "compare","countryGroup": "G7","lastNYears": 10})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['countryName']}: {item['latestValue']} (rank #{item['rank']})")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("ryanclinton/who-gho-search").call({indicator: "WHOSIS_000001",mode: "trend",countryGroup: "BRICS",lastNYears: 20});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(`${item.countryName}: CAGR ${item.cagr}%, trend: ${item.trend}`);}
cURL
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~who-gho-search/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"indicator": "WHOSIS_000001","mode": "top","topN": 10,"lastNYears": 5}'# Retrieve resultscurl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How WHO Global Health Observatory Data Search works
Mental model: Indicator input -> resolve code -> build OData filter -> fetch paginated data -> compute analytics -> output enriched JSON.
Indicator resolution
WHO Global Health Observatory Data Search examines your input. If it matches the pattern of an indicator code (uppercase letters, digits, underscores), it queries ghoapi.azureedge.net/api/Indicator?$filter=IndicatorCode eq '{code}'. If it looks like a keyword, it searches with contains(IndicatorName,'{keyword}'). Comma-separated inputs resolve each code independently. If more than 10 indicators match a keyword, the actor limits to the first 10.
Country and filter resolution
Country groups expand to their ISO codes (e.g., G7 becomes CAN, FRA, DEU, ITA, JPN, GBR, USA). The lastNYears parameter converts to a yearFrom value based on the current year. WHO Global Health Observatory Data Search builds an OData $filter string combining SpatialDimType eq 'COUNTRY', country codes (as OR clauses, batched in groups of 40), region code, and year range.
Data fetching with reliability
For each resolved indicator, WHO Global Health Observatory Data Search calls ghoapi.azureedge.net/api/{IndicatorCode} with the filter string. It handles OData pagination (1,000 records per page via @odata.nextLink), retries on HTTP 429 and 5xx errors with exponential backoff (2^attempt seconds), and stops after 5 consecutive failures (circuit breaker pattern).
Analytics computation
On the fetched records, WHO Global Health Observatory Data Search computes:
- Year-over-year change:
((current - previous) / |previous|) * 100for each country-indicator-year group - Data completeness: Proportion of 13 key fields that are populated (0 to 1 scale)
- CAGR (trend mode):
(endValue / startValue)^(1/years) - 1expressed as percentage - Trend classification: >5% total change = growing, <-5% = declining, otherwise stable
- Rankings: Countries ranked by numeric value within each indicator (descending)
Tips for best results
- Use list mode to discover indicators first. Run
indicator: "immunization", mode: "list"to find the exact code before running a data query. - Set maxResults high for trend and compare modes. These modes need multiple years per country. For a G20 trend analysis, set
maxResults: 2000or higher. - Filter by sex dimension in post-processing. Search mode returns separate records for Male, Female, and Both sexes. Trend and compare modes automatically filter to "Both sexes."
- Use chart output for dashboards. Set
outputFormat: "chart"and pass the JSON directly to Chart.js or Plotly without transformation. - Combine with year filtering for focused datasets.
lastNYears: 5withcountryGroup: "OECD"produces a focused, recent dataset. - Check data completeness scores. Records with
dataCompletenessbelow 0.5 may be missing confidence intervals, sex breakdowns, or data source fields.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| World Bank Development Indicators | Cross-reference WHO health outcomes with GDP, poverty rates, and education spending |
| Clinical Trial Tracker | Connect population-level WHO data with clinical research activity by disease area |
| OpenAlex Research Paper Search | Find academic papers on health topics to contextualize WHO statistics |
| PubMed Biomedical Literature Search | Source primary research to complement WHO health indicators |
| Open Food Facts | Combine WHO nutrition indicators with product-level dietary data |
Limitations
- Data freshness depends on WHO reporting. Most indicators lag 1-3 years behind the current date due to country reporting timelines.
- Max 10 indicators per keyword search. If a keyword matches 200+ indicators, only the first 10 are fetched. Use exact codes for specific indicators.
- No subnational data. The WHO GHO API provides country-level data only. The actor applies
SpatialDimType eq 'COUNTRY'to exclude regional aggregates. - Trend mode requires 2+ years per country. Countries with a single data point for an indicator are excluded from trend analysis.
- Some indicators have sparse coverage. Not all 194 countries report on all indicators. Data completeness varies.
- Max 10,000 records per run. For full database extractions, run multiple queries with different filters.
- WHO API rate limits. The GHO API may throttle requests during peak usage. WHO Global Health Observatory Data Search retries automatically but large queries may be slower.
- Indicator names in English only. The WHO GHO API returns indicator names in English as provided by the WHO.
Integrations
- Zapier — Trigger WHO data pulls on schedule and push results to Google Sheets or databases
- Make — Build automated health data pipelines with country comparison triggers
- Google Sheets — Export WHO health statistics directly to spreadsheets for team analysis
- Apify API — Integrate WHO data queries into any programming language or platform
- Webhooks — Trigger database writes or dashboard refreshes when a run completes
How to use the WHO GHO API
The WHO GHO API is an OData-based API for global health data at ghoapi.azureedge.net.
- Find an indicator code:
https://ghoapi.azureedge.net/api/Indicator - Query data for that indicator:
https://ghoapi.azureedge.net/api/WHOSIS_000001 - Filter by country:
?$filter=SpatialDim eq 'USA' - Filter by year:
?$filter=TimeDim ge 2015 - Handle pagination via
@odata.nextLink - Parse raw OData JSON response
Using WHO Global Health Observatory Data Search: no OData syntax required. One call returns structured datasets with rankings, trends, benchmarks, and analytics. Paste any ghoapi.azureedge.net URL directly or enter an indicator code.
How to compare countries using WHO data
To compare countries using WHO GHO data manually: query each country separately, align years, compute rankings, calculate statistics. This requires multiple API calls and manual aggregation.
Using WHO Global Health Observatory Data Search:
- Set
indicator: "WHOSIS_000001"(or any indicator code) - Set
mode: "compare"andcountryGroup: "G7"(or list specific countries) - Output: ranked table with z-scores, percentiles, YoY change, trend direction, min/max/average, and spread per country
For gap analysis: use mode: "benchmark" with benchmark: "peer_group_mean" to see each country's distance from the group average.
How to get life expectancy data from the WHO API
To get life expectancy data from the WHO GHO API directly:
- Use indicator code
WHOSIS_000001 - Query
https://ghoapi.azureedge.net/api/WHOSIS_000001 - Filter by country using
$filter=SpatialDim eq 'USA' - Filter by year using
$filter=TimeDim ge 2015 - Handle pagination via
@odata.nextLink - Parse raw OData JSON, compute your own rankings and trends
Using WHO Global Health Observatory Data Search instead:
- Input:
WHOSIS_000001(or paste the full URL) - Mode:
datasetfor a country x year matrix,comparefor ranked table,benchmarkfor peer-group gap analysis - Output: panel dataset with distribution stats, rankings with z-scores, or benchmark gaps — no OData handling needed
WHOSIS_000001 endpoint explained
The endpoint https://ghoapi.azureedge.net/api/WHOSIS_000001 returns life expectancy at birth (years) from the WHO Global Health Observatory. Each record contains one country, one year, with optional sex and age disaggregation. Raw OData format requires pagination and manual filtering.
Using WHO Global Health Observatory Data Search, this endpoint becomes a ranked, benchmarked panel dataset. Paste the URL directly into the indicator field with mode: "auto" and get a country x year matrix with distribution analytics and comparability scoring.
DIMENSION/COUNTRY/DimensionValues endpoint explained
The endpoint https://ghoapi.azureedge.net/api/DIMENSION/COUNTRY/DimensionValues returns all WHO member state country codes and names. In raw OData format, it returns paginated JSON with Code and Title fields.
Using WHO Global Health Observatory Data Search with mode: "auto", paste the URL and get a clean lookup table: [{code: "USA", name: "United States of America"}, ...]. No pagination handling needed.
DIMENSION/SEX/DimensionValues endpoint explained
The endpoint https://ghoapi.azureedge.net/api/DIMENSION/SEX/DimensionValues returns sex dimension values used across WHO indicators: Both sexes (SEX_BTSX), Male (SEX_MLE), Female (SEX_FMLE). WHO Global Health Observatory Data Search automatically maps these codes to human-readable names in all output modes.
How to find WHO GHO indicator codes
If you encounter a URL like https://ghoapi.azureedge.net/api/WHOSIS_000001 and want to know what indicator it refers to, paste it directly into WHO Global Health Observatory Data Search. The actor auto-detects the indicator code and returns data with the full indicator name. To browse all available indicators, set indicator: "*" and mode: "list" — each result includes the API endpoint URL and matching presets.
How to compare life expectancy across countries
Set indicator: "WHOSIS_000001", choose mode: "compare", and select a country group like G7 or OECD. WHO Global Health Observatory Data Search returns a ranking table with each country's latest life expectancy, z-score (standard deviations from group mean), percentile, YoY change, trend direction, and min/max/average/spread. For gap analysis, use mode: "benchmark" to see each country's distance from the group mean or median.
How to get mortality rates from the WHO API
Search for mortality indicators using indicator: "mortality" in list mode. Then use the specific code (e.g., WHOSIS_000015 for under-five mortality) with mode: "top" and topN: 20 to get the 20 countries with the highest rates. For a full mortality profile, use preset: "mortality_overview" which combines life expectancy, healthy life expectancy, adult mortality, and probability of dying 30-70.
How to build a WHO health dataset for research
Use mode: "dataset" with a country group and time range. Example: indicator: "WHOSIS_000001", mode: "dataset", countryGroup: "OECD", lastNYears: 20. Returns a country x year panel matrix ready for regression — no reshaping required. Includes distribution analytics (mean, stdDev, IQR, skew) and a comparability score so you know whether the data is suitable for cross-country analysis.
How to build a composite health index
Use mode: "scorecard" with comma-separated indicators or a preset. Example: preset: "country_health_snapshot", mode: "scorecard", countryGroup: "G20", weights: [0.4, 0.2, 0.2, 0.2]. Returns a 0-100 composite score per country with per-indicator breakdown. Negative indicators (mortality, obesity) are auto-inverted so lower values produce higher scores.
Common WHO API queries this tool solves
- How to get WHO life expectancy data by country and year
- How to compare health indicators across G7, G20, OECD, or BRICS countries
- How to calculate CAGR and growth trends from WHO health indicators
- How to build a panel dataset from WHO GHO data for regression analysis
- How to benchmark a country against its peer group on health outcomes
- How to create a composite health index from multiple WHO indicators
- How to understand WHO GHO API endpoint URLs and indicator codes
- How to get WHO dimension values (countries, regions, sex categories)
Troubleshooting
No data found with current filters. The indicator may not have data for your selected countries or year range. Run with mode: "list" first to verify the indicator exists, then try without country or year filters.
"Unknown country group" error. Valid groups are: EU, G7, G20, BRICS, OECD, NORDIC, ASEAN (case-insensitive).
"Invalid country code" error. Country codes must be exactly 3 letters in ISO 3166-1 alpha-3 format (e.g., USA not US, GBR not UK).
Fewer results than expected in trend mode. Trend mode filters to "Both sexes" only and requires at least 2 years of data per country. Countries with one data point are excluded.
Run stopped after 5 failures. The circuit breaker activated because the WHO API returned 5 consecutive errors. This typically happens during WHO API maintenance. Try again later.
FAQ
How do I search WHO Global Health Observatory data? Provide an indicator code (e.g., WHOSIS_000001) or keyword (e.g., "mortality"), set optional country and year filters, choose an analysis mode, and run WHO Global Health Observatory Data Search. Results appear as structured JSON in the dataset.
What is the WHO GHO OData API at ghoapi.azureedge.net? The WHO Global Health Observatory OData API at https://ghoapi.azureedge.net/api is the official programmatic interface to WHO health statistics. It uses OData v4 query syntax and serves 2,000+ indicators across 194 countries. WHO Global Health Observatory Data Search wraps this API, handles pagination, and adds analytics.
What WHO health indicators are available? The GHO contains 2,000+ indicators covering life expectancy, mortality rates, immunization coverage, disease prevalence (HIV, TB, malaria), health system financing, nutrition, environmental health, and substance use. Use mode: "list" with a keyword to browse by topic.
Can I use WHO Global Health Observatory Data Search for academic research? WHO GHO data is publicly available and widely cited in peer-reviewed research. WHO Global Health Observatory Data Search outputs structured JSON with indicator codes and data sources for proper WHO citation. Each record includes the original indicatorCode for reference.
How does WHO Global Health Observatory Data Search handle missing data? The dataCompleteness field scores each record from 0 to 1, indicating the proportion of 13 key fields that are populated. Records with null numericValue are included in search mode but excluded from ranking and trend calculations.
What is the difference between search mode and compare mode? Search mode returns individual data rows with computed fields (YoY change, completeness, ranking). Compare mode aggregates data per country and returns one row per country with the latest value, trend direction, min/max/average, and ranking — designed for side-by-side country comparison tables.
Can I get WHO health data in Chart.js format? Set outputFormat: "chart" and WHO Global Health Observatory Data Search returns JSON with labels (years as strings) and datasets (one object per country with a data array). Pass this directly to new Chart() or Plotly without transformation.
How do I compare BRICS countries on health indicators? Set countryGroup: "BRICS" to expand to Brazil, Russia, India, China, South Africa, Egypt, Ethiopia, Iran, and UAE. Use mode: "compare" for a ranked table or mode: "trend" for CAGR and growth rates over time.
What does the CAGR field mean in trend mode? CAGR (Compound Annual Growth Rate) is the smoothed annual rate of change over the entire time series. Calculated as (endValue / startValue)^(1/years) - 1 and expressed as a percentage. A CAGR of 0.5% for life expectancy means life expectancy grew at 0.5% per year on average.
What do the z-score and percentile fields mean? The z-score shows how many standard deviations a country's value is from the global mean. A z-score of +2.3 for Japan's life expectancy means Japan is 2.3 standard deviations above average — a statistical outlier. The percentile shows the country's ranking as a percentage: a percentile of 95 means the country scores higher than 95% of all countries in the result set. Both are computed per indicator across all countries returned.
What do the uncertainty fields mean? WHO data includes confidence intervals (low/high bounds) for many indicators. The ciWidth is the width of that interval (high minus low). The uncertaintyScore expresses that width as a percentage of the value — a score of 45 means the confidence interval is 45% as wide as the value itself. Records with uncertaintyFlag: "high-uncertainty" (>50%) should be interpreted with caution, especially in academic publications.
What are presets and how do I use them? Presets are one-click analysis configurations that auto-select the right indicators for common health analyses. Set preset: "country_health_snapshot" with a country group like G7 to instantly compare life expectancy, neonatal mortality, obesity, and immunization across 7 countries. Available presets: country_health_snapshot, maternal_child_health, infectious_disease, health_system, mortality_overview. Presets override the indicator field and default to an appropriate analysis mode.
What is the executive summary? After each run, WHO Global Health Observatory Data Search saves an executive summary to the key-value store under the SUMMARY key. It includes: headline finding, leader and laggard countries, statistical outliers (countries >2 standard deviations from mean), overall trend direction, completeness caveats, uncertainty warnings, and an array of key findings. Access it via the Apify API or console. Example: "headline": "Life expectancy across 7 countries — Japan leads at 84.5".
What is the difference between ghoapi.azureedge.net and the WHO GHO website? ghoapi.azureedge.net is the OData API endpoint for programmatic access. The WHO GHO website (gho.who.int) provides the same data through a visual interface with built-in charts. WHO Global Health Observatory Data Search queries the API and adds trend analytics not available through either interface.
Is it legal to use WHO GHO data? WHO GHO data is public data published by the World Health Organization for research, policy, and educational use. WHO Global Health Observatory Data Search accesses only publicly available API endpoints without authentication. Users should comply with WHO's terms of use and cite data appropriately. Legality of specific uses depends on jurisdiction — consult legal counsel for commercial applications.
Can I track health indicator changes over time automatically? Use Apify's scheduler to run WHO Global Health Observatory Data Search weekly or monthly with the same indicator and country filters. Connect to Google Sheets or a webhook to compare results across runs and detect changes.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.
Responsible use
- WHO Global Health Observatory Data Search accesses publicly available health statistics from the WHO GHO OData API (
ghoapi.azureedge.net). It does not bypass authentication, CAPTCHAs, or access restricted content. - Users are responsible for ensuring their use complies with WHO's terms of use and applicable data protection regulations in their jurisdiction.
- Cite data appropriately using the
indicatorCodeandindicatorNamefields. Data originates from the World Health Organization Global Health Observatory. - Do not present lagged data as current-year statistics without noting the reporting year.
- For guidance on web scraping legality, see Apify's guide.
Recent updates
- 5 analysis modes — Added trend, compare, and top modes alongside search and list
- Country group presets — Added EU, G7, G20, BRICS, OECD, Nordic, ASEAN one-click comparisons
- Trend analytics — Added CAGR, total change percentage, and trend classification per country
- Chart-ready output — Added Chart.js/Plotly-compatible JSON format with labels and datasets arrays
- Year-over-year change — Added YoY percentage change computation on every record
- Data completeness scoring — Added per-record quality score based on populated fields
- Circuit breaker — Added automatic stop after 5 consecutive API failures