World Bank Indicators — GDP, Inflation, Population & 16k More avatar

World Bank Indicators — GDP, Inflation, Population & 16k More

Pricing

from $0.35 / 1,000 result items

Go to Apify Store
World Bank Indicators — GDP, Inflation, Population & 16k More

World Bank Indicators — GDP, Inflation, Population & 16k More

World Bank macro data for any country: GDP, growth, inflation, population, unemployment, trade, FDI, debt, digital, climate — 16,000+ indicators, 217 economies + aggregates. Presets, latest-value ranking tables with YoY change, wide comparison tables, indicator search. No API key.

Pricing

from $0.35 / 1,000 result items

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Categories

Share

Country × indicator × year data straight from the World Bank Indicators API v2: GDP, GDP per capita, inflation, population, unemployment, trade, FDI, debt, interest rates, internet users, CO2, poverty… for any of 217 economies and 78 aggregates (World, EU, OECD, income groups, regions). Built for analysts, researchers and AI agents that need clean macro data with units, latest-value tables, YoY change and wide comparison tables. No API key, no proxy, no browser.

Use cases

  • Country due diligence — pull GDP, growth, inflation, debt, reserves and FX rate for a market before entering it (indicatorPreset: "finance").
  • Market sizing — population, urbanisation, internet users, GDP per capita PPP for a region (region: "ECS", incomeLevel: "UMC").
  • Country ranking tables — one row per country with latest value and YoY change (mode: "latest", countries: ["all"]).
  • Trade & export research — exports/imports % GDP, merchandise trade, tariffs, FDI for a set of partners as one wide table (indicatorPreset: "trade", wide: true).
  • ESG / climate screening — CO2 per capita, renewables share, PM2.5, forest area (indicatorPreset: "energyClimate").
  • Monthly macro monitoring — CPI, industrial production, exchange rates from the Global Economic Monitor (source: 15, frequency: "M").
  • Indicator discovery for agents — search the 1,500 WDI (or 29,500 total) indicators by text and topic, read definitions (mode: "indicators", mode: "indicatorMeta").

Input

FieldTypeDefaultAllowed values / notes
modestringdatadata time series · latest one row per country×indicator · indicators catalogue search · countries country metadata · sources database list · indicatorMeta definitions
countriesstring[]— (required for data/latest unless a filter is set)ISO2 (KZ), ISO3 (KAZ), English names (Kazakhstan), all (every economy; aggregates only with includeAggregates: true), aggregate codes (WLD, EUU, OED, HIC, ECS…). Case, accents, spaces and punctuation do not matter. An unknown value → warning + SUMMARY.errors with a "did you mean" (not a dataset row, not billed); the other countries are still read. No known value at all → the run stops with that message
indicatorsstring[]macro setAny World Bank indicator codes. Empty = indicatorPreset
indicatorPresetstringcustommacro, trade, demographics, finance, digital, energyClimate, social, business, custom (see Reference)
yearsinteger5Most recent N periods (API mrv), 1–60. Not used by mode: latest
startYear / endYearinteger—Explicit range (API date=start:end), overrides years/mrnev. With mode: latest: the latest value inside the range
mrnevinteger—N most recent non-empty values per country (skips missing years), overrides years. Not used by mode: latest (it always takes latest + previous non-empty value)
gapfillbooleanfalseWith years only: API fills missing years with last value
frequencystringYY, Q, M — sub-annual only for sources 15 (GEM, monthly) and 20/22/23 (quarterly debt)
sourceinteger2World Bank database id (2 = WDI). List with mode: "sources"
includeNullsbooleanfalseKeep rows with value: null
includeChangebooleanfalseAdd yoyChangePct, previousYear, previousValue per row (vs previous non-null period)
widebooleanfalseOne row per country × period, indicator codes as columns (saved after the last indicator is read)
fieldsstring[]— (all columns)Keep only these columns, in this order; id is always kept. Columns per mode: see Output. Case, spaces, _ and - do not matter; a name that is not a column of the mode is skipped and named in the status and SUMMARY.warnings; if none is a column, the run stops before any request with the list of valid columns
maxItemsinteger1000Cap on dataset rows (1–50,000); pagination is automatic and stops once the cap is reached
querystring—mode: indicators: text to match in code, name, definition
topicstring—mode: indicators: topic id 1–21 (see Reference)
searchAllSourcesbooleanfalsemode: indicators: search all ~29,500 indicators instead of only source
regionstring—EAS, ECS, LCN, MEA, NAC, SAS, SSF, NA (aggregates) — selects countries in data/latest modes when countries is empty or all; filters mode: countries
incomeLevelstring—HIC, UMC, LMC, LIC
lendingTypestring—IBD, IDX, IDB, LNX
includeAggregatesbooleanfalseInclude the aggregates (World, EU, regions, income and lending groups — region "Aggregates" in the World Bank country metadata) in countries: ["all"], mode: countries and region/income selections. Aggregate codes you list explicitly (WLD, EUU…) are always returned. Every data row has isAggregate.

