# IMF Data

> Read the IMF's official economic statistics from a workflow. Get growth, inflation, unemployment, GDP, government debt and deficit, the current account, population or the exchange rate for any of roughly 200 economies, follow one through time, compare countries side by side, or pull a whole country profile in one step. World commodity prices - crude oil, gold, copper, wheat, coffee - come from the IMF's own price system. Everything else the IMF publishes, from trade by partner country to financial soundness indicators, is reachable by searching the catalogue and filtering a dataset by name. The World Economic Outlook publishes forecasts beside measurements, so every figure says which it is. Every action reads: nothing here changes anything. No account or API key required.

App · Accounting & Finance · 10 actions. Web page: https://docs.lodol.com/docs/integrations/imf-data

## Actions

### Compare countries

Put several economies side by side on one statistic and rank them, in a single step rather than one per country. Pick the countries by name from the list, up to forty at a time. Leaving the year empty gives each economy its own most recent figure, which can be a different year for each - the result says when that happens and every row carries its own period.

**Inputs**

- Statistic (`statistic`, text): Which figure to read. These are the twenty-six headline statistics the IMF is asked for most, and the dataset and codes behind each one are already filled in. GDP growth by default. For anything else the IMF publishes - trade by partner country, financial soundness, reserves - use 'Get data from a dataset'. One of: `gdp_growth` (GDP growth (percent a year)), `gdp` (GDP (US dollars)), `gdp_per_person` (GDP per person (US dollars a person)), `gdp_ppp` (GDP at purchasing-power parity (international dollars)), `gdp_per_person_ppp` (GDP per person at purchasing-power parity (international dollars a person)), `share_of_world_gdp` (Share of world GDP (percent of world GDP)), `output_gap` (Output gap (percent of potential GDP)), `inflation` (Inflation (percent a year)), `inflation_end_of_year` (Inflation at the end of the year (percent a year)), `inflation_monthly` (Inflation, monthly (percent a year)), and 16 more. Default: `gdp_growth`.
- Countries (`countries`, list, required): Which economies to compare, two or more. The list holds every country the IMF reports on and the groups it aggregates. A value from an earlier step can be a list of names or codes, or one comma-separated line.
- As of (`as_of`, date): Which year to read. Read as the year that contains the date, so any day in 2024 means 2024. Leave it empty for each economy's most recent figure, which may be a different year for each of them - the result says so, and every row carries its own period. An economy the IMF has not reported on for many years is then listed as missing rather than compared on a figure from a decade ago.
- Order (`order`, text): Highest first by default, which is what a league table wants. Lowest first for a statistic where small is good, such as unemployment or government debt. One of: `highest_first` (Highest first), `lowest_first` (Lowest first), `by_name` (By country name). Default: `highest_first`.
- What counts as the latest (`basis`, text): The World Economic Outlook publishes forecasts five years ahead in the same column as the measurements, so 'the latest figure' is ambiguous and this settles it. By default the latest actual is returned, because a number presented as a measurement should be one. Switch to include forecasts when the question really is what the IMF expects. Either way each figure says which it is. One of: `actual` (Only figures the IMF reports as actual), `any` (The latest figure, forecast or actual). Default: `actual`.

**Outputs**

- `average` (number): The mean of these figures, unweighted
- `count` (number): How many economies had a figure
- `countries` (list): One row per economy, in the order asked for
- `dataset` (text): The dataset they came from
- `dataset_url` (text): Where to read the same dataset on the IMF's site
- `highest` (object): The economy with the largest figure
- `lowest` (object): The economy with the smallest figure
- `missing` (list): The economies the IMF has no figure for
- `periods` (list): The periods these figures come from
- `requested_count` (number): How many economies were asked about
- `same_period` (true/false): False when economies reported up to different periods, so the rows are each economy's own latest rather than one year
- `scale` (number): The exponent the IMF prints these figures in
- `source` (text): Who compiled the figures
- `statistic` (text): The statistic that was read
- `statistic_label` (text): Its name
- `unit` (text): What the figures are in

**Example output**

```json
{
  "average": 0.5838995,
  "count": 2,
  "countries": [
    {
      "basis": "actual",
      "country": "FRA",
      "country_label": "France",
      "formatted": "0.9",
      "is_projection": false,
      "period": "2025",
      "period_end": "2025-12-31",
      "period_label": "2025",
      "period_start": "2025-01-01",
      "rank": 1,
      "value": 0.928126,
      "year": 2025
    },
    {
      "basis": "actual",
      "country": "DEU",
      "country_label": "Germany",
      "formatted": "0.2",
      "is_projection": false,
      "period": "2025",
      "period_end": "2025-12-31",
      "period_label": "2025",
      "period_start": "2025-01-01",
      "rank": 2,
      "value": 0.239673,
      "year": 2025
    }
  ],
  "dataset": "WEO",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "highest": {
    "basis": "actual",
    "country": "FRA",
    "country_label": "France",
    "formatted": "0.9",
    "is_projection": false,
    "period": "2025",
    "period_end": "2025-12-31",
    "period_label": "2025",
    "period_start": "2025-01-01",
    "rank": 1,
    "value": 0.928126,
    "year": 2025
  },
  "lowest": {
    "basis": "actual",
    "country": "DEU",
    "country_label": "Germany",
    "formatted": "0.2",
    "is_projection": false,
    "period": "2025",
    "period_end": "2025-12-31",
    "period_label": "2025",
    "period_start": "2025-01-01",
    "rank": 2,
    "value": 0.239673,
    "year": 2025
  },
  "missing": [],
  "periods": [
    "2025"
  ],
  "requested_count": 2,
  "same_period": true,
  "scale": 0,
  "source": "IMF staff calculations.",
  "statistic": "gdp_growth",
  "statistic_label": "GDP growth",
  "unit": "percent a year"
}
```

