WHO Global Health Observatory Data Search
Pricing
from $2.00 / 1,000 indicator fetcheds
WHO Global Health Observatory Data Search
Search WHO Global Health Observatory for 2,000+ health indicators across 194 countries. Get life expectancy, mortality, disease, immunization, and health system data with country and year filtering. Free WHO OData API.
Pricing
from $2.00 / 1,000 indicator fetcheds
Rating
0.0
(0)
Developer

ryan clinton
Actor stats
0
Bookmarked
2
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
WHO Global Health Observatory Search
Search the World Health Organization's Global Health Observatory for health statistics across 194 member countries. This Apify actor queries the official WHO GHO OData API to retrieve structured data on over 2,000 health indicators -- including life expectancy, mortality rates, disease prevalence, immunization coverage, nutrition, environmental health, and health system capacity. Search by indicator code or keyword, filter by country and year range, and receive clean JSON output with confidence intervals, sex breakdowns, and age group stratification ready for research, analysis, or integration into public health workflows.
Why use WHO Global Health Observatory Search?
Accessing the WHO GHO OData API directly requires understanding OData query syntax, constructing complex $filter expressions, handling paginated responses with @odata.nextLink, resolving cryptic indicator codes to human-readable names, and mapping dimension codes like SEX_BTSX, SEX_MLE, and SEX_FMLE to meaningful labels. This actor handles all of that complexity for you. Provide an indicator keyword or code, optionally filter by country and year, click Start (or call the API), and receive clean, structured JSON with every field normalized and ready for analysis. No OData expertise, no code to write, no infrastructure to maintain.
Running on Apify's cloud platform gives you scheduled runs for continuous health data monitoring, built-in dataset storage with export to JSON, CSV, and Excel, and one-click integrations with Google Sheets, Slack, Zapier, Make, and hundreds of other services. For public health researchers, this means automated weekly or monthly extraction of disease surveillance data. For journalists covering global health, it means bulk data retrieval that would take hours through the WHO's web interface completed in under a minute. For NGOs and policy analysts, it means programmatic access to the same authoritative statistics used by governments and international organizations worldwide.
Key features
- 2,000+ health indicators -- Access the full breadth of WHO health data including life expectancy, child mortality, maternal health, HIV/AIDS, tuberculosis, malaria, immunization coverage, nutrition, water and sanitation, air quality, health workforce, and universal health coverage metrics
- Smart indicator resolution -- Enter a keyword like "mortality" or "immunization" and the actor automatically searches the indicator catalog using OData
contains()filtering, or enter an exact code likeWHOSIS_000001for precise lookup - 194 WHO member countries -- Retrieve data for any country using ISO 3-letter codes (USA, GBR, JPN, BRA, IND, CHN) with automatic resolution to full country names via the COUNTRY dimension endpoint
- Year range filtering -- Narrow results to a specific time period using yearFrom and yearTo parameters, powered by OData
geandleoperators on the TimeDim field - Confidence intervals -- Output includes
lowandhighbounds when the WHO provides uncertainty estimates, enabling proper statistical interpretation of health metrics - Sex and age breakdowns -- Results include human-readable sex labels (Male, Female, Both sexes) mapped from WHO dimension codes, plus age group stratification when available across Dim1, Dim2, and Dim3 fields
- Multi-indicator support -- Keyword searches matching multiple indicators return data from up to 10 matching indicators in a single run, with maxResults distributed across them
- Automatic pagination -- Handles large datasets by following OData
@odata.nextLinkpagination, fetching up to your specified maximum of 10,000 results - WHO region labels -- Each record includes the WHO regional classification (e.g., Western Pacific, South-East Asia, European) for geographic grouping and analysis
- No API key required -- The WHO GHO OData API is free and open, requiring no authentication or registration
- Country-level filtering -- Automatically applies
SpatialDimType eq 'COUNTRY'to skip regional aggregates and return only country-level data points - Newest data first -- Results are sorted by
TimeDim descso the most recent data appears at the top of your dataset
How to use
Using Apify Console
- Navigate to the WHO Global Health Observatory Search actor page on the Apify Store and click Try for free.
- On the Input tab, enter an indicator code or keyword in the Indicator field. For example:
WHOSIS_000001-- Life expectancy at birthmortality-- All mortality-related indicatorsimmunization-- Vaccination coverage indicatorstuberculosis-- TB incidence and treatment dataNUTRITION_WH_2-- Childhood wasting prevalence
- Optionally enter a Country Code (ISO 3-letter, such as
USA,GBR,JPN,DEU,IND,BRA) to limit results to one country. - Optionally set Year From and Year To to restrict the time range (e.g., 2015 to 2023 for SDG-era data).
- Adjust Max Results if you need more or fewer records (default is 100, maximum is 10,000).
- Click Start to run the actor.
- Once the run finishes, open the Dataset tab to view, filter, and export results as JSON, CSV, or Excel.
Using the API
Call the actor programmatically using the Apify REST API, official client libraries, or cURL:
cURL:
curl "https://api.apify.com/v2/acts/jgahofLKxi6FAycgA/runs" \-X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"indicator": "WHOSIS_000001","country": "JPN","yearFrom": 2015,"yearTo": 2023,"maxResults": 100}'
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
indicator | String | Yes | WHOSIS_000001 | WHO indicator code (e.g., WHOSIS_000001 for life expectancy) or keyword to search indicators (e.g., mortality, immunization, malaria, nutrition). If the input is all uppercase with underscores/digits, it is verified as an exact code first; otherwise it performs a keyword search. |
country | String | No | -- | ISO 3-letter country code to filter results (e.g., USA, GBR, JPN, DEU, IND, BRA, CHN). Leave empty for all countries. |
yearFrom | Integer | No | -- | Start year for filtering results (e.g., 2010). Uses OData TimeDim ge filter. |
yearTo | Integer | No | -- | End year for filtering results (e.g., 2023). Uses OData TimeDim le filter. |
maxResults | Integer | No | 100 | Maximum number of results to return. Range: 1 to 10,000. For keyword searches matching multiple indicators, results are distributed across up to 10 indicators. |
Example inputs
Life expectancy in Japan (2015--2023):
{"indicator": "WHOSIS_000001","country": "JPN","yearFrom": 2015,"yearTo": 2023,"maxResults": 100}
Search all mortality indicators globally:
{"indicator": "mortality","maxResults": 500}
Immunization coverage in India:
{"indicator": "immunization","country": "IND","maxResults": 200}
Tips
- Use keywords for exploration. If you do not know the exact indicator code, search for broad terms like "mortality", "immunization", "malaria", "nutrition", or "tuberculosis" to discover available indicators.
- Use exact codes for precision. Once you know which indicator you need, use the official code (e.g.,
WHOSIS_000001) for faster, more targeted results. - Country codes are ISO 3166-1 alpha-3. Common examples:
USA(United States),GBR(United Kingdom),DEU(Germany),FRA(France),JPN(Japan),CHN(China),IND(India),BRA(Brazil),AUS(Australia),CAN(Canada),NGA(Nigeria),ZAF(South Africa). - Set year ranges for focused results. Many indicators have decades of historical data. Narrow to a specific period to reduce result size and focus on the data you need.
- Increase maxResults for global datasets. The default of 100 is sufficient for single-country queries but may truncate multi-country, multi-year datasets.
Output
Each result in the dataset contains the following structure:
{"indicatorCode": "WHOSIS_000001","indicatorName": "Life expectancy at birth (years)","country": "JPN","countryName": "Japan","year": 2021,"value": "84.8","numericValue": 84.8,"low": null,"high": null,"sex": "Both sexes","ageGroup": null,"region": "Western Pacific","worldBankIncomeGroup": null}
Example with sex breakdown and confidence intervals (infant mortality):
[{"indicatorCode": "MDG_0000000001","indicatorName": "Infant mortality rate (probability of dying between birth and age 1 per 1000 live births)","country": "BRA","countryName": "Brazil","year": 2021,"value": "13.0 [10.8-15.6]","numericValue": 13.0,"low": 10.8,"high": 15.6,"sex": "Both sexes","ageGroup": null,"region": "Americas","worldBankIncomeGroup": null},{"indicatorCode": "MDG_0000000001","indicatorName": "Infant mortality rate (probability of dying between birth and age 1 per 1000 live births)","country": "BRA","countryName": "Brazil","year": 2021,"value": "14.2 [11.8-17.1]","numericValue": 14.2,"low": 11.8,"high": 17.1,"sex": "Male","ageGroup": null,"region": "Americas","worldBankIncomeGroup": null},{"indicatorCode": "MDG_0000000001","indicatorName": "Infant mortality rate (probability of dying between birth and age 1 per 1000 live births)","country": "BRA","countryName": "Brazil","year": 2021,"value": "11.7 [9.7-14.1]","numericValue": 11.7,"low": 9.7,"high": 14.1,"sex": "Female","ageGroup": null,"region": "Americas","worldBankIncomeGroup": null}]
Output fields
| Field | Type | Description |
|---|---|---|
indicatorCode | String | Official WHO GHO indicator code (e.g., WHOSIS_000001, MDG_0000000001). Use this code in future runs for exact indicator lookup. |
indicatorName | String | Human-readable indicator name as defined in the WHO GHO indicator catalog. |
country | String | ISO 3166-1 alpha-3 country code (e.g., JPN, USA, BRA). |
countryName | String | Full country name resolved from the WHO COUNTRY dimension endpoint. |
year | Number or null | Year of the data point (TimeDim from the GHO API). Sorted newest first. |
value | String | The reported value as a string, preserving original WHO formatting (may include ranges like "13.0 [10.8-15.6]"). |
numericValue | Number or null | Numeric representation of the value when available. Use this for calculations and charting. |
low | Number or null | Lower bound of the confidence interval. Null if the WHO does not provide uncertainty estimates for this indicator. |
high | Number or null | Upper bound of the confidence interval. Null if the WHO does not provide uncertainty estimates for this indicator. |
sex | String or null | Sex dimension label: "Both sexes", "Male", or "Female". Mapped from WHO codes SEX_BTSX, SEX_MLE, SEX_FMLE. Null if the indicator is not sex-disaggregated. |
ageGroup | String or null | Age group dimension extracted from the record's Dim1, Dim2, or Dim3 fields when the dimension type is AGEGROUP. Null if the indicator is not age-stratified. |
region | String or null | WHO regional classification (e.g., "Western Pacific", "Americas", "South-East Asia", "European", "African", "Eastern Mediterranean"). |
worldBankIncomeGroup | String or null | World Bank income group classification. Reserved for future enrichment. |
Use cases
- Public health research -- Extract longitudinal health data for epidemiological studies, comparative health analyses, and evidence-based policy research across countries and time periods
- Disease surveillance -- Monitor trends in disease incidence (HIV, TB, malaria, NTDs) and vaccination coverage rates to track progress toward global health targets
- SDG monitoring -- Track Sustainable Development Goal health indicators (Goal 3: Good Health and Well-being) including maternal mortality, child mortality, infectious disease rates, and universal health coverage
- Health equity analysis -- Compare health outcomes across countries, regions, and income groups to identify disparities and measure progress toward equity
- Journalism and reporting -- Access authoritative WHO statistics for data-driven reporting on global health topics, pandemic impacts, and country comparisons
- NGO program evaluation -- Benchmark health outcomes in target countries against regional and global averages to measure program effectiveness
- Academic publications -- Source verified WHO data for use in peer-reviewed research papers, dissertations, and systematic reviews
- Investment and development analysis -- Assess health system capacity and disease burden in countries for development finance, impact investing, and risk assessment
- Data visualization -- Feed structured health data into dashboards, charts, and interactive visualizations using tools like Tableau, Power BI, or D3.js
- Cross-dataset correlation -- Combine WHO health data with economic indicators (World Bank, IMF), environmental data, or demographic statistics for multidimensional analysis
API & Integration
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run_input = {"indicator": "WHOSIS_000001","country": "JPN","yearFrom": 2015,"yearTo": 2023,"maxResults": 100,}run = client.actor("jgahofLKxi6FAycgA").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():sex = item.get("sex", "N/A")value = item.get("numericValue", "N/A")print(f"{item['countryName']} ({item['year']}) -- {item['indicatorName']}: {value} [{sex}]")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("jgahofLKxi6FAycgA").call({indicator: "WHOSIS_000001",country: "JPN",yearFrom: 2015,yearTo: 2023,maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {const sex = item.sex || "N/A";const value = item.numericValue ?? "N/A";console.log(`${item.countryName} (${item.year}) -- ${item.indicatorName}: ${value} [${sex}]`);}
cURL
# Start a runcurl "https://api.apify.com/v2/acts/jgahofLKxi6FAycgA/runs" \-X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"indicator": "mortality", "country": "USA", "yearFrom": 2015, "maxResults": 200}'# Fetch dataset results (use defaultDatasetId from the run response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \-H "Authorization: Bearer YOUR_API_TOKEN"
Integrations
Connect WHO Global Health Observatory Search to your existing tools and workflows:
- Google Sheets -- Automatically export health statistics to a spreadsheet for team analysis and reporting
- Slack / Email -- Get notified when new health data matching your criteria becomes available using Apify webhooks
- Zapier / Make -- Route data to databases, dashboards, CRMs, or hundreds of other third-party apps
- REST API -- Fetch results programmatically from any language or platform using the Apify dataset API
- Scheduled runs -- Set up Apify schedules to run weekly or monthly data extractions automatically
- Webhooks -- Trigger downstream actions (database writes, dashboard refreshes, alerts) whenever a run completes
How it works
The actor follows a multi-step pipeline to retrieve and enrich health data from the WHO GHO OData API:
- Indicator resolution -- Examines the input string. If it matches the pattern of an indicator code (uppercase letters, digits, and underscores), verifies it via an exact match query against the
/Indicatorendpoint. Otherwise, performs a keyword search using the ODatacontains(IndicatorName, ...)filter. Falls back from lowercase to original case if the first search yields no results. - Multi-indicator handling -- If a keyword search matches more than 10 indicators, the actor limits to the first 10 and distributes the maxResults quota across them to provide a representative sample.
- Country dimension loading -- Fetches all values from the
/DIMENSION/COUNTRY/DimensionValuesendpoint with full pagination to build a code-to-name mapping (e.g.,JPNto "Japan",BRAto "Brazil"). - Data query construction -- Builds an OData
$filterstring combiningSpatialDimType eq 'COUNTRY'(to exclude regional aggregates), optional country filter (SpatialDim eq), and optional year range (TimeDim ge/TimeDim le). Applies$orderby=TimeDim descand$topfor pagination control. - Paginated data fetching -- Fetches data records for each indicator, following
@odata.nextLinkURLs until the per-indicator allocation or maxResults cap is reached. - Data transformation -- Maps raw GHO records to clean output format: resolves country codes to names, translates sex dimension codes (
SEX_BTSX,SEX_MLE,SEX_FMLE) to labels, extracts age group from whichever dimension (Dim1, Dim2, Dim3) has typeAGEGROUP, and preserves confidence intervals fromLowandHighfields. - Dataset push -- Pushes transformed records to the Apify dataset for export and integration.
Input (indicator keyword/code + filters)|v[Resolve Indicator] ---> Exact code match OR keyword search via OData contains()|v[Load Country Map] ---> Paginated fetch of COUNTRY dimension values|v[Build OData Filter] ---> SpatialDimType + country + year range|v[Fetch Data per Indicator] ---> Paginated with $top and @odata.nextLink|v[Transform Records] ---> Country names, sex labels, age groups, confidence intervals|v[Push to Apify Dataset] ---> JSON, CSV, Excel export
Performance & cost
| Scenario | Results | Approx. duration | Memory | Estimated cost |
|---|---|---|---|---|
| Single indicator, single country | 10--50 | 5--15 seconds | 256 MB | < $0.001 |
| Single indicator, all countries | 100 | 10--20 seconds | 256 MB | ~$0.002 |
| Keyword search, single country | 100--200 | 15--30 seconds | 256 MB | ~$0.003 |
| Keyword search, all countries | 500 | 30--60 seconds | 256 MB | ~$0.005 |
| Large global dataset | 1,000--5,000 | 1--3 minutes | 256 MB | ~$0.010 |
| Maximum extraction | 10,000 | 3--8 minutes | 256 MB | ~$0.020 |
- The actor makes lightweight JSON API calls to the WHO GHO OData endpoint -- no browser rendering or web scraping overhead.
- The WHO GHO API is free and does not require an API key, so there are no external API costs.
- Apify's free tier includes $5/month of platform credits, which covers hundreds of typical runs.
- Cost scales primarily with the number of paginated API requests and the volume of records processed.
- Scheduled runs for weekly monitoring of specific indicators are very economical.
Limitations
- Country-level data only -- The actor filters to
SpatialDimType eq 'COUNTRY', excluding sub-national, regional aggregate, and global aggregate records. This ensures clean country-level data but means you cannot retrieve WHO regional or global summaries through this actor. - 10-indicator cap for keyword searches -- When a keyword matches more than 10 indicators, only the first 10 are fetched. Use a more specific keyword or exact indicator code if you need data from a specific indicator that falls outside the top 10 matches.
- 10,000 result maximum -- Each run caps at 10,000 output records. For larger extractions, run multiple searches with different country or year filters.
- WHO API availability -- Results depend on the WHO GHO OData API being accessible. The API occasionally experiences slowdowns, which may increase run duration. Sustained outages will cause the run to fail.
- Data currency -- The WHO updates GHO data periodically, but most indicators lag 1--3 years behind the current date due to country reporting timelines. The most recent data point for many indicators may be from 2021 or 2022.
- World Bank income group -- The
worldBankIncomeGroupoutput field is reserved for future enrichment and currently returns null for all records. - Indicator name language -- Indicator names are returned in English only, as provided by the WHO GHO API.
- OData case sensitivity -- Keyword searches use OData
contains()which may be case-sensitive depending on the WHO API's current configuration. The actor tries lowercase first and falls back to original case.
Responsible use
The WHO Global Health Observatory provides authoritative health statistics compiled from national health ministries, surveillance systems, and international reporting mechanisms. When using this data:
- Cite the source appropriately. Data originates from the World Health Organization Global Health Observatory. Use the
indicatorCodeandindicatorNamefields to reference specific indicators in publications and reports. - Understand confidence intervals. When
lowandhighfields are populated, they represent the WHO's uncertainty estimates. Report the full range rather than point estimates alone, especially for indicators with wide confidence intervals. - Account for data gaps. Not all countries report all indicators for all years. Missing data does not necessarily mean zero -- it may indicate a gap in national reporting. Check the WHO GHO metadata for indicator-specific notes on data quality and methodology.
- Avoid over-interpretation. Comparisons between countries should account for differences in data collection methodology, reporting completeness, and health system definitions. The WHO provides methodological notes for each indicator that should be consulted for rigorous analysis.
- Respect data update cycles. Health data is inherently lagged. Do not present data from prior years as current-year statistics without noting the reporting year.
FAQ
What indicators are available?
The WHO GHO provides over 2,000 health indicators. Major categories include: life expectancy, mortality (infant, child, maternal, adult), disease incidence and prevalence (HIV, tuberculosis, malaria, neglected tropical diseases), immunization coverage, nutrition (stunting, wasting, overweight), environmental health (air quality, water and sanitation), health workforce, health expenditure, and universal health coverage. Search by keyword to explore the full catalog, or browse the WHO indicator list at https://ghoapi.azureedge.net/api/Indicator.
Do I need an API key? No. The WHO GHO OData API is free, open, and does not require authentication. The actor queries the API on your behalf without any credentials.
What country codes should I use?
Use ISO 3166-1 alpha-3 codes (three letters): USA, GBR, FRA, DEU, JPN, CHN, IND, BRA, AUS, CAN, NGA, ZAF, KEN, MEX, RUS, etc. Leave the field empty to retrieve data for all 194 WHO member countries.
How current is the data? The WHO updates the GHO database periodically. Most indicators have data up to 1--3 years before the current year, depending on country reporting timelines and indicator methodology. Each run fetches live data from the API, so results reflect the latest available information.
What is the difference between value and numericValue?
The value field preserves the original string from the WHO API, which may include formatted ranges like "13.0 [10.8-15.6]" or text values. The numericValue field contains only the numeric portion suitable for calculations, charting, and analysis. Use numericValue for data processing and value when you need the full WHO-formatted string.
What do the low and high fields represent?
These are the lower and upper bounds of the confidence interval (uncertainty range) provided by the WHO for many statistical estimates. When both are null, the indicator does not include uncertainty estimates for that data point.
What happens if my keyword matches many indicators?
The actor limits to the first 10 matching indicators and distributes the maxResults allocation across them. Use a more specific keyword or exact indicator code for focused results. The actor logs which indicators were matched and fetched.
Can I schedule automatic runs? Yes. Use Apify's built-in scheduler to run this actor daily, weekly, or monthly to track changes in health indicators over time. Combine with webhooks or integrations to trigger downstream processing when new data is available.
Why are some records missing the sex or ageGroup field?
Not all indicators are disaggregated by sex or age. When an indicator reports aggregate data without demographic breakdowns, the sex and ageGroup fields will be null.
What does the region field contain?
The WHO assigns each country to one of six regional groupings: African, Americas, Eastern Mediterranean, European, South-East Asia, and Western Pacific. This field reflects the ParentLocation value from the GHO API.
Related actors
| Actor | Description | Link |
|---|---|---|
| Clinical Trial Tracker | Search ClinicalTrials.gov for clinical studies and trial data. Pair with WHO health statistics to connect population-level health data with clinical research activity. | apify.com/ryanclinton/clinical-trial-tracker |
| World Bank Development Indicators | Access World Bank economic and development indicators. Cross-reference health outcomes with GDP, poverty rates, education spending, and other socioeconomic factors. | apify.com/ryanclinton/world-bank-indicators |
| OpenAlex Research Paper Search | Find academic research papers on health topics. Combine population-level WHO data with the latest peer-reviewed research for evidence-based analysis. | apify.com/ryanclinton/openalex-research-papers |
| PubMed Biomedical Literature Search | Search the PubMed database for biomedical and life sciences literature. Source primary research to contextualize WHO health statistics. | apify.com/ryanclinton/pubmed-research-search |
| Open Food Facts | Search the Open Food Facts database for nutritional information on food products. Complement WHO nutrition indicators with product-level dietary data. | apify.com/ryanclinton/open-food-facts |