Backward compatible: { "countries": [...], "indicators": [...], "years": N } works exactly as before.

mode, indicatorPreset, frequency, topic, region, incomeLevel and lendingType are fixed lists (values above and in Reference): Apify refuses any other value before the run starts, with the list of allowed values.

Reference

Indicator presets (all codes verified against the API in September 2026)

PresetCodes
macro (default)NY.GDP.MKTP.CD GDP US$ · NY.GDP.PCAP.CD GDP per capita · FP.CPI.TOTL.ZG CPI inflation % · SP.POP.TOTL population · SL.UEM.TOTL.ZS unemployment %
tradeNE.EXP.GNFS.ZS NE.IMP.GNFS.ZS NE.TRD.GNFS.ZS (% GDP) · TX.VAL.MRCH.CD.WT TM.VAL.MRCH.CD.WT merchandise US$ · BX.KLT.DINV.CD.WD FDI inflows · BN.CAB.XOKA.GD.ZS current account % GDP · TM.TAX.MRCH.WM.AR.ZS tariff %
demographicsSP.POP.TOTL SP.POP.GROW SP.URB.TOTL.IN.ZS SP.POP.65UP.TO.ZS SP.DYN.LE00.IN SP.DYN.TFRT.IN SM.POP.NETM SL.TLF.TOTL.IN
financeFR.INR.LEND FR.INR.RINR FM.LBL.BMNY.GD.ZS FS.AST.PRVT.GD.ZS FB.AST.NPER.ZS PA.NUS.FCRF FI.RES.TOTL.CD GC.DOD.TOTL.GD.ZS GC.TAX.TOTL.GD.ZS DT.DOD.DECT.CD
digitalIT.NET.USER.ZS IT.CEL.SETS.P2 IT.NET.BBND.P2 IT.NET.SECR.P6 TX.VAL.TECH.CD GB.XPD.RSDV.GD.ZS
energyClimateEG.USE.PCAP.KG.OE EG.ELC.ACCS.ZS EG.FEC.RNEW.ZS EG.ELC.RNEW.ZS EN.GHG.CO2.PC.CE.AR5 EN.GHG.CO2.MT.CE.AR5 EN.ATM.PM25.MC.M3 AG.LND.FRST.ZS
socialSE.PRM.ENRR SE.TER.ENRR SE.ADT.LITR.ZS SH.XPD.CHEX.GD.ZS SH.MED.PHYS.ZS SI.POV.DDAY SI.POV.GINI SI.DST.10TH.10
businessIC.BUS.NREG IC.BUS.NDNS.ZS LP.LPI.OVRL.XQ GC.TAX.TOTL.GD.ZS BX.KLT.DINV.WD.GD.ZS FS.AST.PRVT.GD.ZS IP.PAT.RESD VC.IHR.PSRC.P5

