IMF Indicators
Country-level macro indicators from the IMF's DataMapper.
imf_indicators — the dataset name to pass to the Obscura API.
What one row means
One IMF DataMapper indicator's reported/projected value for one country in one calendar year (indicator_code + country_iso3 + year -> value), long format, sourced from IMF's keyless DataMapper API which nests a full country x year grid (~1980..present plus WEO forward projections). Every scheduled run re-pulls the entire grid and upserts every cell, so a stored row always reflects IMF's latest published revision as of the most recent sync.
One row per (indicator_code, country_iso3, year).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For imf_indicators: published: available_date = period_end (year-end, make_date(year,12,31)) + 120 days, the WEO first-estimate publication lag; values are later revised in place with no history retained.
Refresh cadence
Obscura refreshes imf_indicators weekly — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 6 columns
The full public column list for imf_indicators, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/imf_indicators.
| Column | Type | Description |
|---|---|---|
| indicator_code | text · not null | IMF DataMapper indicator mnemonic, verbatim (e.g. NGDP_RPCH = real GDP growth %, PCPIPCH = inflation avg consumer prices %, GGXWDG_NGDP = general government gross debt % of GDP, LUR = unemployment rate %). Part of the composite primary key. |
| country_iso3 | text · not null | ISO3 country/aggregate code from the response's values.{indicator}.{iso3} key. Part of the composite primary key. The API always returns all ~229 entities regardless of any requested filter, so this column also holds IMF's own regional/income-group aggregate pseudo-codes alongside real ISO3 codes. |
| year | integer · not null | The calendar/reference year the value describes, parsed from the response's per-country year key. Part of the composite primary key. This is the dataset's true natural/reference-period field, spanning ~1980 through several years of WEO forward projections; the payload gives no signal distinguishing a historical actual from a still-forward-looking projection. |
| value | double precision | The indicator's reported/projected numeric value for (indicator_code, country_iso3, year), in that indicator's native unit (percent for NGDP_RPCH/PCPIPCH/LUR/GGXWDG_NGDP). Nullable when DataMapper's value isn't parseable as f64. Because every run re-pulls and upserts the full grid, this always reflects IMF's latest revision; prior revisions are overwritten in place with no history retained. |
| period_end | date | End of the reference year, DB-generated as make_date(year, 12, 31) — the honest reference-period end date the value describes. |
| available_date | date | PUBLIC-availability date = period_end + 120 days, the WEO first-estimate publication lag. DB-generated, read-only; the point-in-time column to filter/join on for backtest-safe access — NEVER the reference year itself. |
Access imf_indicators
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="imf_indicators",
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the imf_indicators dataset?
Country-level macro indicators from the IMF's DataMapper. One IMF DataMapper indicator's reported/projected value for one country in one calendar year (indicator_code + country_iso3 + year -> value), long format, sourced from IMF's keyless DataMapper API which nests a full country x year grid (~1980..present plus WEO forward projections). Every scheduled run re-pulls the entire grid and upserts every cell, so a stored row always reflects IMF's latest published revision as of the most recent sync.
How do I avoid look-ahead bias with imf_indicators?
Filter on imf_indicators.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = period_end (year-end, make_date(year,12,31)) + 120 days, the WEO first-estimate publication lag; values are later revised in place with no history retained. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get imf_indicators?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="imf_indicators". The column schema is public at https://api.obscura.trade/v1/catalog/imf_indicators.
How often is imf_indicators updated?
Obscura refreshes imf_indicators on a weekly schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.