### Find a dataset

Search the IMF catalogue by words in a dataset's name or its summary, and get back the code every other action takes. This is the way in to everything the headline statistics do not cover: trade by partner country, financial soundness indicators, reserves, government finance, the Financial Access Survey. Half the catalogue is dated archive copies frozen as a published report left them; those are left out unless you ask for them, and the result says how many.

**Inputs**

- Search (`search`, text): Only datasets whose name, code or summary contains this text. Capitals, accents and punctuation are ignored. Leave it empty to list the catalogue.
- Which datasets (`scope`, text): The datasets the IMF maintains, by default. Include the archive copies when you need to reproduce a figure exactly as some report published it - each one is that dataset frozen at a named month. One of: `current` (Only the datasets the IMF maintains), `all` (Also the dated archive copies). Default: `current`.
- Number of records (`limit`, number): Optional. How many records to return. Between 1 and 500; 25 by default. From 1 to 500. Default: `25`.
- Skip (`offset`, number): Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `archived_count` (number): How many dated archive copies the catalogue holds
- `catalogue_count` (number): How many datasets were searched
- `count` (number): How many are on this page
- `datasets` (list): The datasets that matched, current ones first
- `has_more` (true/false): True when more matched than this page holds
- `next_offset` (number): The offset that returns the next page
- `scope` (text): Whether archive copies were searched: current or all
- `search` (text): The text that was searched for
- `total_count` (number): How many matched in all

**Example output**

```json
{
  "archived_count": 119,
  "catalogue_count": 103,
  "count": 3,
  "datasets": [
    {
      "agency": "IMF.STA",
      "dataset": "CRBRATE",
      "description": "This dataset provides information on the Effective Carbon Rate (ECR), which represents the combined value of fuel excise taxes, carbon taxes, and tradeable permits that place a price on carbon emissio...",
      "is_archived": false,
      "name": "Carbon Rates",
      "reference": "IMF.STA:CRBRATE",
      "url": "https://data.imf.org/en/datasets/IMF.STA:CRBRATE"
    },
    {
      "agency": "IMF.RES",
      "dataset": "CTOT",
      "description": "CTOT is a comprehensive database of country-specific commodity price indices for 182 economies covering the period from 1962 onwards. For each country, the change in the international price of up to 4...",
      "is_archived": false,
      "name": "Commodity Terms of Trade (CTOT)",
      "reference": "IMF.RES:CTOT",
      "url": "https://data.imf.org/en/datasets/IMF.RES:CTOT"
    }
  ],
  "has_more": true,
  "next_offset": 3,
  "scope": "current",
  "search": "price",
  "total_count": 12
}
```

### Get a commodity price

Get the world price of a commodity from the IMF's Primary Commodity Price System - crude oil, gold, copper, wheat, coffee, natural gas and a hundred more, monthly since 1980. Ask for the price itself, the index, or the change on the month or the year. The result carries the high, the low and the average across the period as well as the latest, so a price alert needs no arithmetic of its own.

**Inputs**

- Commodity (`commodity`, text, required): Which commodity to price. The list holds everything the IMF prices, each with the unit it is quoted in, and includes the IMF's own composite indexes such as All Commodities and Energy. A value from an earlier step can be the IMF's code or the commodity's name.
- Measure (`measure`, text): The price in US dollars by default. The index is the IMF's own, set to 100 in its base year, and is the only measure available for a composite such as All Commodities. The two change measures come back as percentages already worked out. One of: `price` (Price in US dollars), `index` (Price index), `change_on_month` (Change on the period before, percent), `change_on_year` (Change on a year earlier, percent). Default: `price`.
- How often (`frequency`, text): Monthly by default, which is how the IMF collects these prices. Quarterly and annual are the IMF's own averages of the same series. One of: `M` (Monthly), `Q` (Quarterly), `A` (Annual). Default: `M`.
- From (`from_date`, date): The earliest date to cover. The IMF reports in whole periods - a year, a quarter, a month - so this is read as the period that contains the date rather than as the day itself. Left empty, a step returns the recent part of the series rather than all of it, because a monthly one runs back to the 1950s and eight hundred figures is rarely what was wanted; set a date here to reach the whole history.
- To (`to_date`, date): The latest date to cover, read as the period that contains it. Leave it empty to run to the end of the series, which for a World Economic Outlook figure is several years of IMF projections.

**Outputs**

- `average` (number): The mean across the range
- `citation` (text): How the IMF asks to be cited
- `commodity` (text): The IMF's code for the commodity, such as PCOPP
- `commodity_label` (text): What it is called
- `commodity_unit` (text): What it is priced in, such as US dollars per barrel
- `count` (number): How many periods came back
- `dataset` (text): The dataset it came from
- `dataset_url` (text): Where to read the same dataset on the IMF's site
- `first_period` (text): The earliest period
- `frequency` (text): M, Q or A
- `frequency_label` (text): That frequency in words
- `full_name` (text): The IMF's own full name for the series
- `highest` (object): The highest point in the range
- `last_period` (text): The latest period
- `latest` (object): The most recent point
- `lowest` (object): The lowest point in the range
- `measure` (text): Which measure was read: price, index or a change
- `measure_label` (text): That measure in words
- `observations` (list): The series, oldest first
- `source` (text): Who compiled the figures