The built-in dictionary (src/lib.ts, ~110 codes) also carries a unit for each of these plus GDP PPP, GNI per capita, GDP deflator, sector value added, remittances, external debt ratios, military spending, reserves in months of imports, market cap, youth unemployment, labour participation, infant mortality, tourism, air passengers, container traffic, cereal production/yield, agricultural land, health spending per capita, hospital beds, national poverty line, women in parliament, R&D researchers, patents, journal articles, CPIA ratings. For any other code the unit is parsed from the indicator name ("… (% of GDP)" → % of GDP).

Archived codes that return no data (the actor warns): EN.ATM.CO2E.PC / EN.ATM.CO2E.KT (use EN.GHG.CO2.PC.CE.AR5 / EN.GHG.CO2.MT.CE.AR5), Doing Business IC.BUS.EASE.XQ, IC.REG.DURS, IC.REG.COST.PC.ZS, IC.TAX.TOTL.CP.ZS (discontinued 2021). Sparse series: FR.INR.LEND / FR.INR.RINR / FR.INR.DPST (IMF coverage, no KZ; DPST no US), SI.POV.*, SE.ADT.LITR.ZS, LP.LPI.OVRL.XQ (survey years only) — use mrnev for these.

Regions, income levels, lending types

RegionIncome levelLending type
EAS East Asia & PacificHIC High incomeIBD IBRD
ECS Europe & Central AsiaUMC Upper middle incomeIDX IDA
LCN Latin America & CaribbeanLMC Lower middle incomeIDB Blend
MEA Middle East, North Africa, Afghanistan & PakistanLIC Low incomeLNX Not classified
NAC North America
SAS South Asia
SSF Sub-Saharan Africa

Common aggregate codes (usable in countries)

WLD World · HIC UMC LMC LIC MIC LMY income groups · OED OECD · EUU European Union · EMU Euro area · ARB Arab World · EAS ECS LCN MEA NAC SAS SSF regions · ECA EAP LAC MNA SSA regions excl. high income · CEB Central Europe & Baltics · LDC least developed · HPC HIPC · SST small states · IDA IBD lending groups. All 78 aggregates: {"mode":"countries","region":"NA"}.

1 Agriculture & Rural Development · 2 Aid Effectiveness · 3 Economy & Growth · 4 Education · 5 Energy & Mining · 6 Environment · 7 Financial Sector · 8 Health · 9 Infrastructure · 10 Social Protection & Labor · 11 Poverty · 12 Private Sector · 13 Public Sector · 14 Science & Technology · 15 Social Development · 16 Urban Development · 17 Gender · 18 MDGs · 19 Climate Change · 20 External Debt · 21 Trade

Most useful sources (source)

idDatabaseFrequency
2World Development Indicators (default)annual
3Worldwide Governance Indicatorsannual
6International Debt Statisticsannual
14Gender Statisticsannual
15Global Economic Monitor (CPI, IP, FX, stock indices…)monthly / quarterly
16Health Nutrition and Population Statisticsannual
20 / 22 / 23Quarterly Public Sector Debt / External Debt (SDDS, GDDS)quarterly
27Global Economic Prospects (forecasts)annual
28Global Findexsurvey years
31CPIAannual
46Sustainable Development Goalsannual
66Logistics Performance Indexsurvey years
75ESG Dataannual

Full list of 71 databases: {"mode":"sources"}. Indicator codes differ per source — find them with {"mode":"indicators","source":15,"query":"cpi"}.

Examples

Default — macro snapshot of three countries, last 5 years (74 rows)

{ "countries": ["KZ", "US", "CN"] }

Central Asia trade table 2015–2025, one row per country × year (55 rows, 8 indicator columns)

{ "countries": ["KZ", "UZ", "KG", "TJ", "TM"], "indicatorPreset": "trade", "startYear": 2015, "endYear": 2025, "wide": true }

World ranking of GDP per capita with YoY change (~214 economies with data; add "includeAggregates": true for ~47 more rows of World/regional/income-group aggregates, flagged isAggregate: true)

{ "mode": "latest", "countries": ["all"], "indicators": ["NY.GDP.PCAP.CD"], "maxItems": 300 }

Upper-middle-income Europe & Central Asia — digital market sizing, latest non-empty values

