# Brazil Sanctions Check - CPF & CNPJ lookup (`brasildados/sanctions-check`) Actor

Screen CPFs and CNPJs against 5 Brazilian federal sanctions registries: CEIS, CNEP, CEPIM, CEAF and Leniency Agreements. Instant results for KYC, KYB, due diligence and compliance. Up to 50 documents per run, CPF masked, billed only per sanction found.

- **URL**: https://apify.com/brasildados/sanctions-check.md
- **Developed by:** [brasildados.org - API de Dados Abertos](https://apify.com/brasildados) (community)
- **Categories:** Integrations, AI, Developer tools
- **Features:** Limited permissions
- **Stats:** 48 total users, 3 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $10.00 / 1,000 per single sanction founds

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

### Brazil Sanctions Check by CPF and CNPJ

Screen Brazilian people and companies in CEIS, CNEP, CEPIM, CEAF and Leniency
Agreements using CPF or CNPJ. The Actor returns one Dataset row per sanction found, plus one `CLEAN` row for
each document with no sanction. Billing is per Dataset row (see the Pricing tab).

#### Supported registries

| Registry | Documents | Description |
|---|---|---|
| CEIS | CPF and CNPJ | Disreputable and suspended companies and people |
| CNEP | CPF and CNPJ | Companies punished under the public administration liability regime |
| CEPIM | CNPJ | Non-profit entities barred from agreements and transfers |
| CEAF | CPF | Expulsions from the Federal Administration |
| Leniency Agreements | CNPJ | Agreements signed with companies |

#### Input

Provide one to 50 CPF or CNPJ values. Formatting is optional. Duplicate values
are processed once, invalid values (wrong length or check digits) are ignored, and a bad input line never
aborts processing of valid lines. `maxSanctionPerCompany` limits the number of
sanction rows returned for each CPF or CNPJ and defaults to 50.

```json
{
  "documents": ["02.342.260/0001-70", "52998224725"],
  "maxSanctionPerCompany": 50
}
```

#### 📦 How the result works

Each Dataset row represents one sanction in one registry, with `screeningStatus: "SANCTIONED"`.
A document with no record in any checked registry gets one row instead:

```json
{
  "document": "02.477.478/0001-32",
  "documentType": "CNPJ",
  "screeningStatus": "CLEAN",
  "registriesChecked": ["CEIS", "CNEP", "CEPIM", "LENIENCY_AGREEMENT"],
  "checkedAt": "2026-10-04T17:29:15.000Z"
}
```

Real sanction example (CEIS record for CNPJ 02.342.260/0001-70):

```json
{
  "document": "02.342.260/0001-70",
  "documentType": "CNPJ",
  "screeningStatus": "SANCTIONED",
  "registry": "CEIS",
  "registryName": "National Register of Disreputable and Suspended Companies",
  "recordId": 284724,
  "sanctionedName": "LANCE CONSULTORIA EMPREENDIMENTOS E GESTÃO DE ATIVOS LTDA",
  "sanctionType": "Impedimento/proibição de contratar com prazo determinado",
  "startDate": "2022-02-22",
  "endDate": "2032-02-22",
  "referenceDate": "2026-09-18",
  "finalJudgmentDate": "2022-02-22",
  "informationOriginDate": "2023-06-12",
  "processNumber": "00025983920124058500",
  "agency": "1º Grau - TRF5 / Seção Judiciária de Sergipe / Varas / Juízo / 9ª VARA FEDERAL - PROPRIA/SE",
  "agencyState": "SE",
  "agencyBranch": "Judiciário",
  "agencyLevel": "FEDERAL",
  "sourceName": "Conselho Nacional de Justiça (CNJ-DF)",
  "sourcePhone": "(61) 2326-4925",
  "sourceAddress": "SAF Sul Quadra 2 - Lote5/6 - Bloco E - Sala 303 - CEP: 70070-600  Brasília/DF",
  "legalBases": [
    { "description": "LEI 8429 - ART. 12 - INDEPENDENTEMENTE DAS SANÇÕES PENAIS, CIVIS E ADMINISTRATIVAS PREVISTAS NA LEGISLAÇÃO ESPECÍFICA, ..." }
  ],
  "checkedAt": "2026-09-19T07:38:18.246Z"
}
```

Fields that the registry does not provide are omitted from the row, so each registry fills a different subset of the fields below.

##### All output fields

Every row has `screeningStatus` (`SANCTIONED` or `CLEAN`). CLEAN rows carry only `document`, `documentType`, `screeningStatus`, `registriesChecked` and `checkedAt`. Sanction rows carry:

| Field | Description |
|---|---|
| `document` | Formatted CNPJ or partially masked CPF. |
| `documentType` | Whether the screened identifier is a CPF or a CNPJ. |
| `registry` | Official registry where this sanction record was found. |
| `registryName` | Full English name of the official registry. |
| `recordId` | Source identifier of this sanction record. |
| `sanctionedName` | Company name, or only the person’s first given name. |
| `legalName` | Legal name of the sanctioned company, when it differs from the display name. |
| `tradeName` | Trade name of the sanctioned company, when available. |
| `sanctionType` | Short type or penalty label from the registry. |
| `sanctionDescription` | Longer description of the sanction, when it differs from the type. |
| `status` | Current status of the sanction or agreement, when provided. |
| `startDate` | Date in YYYY-MM-DD format. |
| `endDate` | Date in YYYY-MM-DD format. |
| `publicationDate` | Official publication date (YYYY-MM-DD). |
| `referenceDate` | Reference date of the record (YYYY-MM-DD). |
| `finalJudgmentDate` | Date the decision became final (YYYY-MM-DD). |
| `informationOriginDate` | Date the agency originated this information (YYYY-MM-DD). |
| `processNumber` | Administrative or judicial case number. |
| `fineAmount` | Fine amount as published by the source. |
| `reason` | Reason for the sanction, when provided. |
| `agency` | Agency responsible for the sanction. |
| `agencyState` | Federative unit of the responsible agency. |
| `agencyBranch` | Branch of government of the responsible agency. |
| `agencyLevel` | Federation level of the responsible agency (federal, state, municipal). |
| `parentAgencyCode` | SIAFI code of the parent agency, when provided. |
| `parentAgencyAcronym` | Acronym of the parent agency. |
| `sourceName` | Name of the office that supplied the record. |
| `sourcePhone` | Contact phone of the source office, when provided. |
| `sourceAddress` | Contact address of the source office, when provided. |
| `legalBases` | Legal bases cited for the sanction. Each code/description is truncated at 500 characters. |
| `publicationText` | Text of the official publication, when provided. |
| `publicationLink` | URL of the official publication, when provided. |
| `publicationDetails` | Extra publication details (section, page, etc.). |
| `judicialDecisionScope` | Geographic or legal scope defined by a court decision. |
| `additionalInformation` | Extra notes from the sanctioning agency. |
| `agreementCode` | Internal code of a leniency agreement. |
| `agreementNumber` | Public number of a leniency agreement. |
| `agreementPurpose` | Stated purpose of a leniency agreement. |
| `position` | Permanent position of a sanctioned public servant. |
| `appointedPositionCode` | Code of an appointed (commissioned) position. |
| `appointedPosition` | Appointed (commissioned) position title. |
| `ordinance` | Ordinance that applied the penalty. |
| `officialGazettePage` | Official Gazette page of the publication. |
| `officialGazetteSection` | Official Gazette section of the publication. |
| `dutyState` | Federative unit where the public servant was posted. |
| `companiesInAgreementCount` | Number of companies listed in a leniency agreement. |
| `companiesInAgreement` | Companies listed in a leniency agreement (not separately billed). |
| `checkedAt` | ISO 8601 date and time. |

For individuals, CPF values are partially masked and only the first given name
is returned. Empty and duplicated source fields are removed.

#### Use it through the Apify API

Replace `SEU_APIFY_TOKEN` with a secret or environment variable. Never publish
a real token in source code, documentation, test fixtures or public logs.

```bash
curl -X POST "https://api.apify.com/v2/acts/brasildados~sanctions-check/run-sync-get-dataset-items?format=json" \
  -H "Authorization: Bearer SEU_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"documents":["02.342.260/0001-70","52998224725"],"maxSanctionPerCompany":50}'
```

The Actor deliberately paces requests to protect the public source APIs. For
longer lists, split the input into successive runs.

#### Data protection and billing

Companies are returned in full. Individual CPFs are masked. The Actor does not
log secrets, API tokens, complete external responses or arbitrary invalid input
text. Each Dataset row is billed: one per sanction found, or one CLEAN row per clean
document. Invalid documents and documents that could not be fully screened
produce no row and are not billed.

#### More Brasil Dados Actors

See all Actors and tools at
[Brasil Dados](https://brasildados.org/?fpr=t5lwzq).

| Actor | When to use |
|---|---|
| [CNPJ Legal Processes Distribution](https://apify.com/brasildados/cnpj-lawsuits-check?fpr=t5lwzq) | Aggregated lawsuit risk by CNPJ |
| [CNPJ KYC & PEP Checker](https://apify.com/brasildados/cnpj-kyc-compliance-pep-checker?fpr=t5lwzq) | PEP, international sanctions and electoral donations |
| [CNPJ Lead Scraper Search](https://apify.com/brasildados/cnpj-lead-scraper-search?fpr=t5lwzq) | Search and enrich Brazilian company leads |

#### Important notes

`CLEAN` means no record was found in the screened registries at that
moment. Data depends on the responsible agencies. For legal, regulatory or
contracting decisions, confirm records against the applicable official
documentation.

# Actor input Schema

## `documents` (type: `array`):

1 to 50 CPFs or CNPJs, with or without punctuation. Mix both types. Duplicates are screened once. Invalid IDs (wrong length or check digits) are skipped and the valid ones are screened.

**CNPJ:** CEIS, CNEP, CEPIM, Leniency Agreements. **CPF:** CEIS, CNEP, CEAF.

Each sanction found is one billed Dataset row; a document with no sanction gets one CLEAN row. Use the run’s max total charge to cap spend.

## `maxSanctionPerCompany` (type: `integer`):

Maximum number of sanction Dataset rows returned for each CPF or CNPJ. The limit is applied after duplicate records are removed. Use a smaller value to reduce output and potential charges.

## Actor input object example

```json
{
  "documents": [
    "02.342.260/0001-70",
    "52998224725"
  ],
  "maxSanctionPerCompany": 50
}
```

# Actor output Schema

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

Direct API URL for the full results Dataset.

# 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 = {
    "documents": [
        "02.342.260/0001-70",
        "52998224725"
    ],
    "maxSanctionPerCompany": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("brasildados/sanctions-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 = {
    "documents": [
        "02.342.260/0001-70",
        "52998224725",
    ],
    "maxSanctionPerCompany": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("brasildados/sanctions-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 '{
  "documents": [
    "02.342.260/0001-70",
    "52998224725"
  ],
  "maxSanctionPerCompany": 50
}' |
apify call brasildados/sanctions-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brasildados/sanctions-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/qrHUz1WIM9Bkhl6TX/builds/Dlb6DDlj1VseIYX5w/openapi.json
