FRED Series
Series from the Federal Reserve's FRED database by series ID — rates, prices, output, employment and more — as a point-in-time panel: every value carries the date it was actually published, and a later revision is a new row rather than an overwrite, so you can reconstruct exactly what was knowable on any past date.
fred_series — the dataset name to pass to the Obscura API.
What one row means
One FRED series value for one reference period AS IT STOOD ON ONE VINTAGE DATE — e.g. (CPIAUCSL, period 2026-06-01, published 2026-07-14, 332.568), and then a second row (CPIAUCSL, period 2026-06-01, published 2026-08-12, 332.6) when BLS restates it. Sourced from ALFRED's real-time observations endpoint (`fred/series/observations` with an unbounded `realtime_start`/`realtime_end` window), which returns the full revision panel rather than the latest-only snapshot the keyless CSV export serves.
One row per (series_id, period_end, available_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 fred_series: published: available_date is ALFRED's `realtime_start` — the real-time period start, i.e. the day FRED first served THIS value for THIS reference period. It is a genuine dissemination date read straight off the source, never a period date. Observations that predate the series' first ALFRED vintage are clamped by the source to that first vintage date, which is still the earliest date they are demonstrably public, so the column is never look-ahead.
Refresh cadence
Obscura refreshes fred_series every weekday — 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 — 5 columns
The full public column list for fred_series, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/fred_series.
| Column | Type | Description |
|---|---|---|
| series_id | text · not null | FRED series mnemonic, verbatim (e.g. "DGS10" = 10y Treasury constant maturity rate, "UNRATE" = civilian unemployment rate, "CPIAUCSL" = CPI for all urban consumers). Part of the composite primary key. |
| period_end | date · not null | The REFERENCE PERIOD this value describes — FRED's `observation_date`, verbatim. FRED labels a period by its first day, so a monthly series carries the 1st of the month and a quarterly series the 1st of the quarter; a daily series carries the day itself. This is a period/as-of date and is NEVER the date the value became public. Part of the composite primary key. |
| available_date | date · not null | PUBLIC-availability date = ALFRED's `realtime_start` for this value: the day FRED first served THIS number for THIS reference period. The point-in-time column to filter and join on. Part of the composite primary key, which is what makes a revision APPEND a new row rather than overwrite the number a backtest would have seen at the time. |
| value | double precision | The series' reported value for `period_end` as published on `available_date`, in that series' own native unit (percent, index level, thousands of persons, billions of chained dollars, etc. — not normalized or stored here). NULL for FRED's "." missing-observation marker. |
| revised_at | date | Vintage marker: NULL when this row is the series' FIRST published value for `period_end`, and the restatement date (= `available_date`) when it is a later revision of a number FRED had already published. Lets a consumer separate "initial release" from "restated" without a self-join, and makes the revision history explicit rather than implied. |
Access fred_series
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="fred_series",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the fred_series dataset?
Series from the Federal Reserve's FRED database by series ID — rates, prices, output, employment and more — as a point-in-time panel: every value carries the date it was actually published, and a later revision is a new row rather than an overwrite, so you can reconstruct exactly what was knowable on any past date. One FRED series value for one reference period AS IT STOOD ON ONE VINTAGE DATE — e.g. (CPIAUCSL, period 2026-06-01, published 2026-07-14, 332.568), and then a second row (CPIAUCSL, period 2026-06-01, published 2026-08-12, 332.6) when BLS restates it. Sourced from ALFRED's real-time observations endpoint (`fred/series/observations` with an unbounded `realtime_start`/`realtime_end` window), which returns the full revision panel rather than the latest-only snapshot the keyless CSV export serves.
How do I avoid look-ahead bias with fred_series?
Filter on fred_series.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date is ALFRED's `realtime_start` — the real-time period start, i.e. the day FRED first served THIS value for THIS reference period. It is a genuine dissemination date read straight off the source, never a period date. Observations that predate the series' first ALFRED vintage are clamped by the source to that first vintage date, which is still the earliest date they are demonstrably public, so the column is never look-ahead. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get fred_series?
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="fred_series". The column schema is public at https://api.obscura.trade/v1/catalog/fred_series.
Can I filter fred_series by company or symbol?
Yes. fred_series carries series_id, the column the API's symbols filter resolves against.
How often is fred_series updated?
Obscura refreshes fred_series on a every weekday 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.