bcra-macro

star 138

API de Estadísticas Monetarias v4.0 del BCRA con 638 series macroeconómicas (reservas, tipo de cambio, tasas, M1/M2/M3, inflación, CER, UVA).

gauss314 By gauss314 schedule Updated 6/3/2026

name: bcra-macro description: API de Estadísticas Monetarias v4.0 del BCRA con 638 series macroeconómicas (reservas, tipo de cambio, tasas, M1/M2/M3, inflación, CER, UVA). license: MIT metadata: category: finanzas, api, bcra, macroeconomia language: es source: https://www.bcra.gob.ar/documentacion-apis/?fileName=estadisticas-monetarias-v4

BCRA Macro — API de Estadísticas Monetarias v4.0

API oficial del BCRA para consultar variables macroeconómicas nacionales (no provinciales).
Base URL: https://api.bcra.gob.ar
Catálogo total: 1220 series → 638 series nacionales en ./references/VARIABLES.md.

Endpoints

# Endpoint Uso
1 GET /estadisticas/v4.0/Monetarias Catálogo de variables (paginado)
2 GET /estadisticas/v4.0/Monetarias/{IdVariable} Serie histórica de una variable (paginado)
3 GET /estadisticas/v4.0/Metodologia Índice de metodologías (paginado)
4 GET /estadisticas/v4.0/Metodologia/{IdVariable} Ficha metodológica de una variable

Autenticación: no requiere. CORS: abierto. Encoding: ISO-8859-1 en algunos textos.


1. Catálogo de variables

GET /estadisticas/v4.0/Monetarias

Devuelve el listado completo con metadatos (idVariable, descripcion, categoria, tipoSerie, periodicidad, unidadExpresion, moneda, primerFechaInformada, ultFechaInformado, ultValorInformado).

Filtros disponibles (query params)

Parámetro Tipo Descripción
IdVariable int Filtra por ID exacto
Categoria string Búsqueda parcial sin acentos ("depositos", "prestamos")
Periodicidad string D diaria, M mensual, T trimestral
Moneda string PES, DOL, ML, ME, MEyML
TipoSerie string Stock, Flujo, Tasa, etc.
UnidadExpresion string Texto libre
Limit int Default 1000, máx 3000
Offset int Paginación (sumar al salto)

Ejemplo mínimo

import requests, pandas as pd
r = requests.get("https://api.bcra.gob.ar/estadisticas/v4.0/Monetarias", params={"Limit": 3000})
df = pd.DataFrame(r.json()["results"])

2. Serie histórica de una variable

GET /estadisticas/v4.0/Monetarias/{IdVariable}

Devuelve {idVariable, detalle: [{fecha, valor}]}.

Parámetro Tipo Requerido Descripción
IdVariable int (path) ID de la variable
Desde string No YYYY-MM-DD
Hasta string No YYYY-MM-DD
Limit int No Default 1000, máx 3000
Offset int No Paginación
r = requests.get("https://api.bcra.gob.ar/estadisticas/v4.0/Monetarias/1",
                 params={"Desde": "2020-01-01", "Hasta": "2025-12-31"})
df = pd.DataFrame(r.json()["results"][0]["detalle"])
df["fecha"] = pd.to_datetime(df["fecha"])
df = df.set_index("fecha").sort_index()

3. Metodologías

GET /estadisticas/v4.0/Metodologia           # índice paginado
GET /estadisticas/v4.0/Metodologia/{idVar}   # ficha completa
r = requests.get("https://api.bcra.gob.ar/estadisticas/v4.0/Metodologia/1")
print(r.json()["results"][0]["detalle"])

4. Paginación: cómo superar el límite de 3000 registros

El API devuelve máximo 3000 filas por llamada y la serie diaria más larga (Reservas internacionales, ID 1) tiene ~9000 observaciones desde 1996. Hay dos estrategias.

Estrategia A — Paginación con Offset (la más simple)

Iterar sumando Offset += Limit hasta que la respuesta venga vacía.

import requests, pandas as pd

def get_serie(id_variable, limit=3000):
    url = f"https://api.bcra.gob.ar/estadisticas/v4.0/Monetarias/{id_variable}"
    offset, partes = 0, []
    while True:
        r = requests.get(url, params={"Limit": limit, "Offset": offset}).json()
        det = r["results"][0]["detalle"]
        if not det:
            break
        partes.append(pd.DataFrame(det))
        offset += limit
    df = pd.concat(partes).drop_duplicates("fecha").sort_values("fecha")
    df["fecha"] = pd.to_datetime(df["fecha"])
    return df.set_index("fecha")

reservas = get_serie(1)  # ~9000 observaciones desde 1996

Estrategia B — Chunking por rango de fechas (más rápido en serie larga)

Partir el rango total en ventanas (ej. anual) y pedir cada una con Desde/Hasta. Es preferible cuando la serie tiene >50.000 obs o se quieren datos muy antiguos en simultáneo.

import requests, pandas as pd
from datetime import date