{ "mode": "latest", "region": "ECS", "incomeLevel": "UMC", "indicatorPreset": "digital" }

Sparse series done right — poverty & Gini, 3 most recent available observations

{ "countries": ["KZ", "UZ", "IN", "BR"], "indicators": ["SI.POV.GINI", "SI.POV.DDAY"], "mrnev": 3 }

Monthly CPI from the Global Economic Monitor with month-over-month change

{ "countries": ["US", "KZ", "TR"], "indicators": ["CPTOTNSXN"], "source": 15, "frequency": "M", "years": 24, "includeChange": true }

Find indicators about inflation, read one definition

{ "mode": "indicators", "query": "inflation", "maxItems": 20 }
{ "mode": "indicatorMeta", "indicators": ["FP.CPI.TOTL.ZG", "NY.GDP.DEFL.KD.ZG"] }

Output

Data row (mode: data):

{
"id": "KAZ:NY.GDP.MKTP.CD:2025",
"country": "Kazakhstan",
"countryCode": "KAZ",
"countryIso2": "KZ",
"indicator": "NY.GDP.MKTP.CD",
"indicatorName": "GDP (current US$)",
"year": 2025,
"period": "2025",
"value": 306239209650.024,
"unit": "current US$",
"obsStatus": null,
"decimal": 0,
"source": "World Development Indicators",
"sourceId": "2",
"lastUpdated": "2026-07-13",
"fetchedAt": "2026-09-12T23:40:59.004Z",
"sourceUrl": "https://api.worldbank.org/v2/country/KAZ;USA;CHN/indicator/NY.GDP.MKTP.CD?format=json&mrv=5&source=2&per_page=1000&page=1"
}
FieldDescription
idISO3:indicator:period (stable)
country, countryCode, countryIso2Name, ISO3, ISO2
isAggregatetrue for World/regional/income-group/lending-group aggregates (region "Aggregates" in the World Bank country metadata) — filter on it instead of on names
indicator, indicatorNameCode and official name
year, periodYear (number) and raw period (2025, 2026M07, 2024Q3)
valueNumber or null (only with includeNulls)
unitFrom the built-in dictionary, else parsed from the name, else null
obsStatus, decimalAPI observation status (e.g. E estimate) and suggested decimals
source, sourceId, lastUpdatedDatabase name/id and its last update date
yoyChangePct, previousYear, previousValueWith includeChange — % change vs previous non-null period of the same series
fetchedAt, sourceUrlFetch time and the exact API URL

mode: latest rows: country, countryCode, countryIso2, indicator, indicatorName, unit, latestYear, latestPeriod, latestValue, previousYear, previousValue, yoyChangePct, source, isAggregate, fetchedAt, sourceUrl. wide: true rows: id (ISO3:period), country, countryCode, countryIso2, year, period, isAggregate, <indicator code>: value…, fetchedAt, sourceUrl. mode: indicators / indicatorMeta: indicator, indicatorName, unit, sourceId, source, topics, topicIds, sourceNote, sourceOrganization, inDictionary (+ dictionaryNote). mode: countries: countryCode, countryIso2, country, isAggregate, region, regionName, adminRegion, incomeLevel, incomeLevelName, lendingType, lendingTypeName, capitalCity, latitude, longitude. mode: sources: sourceId, code, name, lastUpdated, dataAvailability, metadataAvailability. Every row also has id, fetchedAt and sourceUrl. With fields, a row keeps id plus the listed columns in your order, e.g. "fields": ["country", "year", "value"] → { "id": …, "country": …, "year": …, "value": … }.

