# World Bank Data Scraper - Economic Indicators (`scrapesage/world-bank-data-scraper`) Actor

Pull World Bank Open Data economic indicators for any country and year range - GDP, inflation, population, unemployment and 20,000+ more - as clean one-row-per-observation data with indicator and country metadata. Or list the full indicator catalog. No API key, no browser.

- **URL**: https://apify.com/scrapesage/world-bank-data-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Other, Agents, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 record collecteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## World Bank Data Scraper - Economic Indicators

Pull **World Bank Open Data** economic indicators for any country and year range - **GDP, inflation,
population, unemployment, CO2, life expectancy** and **20,000+ more** - as clean, one-row-per-observation
data with full indicator and country metadata. Or switch to catalog mode and list every indicator to
discover codes. Built on the official API - no key, no browser, no proxy.

### What you get

**Data mode** - one row per country-year observation:

| Field | Meaning |
|---|---|
| `indicatorId` / `indicatorName` | The indicator code and its name |
| `countryId` / `countryName` / `countryIso3` | The country (or aggregate, e.g. EU, World) |
| `year` / `value` | The year and the reported value |
| `unit` / `obsStatus` / `decimal` | Unit, observation status and precision where given |

**Catalog mode** (`mode: indicators`) - one row per indicator: `indicatorId`, `indicatorName`,
`sourceName`, `sourceNote`, `sourceOrganization`, `topics`.

### Input

```json
{ "indicators": ["NY.GDP.MKTP.CD", "FP.CPI.TOTL.ZG"], "countries": ["US", "CN", "DE"], "dateRange": "2015:2023" }
```

- **Indicator codes** - one per line, e.g. `NY.GDP.MKTP.CD` (GDP), `SP.POP.TOTL` (population). Run
  **Mode = List indicators** to discover the full catalog.
- **Countries** - 2- or 3-letter ISO codes, or aggregates like `EUU`, `WLD`. Empty = all countries.
- **Year range** - `2023` or `2010:2023`. Empty = all years.
- **Include empty values** - keep years a country did not report (off by default, so you only pay for
  real data points). **Import from a file** and **output fields** work as on our other actors.

Leave everything empty and the run returns a small free sample (GDP for US/CN/DE, 2020-2023).

### Reliability

Reads the official [World Bank v2 API](https://datahelpdesk.worldbank.org/knowledgebase/articles/889392)

- keyless, no anti-bot, page-2 data shape handled, deep-paginated across every matching observation. An
  unrecognized indicator code, an empty result or a failed request bills **$0** and says what to fix.

### Honest limits

- **Coverage follows the World Bank's own data** - not every country reports every indicator every year.
  Missing years are skipped by default (turn on **Include empty values** to keep them as nulls).
- **`unit` is often blank** because most World Bank series encode the unit in the indicator name
  (e.g. "GDP (current US$)") rather than a separate field - that is the source's shape.
- **Values are the latest World Bank revision** at run time; historical figures are periodically restated
  by the World Bank, so a value can change between runs.

### Pricing

**$0.0006 per record** on the FREE tier (tiered pricing lowers it with volume) - priced for bulk, since
one indicator across many countries and years yields thousands of rows. Only saved rows are billed.

### Output views

- **Observations** - indicator, country, year, value, indicator ID, ISO3.

### Use with AI assistants (MCP)

Available through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) - an agent
can pull a country's macro indicators for a briefing, build a cross-country GDP/inflation panel, or
discover indicator codes from the catalog in one call.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** - AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** - an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) - no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** - agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

# Actor input Schema

## `mode` (type: `string`):

Fetch indicator data, or list the full indicator catalog to discover codes.

## `indicators` (type: `array`):

World Bank indicator codes, one per line - e.g. <code>NY.GDP.MKTP.CD</code> (GDP), <code>FP.CPI.TOTL.ZG</code> (inflation), <code>SP.POP.TOTL</code> (population), <code>SL.UEM.TOTL.ZS</code> (unemployment). Run <b>Mode = List indicators</b> to discover more. <b>Leave empty and the run returns a small free sample.</b>

## `countries` (type: `array`):

ISO country codes (2- or 3-letter), one per line - e.g. <code>US</code>, <code>CN</code>, <code>DE</code>, or aggregates like <code>EUU</code> (EU), <code>WLD</code> (World). Leave empty for all countries.

## `dateRange` (type: `string`):

A single year or a range, e.g. <code>2023</code> or <code>2010:2023</code>. Leave empty for all available years.

## `includeEmptyValues` (type: `boolean`):

Keep observations where the country did not report a value for that year (value is null). Off by default so you only pay for real data points.

## `indicatorsFromFile` (type: `string`):

Bulk-load indicator codes. Either <b>paste the whole list</b> (one per line), or give <b>a single link</b> to a public <code>.txt</code>/<code>.csv</code>, a Google Sheet/Drive link, or an Apify key-value-store record. A file that cannot be read says so and charges nothing.

## `maxItems` (type: `integer`):

Overall cap on saved rows. You are only charged for rows actually saved.

## `outputFields` (type: `array`):

Pick the fields you want and every record is trimmed to exactly those - handy for lean CSV/Sheets exports.

## Actor input object example

```json
{
  "mode": "data",
  "indicators": [
    "NY.GDP.MKTP.CD"
  ],
  "countries": [
    "US",
    "CN",
    "DE"
  ],
  "dateRange": "2015:2023",
  "includeEmptyValues": false,
  "maxItems": 50000
}
```

# Actor output Schema

## `results` (type: `string`):

Each record - a World Bank observation or indicator - as a JSON item in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "indicators": [
        "NY.GDP.MKTP.CD"
    ],
    "countries": [
        "US",
        "CN",
        "DE"
    ],
    "dateRange": "2015:2023",
    "indicatorsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/world-bank-data-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "indicators": ["NY.GDP.MKTP.CD"],
    "countries": [
        "US",
        "CN",
        "DE",
    ],
    "dateRange": "2015:2023",
    "indicatorsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/world-bank-data-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "indicators": [
    "NY.GDP.MKTP.CD"
  ],
  "countries": [
    "US",
    "CN",
    "DE"
  ],
  "dateRange": "2015:2023",
  "indicatorsFromFile": ""
}' |
apify call scrapesage/world-bank-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/world-bank-data-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7K4JLiMDkKLvZ9WkF/builds/0f7iIYJ0r6JVgBjJA/openapi.json