**Example output**

```json
{
  "average": 11927.38930665663,
  "citation": "International Monetary Fund. Primary Commodity Price System\u00a0(PCPS),\u00a0 https://data.imf.org/en/datasets//IMF.RES:PCPS. Accessed on [current date].",
  "commodity": "PCOPP",
  "commodity_label": "Copper",
  "commodity_unit": "US dollars per metric tonne",
  "count": 15,
  "dataset": "PCPS",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:PCPS",
  "first_period": "2025-M06",
  "frequency": "M",
  "frequency_label": "Monthly",
  "full_name": "Copper, US dollars per metric tonne, Unit prices",
  "highest": {
    "formatted": "14,331.26",
    "period": "2026-M08",
    "period_end": "2026-08-31",
    "period_label": "August 2026",
    "period_start": "2026-08-01",
    "value": 14331.26476190476
  },
  "last_period": "2026-M08",
  "latest": {
    "formatted": "14,331.26",
    "period": "2026-M08",
    "period_end": "2026-08-31",
    "period_label": "August 2026",
    "period_start": "2026-08-01",
    "value": 14331.26476190476
  },
  "lowest": {
    "formatted": "9,671.88",
    "period": "2025-M08",
    "period_end": "2025-08-31",
    "period_label": "August 2025",
    "period_start": "2025-08-01",
    "value": 9671.875714285714
  },
  "measure": "price",
  "measure_label": "Price in US dollars",
  "observations": [
    {
      "formatted": "9,835.07",
      "period": "2025-M06",
      "period_end": "2025-06-30",
      "period_label": "June 2025",
      "period_start": "2025-06-01",
      "value": 9835.068095238095
    },
    {
      "formatted": "9,770.58",
      "period": "2025-M07",
      "period_end": "2025-07-31",
      "period_label": "July 2025",
      "period_start": "2025-07-01",
      "value": 9770.580434782609
    }
  ],
  "source": "\"PCPS Technical Documentation: IMF Primary Commodity Price Index\", Jan 25, 2019, IMF Methodology Notes"
}
```

### Get a country's economic profile

Get several headline statistics for one country at once - growth, inflation, unemployment, income per person, government debt and the current account unless you choose otherwise. This is the briefing-note step: one call instead of six, with each figure in the unit it belongs in and each marked as measured or forecast. A statistic the IMF does not report for that country is listed as not reported rather than left out.

**Inputs**

- Country (`country`, text): Which economy to read. The list holds every country the IMF reports on, followed by the groups it aggregates - the world, the euro area, the G7. A value from an earlier step can be the country's name ('Japan'), either of its ISO codes ('JP' or 'JPN'), or the name a person would say rather than the IMF's formal one ('South Korea' finds 'Korea, Republic of'). The United States by default. Default: `USA`.
- Statistics (`statistics`, list): Which figures to include, up to twelve. Six headline ones by default: GDP growth, inflation, unemployment, GDP per person, government debt and the current account. One or more of: `gdp_growth` (GDP growth (percent a year)), `gdp` (GDP (US dollars)), `gdp_per_person` (GDP per person (US dollars a person)), `gdp_ppp` (GDP at purchasing-power parity (international dollars)), `gdp_per_person_ppp` (GDP per person at purchasing-power parity (international dollars a person)), `share_of_world_gdp` (Share of world GDP (percent of world GDP)), `output_gap` (Output gap (percent of potential GDP)), `inflation` (Inflation (percent a year)), `inflation_end_of_year` (Inflation at the end of the year (percent a year)), `inflation_monthly` (Inflation, monthly (percent a year)), and 16 more. Default: `["gdp_growth", "inflation", "unemployment", "gdp_per_person", "government_debt", "current_account"]`.
- As of (`as_of`, date): Which year to read. Read as the year that contains the date, so any day in 2024 means 2024. Leave it empty for each economy's most recent figure, which may be a different year for each of them - the result says so, and every row carries its own period. An economy the IMF has not reported on for many years is then listed as missing rather than compared on a figure from a decade ago.
- What counts as the latest (`basis`, text): The World Economic Outlook publishes forecasts five years ahead in the same column as the measurements, so 'the latest figure' is ambiguous and this settles it. By default the latest actual is returned, because a number presented as a measurement should be one. Switch to include forecasts when the question really is what the IMF expects. Either way each figure says which it is. One of: `actual` (Only figures the IMF reports as actual), `any` (The latest figure, forecast or actual). Default: `actual`.

**Outputs**

- `citation` (text): How the IMF asks to be cited
- `count` (number): How many statistics were asked for
- `country` (text): The IMF's code for the economy
- `country_label` (text): That economy's name
- `dataset_url` (text): Where to read the World Economic Outlook on the IMF's site
- `found_count` (number): How many of them the IMF reports for this economy
- `missing` (list): The statistics it does not report
- `periods` (list): The periods these figures come from. More than one is normal: the IMF reports some figures later than others
- `source` (text): Who compiled the figures
- `statistics` (list): One row per statistic asked for, in that order
- `updated_at` (text): When the IMF last published the dataset

