# CMF Chile – Indicadores, UF, Dólar y Reportes Bancarios (`better-llama/cmf-chile-indicadores`) Actor

Normalized Chilean financial indicators (UF, USD, euro, UTM, IPC, TMC, TIP) and official bank reports from the CMF Chile API, using your own free API key. Not affiliated with CMF Chile.

- **URL**: https://apify.com/better-llama/cmf-chile-indicadores.md
- **Developed by:** [Francisco Rubio](https://apify.com/better-llama) (community)
- **Categories:** Developer tools, AI
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 resultado entregado / delivered results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## CMF Chile – Indicadores, UF, Dólar y Reportes Bancarios

**ES** · Indicadores financieros y reportes bancarios de Chile, normalizados, para agentes de IA y desarrolladores, obtenidos de la **API oficial CMF Bancos** (Comisión para el Mercado Financiero) usando **tu propia API Key**.
**EN** · Normalized Chilean financial indicators and bank reports for AI agents and developers, from the **official CMF Bancos API**, using **your own API key**.

> ⚠️ **Se requiere API Key propia / Your own API key is required.** La clave es gratuita, personal, y se solicita en <https://api.cmfchile.cl/uso-de-api-key.html>. Este Actor **no incluye, comparte ni revende claves**: cada ejecución usa la que tú entregas y consume **tu** cuota (**10.000 peticiones/mes** por clave).
>
> ⚠️ **No afiliado / Not affiliated.** Este Actor es un proyecto independiente. **No está afiliado, patrocinado ni aprobado por la Comisión para el Mercado Financiero (CMF Chile)** ni por su antecesora, la SBIF. "CMF", "CMF Chile" y "SBIF" se mencionan solo para describir la fuente de los datos.
>
> **Fuente de los datos / Data source (atribución exigida por los [términos de uso](https://api.cmfchile.cl/terminos-de-uso.html)):** Comisión para el Mercado Financiero (CMF Chile), API CMF Bancos, con mención de la fuente y enlace a la página principal de CMF Bancos (<https://www.sbif.cl> / <https://www.cmfchile.cl>). Cada registro incluye el campo `dataSource` con esta atribución.

### Qué hace / What it does

Consulta la **API CMF Bancos v3** (`https://api.cmfchile.cl/api-sbifv3/recursos_api`) con `formato=json` y tu `apikey`.

#### Indicadores financieros

| `source` | Recurso oficial | Periodicidad | Períodos |
|---|---|---|---|
| `uf` | [UF](https://api.cmfchile.cl/documentacion/UF.html) | diaria | vigente, año, mes, día, rango por meses/años |
| `dolar` | [Dólar observado](https://api.cmfchile.cl/documentacion/Dolar.html) | días hábiles | vigente, año, mes, día, rango (incluye días con `dias_i` / `dias_f`) |
| `euro` | [Euro](https://api.cmfchile.cl/documentacion/Euro.html) | días hábiles | igual que el dólar (`dias_i` / `dias_f` en el rango por días) |
| `utm` | [UTM](https://api.cmfchile.cl/documentacion/UTM.html) | mensual | vigente, año, mes, rango por meses/años |
| `ipc` | [IPC](https://api.cmfchile.cl/documentacion/IPC.html) | mensual (variación) | vigente, año, mes, rango por meses/años |
| `tmc` | [TMC](https://api.cmfchile.cl/documentacion/TMC.html) | mensual (varios tipos) | vigente (`/tmc` sin año), año, mes, rango |
| `tip` | [TIP](https://api.cmfchile.cl/documentacion/TIP.html) | mensual (varios tipos) | igual que TMC |

La **Tasa TAB UF 360** fue **suspendida** por la CMF (actualización del 28/03/2022) y debe pedirse a [Chilean Benchmark Facility](https://cbf.cl/). Este Actor no la ofrece.

Los valores se normalizan a número: la API mezcla formato chileno (`41.302,33`, `72.440`) y punto decimal en TMC/TIP (`50.01`). El campo `valueRaw` conserva el texto original.

#### Reportes bancarios

| `source` | Recurso oficial | Qué entrega |
|---|---|---|
| `balances` | [Balance mensual](https://api.cmfchile.cl/documentacion/Balance-Mensual-de-Bancos.html) | catálogo de instituciones o de cuentas, o el estado (una cuenta o el banco completo) de un mes |
| `resultados` | [Estado de resultados](https://api.cmfchile.cl/documentacion/Estado-de-Resultados-de-Bancos.html) | igual patrón que `balances` |
| `perfil` | [Fichas](https://api.cmfchile.cl/documentacion/Fichas.html) | ficha de un banco (SWIFT, RUT institucional, sucursales, empleados, teléfono y dirección de la institución) |
| `accionistas` | Fichas | nómina de accionistas: las **personas jurídicas** (empresas) quedan visibles; las **personas naturales** se ocultan |
| `integrantes` | Fichas | cargo y fechas del directorio / ejecutivos; **nombres de personas naturales ocultos** |
| `adecuacion` | [Adecuación de capital](https://api.cmfchile.cl/documentacion/Adecuacion-Capital.html) | IRS, IRE, componentes, o regresión de los últimos N meses |

- El **plan de cuentas vigente** usa códigos de **9 dígitos** (p. ej. `105000000` = Efectivo y depósitos en bancos; `100000000` = Total activos). El ejemplo `1000000` de la documentación de 2009 ya no devuelve datos (código oficial 80).
- Un estado mensual completo es grande (en una prueba de agosto de 2026, el balance de un banco pesó ~320 KB y el estado de resultados ~390 KB / 1.229 líneas). Usa `accountCode` o `maxItems`. Un año completo sin mes puede **superar el tiempo de espera** de la API; este Actor exige año y mes para el estado completo.
- `institutionCode` es el código SBIF de 3 dígitos (`001` Banco de Chile, `012` BancoEstado, `028` BICE, `999` sistema financiero).
- **Privacidad (Ley 19.628 / 21.719):** no se exponen nombres, RUT, correos ni teléfonos de **personas naturales** (directores, ejecutivos, accionistas personas naturales), ni los contactos personales del perfil (`contactoPublico`, `telefonoPublico`, correos), ni siquiera en `raw`. Sí se mantienen los datos de la institución (nombre, RUT, SWIFT, web, dirección principal, conmutador, sucursales, empleados) y de los accionistas que son **personas jurídicas**. El cargo, la participación y el número de acciones se conservan. Cada registro incluye `redacted` (si se ocultó algo) y `personType` (`persona_juridica`, `persona_natural` o `null`).

#### Comportamiento

- Pausa de **1,5 s** por defecto entre el fin de una respuesta y la siguiente solicitud; reintentos con espera exponencial ante errores de red, 5xx, código 60 y bloqueos intermitentes del WAF.
- **Errores claros:** API Key inválida (códigos 91/92, o el mensaje documentado si un WAF intercepta la clave), cuota agotada (código 90, 10.000/mes), sin datos (80/81: se entrega un run vacío con advertencia, no un fallo), TAB suspendida (código 100).
- **Deduplicación** si la ejecución se reanuda. El gasto se cobra solo por cada registro **entregado** (evento `result`).
- La API Key se marca como **secreto** (cifrada por Apify) y nunca se escribe en logs.

### Precio / Pricing

Pago por resultado (*pay per event*): solo se cobra el evento `result` por cada registro **entregado** en el dataset. No se cobran consultas vacías, duplicados ni errores. Ver la pestaña *Pricing* del Actor. Puedes fijar un gasto máximo por ejecución; el Actor se detiene al alcanzarlo.

### Input

Indicador vigente:

```json
{
  "apiKey": "TU-API-KEY-PERSONAL",
  "source": "uf",
  "period": "current"
}
```

Rango de dólar (días, ambas fechas incluidas):

```json
{
  "apiKey": "TU-API-KEY-PERSONAL",
  "source": "dolar",
  "period": "range",
  "year": 2026,
  "month": 1,
  "day": 14,
  "yearTo": 2026,
  "monthTo": 1,
  "dayTo": 16
}
```

Una cuenta del balance de un banco:

```json
{
  "apiKey": "TU-API-KEY-PERSONAL",
  "source": "balances",
  "year": 2026,
  "month": 8,
  "institutionCode": "001",
  "accountCode": "105000000"
}
```

| Campo | Descripción (ES) | Description (EN) |
|---|---|---|
| `apiKey` | Tu API Key (secreto, obligatorio) | Your API key (secret, required) |
| `source` | Recurso (ver tablas) | Resource |
| `period` | `current`, `year`, `month`, `date`, `range` (indicadores) | Period for indicators |
| `year` / `month` / `day` | Período inicial o único | Start / single period |
| `yearTo` / `monthTo` / `dayTo` | Fin del rango | End of range |
| `institutionCode` | Código SBIF de 3 dígitos | 3-digit SBIF code |
| `accountCode` | Código contable (9 dígitos en el plan vigente) | Account code |
| `listCatalog` | `instituciones` o `cuentas` (balances/resultados) | Institution or account catalog |
| `adecuacionResource` | `irs`, `ire`, `componentes`, `regresion_irs`, … | Capital-adequacy resource |
| `regresionMonths` | 1–24 (por defecto 12) | Months for regression |
| `includeRaw` | Agregar el objeto original | Include raw record |
| `maxItems` | Máximo entregado/cobrado (por defecto 500) | Max delivered/charged results |
| `requestIntervalMs`, `maxRetries` | Ritmo y reintentos | Pacing and retries |

### Output (diccionario / data dictionary)

| Campo | ES | EN |
|---|---|---|
| `source`, `kind` | Recurso y tipo de fila | Resource and row kind |
| `indicator`, `indicatorName` | Indicador | Indicator |
| `date`, `year`, `month` | Fecha | Date |
| `value`, `valueRaw`, `unit` | Valor normalizado, texto original, unidad (`CLP`, `percent`, …) | Parsed value, raw text, unit |
| `title`, `subtitle`, `typeCode` | Título / subtítulo / tipo (TMC, TIP). En accionistas, `title` es el nombre de la persona jurídica o `null` | Title / subtitle / type; shareholder `title` is the legal-entity name or `null` |
| `validFrom`, `validTo` | Vigencia de TMC/TIP | Validity window |
| `institutionCode`, `institutionName` | Banco | Bank |
| `accountCode`, `accountName` | Cuenta contable | Account |
| `amountTotal` y `amount*` | Montos del estado (balances/resultados) | Statement amounts |
| `rut`, `swift`, `website`, `address`, `phone`, `branches`, `employees` | Ficha institucional (el `rut` de un accionista persona natural es `null`) | Bank profile (natural-person shareholder `rut` is `null`) |
| `redacted`, `personType` | Si se ocultaron datos personales, y la clasificación (`persona_juridica` / `persona_natural` / `null`) | Whether personal data was redacted, and the person type |
| `irs`, `ire`, `capitalBasico`, `patrimonioEfectivo`, `solvencyClassification` | Adecuación de capital | Capital adequacy |
| `officialUrl`, `dataSource`, `retrievedAt` | Enlace y atribución | Link and attribution |
| `raw` | Objeto original (si `includeRaw`), ya sin datos de personas naturales ni contactos personales | Raw record, already without natural-person data or personal contacts |

### Limitaciones observadas (pruebas del 10-11-2026, America/Santiago)

- Una API Key inválida o ausente puede ser interceptada por un **WAF** (HTTP 500 «Web Page Blocked») en vez de devolver los códigos documentados 91/92. El Actor lo señala y, si el bloqueo es intermitente en una ruta válida, reintenta.
- La ruta de adecuación `/adecuacion/anhos/...` funcionó en JSON para 2013 y a veces fue bloqueada o cortada en años recientes; `regresionmensual` respondió, pero en una prueba de 3 meses para el Banco de Chile devolvió series de **2020**, no el último mes publicado. Úsalo con cautela.
- `accionistas` e `integrantes` se implementan según la [documentación de fichas](https://api.cmfchile.cl/documentacion/Fichas.html); el perfil sí se validó en vivo (Banco de Chile, agosto 2026).
- **Personas naturales en fichas:** la API no declara si un accionista es persona natural o jurídica. Se usa la heurística habitual del RUT chileno (número < 50.000.000 = persona natural), aceptando también el formato de fichas **sin dígito verificador** (p. ej. `96757820`). Si el RUT no es interpretable —y en integrantes, que habitualmente no traen RUT— se oculta la identidad (criterio conservador). Puede haber falsos positivos/negativos en casos excepcionales.

Revisa también la [Ley 19.628 / 21.719](https://www.bcn.cl/leychile/) si cruzas estos datos con datos personales.

Documentación oficial: <https://api.cmfchile.cl/documentacion/index.html>. Códigos de error: <https://api.cmfchile.cl/api-codigos-de-error.html>.

# Changelog

This Actor's version history is a separate document: https://apify.com/better-llama/cmf-chile-indicadores/changelog.md

# Actor input Schema

## `apiKey` (type: `string`):

Tu clave personal de la API CMF Bancos. Se guarda cifrada y solo se usa para tus consultas; nunca se registra en logs. Solicítala en https://api.cmfchile.cl/uso-de-api-key.html (10.000 peticiones/mes). / Your personal CMF API key, stored encrypted, never logged.

## `source` (type: `string`):

Indicadores: uf, dolar, euro, utm, ipc, tmc, tip. Reportes bancarios: balances, resultados, perfil, accionistas, integrantes, adecuacion. La Tasa TAB UF 360 está suspendida por la CMF (no se ofrece).

## `period` (type: `string`):

Solo indicadores. current = valor vigente; year / month / date = un año, un mes o un día; range = entre year(/month\[/day]) y yearTo(/monthTo\[/dayTo]). El rango por días (dias_i / dias_f) está documentado y verificado para dólar y euro. UF, UTM, IPC, TMC y TIP usan rango por meses o años.

## `year` (type: `integer`):

AAAA. Obligatorio para period year/month/date/range y para reportes bancarios (salvo adecuación por regresión).

## `month` (type: `integer`):

1-12. Obligatorio para period=month/date y para reportes bancarios.

## `day` (type: `integer`):

1-31. Solo UF, dólar y euro (period=date o inicio de un range por días).

## `yearTo` (type: `integer`):

Fin del rango (period=range).

## `monthTo` (type: `integer`):

Fin del rango por meses o por días.

## `dayTo` (type: `integer`):

Fin del rango por días (dólar y euro).

## `institutionCode` (type: `string`):

Código SBIF de 3 dígitos (001 = Banco de Chile, 012 = BancoEstado, 028 = BICE, 999 = sistema financiero). Obligatorio en perfil, accionistas, integrantes y adecuación. En balances/resultados, si se omite y no hay accountCode, se lista el catálogo de instituciones del mes.

## `accountCode` (type: `string`):

Código contable CMF. El plan de cuentas vigente usa códigos de 9 dígitos (p. ej. 105000000 = Efectivo y depósitos en bancos; el 1000000 de la documentación de 2009 ya no devuelve datos). Si se omite, se entrega el estado completo del banco en ese mes (pueden ser cientos o más de mil líneas; usa maxItems).

## `listCatalog` (type: `string`):

Solo balances o resultados. instituciones = lista de bancos con datos en ese mes; cuentas = plan de cuentas del mes. Vacío = detalle (estado o cuenta).

## `adecuacionResource` (type: `string`):

irs = patrimonio efectivo / activos ponderados por riesgo (%%); ire = capital básico / activos totales (%%); componentes = desglose; regresion\_\* = últimos N meses (el más reciente debería ser el último publicado; en una prueba de 2026 este endpoint devolvió series de 2020).

## `regresionMonths` (type: `integer`):

Solo adecuacionResource=regresion\_\*. Entre 1 y 24. Por defecto 12.

## `includeRaw` (type: `boolean`):

Agrega el campo raw con el objeto original de la API. En fichas, raw tampoco incluye datos de personas naturales ni contactos personales (Ley 19.628 / 21.719). / Include the raw API object; ficha raw is also stripped of natural-person data and personal contacts.

## `maxItems` (type: `integer`):

Tope de registros entregados y cobrados (1-10000). Por defecto 500. Un balance o estado de resultados mensual de un banco puede superar las 1.000 líneas; un año completo puede superar el tiempo de espera de la API.

## `requestIntervalMs` (type: `integer`):

Pausa mínima entre el fin de una respuesta y la siguiente solicitud (500-10000). Por defecto 1500. La cuota es 10.000 peticiones/mes por API Key.

## `maxRetries` (type: `integer`):

Reintentos ante errores transitorios (red, 5xx, WAF intermitente, código 60). Por defecto 4.

## Actor input object example

```json
{
  "source": "uf",
  "period": "current",
  "adecuacionResource": "irs",
  "regresionMonths": 12,
  "includeRaw": false,
  "maxItems": 500,
  "requestIntervalMs": 1500,
  "maxRetries": 4
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("better-llama/cmf-chile-indicadores").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("better-llama/cmf-chile-indicadores").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call better-llama/cmf-chile-indicadores --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,better-llama/cmf-chile-indicadores"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dpZ7lB2x2IzvSe6BZ/builds/48ssu3NnYd4TCgxZd/openapi.json
