# Estados financieros de empresas colombianas por NIT (`opendata-cr/supersociedades-estados-financieros`) Actor

Balance, estado de resultados y flujo de efectivo NIIF de empresas colombianas por NIT, razón social, CIIU y año, con indicadores de liquidez, endeudamiento y márgenes. Datos abiertos de Supersociedades. Para análisis de crédito, evaluación de proveedores y estudios de sector.

- **URL**: https://apify.com/opendata-cr/supersociedades-estados-financieros.md
- **Developed by:** [Tornwar](https://apify.com/opendata-cr) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 balances

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

## Estados financieros de empresas colombianas (Supersociedades, NIIF)

Consulte el estado de situación financiera, el estado de resultados y el flujo de efectivo que las sociedades colombianas reportan cada año a la Superintendencia de Sociedades. Busque por NIT, por razón social o por actividad CIIU, y filtre por año.

Los datos abiertos publican una fila por cada cuenta. Este Actor los organiza en un registro por empresa y año, con las cuentas principales en columnas e indicadores financieros calculados.

Sin datos personales: no se publican representantes legales, revisores fiscales, contadores, documentos de identidad, correos, teléfonos ni direcciones.

[English version below](#english)

### Fuentes

Datos abiertos de la Superintendencia de Sociedades publicados en datos.gov.co. Cada conjunto trae todos los años desde 2015 y todos los grupos NIIF (NIIF plenas, NIIF para pymes y microempresas), con estados individuales, separados, consolidados y combinados.

| Conjunto de datos | Identificador en datos.gov.co | Qué aporta | Licencia |
| --- | --- | --- | --- |
| Estado de Situación Financiera | `pfdp-zks5` | Activos, pasivos y patrimonio | CC BY-SA 4.0 |
| Estado de Resultado Integral | `prwj-nzxa` | Ingresos, costos, gastos y utilidades | CC BY-SA 4.0 |
| Estado de Flujo de Efectivo | `ctcp-462n` | Flujos netos de operación, inversión y financiación | CC BY-SA 4.0 |
| Carátula | `6hqw-m3dm` | Razón social, actividad CIIU, tipo societario, estado, domicilio, fecha de constitución y dictamen | CC BY-SA 4.0 |

Presentaciones por año de corte (todas las clases de estado, octubre de 2026):

| Año | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Presentaciones | 2.709 | 24.229 | 20.939 | 20.508 | 26.828 | 31.317 | 30.630 | 33.024 | 33.235 | 30.764 | 29.217 |

No se incluyen el estado de Otro Resultado Integral ni el listado de las 10.000 empresas más grandes, que publica cifras redondeadas.

Atribución: Superintendencia de Sociedades (Supersociedades), Colombia. Estados Financieros NIIF, datos abiertos en datos.gov.co, licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0, https://creativecommons.org/licenses/by-sa/4.0/). Los registros por empresa y año y los indicadores financieros los calcula este Actor; no son cifras oficiales de Supersociedades.

Cada registro incluye los campos `licencia`, `licencia_url` y `atribucion`. Si redistribuye los datos, la licencia le exige citar la fuente y compartirlos bajo la misma licencia.

### Entrada

```json
{
  "nits": ["860025900", "811.036.030-9"],
  "years": ["2020-2025"],
  "statementTypes": ["individual", "separado"],
  "includeCashFlow": true,
  "maxResults": 50
}
```

| Campo | Valor por defecto | Descripción |
| --- | --- | --- |
| `nits` | | NIT con o sin dígito de verificación. Se ignoran puntos, guiones y espacios. Hasta 1000 por ejecución. |
| `companyName` | | Todas las palabras deben aparecer en la razón social. No distingue mayúsculas ni tildes, y no tiene en cuenta SAS, S.A., LTDA ni similares. Si también indica NIT, filtra esos NIT por nombre. |
| `ciiu` | `[]` | Clase (`1040` o `C1040`), grupo (`104`), división (`10`) o sección (`C`) de la CIIU Rev. 4 A.C. Sin NIT ni nombre, busca todas las empresas de esa actividad. |
| `years` | todos | Años de corte (`2024`) o rangos (`2020-2025`). |
| `statementTypes` | individual, separado | `individual`, `separado`, `consolidado` o `combinado`. Por defecto, un registro por empresa y año con las cifras propias de la sociedad. |
| `includeCashFlow` | `true` | Agrega los totales del flujo de efectivo. |
| `includeAllAccounts` | `false` | Agrega todas las cuentas reportadas, con su nombre original, en `cuentas_situacion_financiera`, `cuentas_resultados` y `cuentas_flujo_efectivo`. |
| `maxResults` | `100` | Cantidad máxima de registros que se entregan y cobran. Máximo 5000. |
| `maxCompanies` | `25` | En una búsqueda por nombre, cuántas empresas distintas se incluyen. Primero van las que coinciden exactamente. |
| `appToken` | | Token de aplicación propio de datos.gov.co (opcional, se guarda como secreto). |

Indique al menos `nits`, `companyName` o `ciiu`. Los NIT con un formato no válido se omiten y se mencionan en el registro de la ejecución.

Si una empresa presentó más de un estado del mismo tipo para el mismo año, se usa el de corte al 31 de diciembre y, entre esos, la presentación más reciente.

### Resultado

Un registro del dataset por empresa, año y tipo de estado. Los valores están en miles de pesos colombianos (`unidad: "miles de COP"`), tal como los reporta Supersociedades. Ejemplo real, abreviado:

```json
{
  "nit": "860025900",
  "digito_verificacion": "2",
  "nit_formateado": "860.025.900-2",
  "razon_social": "Alpina Productos Alimenticios S.A.S BIC",
  "anio": 2025,
  "fecha_corte": "2025-12-31",
  "tipo_estado": "separado",
  "grupo_niif": "Grupo 1 - NIIF plenas",
  "ciiu": "C1040",
  "ciiu_descripcion": "Elaboración de productos lácteos",
  "tipo_societario": "SOCIEDAD POR ACCIONES SIMPLIFICADA SAS",
  "estado_sociedad": "ACTIVA",
  "departamento_domicilio": "CUNDINAMARCA",
  "unidad": "miles de COP",
  "efectivo_y_equivalentes": 91990162,
  "activos_corrientes": 519870966,
  "total_activos": 1344661181,
  "pasivos_corrientes": 621829069,
  "total_pasivos": 1180945406,
  "patrimonio": 163715775,
  "ingresos_operacionales": 2282389048,
  "costo_de_ventas": 1309480276,
  "utilidad_bruta": 972908772,
  "utilidad_operacional": 253774566,
  "utilidad_antes_de_impuestos": 180076431,
  "utilidad_neta": 114367380,
  "flujo_efectivo_operacion": 406785339,
  "razon_corriente": 0.836,
  "prueba_acida": 0.543,
  "endeudamiento": 0.8782,
  "margen_operacional": 0.1112,
  "margen_neto": 0.0501,
  "roa": 0.0851,
  "roe": 0.6986,
  "balance_cuadra": true,
  "campos_calculados": [],
  "punto_entrada": "20 NIIF Plenas - Separado Grupo 1",
  "codigo_instancia": "556202",
  "numero_radicado": "2026-01-380314",
  "dataset_situacion_financiera": "pfdp-zks5",
  "licencia": "CC BY-SA 4.0",
  "licencia_url": "https://creativecommons.org/licenses/by-sa/4.0/"
}
```

Cuentas del balance: `efectivo_y_equivalentes`, `deudores_comerciales_corrientes`, `inventarios_corrientes`, `activos_corrientes`, `propiedades_planta_y_equipo`, `activos_no_corrientes`, `total_activos`, `cuentas_por_pagar_comerciales_corrientes`, `pasivos_corrientes`, `pasivos_no_corrientes`, `total_pasivos`, `capital_emitido`, `ganancias_acumuladas`, `patrimonio`, `patrimonio_atribuible_controladora`, `participaciones_no_controladoras`, `total_patrimonio_y_pasivos`.

Cuentas de resultados: `ingresos_operacionales`, `costo_de_ventas`, `utilidad_bruta`, `gastos_de_ventas`, `gastos_de_administracion`, `otros_ingresos`, `otros_gastos`, `utilidad_operacional`, `ingresos_financieros`, `costos_financieros`, `utilidad_antes_de_impuestos`, `impuesto_de_renta`, `utilidad_operaciones_continuadas`, `utilidad_neta`, `utilidad_neta_controladora`.

Flujo de efectivo: `flujo_efectivo_operacion`, `flujo_efectivo_inversion`, `flujo_efectivo_financiacion`, `efectivo_final_del_periodo`.

Una cuenta que la empresa no reportó queda en `null`. Si un total falta y se puede deducir de sus partes (por ejemplo, total de pasivos = pasivos corrientes + no corrientes), se calcula y su nombre queda en `campos_calculados`. `balance_cuadra` indica si activos = pasivos + patrimonio, con una tolerancia de 1 (miles de COP) o del 0,1 % de los activos, la que sea mayor; `diferencia_balance` da la diferencia.

Indicadores financieros, redondeados a 4 decimales:

| Campo | Fórmula |
| --- | --- |
| `razon_corriente` | activos corrientes / pasivos corrientes |
| `prueba_acida` | (activos corrientes − inventarios) / pasivos corrientes |
| `capital_de_trabajo` | activos corrientes − pasivos corrientes |
| `endeudamiento` | total pasivos / total activos |
| `apalancamiento` | total pasivos / patrimonio |
| `margen_bruto` | utilidad bruta / ingresos operacionales |
| `margen_operacional` | utilidad operacional / ingresos operacionales |
| `margen_neto` | utilidad neta / ingresos operacionales |
| `roa` | utilidad neta / total activos |
| `roe` | utilidad neta / patrimonio |

Un indicador queda en `null` si falta un dato o si el denominador es cero. Salvo `razon_corriente` y `prueba_acida`, también queda en `null` si el denominador es negativo (por ejemplo, `roe` con patrimonio negativo).

Cada registro indica también de dónde salen las cifras: `punto_entrada` (grupo NIIF y tipo de estado, tal como los publica Supersociedades), `taxonomia`, `periodo_fuente`, `codigo_instancia` (número de la presentación), `numero_radicado`, los identificadores de los conjuntos de datos, `url_fuente` y `extraido_en` (fecha de la consulta).

El registro `OUTPUT` del Key-Value Store por defecto trae el resumen de la ejecución: registros entregados, empresas encontradas, NIT sin estados financieros (`nitsWithoutData`), si la ejecución se detuvo por el máximo a cobrar, conjuntos de datos consultados y licencia.

Un NIT sin estados financieros no produce registro y no se cobra como registro.

### Precios

Pago por evento:

| Evento | Precio | Cuándo se cobra |
| --- | --- | --- |
| `actor-start` (Inicio) | US$0,01 | Una vez por ejecución, con una entrada válida y antes de consultar la fuente. Se cobra aunque la búsqueda no encuentre resultados. |
| `estado-financiero` (Balance) | US$0,015 | Por cada registro (empresa, año y tipo de estado) entregado en el dataset. |

Ejemplo: 3 empresas con 6 años cada una son 18 registros y cuestan US$0,01 + 18 × US$0,015 = US$0,28. Una búsqueda sin resultados cuesta solo el inicio, US$0,01.

Para recibir al menos un registro, el máximo a cobrar de la ejecución debe ser de al menos US$0,02505: US$0,00005 que cobra la plataforma al iniciar, más US$0,01 de inicio y US$0,015 del primer registro. Si el máximo es menor, no se consulta la fuente y no se cobra nada. Antes de descargar los estados, el Actor ajusta la búsqueda a lo que permite el máximo. Si se alcanza durante la ejecución, se detiene, conserva lo entregado y termina con éxito, con el mensaje `Se alcanzó el máximo a cobrar; se detuvo después de N registros. / Spending limit reached; stopped after N records.` En ese caso `OUTPUT.stoppedBySpendingLimit` es `true`.

### Disponibilidad de la fuente

datos.gov.co no exige registro. Si responde lento o con errores temporales, el Actor reintenta automáticamente. Si hace muchas consultas grandes seguidas, puede indicar su propio token de aplicación de datos.gov.co en `appToken`.

### Limitaciones

- Todos los valores están en miles de pesos colombianos (miles de COP). Por ejemplo, `total_activos: 1344661181` equivale a unos 1,34 billones de pesos.
- Algunas razones sociales y descripciones pueden aparecer sin tildes o con el carácter `�`, porque la fuente perdió esas letras al publicar los datos. El Actor repone las tildes y eñes de las palabras más frecuentes; los nombres poco comunes y algunos signos, como el apóstrofo, pueden quedar como vienen.
- Solo incluye empresas que reportan estados financieros a Supersociedades. Bancos, aseguradoras, fiduciarias y otras entidades vigiladas por la Superintendencia Financiera no están, aunque sean grandes (por ejemplo, Ecopetrol).
- La cobertura depende de cada empresa: una sociedad aparece solo en los años en que Supersociedades le pidió estados financieros.
- 2015 tiene pocas presentaciones (2.709).
- Las cifras del año anterior que trae cada presentación no se usan para completar años faltantes.
- Algunas empresas que reportan con NIIF para pymes no informan los subtotales del flujo de efectivo; esos campos quedan en `null`.
- La búsqueda por nombre revisa todos los años publicados y puede tardar entre unos segundos y un minuto.
- En una actividad con muchas empresas se entregan primero los años más recientes, hasta `maxResults`. 400 registros tardan alrededor de un minuto.

<a id="english"></a>

### English

Get the balance sheet, income statement and cash-flow totals that Colombian companies file each year with the Superintendencia de Sociedades (Supersociedades). Search by NIT (tax ID), by company name or by CIIU activity code, and filter by year. The open data lists one account per row; this Actor returns one record per company, year and statement type, with the main accounts as columns and financial ratios.

No personal data: legal representatives, auditors, accountants, personal IDs, emails, phone numbers and addresses are left out.

Sources: Supersociedades open data on datos.gov.co: Estado de Situación Financiera (`pfdp-zks5`), Estado de Resultado Integral (`prwj-nzxa`), Estado de Flujo de Efectivo (`ctcp-462n`) and the Carátula cover sheet (`6hqw-m3dm`). All years from 2015 and all IFRS groups. License CC BY-SA 4.0. Attribution: Superintendencia de Sociedades (Supersociedades), Colombia, datos.gov.co (https://creativecommons.org/licenses/by-sa/4.0/). Every record carries `licencia`, `licencia_url` and `atribucion`. The company-year records and ratios are computed by this Actor and are not official Supersociedades figures.

Input: `nits`, `companyName` and/or `ciiu`, plus optional `years` (ranges like `2020-2025`), `statementTypes` (individual and separate by default), `includeCashFlow`, `includeAllAccounts`, `maxResults` and an optional datos.gov.co `appToken`. See the Spanish section above for the full field list.

Output: field names are in Spanish. Total assets `total_activos`, current assets `activos_corrientes`, current liabilities `pasivos_corrientes`, total liabilities `total_pasivos`, equity `patrimonio`, revenue `ingresos_operacionales`, gross profit `utilidad_bruta`, operating profit `utilidad_operacional`, net income `utilidad_neta`, plus cash-flow totals. Ratios: current ratio `razon_corriente`, quick ratio `prueba_acida`, working capital, debt ratio `endeudamiento` (liabilities / assets), leverage, gross, operating and net margins, ROA and ROE. Each record also lists its source: IFRS group and statement type (`punto_entrada`), filing number, cut-off date and dataset IDs. The `OUTPUT` record lists the NITs with no filings.

Pricing (pay per event):

| Event | Price | When |
| --- | --- | --- |
| `actor-start` (Inicio) | US$0.01 | Once per run, after the input is validated and before the source is queried. Charged even when the search finds nothing. |
| `estado-financiero` (Balance) | US$0.015 | Per record (company, year, statement type) written to the dataset. |

Example: 3 companies with 6 years each are 18 records and cost US$0.01 + 18 × US$0.015 = US$0.28. A search with no results costs only the US$0.01 start fee.

One record needs a max charge of at least US$0.02505 (platform start fee US$0.00005 + US$0.01 start + US$0.015 for the first record). With a lower limit, the source is not queried and nothing is charged. When the limit is reached during the run, the run keeps what was already delivered and finishes as succeeded. The status message is bilingual: `Se alcanzó el máximo a cobrar; se detuvo después de N registros. / Spending limit reached; stopped after N records.`

Limitations:

- All amounts are in thousands of Colombian pesos (miles de COP).
- Some company names and descriptions may appear without accents, or with the `�` character, because the source lost those letters. The Actor restores the most common words; rare names and some marks, such as apostrophes, may stay as published.
- Only companies that file with Supersociedades are included. Banks, insurers and other entities supervised by the Superintendencia Financiera are not.
- Coverage varies by company and year. A name search can take up to a minute.

# Actor input Schema

## `nits` (type: `array`):

NIT de las empresas, con o sin dígito de verificación (860025900 o 860.025.900-2). Se ignoran puntos, guiones y espacios. Company tax IDs, with or without the check digit.

## `companyName` (type: `string`):

Todas las palabras deben aparecer en la razón social. No distingue mayúsculas ni tildes, y no tiene en cuenta SAS, S.A., LTDA ni similares. Si también indica NIT, filtra esos NIT por nombre. Every word must appear in the company name.

## `ciiu` (type: `array`):

Código CIIU Rev. 4 A.C.: clase (1040 o C1040), grupo (104), división (10) o sección (C). Sin NIT ni nombre, busca todas las empresas de esa actividad; con NIT o nombre, filtra los resultados. Activity class, group, division or section.

## `years` (type: `array`):

Años de corte, por ejemplo 2024, o un rango como 2020-2025. Vacío trae todos los años publicados, desde 2015. Reporting years; empty means all years.

## `statementTypes` (type: `array`):

Individual (empresa sin subordinadas), separado (sociedad matriz sin consolidar), consolidado (grupo empresarial) o combinado. Por defecto, individual y separado: un registro por empresa y año. Statement types to return.

## `includeCashFlow` (type: `boolean`):

Agrega los flujos netos de operación, inversión y financiación, y el efectivo al final del periodo. Adds cash-flow totals.

## `includeAllAccounts` (type: `boolean`):

Agrega todas las cuentas reportadas en el balance, el estado de resultados y el flujo de efectivo, con su nombre original. Los registros son más grandes. Adds every reported line item.

## `maxResults` (type: `integer`):

Cantidad máxima de registros (empresa y año) que se entregan y cobran en la ejecución. En una actividad con muchas empresas, primero se entregan los años más recientes. Maximum records per run.

## `maxCompanies` (type: `integer`):

En una búsqueda por nombre, cuántas empresas distintas se incluyen. Primero van las que coinciden exactamente. Maximum companies taken from a name search.

## `appToken` (type: `string`):

Token de aplicación propio de datos.gov.co. No es necesario; puede ayudar si hace muchas consultas grandes seguidas. Optional datos.gov.co app token for heavy use.

## Actor input object example

```json
{
  "nits": [
    "860025900"
  ],
  "ciiu": [],
  "years": [
    "2024",
    "2025"
  ],
  "statementTypes": [
    "individual",
    "separado"
  ],
  "includeCashFlow": true,
  "includeAllAccounts": false,
  "maxResults": 10,
  "maxCompanies": 25
}
```

# 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 = {
    "nits": [
        "860025900"
    ],
    "years": [
        "2024",
        "2025"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("opendata-cr/supersociedades-estados-financieros").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 = {
    "nits": ["860025900"],
    "years": [
        "2024",
        "2025",
    ],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("opendata-cr/supersociedades-estados-financieros").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 '{
  "nits": [
    "860025900"
  ],
  "years": [
    "2024",
    "2025"
  ],
  "maxResults": 10
}' |
apify call opendata-cr/supersociedades-estados-financieros --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,opendata-cr/supersociedades-estados-financieros"
        }
    }
}
```

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/422rYqHKibf5H5TZz/builds/eehz25aMXIELkWVDn/openapi.json