**Example output**

```json
{
  "citation": "International Monetary Fund. World Economic Outlook (WEO), https://data.imf.org/en/datasets/IMF.RES:WEO. Accessed on [current date].",
  "count": 6,
  "country": "FRA",
  "country_label": "France",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "found_count": 6,
  "missing": [],
  "periods": [
    "2024",
    "2025"
  ],
  "source": "IMF staff calculations.",
  "statistics": [
    {
      "basis": "actual",
      "dataset": "WEO",
      "formatted": "0.9",
      "found": true,
      "is_projection": false,
      "period": "2025",
      "period_label": "2025",
      "statistic": "gdp_growth",
      "statistic_label": "GDP growth",
      "summary": "How much the economy grew, after inflation is taken out.",
      "unit": "percent a year",
      "value": 0.928126
    },
    {
      "basis": "actual",
      "dataset": "WEO",
      "formatted": "0.9",
      "found": true,
      "is_projection": false,
      "period": "2025",
      "period_label": "2025",
      "statistic": "inflation",
      "statistic_label": "Inflation",
      "summary": "How much consumer prices rose, averaged over the year.",
      "unit": "percent a year",
      "value": 0.926027
    }
  ],
  "updated_at": "2026-04-15T13:00:00Z"
}
```

### Get a dataset's details

Everything you need to query one dataset: what it holds, the filters it is keyed by in the order the key wants them, how many values each of those accepts and a few examples of each, how often it reports, how many economies it covers, when it was last updated and how the IMF asks to be cited. Run this before 'Get data from a dataset' and the filter boxes stop being guesswork.

**Inputs**

- Dataset (`dataset`, text, required): Which of the IMF's datasets to read. The list holds the hundred or so the IMF maintains; the dated archive copies are not in it but can be typed in by code. A value from an earlier step can be the code ('WEO'), the full reference ('IMF.RES:WEO') or the dataset's name. Use 'Find a dataset' to search the catalogue by words.

**Outputs**

- `agency` (text): The IMF department that publishes it
- `citation` (text): How the IMF asks to be cited
- `contact` (text): Where the IMF takes questions about it
- `country_count` (number): How many economies it covers, 0 when it is not by country
- `dataset` (text): The dataset's code
- `description` (text): What it holds
- `doi` (text): Its DOI, when it has one
- `filter_count` (number): How many filters that is
- `filters` (list): Every filter it is keyed by, in key order
- `frequencies` (list): How often the dataset reports
- `is_archived` (true/false): True for a dated copy rather than the maintained dataset
- `license` (text): The terms it is published under
- `name` (text): Its name
- `published_at` (text): When it was first published
- `reference` (text): Its full IMF reference
- `source` (text): Who compiled the figures
- `updated_at` (text): When it was last updated
- `url` (text): Where to read it on the IMF's site
- `version` (text): The version the IMF is serving

**Example output**

```json
{
  "agency": "IMF.STA",
  "citation": "",
  "contact": "help@data.imf.org",
  "country_count": 227,
  "dataset": "ER",
  "description": "This dataset contains historical exchange rate data between the US Dollar, Special Drawing Rights (SDR), Euro, and various national currencies. It includes both period average and end-of-period exchange rates.",
  "doi": "",
  "filter_count": 4,
  "filters": [
    {
      "description": "The country or region for which the data or statistics in a resource are collected or reported.",
      "examples": [
        {
          "label": "Aruba, Kingdom of the Netherlands",
          "value": "ABW"
        },
        {
          "label": "Afghanistan, Islamic Republic of",
          "value": "AFG"
        }
      ],
      "filter": "COUNTRY",
      "label": "Country",
      "position": 1,
      "value_count": 227
    },
    {
      "description": "A variable that sheds light on some phenomenon or situation.",
      "examples": [
        {
          "label": "ECU per domestic currency",
          "value": "ECU_XDC"
        },
        {
          "label": "Euros per domestic currency",
          "value": "EUR_XDC"
        }
      ],
      "filter": "INDICATOR",
      "label": "Indicator",
      "position": 2,
      "value_count": 10
    }
  ],
  "frequencies": [
    {
      "label": "Annual",
      "value": "A"
    },
    {
      "label": "Monthly",
      "value": "M"
    }
  ],
  "is_archived": false,
  "license": "",
  "name": "Exchange Rates (ER)",
  "published_at": "2026-09-13T05:27:54.901815100Z",
  "reference": "IMF.STA:ER",
  "source": "",
  "updated_at": "2026-09-13T05:27:54.936239700Z",
  "url": "https://data.imf.org/en/datasets/IMF.STA:ER",
  "version": "4.0.1"
}
```

### Get a time series

Follow one series from any IMF dataset through time. Every point carries the change and the percentage change on the one before, and the result carries the highest, the lowest, the average and the change across the whole period - so a chart or a trend alert needs no arithmetic of its own. Where the figures are already percentages the change is given in points instead, because the percentage change between two percentages is not a number anybody wants. The filters have to pin the dataset down to a single series; if they do not, the step says which box is still open. Covers the last 24 periods unless you set dates.

**Inputs**

