# Argentina Credit Check (BCRA Central de Deudores) (`sebastian_elustondo/bcra-credit-check`) Actor

Check the credit situation of any Argentine CUIT/CUIL/CDI: debt by bank, worst situation (1-5), arrears, rejected checks and 24-month history from the official BCRA API. No scraping, no captcha.

- **URL**: https://apify.com/sebastian\_elustondo/bcra-credit-check.md
- **Developed by:** [Sebastian Elustondo](https://apify.com/sebastian_elustondo) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 credit checks

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?

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

## Argentina Credit Check — BCRA Central de Deudores API

Check the credit standing of any Argentine company or person by CUIT, CUIL or CDI. The Actor queries the official public API of the Banco Central de la República Argentina (BCRA) and returns, for each ID, the debt reported by every bank and lender, the worst credit situation (1 to 5), days in arrears, legal flags, rejected checks (cheques rechazados) and, optionally, the month-by-month history of the last 24 months.

No scraping, no captcha, no login. The data comes straight from the BCRA API, so it is always the latest period the financial system has reported.

### Who is this for

- **Fintechs and lenders** doing credit onboarding or pre-approval for Argentine customers.
- **Landlords, real-estate agencies and guarantors** screening tenants and co-signers.
- **B2B companies** deciding payment terms for new customers or distributors.
- **Accountants and legal firms** running due diligence on counterparties.
- **KYC / compliance teams** who need a structured, auditable record instead of a screenshot of the BCRA website.
- **AI agents and automations** that need a clean JSON answer to "is this CUIT a good payer?".

### What you get per ID

| Field | Meaning |
|---|---|
| `found` | `true` if BCRA has debt reported for this ID in the current period |
| `name` | Legal name (razón social) as registered with the tax authority |
| `period` | Reporting period, e.g. `2026-07` |
| `worstSituation` | Worst classification across all entities, 1 (normal) to 5 (uncollectible); 0 when nothing is reported |
| `worstSituationLabel` / `worstSituationLabelEs` | Human-readable label in English and Spanish |
| `totalDebtArs` | Total debt in Argentine pesos (BCRA reports thousands; the Actor converts to whole ARS) |
| `entities` | One row per bank or lender: situation, amount, days late, refinancing and legal flags |
| `flags` | Quick booleans: `hasDebt`, `hasArrears`, `hasRefinancing`, `hasLegalProcess`, `underReview`, `hasRejectedChecks`, `hasUnpaidRejectedChecks` |
| `rejectedChecks` | Every rejected check with cause, date, amount, whether it was paid and the fine status |
| `history` | Last 24 months, newest first: worst situation, total debt and number of entities per month (when `includeHistory` is on) |
| `riskSummary` | One sentence you can drop into a table or a Slack message |

#### Example output item

```json
{
  "cuit": "33693450239",
  "cuitFormatted": "33-69345023-9",
  "valid": true,
  "found": true,
  "name": "AGENCIA DE RECAUDACION Y CONTROL ADUANERO",
  "period": "2026-07",
  "worstSituation": 1,
  "worstSituationLabel": "Normal",
  "worstSituationLabelEs": "Normal",
  "totalDebtArs": 1725000,
  "totalDebtThousandsArs": 1725.0,
  "entitiesCount": 2,
  "entities": [
    {
      "entity": "BANCO DE LA NACION ARGENTINA",
      "situation": 1,
      "situationLabel": "Normal",
      "amountArs": 1538000,
      "daysLate": 0,
      "situation1Since": "2008-11-30",
      "refinanced": false,
      "mandatoryRecategorization": false,
      "legalSituation": false,
      "uncollectibleTechnical": false,
      "underReview": false,
      "legalProcess": false
    },
    {
      "entity": "BANCO SUPERVIELLE S.A.",
      "situation": 1,
      "situationLabel": "Normal",
      "amountArs": 187000,
      "daysLate": 0,
      "situation1Since": "2008-11-30",
      "refinanced": false,
      "mandatoryRecategorization": false,
      "legalSituation": false,
      "uncollectibleTechnical": false,
      "underReview": false,
      "legalProcess": false
    }
  ],
  "flags": {
    "hasDebt": true,
    "hasArrears": false,
    "hasRefinancing": false,
    "hasLegalSituation": false,
    "hasLegalProcess": false,
    "underReview": false,
    "hasRejectedChecks": false,
    "hasUnpaidRejectedChecks": false
  },
  "rejectedChecksCount": 0,
  "rejectedChecks": [],
  "history": [
    { "period": "2026-07", "worstSituation": 1, "totalDebtArs": 1725000, "entitiesCount": 5 },
    { "period": "2026-06", "worstSituation": 1, "totalDebtArs": 3200000, "entitiesCount": 5 }
  ],
  "checkedAt": "2026-09-02T22:04:01Z",
  "source": "BCRA Central de Deudores API v1.0",
  "riskSummary": "Normal (1) at 2 entities, ARS 1,725,000 total, no arrears, no rejected checks"
}
```

A rejected check looks like this inside `rejectedChecks`:

```json
{
  "cause": "SIN FONDOS",
  "bankGroup": 1,
  "checkNumber": 752395,
  "rejectedAt": "2024-04-08",
  "amountArs": 115000.0,
  "paidAt": null,
  "fineStatus": "IMPAGA",
  "finePaidAt": null,
  "personalAccount": false,
  "companyName": "HM COLON MONTAJES INDUSTRIALES S. R. L.",
  "underReview": false,
  "legalProcess": false
}
```

IDs that fail validation are returned too, so your pipeline never loses a row:

```json
{ "cuit": "30500001736", "input": "30500001736", "valid": false, "found": null, "error": "Invalid check digit" }
```

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `cuits` | list of strings | required | CUIT, CUIL or CDI, one per line. Dashes and spaces are fine: `30-50000173-5` and `30500001735` are the same ID. Duplicates are queried once. |
| `includeRejectedChecks` | boolean | `true` | Also query the rejected-checks registry. Included in the same `credit-check` event. |
| `includeHistory` | boolean | `false` | Add the 24-month history. Charged as a separate `history-check` event. |
| `maxConcurrency` | integer 1–10 | `4` | Parallel lookups. The BCRA API rate-limits by IP; the Actor backs off and retries automatically, but very large batches run faster with a lower value. |

Every ID is validated locally with the official mod-11 check-digit algorithm before anything is sent to BCRA. Invalid IDs are reported in the dataset and are **not** charged.

### Credit situation codes

The classification is the one defined by the BCRA "Clasificación de deudores" rules. Each lender reports its own code; `worstSituation` is the highest one across all lenders.

| Code | Commercial portfolio | Consumer / housing portfolio | Label in output |
|---|---|---|---|
| 1 | En situación normal | Situación normal | Normal |
| 2 | Con seguimiento especial | Riesgo bajo | Low risk / special monitoring |
| 3 | Con problemas | Riesgo medio | Medium risk / with problems |
| 4 | Con alto riesgo de insolvencia | Riesgo alto | High risk / high risk of insolvency |
| 5 | Irrecuperable | Irrecuperable | Uncollectible |

`daysLate` is only reported for consumer/housing debtors classified outside situation 1; `0` means "not applicable". `uncollectibleTechnical`, `refinanced`, `mandatoryRecategorization` and `legalSituation` are the framing flags the lender attached to the classification. `underReview` and `legalProcess` mean the record is being disputed under the Argentine data-protection law (Ley 25.326).

### Amounts

BCRA publishes debt in **thousands of pesos**. The Actor multiplies by 1,000 and exposes `totalDebtArs` and `entities[].amountArs` in whole ARS; the raw figure is kept in `totalDebtThousandsArs`. Rejected-check amounts are the face value of the check in ARS, as published.

### Pricing

This Actor uses pay-per-event pricing, so you only pay for what you look up:

- **`credit-check`**: one event per valid ID queried. It covers the current debt situation and the rejected-checks registry. An ID with no reported debt still consumes a lookup and is charged.
- **`history-check`**: one additional event per ID when `includeHistory` is enabled.

Invalid IDs (wrong length or check digit) are never charged. The current prices are shown on the Actor's pricing tab.

### How to use it

1. Paste the IDs in the **CUIT / CUIL / CDI numbers** field, one per line.
2. Tick **Include 24-month history** if you need the trend and not just the snapshot.
3. Click **Start**. Results appear in the dataset as each ID completes; export as JSON, CSV or Excel, or read them from the API.

#### From the API

```bash
curl -X POST "https://api.apify.com/v2/acts/<YOUR_USERNAME>~bcra-credit-check/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"cuits": ["30-50000173-5", "33-69345023-9"], "includeHistory": false}'
```

#### From Python

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/bcra-credit-check").call(run_input={
    "cuits": ["30-50000173-5", "33-69345023-9"],
    "includeHistory": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["cuitFormatted"], item["riskSummary"])
