GPR Index Daily
The daily Geopolitical Risk index of Caldara and Iacoviello, derived from newspaper coverage of geopolitical tension.
gpr_index_daily — the dataset name to pass to the Obscura API.
What one row means
Caldara & Iacoviello Geopolitical Risk (GPR) index — DAILY series, one row per calendar day from 1985-01-01. Sourced from matteoiacoviello.com's `data_gpr_daily_recent.xls` and fully restated on each release (idempotent upsert on `index_date`).
One row per index_date.
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 gpr_index_daily: release_calendar: available_date = index_date + 7. The authors do not publish daily — they republish the entire workbook WEEKLY, restating 1985->present each time, so a given day first becomes downloadable at the next refresh: up to 7 days later (the file captured 2026-07-16 ended 2026-07-13, and on 2026-07-26 the newest stored row was 2026-07-20). The declared lag is the worst case, never an average. The STORED generated column computes index_date + 7 (m20260702_000182, which replaced the index_date + 1 of m20260702_000096).
Refresh cadence
Obscura refreshes gpr_index_daily daily — 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 — 9 columns
The full public column list for gpr_index_daily, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/gpr_index_daily.
| Column | Type | Description |
|---|---|---|
| index_date | date · not null | The GPR daily index's own calendar day (source `date` column) — the natural/event day the score describes, not the day it became public. |
| gprd | double precision | Headline daily geopolitical risk index (source `GPRD`). |
| gprd_act | double precision | Geopolitical Acts sub-index (source `GPRD_ACT`). |
| gprd_threat | double precision | Geopolitical Threats sub-index (source `GPRD_THREAT`). |
| gprd_ma30 | double precision | 30-day moving average of GPRD (source `GPRD_MA30`). |
| gprd_ma7 | double precision | 7-day moving average of GPRD (source `GPRD_MA7`). |
| n10d | double precision | Number of articles across the 10 recent newspapers (source `N10D`). |
| event | text | Notable geopolitical event label for the day, when present (source `event`). |
| available_date | date | PUBLIC-availability date = index_date + 7, the worst case under Caldara-Iacoviello's WEEKLY republication of the whole workbook (the declared lag was + 1 until m20260702_000182, which described a daily release calendar that does not exist, marked each day public before the workbook carrying it existed, and made any staleness alarm fire between refreshes). DB-generated (STORED), read-only; the point-in-time column to filter/ join on — NEVER index_date, which is the index's own event day. |
Access gpr_index_daily
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="gpr_index_daily",
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the gpr_index_daily dataset?
The daily Geopolitical Risk index of Caldara and Iacoviello, derived from newspaper coverage of geopolitical tension. Caldara & Iacoviello Geopolitical Risk (GPR) index — DAILY series, one row per calendar day from 1985-01-01. Sourced from matteoiacoviello.com's `data_gpr_daily_recent.xls` and fully restated on each release (idempotent upsert on `index_date`).
How do I avoid look-ahead bias with gpr_index_daily?
Filter on gpr_index_daily.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar: available_date = index_date + 7. The authors do not publish daily — they republish the entire workbook WEEKLY, restating 1985->present each time, so a given day first becomes downloadable at the next refresh: up to 7 days later (the file captured 2026-07-16 ended 2026-07-13, and on 2026-07-26 the newest stored row was 2026-07-20). The declared lag is the worst case, never an average. The STORED generated column computes index_date + 7 (m20260702_000182, which replaced the index_date + 1 of m20260702_000096). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get gpr_index_daily?
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="gpr_index_daily". The column schema is public at https://api.obscura.trade/v1/catalog/gpr_index_daily.
How often is gpr_index_daily updated?
Obscura refreshes gpr_index_daily on a daily 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.