- Dataset (`dataset`, text, required): Which of the IMF's datasets to read. The list holds the hundred or so the IMF maintains; the dated archive copies are not in it but can be typed in by code. A value from an earlier step can be the code ('WEO'), the full reference ('IMF.RES:WEO') or the dataset's name. Use 'Find a dataset' to search the catalogue by words.
- Filters (`filters`, object): One box per filter of the chosen dataset, filled in with the IMF's own codes - COUNTRY=USA, INDICATOR=NGDP_RPCH, FREQUENCY=A. Use 'List a filter's values' to see what a box accepts, and separate several codes with commas. A box left blank returns every value that filter has, which can be hundreds, so filling in the ones you care about is what keeps a step quick.
- From (`from_date`, date): The earliest date to cover. The IMF reports in whole periods - a year, a quarter, a month - so this is read as the period that contains the date rather than as the day itself. Left empty, a step returns the recent part of the series rather than all of it, because a monthly one runs back to the 1950s and eight hundred figures is rarely what was wanted; set a date here to reach the whole history.
- To (`to_date`, date): The latest date to cover, read as the period that contains it. Leave it empty to run to the end of the series, which for a World Economic Outlook figure is several years of IMF projections.

**Outputs**

- `average` (number): The mean across the range
- `change` (number): The last figure less the first
- `citation` (text): How the IMF asks to be cited
- `count` (number): How many periods came back
- `dataset` (text): The dataset that was read
- `dataset_name` (text): That dataset's name
- `dataset_url` (text): Where to read it on the IMF's site
- `filters_applied` (object): The filters that pinned the series down
- `first_period` (text): The earliest period
- `first_value` (number): The figure at the start
- `highest` (object): The highest point in the range
- `is_percent` (true/false): True when the figures are themselves percentages
- `key` (text): The key that was asked for, in the IMF's own notation
- `last_period` (text): The latest period
- `latest` (object): The most recent point
- `lowest` (object): The lowest point in the range
- `percent_change` (number): That difference as a percentage. Empty when the series is already a percentage
- `points` (list): The series, oldest first
- `projection_count` (number): How many of these points are IMF forecasts
- `scale` (number): The exponent the IMF prints these figures in
- `series_name` (text): What the series is, named by the IMF or by its filters
- `source` (text): Who compiled the figures
- `unit` (text): The IMF's unit code for it

**Example output**

```json
{
  "average": 7.583333400000001,
  "change": -0.641667,
  "citation": "International Monetary Fund. World Economic Outlook (WEO), https://data.imf.org/en/datasets/IMF.RES:WEO. Accessed on [current date].",
  "count": 5,
  "dataset": "WEO",
  "dataset_name": "World Economic Outlook (WEO)",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "filters_applied": {
    "COUNTRY": "FRA",
    "FREQUENCY": "A",
    "INDICATOR": "LUR"
  },
  "first_period": "2020",
  "first_value": 8.025,
  "highest": {
    "change": null,
    "formatted": "8.03",
    "is_projection": false,
    "percent_change": null,
    "period": "2020",
    "period_end": "2020-12-31",
    "period_label": "2020",
    "period_start": "2020-01-01",
    "value": 8.025
  },
  "is_percent": false,
  "key": "FRA.LUR.A",
  "last_period": "2024",
  "latest": {
    "change": 0.0416660000000002,
    "formatted": "7.38",
    "is_projection": false,
    "percent_change": 0.5675,
    "period": "2024",
    "period_end": "2024-12-31",
    "period_label": "2024",
    "period_start": "2024-01-01",
    "value": 7.383333
  },
  "lowest": {
    "change": -0.5666669999999998,
    "formatted": "7.30",
    "is_projection": false,
    "percent_change": -7.2034,
    "period": "2022",
    "period_end": "2022-12-31",
    "period_label": "2022",
    "period_start": "2022-01-01",
    "value": 7.3
  },
  "percent_change": -7.9959,
  "points": [
    {
      "change": null,
      "formatted": "8.03",
      "is_projection": false,
      "percent_change": null,
      "period": "2020",
      "period_end": "2020-12-31",
      "period_label": "2020",
      "period_start": "2020-01-01",
      "value": 8.025
    },
    {
      "change": -0.15833300000000072,
      "formatted": "7.87",
      "is_projection": false,
      "percent_change": -1.973,
      "period": "2021",
      "period_end": "2021-12-31",
      "period_label": "2021",
      "period_start": "2021-01-01",
      "value": 7.866667
    }
  ],
  "projection_count": 0,
  "scale": 0,
  "series_name": "Unemployment rate",
  "source": "IMF staff calculations.",
  "unit": ""
}
```

### Get an economic statistic

Get one of twenty-six headline IMF statistics for a country and follow it through time - GDP and its growth, inflation, unemployment, government debt and deficit, the current account, population, the exchange rate. Pick the statistic and the country by name; the IMF dataset and its codes are already filled in. The World Economic Outlook forecasts five years ahead in the same column as its measurements, so every figure says which it is and the result carries the latest actual separately. No account or API key required.

**Inputs**

