# BCRA Central de Deudores Scraper: CUIT Credit Risk Argentina (`scrapers_lat/bcra-deudores-scraper`) Actor

Look up any Argentine CUIT, CUIL or CDI in the BCRA Central de Deudores registry. Get debt by bank, situacion crediticia (1 to 6), amount owed, days overdue, refinanced and legal flags, 24-month history and cheques rechazados. Credit risk and KYB data. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapers\_lat/bcra-deudores-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.15 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![BCRA Central de Deudores Scraper: CUIT Credit Risk Argentina](https://scrapers.lat/banners/bcra-deudores-scraper.png)](https://console.apify.com/actors/FPiIw3jufCTDIC7Tv/input)

## BCRA Central de Deudores Scraper: CUIT Credit Risk API for Argentina

Check the credit standing of any Argentine company or person by **CUIT, CUIL or CDI** against the **BCRA Central de Deudores**, the Banco Central de la Republica Argentina debtor registry. For each tax ID you get the debt reported by every bank and lender, the **situacion crediticia** (BCRA risk class 1 Normal to 6 Irrecoverable), amount owed, days overdue, legal flags, the 24-month history and **cheques rechazados** (bounced checks). Built for credit risk, KYB and compliance.

Here is one real result, with every field a current-debt record returns:

```json
{
  "recordType": "debt",
  "cuit": "30546741253",
  "cuitValid": true,
  "denomination": "OSDE ORGANIZACION DE SERVICIOS DIRECTOS EMPRESARIOS",
  "period": "202607",
  "entity": "BANCO DE LA CIUDAD DE BUENOS AIRES",
  "situation": 1,
  "situationLabel": "Normal",
  "amount": 6733,
  "amountPesos": 6733000,
  "isDelinquent": false,
  "situationDate": "2023-12-30",
  "daysOverdue": 0,
  "refinanced": false,
  "mandatoryReclassification": false,
  "legalSituation": false,
  "unrecoverableTechnical": false,
  "underReview": false,
  "inLegalProcess": false,
  "observedAt": "2026-09-06T03:00:02.547Z",
  "error": null
}
```

The most complete BCRA Central de Deudores scraper available. It returns every field the credit-risk registry exposes per tax ID, including current debts by bank with risk class, an optional 24-month historical series, optional rejected (bounced) checks, and an optional per-CUIT risk summary with worst situation and total debt. Tax IDs are validated with the CUIT check digit, and invalid IDs are reported and never charged.

**📥 [Input](https://apify.com/scrapers_lat/bcra-deudores-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/bcra-deudores-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/bcra-deudores-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/bcra-deudores-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Argentina-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Who is this for

- **Fintechs and lenders** running credit onboarding, scoring or pre-approval on Argentine customers.
- **Landlords and real-estate agencies** screening tenants, guarantors and co-signers.
- **B2B credit teams** setting payment terms for new customers or distributors.
- **Accountants and legal firms** doing due diligence on counterparties.
- **KYC and compliance teams** who need a structured, auditable credit record instead of a screenshot.
- **Risk and data teams** looking for a programmatic alternative to Veraz or Nosis for BCRA debtor data.

### What it does

The actor looks up Argentine tax IDs (CUIT, CUIL or CDI) in the BCRA Central de Deudores and writes normalized records per tax ID. Current debts are always returned, one record per bank, with the BCRA situacion crediticia (`situation` 1 Normal to 6 Irrecoverable), the reported amount in thousands of pesos, the derived peso amount, and a set of boolean risk flags. Optionally it also emits the 24-month historical debt series, any rejected (bounced) checks with cause and payment status, and a per-CUIT summary with the worst situation and total debt. When a tax ID has no reported debt, a single `clean` record is written for it. Missing source values are returned as `null`.

### Quickstart

Open the actor, paste this into the input, and press Run. It looks up one CUIT's current debts.

```json
{
  "cuits": ["30546741253"]
}
```

Pass several tax IDs in one run. Turn on `includeHistorical` and `includeRejectedChecks` for the full credit picture, `includeSummary` for a one-row-per-CUIT verdict, and set `minSituation` to keep only higher-risk records. Hyphens and spaces in tax IDs are ignored.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `cuits` | string\[] | yes | (none) | One or more Argentine tax IDs (CUIT, CUIL or CDI) to look up. Enter 11 digits per ID. Hyphens and spaces are ignored. |
| `includeRejectedChecks` | boolean | no | `false` | Also emit rejected (bounced) checks per tax ID (one record per check, with cause, amount and paid/penalty status). Paid add-on. |
| `includeHistorical` | boolean | no | `false` | Also emit the 24-month historical debt series per tax ID (one record per past period and bank). Paid add-on. |
| `includeHistory` | boolean | no | `false` | Alias of `includeHistorical`. |
| `includeSummary` | boolean | no | `false` | Also emit one aggregate summary record per tax ID: worst situation, total debt in pesos, delinquent-entity count, rejected-check rollup and a one-line risk summary. |
| `minSituation` | integer | no | (none) | Only emit debt/historical records at or above this BCRA risk class (`1` Normal to `6` Irrecoverable). For example `3` returns only debtors in problem or worse standing. |
| `validateCheckDigit` | boolean | no | `true` | Validate each tax ID with the CUIT check digit before querying. Invalid IDs are reported and never charged. |
| `maxConcurrency` | integer | no | `4` | How many tax IDs are queried in parallel (1 to 10). |
| `proxyConfiguration` | object | no | (none) | Optional Apify Proxy. The registry is normally reachable without a proxy. |

### Output reference

One dataset item per debt, historical entry, rejected check, summary, clean lookup, or invalid input. The `recordType` field tells them apart. Types: `string`, `integer`, `number`, `boolean`, or `null` when the source value is absent.

| Field | Type | Record types | Description |
|---|---|---|---|
| `recordType` | string | all | `debt`, `historical`, `rejectedCheck`, `summary`, `clean`, or `invalid`. |
| `cuit` | string | all | The 11-digit tax ID looked up. |
| `cuitValid` | boolean | all | Whether the tax ID passed the CUIT check-digit validation. |
| `denomination` | string | most | Registered name for the tax ID, or `null`. |
| `found` | boolean | summary, clean | Whether BCRA has debt reported for the latest period. |
| `period` | string | debt, historical, summary | Reporting period `YYYYMM`, for example `202607`. |
| `entity` | string | debt, historical | Reporting bank or financial entity. |
| `situation` | integer | debt, historical | BCRA risk class: `1` Normal to `6` Irrecoverable (`0` = no rating). |
| `situationLabel` | string | debt, historical | Human-readable risk class, for example `Normal`. |
| `amount` | number | debt, historical | Reported amount in thousands of pesos, as published by BCRA. |
| `amountPesos` | number | debt, historical | Derived amount in pesos (`amount` x 1000). |
| `isDelinquent` | boolean | debt, historical, summary | Whether the record is in a delinquent risk class (situation 3 or worse). |
| `situationDate` | string | debt | Date the current risk class took effect (`YYYY-MM-DD`), or `null`. |
| `daysOverdue` | integer | debt | Days overdue as reported, or `0`. |
| `refinanced` | boolean | debt | Whether the debt was refinanced. |
| `mandatoryReclassification` | boolean | debt | Whether a mandatory reclassification flag is set. |
| `legalSituation` | boolean | debt | Whether a legal-situation flag is set. |
| `unrecoverableTechnical` | boolean | debt | Whether the debt is flagged technically unrecoverable. |
| `underReview` | boolean | debt, historical, rejectedCheck | Whether the record is under review. |
| `inLegalProcess` | boolean | debt, historical, rejectedCheck | Whether the record is in a legal process. |
| `worstSituation` | integer | summary | Worst situation across all reporting banks in the latest period. |
| `worstSituationLabel` | string | summary | Human-readable worst risk class. |
| `entityCount` | integer | summary | Number of banks reporting the tax ID in the latest period. |
| `delinquentEntityCount` | integer | summary | Number of banks reporting a delinquent situation. |
| `totalDebt` | number | summary | Total debt across banks in thousands of pesos. |
| `totalDebtPesos` | number | summary | Total debt across banks in pesos. |
| `maxDaysOverdue` | integer | summary | Highest days-overdue value across banks. |
| `hasLegalFlag` | boolean | summary | Whether any bank set a legal or technical-unrecoverable flag. |
| `hasRejectedChecks` | boolean | summary | Whether rejected checks were found (when requested). |
| `rejectedCheckCount` | integer | summary | Number of rejected checks (when requested). |
| `riskSummary` | string | summary | One-line human-readable credit summary. |
| `rejectionCause` | string | rejectedCheck | Reason the check was rejected, for example `DEFECTOS FORMALES`. |
| `entityCode` | integer | rejectedCheck | BCRA entity code of the drawee bank. |
| `checkNumber` | integer | rejectedCheck | Rejected check number. |
| `rejectionDate` | string | rejectedCheck | Date the check was rejected (`YYYY-MM-DD`). |
| `amount` | number | rejectedCheck | Check amount in pesos. |
| `paid` | boolean | rejectedCheck | Whether the check was later paid. |
| `paymentDate` | string | rejectedCheck | Date the check was paid, or `null`. |
| `penaltyPaid` | boolean | rejectedCheck | Whether the associated penalty (multa) was paid. |
| `penaltyPaymentDate` | string | rejectedCheck | Date the penalty was paid, or `null`. |
| `penaltyStatus` | string | rejectedCheck | Penalty status, or `null`. |
| `personalAccount` | boolean | rejectedCheck | Whether the check was drawn on a personal account. |
| `legalName` | string | rejectedCheck | Legal name tied to the check, or `null`. |
| `observedAt` | string | all | ISO 8601 timestamp of collection. |
| `error` | string | all | `null` on success; populated on `invalid`/`error` rows, which are never charged. |

### Example output records

Real rejected-check record (input `{"cuits":["30546741253"],"includeRejectedChecks":true}`):

```json
{
  "recordType": "rejectedCheck",
  "cuit": "30546741253",
  "cuitValid": true,
  "denomination": "OSDE ORGANIZACION DE SERVICIOS DIRECTOS EMPRESARIOS",
  "rejectionCause": "DEFECTOS FORMALES",
  "entityCode": 1,
  "checkNumber": 88813524,
  "rejectionDate": "2024-06-26",
  "amount": 276550,
  "paid": false,
  "paymentDate": null,
  "penaltyPaid": true,
  "penaltyPaymentDate": "2024-06-27",
  "penaltyStatus": null,
  "personalAccount": false,
  "legalName": null,
  "underReview": false,
  "inLegalProcess": false,
  "observedAt": "2026-09-06T03:00:04.274Z",
  "error": null
}
```

Real summary record (input adds `"includeSummary": true`):

```json
{
  "recordType": "summary",
  "cuit": "30546741253",
  "found": true,
  "period": "202607",
  "worstSituation": 1,
  "worstSituationLabel": "Normal",
  "isDelinquent": false,
  "entityCount": 5,
  "delinquentEntityCount": 0,
  "totalDebt": 8016,
  "totalDebtPesos": 8016000,
  "hasRejectedChecks": true,
  "rejectedCheckCount": 2,
  "riskSummary": "Worst situation 1 (Normal), total debt ARS 8.016.000 across 5 entities, 2 rejected check(s).",
  "error": null
}
```

A tax ID with no reported debt returns a single `clean` record. A malformed tax ID or one with a bad check digit returns an `invalid` record and is never charged.

### Why this actor (comparison)

| Capability | This actor | Typical BCRA credit-check actor |
|---|---|---|
| Lookup by CUIT / CUIL / CDI | Yes | Yes |
| CUIT check-digit validation (invalid not charged) | Yes | Yes |
| Current debt per bank with situation and amount | Yes | Yes |
| Days overdue, refinanced, legal and review flags | Yes | Partial |
| 24-month historical series | Yes | Yes |
| Rejected checks (cheques rechazados) with paid/penalty status | Yes | Yes |
| Per-CUIT risk summary (worst situation, total debt) | Yes | Aggregate only |
| Peso amount derived from BCRA thousands | Yes | Sometimes |
| Filter by minimum risk class | Yes | No |
| Adjustable concurrency | Yes | Yes |
| Batch many tax IDs per run | Yes | Yes |

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~bcra-deudores-scraper/run-sync-get-dataset-items?token=%3CTOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"cuits":["30546741253"],"includeHistorical":true,"includeRejectedChecks":true,"includeSummary":true}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~bcra-deudores-scraper/runs?token=%3CTOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"cuits":["30546741253","30500003193"],"minSituation":3}'
```

Apify CLI:

```bash
apify call scrapers_lat/bcra-deudores-scraper \
  --input '{"cuits":["30546741253"]}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=csv"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets.

