# 🏦 Global Central-Bank Policy Rates (BIS) (`nexgendata/global-central-bank-policy-rates`) Actor

Global central-bank policy rates for 40+ countries from the BIS (WS\_CBPOL): current and historical policy rate by country and period. For macro funds, FX traders, rate dashboards.

- **URL**: https://apify.com/nexgendata/global-central-bank-policy-rates.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 policy rate records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## 🏦 Global Central-Bank Policy Rates (BIS)

Pull the **official policy interest rate** for 40+ countries and currency areas straight from the **Bank for International Settlements** (BIS) `WS_CBPOL` dataset — the single most authoritative, internationally-consistent source for "what is each central bank's headline rate, and what was it on any past date." Get the current and historical policy rate per country and period as clean JSON, filtered to the countries, frequency, and lookback you need. This is the cross-country rates backbone that macro funds, FX traders, and rate dashboards otherwise stitch together from dozens of separate central-bank websites in inconsistent formats.

> **One actor. One token. The harmonized global policy-rate series behind macro dashboards and FX desks — delivered as pay-per-record JSON, no Bloomberg or Macrobond seat.**

### Why use this

- **One harmonized source for 40+ economies.** Instead of scraping the Fed, ECB, BoE, BoJ, PBoC, and 35+ others — each with its own page format and definition — you get one consistent series for all of them, defined and maintained by the BIS.
- **Current *and* historical.** `lastNObservations` lets you pull just the latest print for a live dashboard or a long back-history for rate-cycle analysis and backtesting.
- **Cross-country by design.** The single biggest pain in rates work is comparability; the BIS series is curated specifically to be comparable across central banks.
- **Daily or monthly frequency.** Choose `D` for the precise step-changes or `M` for clean monthly time series.
- **Official source, ETL-ready.** Reads the BIS statistical data. Stable flat JSON loads straight into Snowflake, BigQuery, Postgres, or a notebook for time-series work.

### What you get

Each record represents one country's policy rate at one period (date or month). Core fields:

- `country` — ISO country / area code (e.g. `US`, `XM` = euro area, `GB`, `JP`, `CN`)
- `period` — the observation period (date for daily frequency, year-month for monthly)
- `policyRatePct` — the central bank's policy rate for that country and period, in percent
- `title` — the human-readable series title from the BIS (identifies the country / rate)

Pull `US` with `lastNObservations=24` monthly and you get 24 rows tracing the Fed's rate path; pull a basket of `["US","XM","GB","JP"]` and you get the four series side by side.

### Use cases

- **Global macro & rate-differential trading** — Pull `["US","XM","GB","JP","CN"]` and compute live policy-rate differentials — the core driver of carry trades and FX positioning across the G10 and major EM.
- **FX carry models** — FX desks join `policyRatePct` across currency pairs to build and rebalance carry baskets, where the rate differential is the expected return indicator.
- **Rate-dashboard / fintech apps** — Power a "central banks at a glance" widget or alerting tool by pulling the latest observation for all covered countries on a schedule.
- **Monetary-cycle backtesting** — Quants pull long histories (`lastNObservations` large) to backtest strategies conditioned on global hiking/cutting regimes.
- **Macro research & strategy notes** — Strategists chart the synchronized global tightening or easing cycle across 40+ banks for client-facing commentary.
- **Risk & treasury management** — Corporate treasuries and asset-liability teams track policy rates in every currency they fund in to manage rate exposure.
- **Economic / academic research** — Researchers use the BIS harmonized series as the standard cross-country policy-rate input for monetary-policy and international-finance studies.

### Sample output

```json
{
  "country": "US",
  "period": "2026-05",
  "policyRatePct": 4.25,
  "title": "Central bank policy rate — United States"
}
```

### Reading the data: codes, periods, and how to build differentials

The four fields are deliberately minimal, which makes them easy to model — but a few conventions are worth knowing:

- **`country`** uses ISO-style codes, with one important special case: **`XM` is the euro area** (the ECB's single rate), used instead of individual eurozone member codes. The major economies you will reach for — `US`, `GB`, `JP`, `CN`, plus the larger EM banks — are all covered in the BIS's 40+ set.
- **`period`** format follows `frequency`: a year-month string for monthly (`M`) pulls, and a date for daily (`D`) pulls. For evenly-spaced charting, monthly is cleanest; for pinpointing the exact day a bank hiked or cut, daily is the right choice.
- **`policyRatePct`** is the headline policy rate in percent. The single most common downstream computation is a **rate differential**: pull two or more countries with the same `frequency` and `lastNObservations`, align on `period`, and subtract one `policyRatePct` from another. That differential is the carry indicator behind most FX positioning and the input to cross-country rate models.
- **`title`** carries the BIS's human-readable series label, handy for chart legends and for confirming which rate a code maps to.

### Common analysis recipes

- **Live G5 dashboard:** `{"countries": ["US","XM","GB","JP","CN"], "frequency": "M", "lastNObservations": 1}` — one latest print per bank, refreshed on a schedule, for a "central banks at a glance" widget.
- **Rate-cycle history:** `{"countries": ["US"], "frequency": "M", "lastNObservations": 60}` — five years of the Fed's path for cycle analysis and backtests.
- **Carry basket:** pull the G10 monthly, align on `period`, and rank by `policyRatePct` to build a long-high-rate / short-low-rate carry basket that you rebalance each refresh.
- **Decision-day watch:** `{"countries": ["US","XM"], "frequency": "D", "lastNObservations": 30}` around expected meeting dates to capture the exact step-change.

### Input parameters

| Parameter | What it does |
|-----------|--------------|
| `countries` | ISO country / area codes to pull (e.g. `US`, `XM` = euro area, `GB`, `JP`, `CN`). |
| `frequency` | Observation frequency: `M` = monthly, `D` = daily. |
| `lastNObservations` | Return the most recent N data points per country. |

### How to use

#### Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("nexgendata/global-central-bank-policy-rates").call(run_input={
    "countries": ["US", "XM", "GB", "JP", "CN"],
    "frequency": "M",
    "lastNObservations": 24,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["country"], item["period"], item["policyRatePct"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~global-central-bank-policy-rates/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "countries": ["US", "XM", "GB", "JP"],
    "frequency": "D",
    "lastNObservations": 60
  }'
```

#### No-code (Zapier / Make)

Use the Apify "Run actor and get dataset items" action with actor ID `nexgendata/global-central-bank-policy-rates`, schedule it daily, and feed the latest `policyRatePct` per `country` into a Google Sheet, BI dashboard, or alert when a rate changes.

### Pricing

This actor runs on Apify's **pay-per-event (PPE)** model — **$0.10 per result** (one charge per country-period observation returned), plus a sub-cent actor-start event. No subscription, no seat licence, no minimum.

Worked example:

- Latest print for 10 countries (`lastNObservations=1`) → 10 rows → **$1.00**
- 5 countries × 24 monthly observations → 120 rows → **$12.00**
- A 40-country, 12-observation dashboard refresh → ~480 rows → **$48.00**

Because billing is per observation, you tune cost precisely with `lastNObservations` and the size of your `countries` list — a daily latest-print dashboard for a handful of countries costs a few cents per run.

### How this compares to Bloomberg / Macrobond

A harmonized global policy-rate series is a standard line item inside **Bloomberg Terminal** (~$24,000/seat/year) and **Macrobond** (multi-thousand-dollar annual licences) — both excellent if you need their full macro workspaces, charting, and the rest of the data universe. But if your specific need is **"the policy rate for these countries, current and historical, as clean JSON"**, you do not need a terminal seat to get it. The BIS publishes the authoritative series openly; this actor delivers it queryable from your own code at pay-per-record cost — a 95%+ saving for the narrow-but-critical job of feeding rate differentials into a model or a dashboard.

### FAQ

**Q: Where does the data come from?**
A: The Bank for International Settlements (BIS) `WS_CBPOL` "central bank policy rates" statistical dataset — the BIS's curated, internationally-comparable compilation of headline policy rates.

**Q: Which countries are covered?**
A: 40+ economies and currency areas, including the US, euro area (`XM`), UK (`GB`), Japan (`JP`), China (`CN`), and the major developed and emerging-market central banks tracked by the BIS.

**Q: What does `XM` mean?**
A: `XM` is the code for the euro area — the ECB's single policy rate covering all eurozone members. Use it instead of individual euro-member country codes.

**Q: Daily vs monthly — which should I use?**
A: Use `D` (daily) when you need to capture the exact dates of rate step-changes; use `M` (monthly) when you want a clean, evenly-spaced time series for charting or modeling.

**Q: How current is the latest observation?**
A: The series reflects the BIS's latest published update. Schedule the actor on Apify to refresh after expected central-bank decision dates so your dashboard captures new moves promptly.

**Q: Can I get a long history for backtesting?**
A: Yes — raise `lastNObservations` to pull a deep back-history per country for rate-cycle and strategy backtesting.

### Schema stability & versioning

This actor follows NexGenData's **additive-only schema** contract. New fields may be added over time (appearing as new JSON keys, defaulting to `null` for older runs), but existing fields are never renamed or removed without a major-version bump and advance notice. Field semantics — percent units, period formats, country codes — are never silently changed. Build production time-series pipelines on this output with confidence.

### Compliance & legal

- This actor reformats **public BIS statistical data**. It is not affiliated with, endorsed by, or sponsored by the BIS or any central bank.
- The rates are reported facts, not financial advice.
- For any regulated decision — trading, treasury, risk — **verify against the primary BIS source** and apply appropriate review.
- You are responsible for ensuring your downstream use complies with the BIS terms of use and applicable laws.

### Related NexGenData actors

Part of NexGenData's **Finance / Markets intelligence** cluster — pair this actor with:

- [US Treasury Auction Results](https://apify.com/nexgendata/us-treasury-auction-results)
- [FDIC Bank Financials & Health](https://apify.com/nexgendata/fdic-bank-financials-health)
- [Japan BOJ Macro Rates & JGB Auctions](https://apify.com/nexgendata/japan-boj-macro-rates-jgb-auctions)
- [Korea KRX Market Statistics](https://apify.com/nexgendata/korea-krx-market-statistics)
- [Reg SHO Threshold Securities](https://apify.com/nexgendata/reg-sho-threshold-securities)
- [Crypto Top-100 Screener](https://apify.com/nexgendata/crypto-top100-screener)

Browse the full 200+ actor catalog at **https://apify.com/nexgendata**.

# Actor input Schema

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

ISO country codes (US, XM=euro area, GB, JP, CN...).

## `frequency` (type: `string`):

M=monthly, D=daily.

## `lastNObservations` (type: `integer`):

Most recent N data points per country.

## Actor input object example

```json
{
  "countries": [
    "US",
    "XM",
    "GB",
    "JP",
    "CN"
  ],
  "frequency": "M",
  "lastNObservations": 1
}
```

# 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 = {
    "countries": [
        "US",
        "XM",
        "GB",
        "JP",
        "CN"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/global-central-bank-policy-rates").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 = { "countries": [
        "US",
        "XM",
        "GB",
        "JP",
        "CN",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/global-central-bank-policy-rates").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "countries": [
    "US",
    "XM",
    "GB",
    "JP",
    "CN"
  ]
}' |
apify call nexgendata/global-central-bank-policy-rates --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/global-central-bank-policy-rates",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/zk5liER5gDl15hkdg/builds/NYu0Z1fC8E5Viw1hs/openapi.json