- Statistic (`statistic`, text): Which figure to read. These are the twenty-six headline statistics the IMF is asked for most, and the dataset and codes behind each one are already filled in. GDP growth by default. For anything else the IMF publishes - trade by partner country, financial soundness, reserves - use 'Get data from a dataset'. One of: `gdp_growth` (GDP growth (percent a year)), `gdp` (GDP (US dollars)), `gdp_per_person` (GDP per person (US dollars a person)), `gdp_ppp` (GDP at purchasing-power parity (international dollars)), `gdp_per_person_ppp` (GDP per person at purchasing-power parity (international dollars a person)), `share_of_world_gdp` (Share of world GDP (percent of world GDP)), `output_gap` (Output gap (percent of potential GDP)), `inflation` (Inflation (percent a year)), `inflation_end_of_year` (Inflation at the end of the year (percent a year)), `inflation_monthly` (Inflation, monthly (percent a year)), and 16 more. Default: `gdp_growth`.
- Country (`country`, text): Which economy to read. The list holds every country the IMF reports on, followed by the groups it aggregates - the world, the euro area, the G7. A value from an earlier step can be the country's name ('Japan'), either of its ISO codes ('JP' or 'JPN'), or the name a person would say rather than the IMF's formal one ('South Korea' finds 'Korea, Republic of'). The United States by default. Default: `USA`.
- From (`from_date`, date): The earliest date to cover. The IMF reports in whole periods - a year, a quarter, a month - so this is read as the period that contains the date rather than as the day itself. Left empty, a step returns the recent part of the series rather than all of it, because a monthly one runs back to the 1950s and eight hundred figures is rarely what was wanted; set a date here to reach the whole history.
- To (`to_date`, date): The latest date to cover, read as the period that contains it. Leave it empty to run to the end of the series, which for a World Economic Outlook figure is several years of IMF projections.
- Include IMF forecasts (`include_projections`, true/false): On by default, because the IMF's forecasts are much of why people read the World Economic Outlook and each one is marked as a forecast. Turn it off to keep only what has actually been measured, which is what a chart of history wants. Default: `true`.

**Outputs**

- `actual_count` (number): How many of these are measurements
- `citation` (text): How the IMF asks to be cited
- `count` (number): How many periods came back
- `country` (text): The IMF's code for the economy, such as JPN
- `country_label` (text): That economy's name
- `covers_recent_only` (true/false): True when no dates were given, so this is the recent part of the series rather than all of it. Set a From date for more
- `dataset` (text): The IMF dataset the figures came from
- `dataset_url` (text): Where to read the same dataset on the IMF's site
- `first_period` (text): The earliest period
- `frequency` (text): How often it is reported: Annual, Quarterly or Monthly
- `has_projections` (true/false): True when the series runs past the last actual
- `last_period` (text): The latest period
- `latest` (object): The last point, forecast or actual
- `latest_actual` (object): The last point the IMF reports as measured, empty when every figure in the range is a forecast
- `observations` (list): The series, oldest first
- `projection_count` (number): How many of these are IMF forecasts
- `source` (text): Who compiled the figures
- `statistic` (text): The statistic that was read
- `statistic_label` (text): Its name
- `unit` (text): What the figures are in, such as percent of GDP
- `updated_at` (text): When the IMF last published this dataset

**Example output**

```json
{
  "actual_count": 3,
  "citation": "International Monetary Fund. World Economic Outlook (WEO), https://data.imf.org/en/datasets/IMF.RES:WEO. Accessed on [current date].",
  "count": 4,
  "country": "FRA",
  "country_label": "France",
  "covers_recent_only": false,
  "dataset": "WEO",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "first_period": "2023",
  "frequency": "Annual",
  "has_projections": true,
  "last_period": "2026",
  "latest": {
    "basis": "projection",
    "formatted": "0.9",
    "is_projection": true,
    "period": "2026",
    "period_end": "2026-12-31",
    "period_label": "2026",
    "period_start": "2026-01-01",
    "value": 0.858141,
    "year": 2026
  },
  "latest_actual": {
    "basis": "actual",
    "formatted": "0.9",
    "is_projection": false,
    "period": "2025",
    "period_end": "2025-12-31",
    "period_label": "2025",
    "period_start": "2025-01-01",
    "value": 0.928126,
    "year": 2025
  },
  "observations": [
    {
      "basis": "actual",
      "formatted": "1.6",
      "is_projection": false,
      "period": "2023",
      "period_end": "2023-12-31",
      "period_label": "2023",
      "period_start": "2023-01-01",
      "value": 1.62017,
      "year": 2023
    },
    {
      "basis": "actual",
      "formatted": "1.1",
      "is_projection": false,
      "period": "2024",
      "period_end": "2024-12-31",
      "period_label": "2024",
      "period_start": "2024-01-01",
      "value": 1.106862,
      "year": 2024
    }
  ],
  "projection_count": 1,
  "source": "IMF staff calculations.",
  "statistic": "gdp_growth",
  "statistic_label": "GDP growth",
  "unit": "percent a year",
  "updated_at": "2026-04-15T13:00:00Z"
}
```

### Get data from a dataset

Get figures from any IMF dataset. Name the dataset and its filters appear as boxes, labelled the way the IMF labels them. Comes back as figures to loop over - each carrying every filter in both code and words - and as a table ready to append to a spreadsheet, and it says which boxes you left open. A request that would select thousands of series is refused before it is sent, naming the box to fill in.

**Inputs**

