About fred-macro
fred-macro provides scripts and guidance for searching and downloading macroeconomic time series from the FRED API. It is intended for users working with economic data and supports series discovery, metadata lookup, and CSV, JSON, or Parquet downloads.
Key features
- 01Search series by text, category, or tag
- 02Retrieve historical observations and metadata
- 03Download series as CSV, JSON, or Parquet
- 04Batch downloads for predefined categories
Use cases
- 01Fetch GDP, inflation, or employment time series
- 02Find FRED series relevant to a research question
- 03Download multiple series for local analysis
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ gauss314/ skills --skill fred-macroAfter installing, type/fred-macroin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/API_REFERENCE.mdSERIES_REFERENCE.mdscripts/download_multiple.pyfetch_series.pysearch_series.pyDetails
From the project READMEFRED Macro — Federal Reserve Economic Data API
API gratuita y oficial de la Reserva Federal de St. Louis (FRED) con 840,000+ series temporales macroeconómicas: PIB, inflación (CPI/PCE), tasas de interés, empleo, M2, VIX, treasuries, hipotecas y más.
Base URL: https://api.stlouisfed.org/fred
Documentación oficial: fred.stlouisfed.org/docs/api/fred/
Autenticación
Obtener API Key (GRATIS)
- Ir a: https://fred.stlouisfed.org/docs/api/api_key.html
- Crear cuenta gratuita (email + contraseña)
- Solicitar API key (se genera instantáneamente)
- No requiere tarjeta de crédito
Usar la API Key
import os
API_KEY = os.getenv("FRED_API_KEY") # Recomendado
# o directamente para pruebas:
# API_KEY = "TU_API_KEY_AQUI"
⚠️ NUNCA hardcodear la API key en código compartido/commits.
Rate Limits
| Límite | Valor |
|---|---|
| Requests por minuto | 120 req/min |
| Requests por día | Ilimitado (sin límite diario explícito) |
| Máx observaciones por request | 100,000 |
| Máx series por request | Depende del endpoint (generalmente 1) |
| Costo | Completamente GRATIS |
Recomendaciones
- Cachear respuestas localmente (los datos macroeconómicos cambian con poca frecuencia)
- Usar
observation_startyobservation_endpara limitar rangos - Implementar retry con backoff si se recibe HTTP 429 (Too Many Requests)
- Para descargar muchas series, intercalar 0.5s entre requests
Endpoints Principales
Series y Observaciones
| Endpoint | Descripción | Auth |
|---|---|---|
GET /fred/series/observations | Valores históricos de una serie | API Key |
GET /fred/series/search | Buscar series por texto | API Key |
GET /fred/series | Metadatos de una serie | API Key |
GET /fred/series/categories | Categorías de una serie | API Key |
GET /fred/series/release | Release asociado a una serie | API Key |
Categorías y Releases
| Endpoint | Descripción |
|---|---|
GET /fred/category | Información de una categoría |
GET /fred/category/children | Subcategorías |
GET /fred/category/related | Categorías relacionadas |
GET /fred/category/series | Series en una categoría |
GET /fred/release | Información de un release |
GET /fred/release/dates | Fechas de un release |
GET /fred/release/series | Series en un release |
Tags (etiquetas)
| Endpoint | Descripción |
|---|---|
GET /fred/tags | Buscar tags |
GET /fred/related_tags | Tags relacionados |
GET /fred/tags/series | Series con un tag específico |
GET /fred/series/tags | Tags de una serie |
Fuentes (Sources)
| Endpoint | Descripción |
|---|---|
GET /fred/sources | Lista de fuentes de datos |
GET /fred/source | Información de una fuente |
Mapas de Calendario
| Endpoint | Descripción |
|---|---|
GET /fred/series/updates | Series actualizadas recientemente |
GET /fred/seasonal/adjustments | Opciones de ajuste estacional |
Formato de Respuesta
Por defecto devuelve XML. Se puede cambiar con &file_type=json:
{
"realtime_start": "2026-06-01",
"realtime_end": "2026-06-01",
"observation_start": "1954-07-01",
"observation_end": "2026-06-01",
"units": "lin",
"count": 864,
"observations": [
{
"realtime_start": "2026-06-01",
"realtime_end": "2026-06-01",
"date": "1954-07-01",
"value": "."
},
{
"realtime_start": "2026-06-01",
"realtime_end": "2026-06-01",
"date": "1954-10-01",
"value": "126.8"
}
]
}
Nota: valores
"."indican dato no disponible (N/A).
Categorías de Series
Las series FRED están organizadas en categorías (ids numéricos):
| ID | Categoría | Ejemplos |
|---|---|---|
| 0 | Todas las categorías (raíz) | — |
| 32991 | Population, Employment, & Labor Markets | UNRATE, PAYEMS, NFP |
| 32992 | National Income & Product Accounts | GDP, GDPC1, GNP |
| 32993 | Consumer Price Indexes (CPI) | CPIAUCSL, CPILFESL |
| 32994 | Producer Price Indexes (PPI) | PPIACO, PPIFIS |
| 32995 | Interest Rates | FEDFUNDS, DGS10, DGS2 |
| 32996 | Money, Banking, & Finance | M2SL, M1SL, TOTBKCR |
| 32997 | International Trade | BOPGSTB |
| 33000 | U.S. Regional Data | Estadísticas estatales |
| 33001 | Academic Data | Datos académicos |
Ver referencia completa en references/SERIES_REFERENCE.md.
Uso Rápido
1. Descargar una serie (Python)
import requests
API_KEY = "TU_API_KEY"
url = "https://api.stlouisfed.org/fred/series/observations"
params = {
"series_id": "GDP",
"api_key": API_KEY,
"file_type": "json",
"observation_start": "2020-01-01",
"observation_end": "2025-12-31"
}
r = requests.get(url, params=params)
data = r.json()
for obs in data["observations"]:
if obs["value"] != ".":
print(obs["date"], obs["value"])
2. Buscar series por palabra clave
params = {
"api_key": API_KEY,
"file_type": "json",
"search_text": "inflation",
"search_type": "full_text", # o "series_id"
"limit": 10
}
r = requests.get("https://api.stlouisfed.org/fred/series/search", params=params)
3. Usando pandas
import pandas as pd
import requests
def fetch_fred(series_id, api_key, start="2020-01-01"):
url = "https://api.stlouisfed.org/fred/series/observations"
params = {"series_id": series_id, "api_key": api_key,
"file_type": "json", "observation_start": start}
r = requests.get(url, params=params)
df = pd.DataFrame(r.json()["observations"])
df["date"] = pd.to_datetime(df["date"])
df["value"] = pd.to_numeric(df["value"], errors="coerce")
return df.set_index("date")["value"]
gdp = fetch_fred("GDP", API_KEY)
cpi = fetch_fred("CPIAUCSL", API_KEY)
fedfunds = fetch_fred("FEDFUNDS", API_KEY)
Scripts Disponibles
| Script | Descripción |
|---|---|
| fetch_series.py | Descarga una o más series FRED en CSV/JSON/Parquet |
| search_series.py | Busca series FRED por texto, categoría o tag |
| download_multiple.py | Descarga batches de series predefinidas por categoría |
Series Esenciales (Headlines)
| Serie | Descripción | Frecuencia |
|---|---|---|
GDP | PIB Nominal (Billions $) | Trimestral |
GDPC1 | PIB Real (Billions chained $) | Trimestral |
CPIAUCSL | IPC General (CPI All Items) | Mensual |
CPILFESL | IPC Subyacente (Core CPI) | Mensual |
PCEPILFE | PCE Subyacente (Core PCE) | Mensual |
FEDFUNDS | Tasa de Fondos Federales | Diaria |
DFF | Tasa de Fondos Federales (efectiva) | Diaria |
DGS10 | Treasury a 10 años | Diaria |
DGS2 | Treasury a 2 años | Diaria |
T10Y2Y | Spread 10y-2y (curva invertida) | Diaria |
UNRATE | Tasa de Desempleo | Mensual |
PAYEMS | Nóminas no agrícolas (Nonfarm Payrolls) | Mensual |
M2SL | M2 Money Supply | Mensual |
M1SL | M1 Money Supply | Mensual |
VIXCLS | VIX (volatilidad S&P 500) | Diaria |
BAA10Y | Spread BAA - 10y (credit spread) | Diaria |
TOTALSA | Ventas Minoristas | Mensual |
INDPRO | Producción Industrial | Mensual |
HOUST | Viviendas Iniciadas | Mensual |
MORTGAGE30US | Tasa Hipoteca 30 años | Semanal |
Referencia completa: references/SERIES_REFERENCE.md (100+ series documentadas).
Buenas Prácticas
- Cachear datos: los datos macro no cambian frecuentemente; guardar en Parquet/CSV local
- Usar
file_type=json: más fácil de parsear que XML - Filtrar por fecha: usar
observation_startpara evitar descargar historia innecesaria - Manejar valores
".": representan datos no disponibles (NaN) - Rate limiting: 120 req/min = 1 request cada 0.5s como mínimo
- API Key: usar variable de entorno
FRED_API_KEY - Citar fuente: obligatorio incluir "This product uses the FRED API but is not endorsed or certified by the Federal Reserve Bank of St. Louis" en apps comerciales