BCRA Macro — API de Estadísticas Monetarias v4.0
SkillDev toolsBCRA Monetary Statistics API v4.0 with 638 macroeconomic series (reserves, exchange rate, rates, M1/M2/M3, inflation, CER, UVA).
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the BCRA Macro — API de Estadísticas Monetarias v4.0 skill
What this skill tells your AI
The instructions your AI receives, as published by gauss314/skills in skills/bcra-macro/SKILL.md and read by ahel’s review.
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) | Sí | 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 conlen(batch) < limitodetalle == []. - 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.encodingopd.read_json(..., encoding="utf-8"). - Formato fechas: ISO 8601 (
YYYY-MM-DD). - SLA: best-effort, sin garantías formales.
Enlaces útiles
Signals
- GitHub stars
- 237
- Forks
- 35
- Last commit
- Jun 2026
Advanced
- Catalog kind
- skill
- Gateway key
bcra-macro- Source
- github.com/gauss314/skills