- Dataset (`dataset`, text, required): Which of the IMF's datasets to read. The list holds the hundred or so the IMF maintains; the dated archive copies are not in it but can be typed in by code. A value from an earlier step can be the code ('WEO'), the full reference ('IMF.RES:WEO') or the dataset's name. Use 'Find a dataset' to search the catalogue by words.
- Filters (`filters`, object): One box per filter of the chosen dataset, filled in with the IMF's own codes - COUNTRY=USA, INDICATOR=NGDP_RPCH, FREQUENCY=A. Use 'List a filter's values' to see what a box accepts, and separate several codes with commas. A box left blank returns every value that filter has, which can be hundreds, so filling in the ones you care about is what keeps a step quick.
- From (`from_date`, date): The earliest date to cover. The IMF reports in whole periods - a year, a quarter, a month - so this is read as the period that contains the date rather than as the day itself. Left empty, a step returns the recent part of the series rather than all of it, because a monthly one runs back to the 1950s and eight hundred figures is rarely what was wanted; set a date here to reach the whole history.
- To (`to_date`, date): The latest date to cover, read as the period that contains it. Leave it empty to run to the end of the series, which for a World Economic Outlook figure is several years of IMF projections.
- Number of records (`limit`, number): Optional. How many records to return. Between 1 and 500; 25 by default. From 1 to 500. Default: `25`.
- Skip (`offset`, number): Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `citation` (text): How the IMF asks to be cited
- `count` (number): How many are on this page
- `covers_recent_only` (true/false): True when no dates were given, so these are the recent periods rather than the dataset's whole history. Set a From date for more
- `dataset` (text): The dataset that was read
- `dataset_name` (text): That dataset's name
- `dataset_url` (text): Where to read it on the IMF's site
- `figures` (list): The figures, oldest first. Each one also carries one field per filter of the dataset, in lower case, plus the same name with '_label' for the words behind the code
- `filters_applied` (object): The filters that were sent to the IMF
- `first_period` (text): The earliest period matched
- `has_more` (true/false): True when more matched than this page holds
- `key` (text): The key that was asked for, in the IMF's own notation
- `last_period` (text): The latest period matched
- `next_offset` (number): The offset that returns the next page
- `open_filters` (list): The filters left blank, which is why a result is larger than expected. Fill these in to narrow it
- `source` (text): Who compiled the figures
- `table` (object): The same figures ready to append to a spreadsheet
- `total_count` (number): How many matched in all
- `updated_at` (text): When the IMF last published this dataset

**Example output**

```json
{
  "citation": "International Monetary Fund. World Economic Outlook (WEO), https://data.imf.org/en/datasets/IMF.RES:WEO. Accessed on [current date].",
  "count": 5,
  "covers_recent_only": false,
  "dataset": "WEO",
  "dataset_name": "World Economic Outlook (WEO)",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "figures": [
    {
      "country": "FRA",
      "country_label": "France",
      "formatted": "8.03",
      "frequency": "A",
      "frequency_label": "Annual",
      "indicator": "LUR",
      "indicator_label": "Unemployment rate",
      "is_projection": false,
      "period": "2020",
      "period_end": "2020-12-31",
      "period_label": "2020",
      "period_start": "2020-01-01",
      "series_name": "Unemployment rate",
      "status": "",
      "unit": "",
      "value": 8.025
    },
    {
      "country": "FRA",
      "country_label": "France",
      "formatted": "7.87",
      "frequency": "A",
      "frequency_label": "Annual",
      "indicator": "LUR",
      "indicator_label": "Unemployment rate",
      "is_projection": false,
      "period": "2021",
      "period_end": "2021-12-31",
      "period_label": "2021",
      "period_start": "2021-01-01",
      "series_name": "Unemployment rate",
      "status": "",
      "unit": "",
      "value": 7.866667
    }
  ],
  "filters_applied": {
    "COUNTRY": "FRA",
    "FREQUENCY": "A",
    "INDICATOR": "LUR"
  },
  "first_period": "2020",
  "has_more": false,
  "key": "FRA.LUR.A",
  "last_period": "2024",
  "next_offset": null,
  "open_filters": [],
  "source": "IMF staff calculations.",
  "table": {
    "headers": [
      "Period",
      "Country",
      "Indicator",
      "Frequency",
      "Value"
    ],
    "rows": [
      [
        "2020",
        "France",
        "Unemployment rate",
        "Annual",
        8.025
      ],
      [
        "2021",
        "France",
        "Unemployment rate",
        "Annual",
        7.866667
      ]
    ]
  },
  "total_count": 5,
  "updated_at": "2026-04-15T13:00:00Z"
}
```

### Get the latest figure

Get the most recent value of one IMF statistic for one country, returned flat so a later step can read the number, the period and the change on the period before without indexing into a list. Answers 'what is inflation in Brazil' in one step. Because the IMF publishes forecasts beside measurements, this returns the latest measurement by default and will only hand back a forecast if you ask it to.

**Inputs**