def get_serie_por_chunks(id_variable, desde, hasta, ventana_dias=365):
    url = f"https://api.bcra.gob.ar/estadisticas/v4.0/Monetarias/{id_variable}"
    partes, d = [], pd.to_datetime(desde)
    fin = pd.to_datetime(hasta)
    while d <= fin:
        h = min(d + pd.Timedelta(days=ventana_dias - 1), fin)
        r = requests.get(url, params={"Desde": d.strftime("%Y-%m-%d"),
                                       "Hasta": h.strftime("%Y-%m-%d"),
                                       "Limit": 3000}).json()
        partes.append(pd.DataFrame(r["results"][0]["detalle"]))
        d = h + pd.Timedelta(days=1)
    df = pd.concat(partes).drop_duplicates("fecha").sort_values("fecha")
    df["fecha"] = pd.to_datetime(df["fecha"])
    return df.set_index("fecha")

base = get_serie_por_chunks(15, "1996-01-01", date.today().isoformat())

Estrategia C — Catálogo paginado (para re-listar todas las variables)

def catalogo_completo(limit=3000):
    url = "https://api.bcra.gob.ar/estadisticas/v4.0/Monetarias"
    offset, todo = 0, []
    while True:
        r = requests.get(url, params={"Limit": limit, "Offset": offset}).json()
        batch = r["results"]
        todo += batch
        if len(batch) < limit:
            break
        offset += limit
    return pd.DataFrame(todo)

Reglas de oro

  • La respuesta no incluye total → siempre hay que chequear con len(batch) < limit o detalle == [].
  • Hacer una sola llamada grande (Limit=3000) es más eficiente que muchas chicas.
  • La API no impone rate-limit público pero ser cortés: agregar time.sleep(0.2) entre llamadas si se itera en masa.

Variables nacionales (IDs más usados)

Listado completo en VARIABLES.md (638 series nacionales). Las 30 más consultadas:

ID Descripción Per.
1 Reservas internacionales (mill. USD) D
4 Tipo de cambio minorista ($/USD) D
5 Tipo de cambio mayorista de referencia ($/USD) D
7 Tasa BADLAR bancos privados (% TNA) D
8 Tasa TM20 bancos privados (% TNA) D
11 Tasa BAIBAR (% TNA) D
12 Tasa depósitos 30 días (% TNA) D
13 Tasa adelantos cta. cte. (% TNA) D
14 Tasa préstamos personales (% TNA) D
15 Base monetaria (mill. $) D
16 Circulación monetaria (mill. $) D
17 Billetes y monedas en poder del público (mill. $) D
18 Depósitos en entidades financieras (mill. $) D
19 Préstamos al sector privado (mill. $) D
26 Tasa de política monetaria (% TNA) D
27 Variación mensual IPC (%) M
28 Variación interanual IPC (%) M
29 REM - mediana inflación prox. 12 meses (%) M
30 CER (índice, base 2.2.02=1) D
31 UVA ($) D
32 UVI ($) D
40 ICL - Índice Contratos Locación ($) D
1187 Banda cambiaria - límite inferior ($/USD) D
1188 Banda cambiaria - límite superior ($/USD) D
1189 Tasa plazo fijo pesos (% TNA) D
1197 Tasa Intereses Moratorios TIM (% TNA) D
1232 M1 (mill. $) D
1233 M2 (mill. $) D
1234 M3 (mill. $) D

Tip: el ID cambia con la refactorización del API. Para confirmar el ID actual de una variable usar el endpoint de catálogo.

Categorías presentes en el catálogo

Categoría Cantidad nacional Descripción
Principales Variables 35 Indicadores macro headline (tasas, TC, reservas, base, CER, UVA, IPC)
Informe Monetario Diario 33 Series diarias del IMD (líneas del exterior, M1/M2/M3, créditos BCRA)
Series.xlsm 154 Factores de variación de la base monetaria y reservas
Tasas de interés de depósitos 10 Tasas de depósitos desagregadas por moneda y plazo
Préstamos por tipo de titular y destino 74 Préstamos por destino (hipotecarios, prendarios, personales)
Préstamos por tipo de titular 120 Préstamos al sector público/privado nacional, por moneda
Depósitos por tipo de titular 212 Depósitos del sector público/privado nacional, por moneda y plazo

Excluidas (582 series provinciales/municipales): los IDs 322+ desagregan por provincia (Buenos Aires, Córdoba, Santa Fe, etc.) y los items que mencionan "gobiernos provinciales" o "municipales" sin agregado nacional.

Códigos de moneda

Código Significado
ML Moneda local (pesos argentinos)
ME Moneda extranjera (dólares)
MEyML Agregado moneda local + extranjera
USD Dólares (sin conversión)

Tipos de serie

Saldos a fin de mes · Saldos · Tasa de interés · Flujo diario · Tipo de cambio · Variación · Cociente · Índice · Unidad de cuenta · Margen · Monto


Consideraciones técnicas

  • Sin autenticación — no requiere key ni token.
  • Tope de paginado: 3000 registros por llamada.
  • Encoding: las respuestas pueden traer caracteres extendidos (ISO-8859-1) — usar response.encoding o pd.read_json(..., encoding="utf-8").
  • Formato fechas: ISO 8601 (YYYY-MM-DD).
  • SLA: best-effort, sin garantías formales.

Enlaces útiles

Install via CLI
npx skills add https://github.com/gauss314/skills --skill bcra-macro
Repository Details
star Stars 138
call_split Forks 24
navigation Branch main
article Path SKILL.md
More from Creator