Problems are not dataset rows (every row is charged): the SUMMARY record in the key-value store lists errors ([{ "input": "FOO.BAR", "error": "World Bank API error 120 Invalid value: …" }], { "input": "Kazakstan", "error": "Unknown country \"Kazakstan\" (did you mean KAZ Kazakhstan?) …" }), errorCount, notFound (indicators with no data for the selection, unknown indicator codes in indicatorMeta), notFoundCount, indicatorsNotRead / indicatorsReadInPart (a stop at maxItems, at your spending limit or before the run timeout), warnings and the run counts (delivered, stoppedBy). The status message sums them up and each is logged as a warning. The run does not fail because of one bad code — only when nothing could be fetched at all.

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~world-bank-indicators/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"mode":"latest","countries":["KZ","UZ","KG"],"indicatorPreset":"macro"}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/world-bank-indicators').call({
countries: ['KZ', 'US', 'CN'], indicators: ['NY.GDP.MKTP.KD.ZG'], startYear: 2010, endYear: 2025, includeChange: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/world-bank-indicators").call(run_input={
"mode": "latest", "countries": ["all"], "indicators": ["SP.POP.TOTL"], "maxItems": 300})
items = client.dataset(run["defaultDatasetId"]).list_items().items

MCP: add https://mcp.apify.com to your agent (Claude, Cursor, custom) and call the yadroo/world-bank-indicators tool with the same JSON input — the input schema descriptions are written for agents.

Pricing

Pay-per-event: $0.001 per run start + $0.0005 per dataset item.

RunItemsCost
Default (3 countries × 5 indicators × 5 years)74≈ $0.038
Trade table, 5 countries × 11 years, wide55≈ $0.029
World ranking, 1 indicator, latest~214≈ $0.108
All countries × 5 indicators × 5 years~6,600≈ $3.30

Store discounts: Bronze −10 %, Silver −20 %, Gold and above −30 % on the row price; the start event is the same on every plan; platform usage is included. Unknown codes and indicators without data are never rows, so they cost nothing. Use wide/latest to get more information per row.

Your Maximum cost per run is respected: the run stops at it and ends with "Stopped at your spending limit: N rows delivered" (the indicators left unread are named in SUMMARY).

Limits & FAQ

  • Rate limits / politeness — one request per indicator (per 60-country batch, per 1,000-row page) with a 250 ms pause, up to 3 attempts with backoff on 429/5xx/timeouts (Retry-After honoured). The World Bank API is free and public; a typical run is 1–15 requests.
  • Freshness — WDI is refreshed a few times a year (the lastUpdated field tells you when); GEM (source 15) monthly. Data is not real time — for FX use our fx-rates actor, for yields us-treasury-yields.
  • Empty results — nulls are dropped by default, so a country with no data simply produces no rows; an indicator with no rows at all is listed in SUMMARY.notFound (free, not a dataset row). Use mrnev for sparse series, includeNulls: true to see the gaps.
  • Invalid codes — invalid indicator → the API error is logged and listed in SUMMARY.errors; unknown country → validated locally against the live country list (the API would silently drop it) and reported the same way with a "did you mean" (never swapped for another country). Neither costs anything.
  • years vs startYear vs mrnev — the API accepts only one; the actor picks range > mrnev > years and warns about the ignored ones. mode: latest takes the latest non-empty value of each series (with startYear/endYear: the latest inside that range) and warns when years or mrnev are set.
  • maxItems — counts final dataset rows. Rows are saved as they arrive (per API page in mode: data, per indicator in mode: latest or with includeChange), and reading stops once maxItems rows are saved — nothing is fetched ahead; the indicators left unread are named in the status and SUMMARY.indicatorsNotRead. wide tables need every indicator, so they are saved after the last one.
  • Run timeout — a run near its timeout stops starting new requests, saves what it has read and ends SUCCEEDED with "Stopped before the run timeout: N rows saved". A typical run takes seconds; all × 10 indicators × 60 years is ~170 requests (a few minutes).
  • Memory — 256 MB is enough; all × many indicators × 60 years can be tens of thousands of rows — raise maxItems and expect a longer run.
  • Licence — World Bank Open Data, CC BY 4.0; cite "World Bank, World Development Indicators".
  • Roadmap — per-capita/ratio calculators across two indicators, CAGR over the range, CSV-friendly column naming for wide.

Made by Yadroo. Pairs with fx-rates, us-treasury-yields, sec-company-financials, sec-edgar-filings, public-holidays, openalex-works and wikipedia-search.