mcpField
F
fred-macro

fred-macro

github.com/gauss314Data & databases252359 installsUpdated 19w ago
Repository

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

  1. 01Search series by text, category, or tag
  2. 02Retrieve historical observations and metadata
  3. 03Download series as CSV, JSON, or Parquet
  4. 04Batch downloads for predefined categories

Use cases

  1. 01Fetch GDP, inflation, or employment time series
  2. 02Find FRED series relevant to a research question
  3. 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-macro

After installing, type/fred-macroin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
API_REFERENCE.md
SERIES_REFERENCE.md
scripts/
download_multiple.py
fetch_series.py
search_series.py

Details

From the project README

FRED 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)
  1. Ir a: https://fred.stlouisfed.org/docs/api/api_key.html
  2. Crear cuenta gratuita (email + contraseña)
  3. Solicitar API key (se genera instantáneamente)
  4. 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ímiteValor
Requests por minuto120 req/min
Requests por díaIlimitado (sin límite diario explícito)
Máx observaciones por request100,000
Máx series por requestDepende del endpoint (generalmente 1)
CostoCompletamente GRATIS
Recomendaciones
  • Cachear respuestas localmente (los datos macroeconómicos cambian con poca frecuencia)
  • Usar observation_start y observation_end para 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
EndpointDescripciónAuth
GET /fred/series/observationsValores históricos de una serieAPI Key
GET /fred/series/searchBuscar series por textoAPI Key
GET /fred/seriesMetadatos de una serieAPI Key
GET /fred/series/categoriesCategorías de una serieAPI Key
GET /fred/series/releaseRelease asociado a una serieAPI Key
Categorías y Releases
EndpointDescripción
GET /fred/categoryInformación de una categoría
GET /fred/category/childrenSubcategorías
GET /fred/category/relatedCategorías relacionadas
GET /fred/category/seriesSeries en una categoría
GET /fred/releaseInformación de un release
GET /fred/release/datesFechas de un release
GET /fred/release/seriesSeries en un release
Tags (etiquetas)
EndpointDescripción
GET /fred/tagsBuscar tags
GET /fred/related_tagsTags relacionados
GET /fred/tags/seriesSeries con un tag específico
GET /fred/series/tagsTags de una serie
Fuentes (Sources)
EndpointDescripción
GET /fred/sourcesLista de fuentes de datos
GET /fred/sourceInformación de una fuente
Mapas de Calendario
EndpointDescripción
GET /fred/series/updatesSeries actualizadas recientemente
GET /fred/seasonal/adjustmentsOpciones 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):

IDCategoríaEjemplos
0Todas las categorías (raíz)—
32991Population, Employment, & Labor MarketsUNRATE, PAYEMS, NFP
32992National Income & Product AccountsGDP, GDPC1, GNP
32993Consumer Price Indexes (CPI)CPIAUCSL, CPILFESL
32994Producer Price Indexes (PPI)PPIACO, PPIFIS
32995Interest RatesFEDFUNDS, DGS10, DGS2
32996Money, Banking, & FinanceM2SL, M1SL, TOTBKCR
32997International TradeBOPGSTB
33000U.S. Regional DataEstadísticas estatales
33001Academic DataDatos 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

ScriptDescripción
fetch_series.pyDescarga una o más series FRED en CSV/JSON/Parquet
search_series.pyBusca series FRED por texto, categoría o tag
download_multiple.pyDescarga batches de series predefinidas por categoría

Series Esenciales (Headlines)

SerieDescripciónFrecuencia
GDPPIB Nominal (Billions $)Trimestral
GDPC1PIB Real (Billions chained $)Trimestral
CPIAUCSLIPC General (CPI All Items)Mensual
CPILFESLIPC Subyacente (Core CPI)Mensual
PCEPILFEPCE Subyacente (Core PCE)Mensual
FEDFUNDSTasa de Fondos FederalesDiaria
DFFTasa de Fondos Federales (efectiva)Diaria
DGS10Treasury a 10 añosDiaria
DGS2Treasury a 2 añosDiaria
T10Y2YSpread 10y-2y (curva invertida)Diaria
UNRATETasa de DesempleoMensual
PAYEMSNóminas no agrícolas (Nonfarm Payrolls)Mensual
M2SLM2 Money SupplyMensual
M1SLM1 Money SupplyMensual
VIXCLSVIX (volatilidad S&P 500)Diaria
BAA10YSpread BAA - 10y (credit spread)Diaria
TOTALSAVentas MinoristasMensual
INDPROProducción IndustrialMensual
HOUSTViviendas IniciadasMensual
MORTGAGE30USTasa Hipoteca 30 añosSemanal

Referencia completa: references/SERIES_REFERENCE.md (100+ series documentadas).


Buenas Prácticas

  1. Cachear datos: los datos macro no cambian frecuentemente; guardar en Parquet/CSV local
  2. Usar file_type=json: más fácil de parsear que XML
  3. Filtrar por fecha: usar observation_start para evitar descargar historia innecesaria
  4. Manejar valores ".": representan datos no disponibles (NaN)
  5. Rate limiting: 120 req/min = 1 request cada 0.5s como mínimo
  6. API Key: usar variable de entorno FRED_API_KEY
  7. 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

Comments

Markdown supported