```

Works with the Apify integrations for Make, Zapier, n8n, Google Sheets and webhooks, and can be called as a tool by AI agents through the Apify MCP server.

### Limitations

- BCRA only knows what regulated lenders report: banks, financial companies, card issuers, mutual guarantee companies, fintech lenders registered as "otros proveedores no financieros de crédito". Informal debt, utilities and tax debt are not included.
- Data is monthly. The `period` field tells you which month you are looking at; there is typically a lag of one to two months.
- This is public information republished from BCRA. It is **not** a credit score and does not include the lender's internal scoring. Use it as one input in your own decision.
- The BCRA API has a per-IP rate limit. The Actor retries with back-off; for very large batches run it in chunks or lower `maxConcurrency`.
- The `name` field is empty when BCRA has no record at all for the ID (no debt and no rejected checks). The Actor does not query the tax authority (ARCA/AFIP) to resolve names.

### FAQ

**Does it work for individuals (CUIL) as well as companies (CUIT)?**
Yes. Individuals, companies and CDI holders share the same 11-digit format and the same registry.

**What does `found: false` mean?**
BCRA returned "no data for this ID": no lender reported any debt for the current period. It is usually good news, but it also happens for IDs that never had bank credit. Combine it with `rejectedChecksCount`.

**Why is `worstSituation` 0?**
Nothing was reported for the period (`found: false`). Real classifications start at 1.

**Can I get the report in Spanish?**
Situation labels are provided in both languages (`worstSituationLabel`, `worstSituationLabelEs`, `entities[].situationLabel`). Field names are English so they map cleanly to spreadsheets and databases.

**How fresh is the data?**
Each run queries BCRA live. The registry itself is updated monthly for debts and daily for rejected checks.

**How many IDs can I check in one run?**
There is no hard limit. Thousands of IDs are fine; the Actor paces requests to respect the BCRA rate limit.

### Data source and legal

All data is retrieved from the BCRA public "Central de Deudores" API v1.0 (`api.bcra.gob.ar`), which requires no authentication and is published under the BCRA's open-data policy. As stated by BCRA, publication of this information does not imply endorsement by the Central Bank, and the rights of rectification, update, suppression and confidentiality must be exercised before the reporting entity. Use the data in compliance with the Argentine Personal Data Protection Law (Ley 25.326) and your own regulatory obligations.

# Actor input Schema

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

One tax ID per line. Dashes and spaces are accepted (30-50000173-5 and 30500001735 are the same). Each ID must be 11 digits with a valid check digit; invalid IDs are reported in the output without querying BCRA and are not charged.

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

Also query the BCRA rejected-checks registry (cheques rechazados) for each ID. Included in the same credit-check event.

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

Add the month-by-month situation and debt for the last 24 months. Charged as a separate history-check event per ID.

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

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

## Actor input object example

```json
{
  "cuits": [
    "30-50000173-5",
    "30500006613",
    "33-69345023-9"
  ],
  "includeRejectedChecks": true,
  "includeHistory": false,
  "maxConcurrency": 4
}
```

# Actor output Schema

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

One item per tax ID with situation, debt by entity, flags, rejected checks and optional history.

# 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": [
        "30-50000173-5",
        "30500006613",
        "33-69345023-9"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sebastian_elustondo/bcra-credit-check").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": [
        "30-50000173-5",
        "30500006613",
        "33-69345023-9",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("sebastian_elustondo/bcra-credit-check").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": [
    "30-50000173-5",
    "30500006613",
    "33-69345023-9"
  ]
}' |
apify call sebastian_elustondo/bcra-credit-check --silent --output-dataset

```

## MCP server setup

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

```

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/ryn4kTntC2Jt26uO7/builds/h9vkacaCOFe2VBHn7/openapi.json