### Billing and limits

- **Pay per result.** Base current-debt and clean records (and the optional summary) are billed on the `result` event. The 24-month history and rejected checks are billed on the `details` add-on event and require a paid Apify plan.
- **No charge on failure.** If a lookup errors, a non-billable row with an `error` field is written and not charged. Invalid tax IDs are reported and not charged. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable records.
- **Free Apify plans** are capped at 10 billable records per run, and the history and rejected-check add-ons require a paid plan. A tax ID with debts across many banks can produce many records; upgrade for higher limits.

### FAQ and troubleshooting

**A tax ID returned only a `clean` record. What does that mean?**
BCRA has no reported debt for that tax ID. The `clean` record confirms the lookup succeeded and found nothing; it is a real, verified no-debt answer.

**What do the `situation` numbers mean?**
They are the BCRA situacion crediticia risk classes: `1` Normal, `2` special monitoring / low risk, `3` with problems, `4` high risk of insolvency, `5` irrecoverable, `6` irrecoverable by technical provision. `0` means no rating. Use `minSituation` to keep only records at or above a class.

**Why is `amount` small while `amountPesos` is large?**
BCRA publishes debt amounts in thousands of pesos. `amount` is the raw figure; `amountPesos` is the derived value in pesos (`amount` x 1000).