- Statistic (`statistic`, text): Which figure to read. These are the twenty-six headline statistics the IMF is asked for most, and the dataset and codes behind each one are already filled in. GDP growth by default. For anything else the IMF publishes - trade by partner country, financial soundness, reserves - use 'Get data from a dataset'. One of: `gdp_growth` (GDP growth (percent a year)), `gdp` (GDP (US dollars)), `gdp_per_person` (GDP per person (US dollars a person)), `gdp_ppp` (GDP at purchasing-power parity (international dollars)), `gdp_per_person_ppp` (GDP per person at purchasing-power parity (international dollars a person)), `share_of_world_gdp` (Share of world GDP (percent of world GDP)), `output_gap` (Output gap (percent of potential GDP)), `inflation` (Inflation (percent a year)), `inflation_end_of_year` (Inflation at the end of the year (percent a year)), `inflation_monthly` (Inflation, monthly (percent a year)), and 16 more. Default: `gdp_growth`.
- Country (`country`, text): Which economy to read. The list holds every country the IMF reports on, followed by the groups it aggregates - the world, the euro area, the G7. A value from an earlier step can be the country's name ('Japan'), either of its ISO codes ('JP' or 'JPN'), or the name a person would say rather than the IMF's formal one ('South Korea' finds 'Korea, Republic of'). The United States by default. Default: `USA`.
- What counts as the latest (`basis`, text): The World Economic Outlook publishes forecasts five years ahead in the same column as the measurements, so 'the latest figure' is ambiguous and this settles it. By default the latest actual is returned, because a number presented as a measurement should be one. Switch to include forecasts when the question really is what the IMF expects. Either way each figure says which it is. One of: `actual` (Only figures the IMF reports as actual), `any` (The latest figure, forecast or actual). Default: `actual`.

**Outputs**

- `basis` (text): 'actual' or 'projection'
- `change` (number): This figure less the one before it
- `citation` (text): How the IMF asks to be cited
- `country` (text): The IMF's code for the economy
- `country_label` (text): That economy's name
- `dataset` (text): The dataset it came from
- `dataset_url` (text): Where to read the same dataset on the IMF's site
- `formatted` (text): The figure written out, scaled the way the IMF prints it
- `is_projection` (true/false): True when this is an IMF forecast rather than a measurement
- `period` (text): The period it belongs to
- `period_label` (text): That period for people
- `previous_period` (text): The period that figure belongs to
- `previous_value` (number): The figure for the period before, empty when there is none
- `source` (text): Who compiled the figures
- `statistic` (text): The statistic that was read
- `statistic_label` (text): Its name
- `unit` (text): What the figure is in
- `updated_at` (text): When the IMF last published this dataset
- `value` (number): The figure itself
- `year` (number): The calendar year it falls in

**Example output**

```json
{
  "basis": "actual",
  "change": -1.390609,
  "citation": "International Monetary Fund. World Economic Outlook (WEO), https://data.imf.org/en/datasets/IMF.RES:WEO. Accessed on [current date].",
  "country": "FRA",
  "country_label": "France",
  "dataset": "WEO",
  "dataset_url": "https://data.imf.org/en/datasets/IMF.RES:WEO",
  "formatted": "0.9",
  "is_projection": false,
  "period": "2025",
  "period_label": "2025",
  "previous_period": "2024",
  "previous_value": 2.316636,
  "source": "IMF staff calculations.",
  "statistic": "inflation",
  "statistic_label": "Inflation",
  "unit": "percent a year",
  "updated_at": "2026-04-15T13:00:00Z",
  "value": 0.926027,
  "year": 2025
}
```

### List a filter's values

List the codes one filter of one dataset accepts, each with the words behind it, so a filter box can be filled in rather than guessed at. The IMF shares its code lists across datasets - the country list has 343 entries and no single dataset covers them all - so the values this dataset actually holds figures for come first and every row says which it is. Search by words to find one in a list of hundreds.

**Inputs**

- Dataset (`dataset`, text, required): Which of the IMF's datasets to read. The list holds the hundred or so the IMF maintains; the dated archive copies are not in it but can be typed in by code. A value from an earlier step can be the code ('WEO'), the full reference ('IMF.RES:WEO') or the dataset's name. Use 'Find a dataset' to search the catalogue by words.
- Filter (`filter_name`, text, required): Which of the dataset's filters to list. The list fills in once a dataset is chosen. 'Get a dataset's details' shows them all at once with their sizes.
- Search (`search`, text): Only the entries containing this text. Capitals, accents and punctuation are ignored. Leave it empty for everything.
- Number of records (`limit`, number): Optional. How many records to return. Between 1 and 500; 25 by default. From 1 to 500. Default: `25`.
- Skip (`offset`, number): Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default. At least 0. Default: `0`.

**Outputs**

- `count` (number): How many are on this page
- `dataset` (text): The dataset it belongs to
- `dataset_name` (text): That dataset's name
- `filter` (text): The filter that was listed
- `filter_label` (text): What the IMF calls it
- `has_more` (true/false): True when more matched than this page holds
- `next_offset` (number): The offset that returns the next page
- `search` (text): The text that was searched for
- `total_count` (number): How many matched in all
- `url` (text): Where to read the dataset on the IMF's site
- `values` (list): The values, the ones with figures first
- `with_data_count` (number): How many of them this dataset has figures for

**Example output**

```json
{
  "count": 3,
  "dataset": "ER",
  "dataset_name": "Exchange Rates (ER)",
  "filter": "INDICATOR",
  "filter_label": "Indicator",
  "has_more": true,
  "next_offset": 3,
  "search": "",
  "total_count": 10,
  "url": "https://data.imf.org/en/datasets/IMF.STA:ER",
  "values": [
    {
      "description": "Domestic currency per ECU",
      "has_data": true,
      "label": "Domestic currency per ECU",
      "value": "XDC_ECU"
    },
    {
      "description": "Domestic currency per Euro",
      "has_data": true,
      "label": "Domestic currency per Euro",
      "value": "XDC_EUR"
    }
  ],
  "with_data_count": 10
}
```