**How do I get the full credit history and bounced checks?**
Turn on `includeHistorical` for the 24-month series and `includeRejectedChecks` for cheques rechazados. Both are paid add-ons.

**Can I look up many tax IDs at once?**
Yes. Pass them all in the `cuits` array; each is looked up in the same run.

**Is this an official BCRA tool?**
No. This actor is independent and has no affiliation with the BCRA. It reads only data that is publicly available in the BCRA Central de Deudores. Use it in accordance with the source terms of use.

### Related scrapers

- [Argentina Companies Scraper](https://apify.com/scrapers_lat/argentina-companies-scraper): Argentine company and CUIT registry records.
- [B3 Brazil Stock Tickers & Listed Company Scraper](https://apify.com/scrapers_lat/b3-scraper): B3 listed companies, tickers, and dividends.
- [BaFin Germany Financial Institutions Scraper](https://apify.com/scrapers_lat/bafin-germany-financial-institutions-scraper): German financial institutions supervised by BaFin.
- [OFAC Sanctions List Scraper](https://apify.com/scrapers_lat/ofac-sanctions-scraper): US Treasury OFAC SDN and Consolidated lists.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

## BCRA Central de Deudores Scraper: API de Riesgo Crediticio por CUIT en Argentina

Consulta la situacion crediticia de cualquier empresa o persona en Argentina por **CUIT, CUIL o CDI** en la **Central de Deudores del BCRA**, el registro de deudores del Banco Central de la Republica Argentina. Para cada identificacion obtienes la deuda informada por cada banco y entidad, la **situacion crediticia** (clase de riesgo del BCRA, 1 Normal a 6 Irrecuperable), el monto adeudado, los dias de atraso, las marcas legales, el historial de 24 meses y los **cheques rechazados**. Pensado para riesgo crediticio, KYB y cumplimiento.

Este es un resultado real, con todos los campos que devuelve un registro de deuda vigente:

```json
{
  "recordType": "debt",
  "cuit": "30546741253",
  "cuitValid": true,
  "denomination": "OSDE ORGANIZACION DE SERVICIOS DIRECTOS EMPRESARIOS",
  "period": "202607",
  "entity": "BANCO DE LA CIUDAD DE BUENOS AIRES",
  "situation": 1,
  "situationLabel": "Normal",
  "amount": 6733,
  "amountPesos": 6733000,
  "isDelinquent": false,
  "situationDate": "2023-12-30",
  "daysOverdue": 0,
  "refinanced": false,
  "mandatoryReclassification": false,
  "legalSituation": false,
  "unrecoverableTechnical": false,
  "underReview": false,
  "inLegalProcess": false,
  "observedAt": "2026-09-06T03:00:02.547Z",
  "error": null
}
```

El scraper mas completo de la Central de Deudores del BCRA. Devuelve todos los campos que expone el registro de riesgo crediticio por identificacion: deudas vigentes por banco con clase de riesgo, la serie historica opcional de 24 meses, los cheques rechazados opcionales y un resumen de riesgo opcional por CUIT con la peor situacion y la deuda total. Las identificaciones se validan con el digito verificador del CUIT, y las invalidas se informan y nunca se cobran.

**📥 [Entrada](https://apify.com/scrapers_lat/bcra-deudores-scraper/input-schema) · 📤 [Salida](https://apify.com/scrapers_lat/bcra-deudores-scraper/output-schema) · 💰 [Precios](https://apify.com/scrapers_lat/bcra-deudores-scraper/pricing) · ▶️ [Ejemplos](https://apify.com/scrapers_lat/bcra-deudores-scraper/examples)**

### Para quien es

- **Fintechs y prestamistas** en onboarding crediticio, scoring o preaprobacion de clientes en Argentina.
- **Propietarios e inmobiliarias** que evaluan inquilinos, garantes y cogarantes.
- **Equipos de credito B2B** que definen condiciones de pago para nuevos clientes o distribuidores.
- **Contadores y estudios juridicos** en due diligence de contrapartes.
- **Equipos de KYC y cumplimiento** que necesitan un registro crediticio estructurado y auditable en lugar de una captura de pantalla.
- **Equipos de riesgo y datos** que buscan una alternativa programatica a Veraz o Nosis para datos de deudores del BCRA.

### Que hace

El actor consulta identificaciones argentinas (CUIT, CUIL o CDI) en la Central de Deudores del BCRA y escribe registros normalizados por identificacion. Las deudas vigentes se devuelven siempre, un registro por banco, con la situacion crediticia del BCRA (`situation` 1 Normal a 6 Irrecuperable), el monto informado en miles de pesos, el monto derivado en pesos y un conjunto de marcas booleanas de riesgo. Opcionalmente tambien emite la serie historica de deuda de 24 meses, los cheques rechazados con causal y estado de pago, y un resumen por CUIT con la peor situacion y la deuda total. Cuando una identificacion no tiene deuda informada, se escribe un unico registro `clean`. Los valores ausentes en la fuente se devuelven como `null`.

### Inicio rapido

Abri el actor, pega esto en la entrada y presiona Run. Consulta las deudas vigentes de un CUIT.

```json
{
  "cuits": ["30546741253"]
}
```

Pasa varias identificaciones en una sola corrida. Activa `includeHistorical` e `includeRejectedChecks` para el panorama crediticio completo, `includeSummary` para un veredicto de una fila por CUIT, y usa `minSituation` para quedarte solo con los registros de mayor riesgo. Los guiones y espacios en las identificaciones se ignoran.

### Referencia de entrada

| Campo | Tipo | Requerido | Default | Descripcion |
|---|---|---|---|---|
| `cuits` | string\[] | si | (ninguno) | Una o mas identificaciones argentinas (CUIT, CUIL o CDI). Ingresa 11 digitos por ID. Los guiones y espacios se ignoran. |
| `includeRejectedChecks` | boolean | no | `false` | Tambien emite cheques rechazados por identificacion (un registro por cheque, con causal, monto y estado de pago/multa). Complemento pago. |
| `includeHistorical` | boolean | no | `false` | Tambien emite la serie historica de deuda de 24 meses por identificacion (un registro por periodo y banco). Complemento pago. |
| `includeHistory` | boolean | no | `false` | Alias de `includeHistorical`. |
| `includeSummary` | boolean | no | `false` | Tambien emite un registro resumen por identificacion: peor situacion, deuda total en pesos, cantidad de entidades morosas, conteo de cheques rechazados y un resumen de riesgo de una linea. |
| `minSituation` | integer | no | (ninguno) | Solo emite registros de deuda/historicos con clase de riesgo igual o superior a esta (`1` Normal a `6` Irrecuperable). Por ejemplo `3` devuelve solo deudores en situacion problematica o peor. |
| `validateCheckDigit` | boolean | no | `true` | Valida cada identificacion con el digito verificador del CUIT antes de consultar. Las invalidas se informan y nunca se cobran. |
| `maxConcurrency` | integer | no | `4` | Cuantas identificaciones se consultan en paralelo (1 a 10). |
| `proxyConfiguration` | object | no | (ninguno) | Proxy de Apify opcional. El registro suele ser accesible sin proxy. |

### Referencia de salida

Un item del dataset por deuda, entrada historica, cheque rechazado, resumen, consulta limpia o entrada invalida. El campo `recordType` los distingue. Tipos: `string`, `integer`, `number`, `boolean`, o `null` cuando el valor de origen esta ausente.

| Campo | Tipo | Tipos de registro | Descripcion |
|---|---|---|---|
| `recordType` | string | todos | `debt`, `historical`, `rejectedCheck`, `summary`, `clean` o `invalid`. |
| `cuit` | string | todos | La identificacion de 11 digitos consultada. |
| `cuitValid` | boolean | todos | Si la identificacion paso la validacion del digito verificador del CUIT. |
| `denomination` | string | mayoria | Nombre registrado de la identificacion, o `null`. |
| `found` | boolean | summary, clean | Si el BCRA tiene deuda informada en el ultimo periodo. |
| `period` | string | debt, historical, summary | Periodo informado `YYYYMM`, por ejemplo `202607`. |
| `entity` | string | debt, historical | Banco o entidad financiera informante. |
| `situation` | integer | debt, historical | Clase de riesgo del BCRA: `1` Normal a `6` Irrecuperable (`0` = sin calificacion). |
| `situationLabel` | string | debt, historical | Clase de riesgo legible, por ejemplo `Normal`. |
| `amount` | number | debt, historical | Monto informado en miles de pesos, tal como lo publica el BCRA. |
| `amountPesos` | number | debt, historical | Monto derivado en pesos (`amount` x 1000). |
| `isDelinquent` | boolean | debt, historical, summary | Si el registro esta en una clase de riesgo morosa (situacion 3 o peor). |
| `situationDate` | string | debt | Fecha en que rige la clase de riesgo actual (`YYYY-MM-DD`), o `null`. |
| `daysOverdue` | integer | debt | Dias de atraso informados, o `0`. |
| `refinanced` | boolean | debt | Si la deuda fue refinanciada. |
| `mandatoryReclassification` | boolean | debt | Si hay marca de recategorizacion obligatoria. |
| `legalSituation` | boolean | debt | Si hay marca de situacion juridica. |
| `unrecoverableTechnical` | boolean | debt | Si la deuda esta marcada como irrecuperable por disposicion tecnica. |
| `underReview` | boolean | debt, historical, rejectedCheck | Si el registro esta en revision. |
| `inLegalProcess` | boolean | debt, historical, rejectedCheck | Si el registro esta en proceso judicial. |
| `worstSituation` | integer | summary | Peor situacion entre todos los bancos informantes en el ultimo periodo. |
| `worstSituationLabel` | string | summary | Peor clase de riesgo legible. |
| `entityCount` | integer | summary | Cantidad de bancos que informan la identificacion en el ultimo periodo. |
| `delinquentEntityCount` | integer | summary | Cantidad de bancos que informan una situacion morosa. |
| `totalDebt` | number | summary | Deuda total entre bancos en miles de pesos. |
| `totalDebtPesos` | number | summary | Deuda total entre bancos en pesos. |
| `maxDaysOverdue` | integer | summary | Mayor valor de dias de atraso entre bancos. |
| `hasLegalFlag` | boolean | summary | Si algun banco puso una marca legal o de irrecuperable tecnico. |
| `hasRejectedChecks` | boolean | summary | Si se encontraron cheques rechazados (cuando se solicita). |
| `rejectedCheckCount` | integer | summary | Cantidad de cheques rechazados (cuando se solicita). |
| `riskSummary` | string | summary | Resumen crediticio legible de una linea. |
| `rejectionCause` | string | rejectedCheck | Causal del rechazo del cheque, por ejemplo `DEFECTOS FORMALES`. |
| `entityCode` | integer | rejectedCheck | Codigo de entidad del BCRA del banco girado. |
| `checkNumber` | integer | rejectedCheck | Numero del cheque rechazado. |
| `rejectionDate` | string | rejectedCheck | Fecha de rechazo del cheque (`YYYY-MM-DD`). |
| `amount` | number | rejectedCheck | Monto del cheque en pesos. |
| `paid` | boolean | rejectedCheck | Si el cheque fue pagado luego. |
| `paymentDate` | string | rejectedCheck | Fecha de pago del cheque, o `null`. |
| `penaltyPaid` | boolean | rejectedCheck | Si la multa asociada fue pagada. |
| `penaltyPaymentDate` | string | rejectedCheck | Fecha de pago de la multa, o `null`. |
| `penaltyStatus` | string | rejectedCheck | Estado de la multa, o `null`. |
| `personalAccount` | boolean | rejectedCheck | Si el cheque fue librado sobre una cuenta personal. |
| `legalName` | string | rejectedCheck | Denominacion juridica ligada al cheque, o `null`. |
| `observedAt` | string | todos | Marca de tiempo ISO 8601 de la recoleccion. |
| `error` | string | todos | `null` en exito; poblado en filas `invalid`/`error`, que nunca se cobran. |

### Ejemplos de salida

Registro real de cheque rechazado (entrada `{"cuits":["30546741253"],"includeRejectedChecks":true}`):

```json
{
  "recordType": "rejectedCheck",
  "cuit": "30546741253",
  "cuitValid": true,
  "denomination": "OSDE ORGANIZACION DE SERVICIOS DIRECTOS EMPRESARIOS",
  "rejectionCause": "DEFECTOS FORMALES",
  "entityCode": 1,
  "checkNumber": 88813524,
  "rejectionDate": "2024-06-26",
  "amount": 276550,
  "paid": false,
  "paymentDate": null,
  "penaltyPaid": true,
  "penaltyPaymentDate": "2024-06-27",
  "penaltyStatus": null,
  "personalAccount": false,
  "legalName": null,
  "underReview": false,
  "inLegalProcess": false,
  "observedAt": "2026-09-06T03:00:04.274Z",
  "error": null
}
```

Una identificacion sin deuda informada devuelve un unico registro `clean`. Una identificacion mal formada o con digito verificador invalido devuelve un registro `invalid` y nunca se cobra.

### Por que este actor (comparacion)

| Capacidad | Este actor | Actor tipico de credito BCRA |
|---|---|---|
| Consulta por CUIT / CUIL / CDI | Si | Si |
| Validacion del digito verificador (invalidas no se cobran) | Si | Si |
| Deuda vigente por banco con situacion y monto | Si | Si |
| Dias de atraso, refinanciada, marcas legales y de revision | Si | Parcial |
| Serie historica de 24 meses | Si | Si |
| Cheques rechazados con estado de pago/multa | Si | Si |
| Resumen de riesgo por CUIT (peor situacion, deuda total) | Si | Solo agregado |
| Monto en pesos derivado de los miles del BCRA | Si | A veces |
| Filtro por clase de riesgo minima | Si | No |
| Concurrencia ajustable | Si | Si |
| Consulta por lote de muchas identificaciones | Si | Si |

### Ejecutar via API y CLI

Inicia una corrida, espera a que termine y lee el dataset. Reemplaza `<TOKEN>` por tu token de API de Apify.

Corrida sincronica que devuelve los items del dataset en una sola llamada:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~bcra-deudores-scraper/run-sync-get-dataset-items?token=%3CTOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"cuits":["30546741253"],"includeHistorical":true,"includeRejectedChecks":true,"includeSummary":true}'
```

Apify CLI:

```bash
apify call scrapers_lat/bcra-deudores-scraper \
  --input '{"cuits":["30546741253"]}'
```

### Obtener resultados

Cada corrida escribe en un dataset. Obtiene los items en JSON, CSV o Excel cambiando `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/%3CDATASET_ID%3E/items?token=%3CTOKEN%3E&clean=true&format=csv"
```

`<DATASET_ID>` se devuelve como `defaultDatasetId` en el objeto de la corrida. Usa `offset` y `limit` para paginar conjuntos grandes.

### Facturacion y limites

- **Pago por resultado.** Los registros de deuda vigente y limpios (y el resumen opcional) se cobran en el evento `result`. El historial de 24 meses y los cheques rechazados se cobran en el complemento `details` y requieren un plan pago de Apify.
- **Sin cargo ante fallas.** Si una consulta falla, se escribe una fila no facturable con un campo `error` y no se cobra. Las identificaciones invalidas se informan y no se cobran. Las corridas vacias no tienen costo.
- **Se respeta el limite de gasto.** Configura `maxTotalChargeUsd` en la corrida; al alcanzarlo, el actor deja de emitir y cobrar mas resultados facturables.
- **Los planes gratuitos de Apify** estan limitados a 10 resultados facturables por corrida, y los complementos de historial y cheques rechazados requieren un plan pago. Una identificacion con deudas en muchos bancos puede producir muchos registros; mejora tu plan para limites mayores.

### Preguntas frecuentes

**Una identificacion devolvio solo un registro `clean`. Que significa?**
El BCRA no tiene deuda informada para esa identificacion. El registro `clean` confirma que la consulta funciono y no encontro nada; es una respuesta real y verificada de sin deuda.

**Que significan los numeros de `situation`?**
Son las clases de situacion crediticia del BCRA: `1` Normal, `2` seguimiento especial / riesgo bajo, `3` con problemas, `4` alto riesgo de insolvencia, `5` irrecuperable, `6` irrecuperable por disposicion tecnica. `0` significa sin calificacion. Usa `minSituation` para quedarte solo con registros de una clase o superior.

**Por que `amount` es chico y `amountPesos` grande?**
El BCRA publica los montos de deuda en miles de pesos. `amount` es la cifra cruda; `amountPesos` es el valor derivado en pesos (`amount` x 1000).

**Como obtengo el historial completo y los cheques rechazados?**
Activa `includeHistorical` para la serie de 24 meses e `includeRejectedChecks` para los cheques rechazados. Ambos son complementos pagos.

**Puedo consultar muchas identificaciones a la vez?**
Si. Pasalas todas en el arreglo `cuits`; cada una se consulta en la misma corrida.

**Es una herramienta oficial del BCRA?**
No. Este actor es independiente y no tiene afiliacion con el BCRA. Lee solo datos disponibles publicamente en la Central de Deudores del BCRA. Usalo conforme a los terminos de uso de la fuente.

> Herramienta independiente, sin afiliacion con el BCRA. Accede solo a datos disponibles publicamente en la Central de Deudores del BCRA. Usar conforme a los terminos de uso de la fuente.

# Actor input Schema

## `cuits` (type: `array`):

One or more Argentine tax IDs (CUIT, CUIL or CDI) to look up in the BCRA Central de Deudores. Enter 11 digits per ID. Hyphens and spaces are ignored (30-54674125-3 and 30546741253 are the same). IDs with an invalid check digit or wrong length are reported and never charged.

## `includeRejectedChecks` (type: `boolean`):

Also emit rejected (bounced) checks for each tax ID (one record per check, with cause, amount and paid/penalty status). Paid add-on billed on the details event; available to paying Apify plans.

## `includeHistorical` (type: `boolean`):

Also emit the 24-month historical debt series for each tax ID (one record per past period and bank). Paid add-on billed on the details event; available to paying Apify plans.

## `includeHistory` (type: `boolean`):

Alias of includeHistorical, for compatibility. Turning either on enables the 24-month historical series.

## `includeSummary` (type: `boolean`):

Also emit one aggregate summary record per tax ID: worst situation, total debt in pesos, delinquent-entity count, rejected-check rollup and a one-line risk summary. Billed on the base result event.

## `minSituation` (type: `integer`):

Optional. Only emit debt/historical records at or above this BCRA risk class (1 Normal … 6 Irrecoverable). For example 3 returns only debtors in problem or worse standing. Leave empty to return every record.

## `validateCheckDigit` (type: `boolean`):

Validate each tax ID locally with the AFIP mod-11 check digit before querying BCRA. IDs that fail are reported as invalid and never charged. Turn off to query every 11-digit ID as-is.

## `maxConcurrency` (type: `integer`):

How many tax IDs are queried in parallel. The BCRA API rate-limits by IP, so keep this low; the actor backs off and retries automatically.

## `proxyConfiguration` (type: `object`):

Optional. The BCRA API is normally reachable without a proxy. Enable Apify Proxy (Residential, country Argentina) only if you hit rate limits or regional blocks.

## Actor input object example

```json
{
  "cuits": [
    "30546741253"
  ],
  "includeRejectedChecks": false,
  "includeHistorical": false,
  "includeHistory": false,
  "includeSummary": false,
  "validateCheckDigit": true,
  "maxConcurrency": 4,
  "proxyConfiguration": {}
}
```

# Actor output Schema

## `results` (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 = {
    "cuits": [
        "30546741253"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/bcra-deudores-scraper").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 = { "cuits": ["30546741253"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/bcra-deudores-scraper").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 '{
  "cuits": [
    "30546741253"
  ]
}' |
apify call scrapers_lat/bcra-deudores-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/bcra-deudores-scraper"
        }
    }
}

```

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/FPiIw3jufCTDIC7Tv/builds/xHryoiY0wjkY1JkyO/openapi.json
