# Triagem de Sanções por CNPJ — CEIS, CNEP, CEPIM e Leniência (`johnatan029/cnpj-sanctions-screening`) Actor

Faça triagem de CNPJs contra CEIS, CNEP, CEPIM e Acordos de Leniência usando arquivos oficiais do Portal da Transparência. Receba veredito por CNPJ, ocorrências, processo, órgão, datas, fundamentação e versão dos dados. Em lote, sem chave de API e sem score de risco.

- **URL**: https://apify.com/johnatan029/cnpj-sanctions-screening.md
- **Developed by:** [Johnn Mottin](https://apify.com/johnatan029) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 cnpj verificados

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

## Triagem de Sanções por CNPJ — CEIS, CNEP, CEPIM e Acordos de Leniência

Seu fornecedor, cliente ou parceiro tem **sanção federal vigente**? Conferir
CNPJ a CNPJ no Portal da Transparência, base a base, não escala — e planilha
desatualizada em compliance é passivo. Este actor faz a triagem **em lote**,
contra os **arquivos diários oficiais de dados abertos** — e entrega **fatos
com fonte, datas, processo e fundamentação**, nunca um "score".

**Zero chave, zero cadastro.** Diferente de soluções que dependem de chave de
API (sua ou compartilhada), este actor lê os arquivos públicos oficiais
diretamente. Nada para configurar além da sua lista de CNPJs.

### As 4 bases consultadas

| base | o que é |
|---|---|
| **CEIS** | Empresas inidôneas e suspensas de licitar/contratar com a administração |
| **CNEP** | Empresas punidas pela Lei Anticorrupção — inclui o **valor da multa** |
| **CEPIM** | Entidades sem fins lucrativos impedidas de firmar convênios federais |
| **Acordos de Leniência** | Acordos com a CGU: vigência, situação, processo e **efeitos** |

**Honestidade de escopo:** o CEAF (expulsões de servidores federais) é uma base
de **CPF de pessoa física** — a fonte oficial não permite consulta por CNPJ, e
por isso ele fica **fora** desta triagem. Registros de pessoas físicas
presentes no CEIS/CNEP também ficam fora (a triagem é por CNPJ). Nos Acordos de
Leniência, sancionadas **estrangeiras sem CNPJ** existem na base e não são
alcançáveis por match de CNPJ — está documentado, não escondido.

### O que você recebe por CNPJ

Um registro `SCREENING_RESULT` com veredito `SEM_REGISTROS`,
`REGISTROS_ENCONTRADOS` ou `CNPJ_INVALIDO` e, para cada registro encontrado:
categoria da sanção, órgão sancionador (com UF e esfera), número do processo,
**fundamentação legal completa**, datas (início, fim, publicação, trânsito em
julgado), meio de publicação, e a **versão dos dados** (a data do arquivo
oficial usado). CNPJs **alfanuméricos** (formato de julho/2026) são aceitos e
normalizados pela regra oficial da IN RFB 2.229/2024.

#### Frescor — o contrato

A fonte publica **um arquivo por dia útil** por base e mantém **apenas o mais
recente** no ar (em fins de semana, o mais novo é o de sexta — medido). Cada
run baixa o arquivo mais atual disponível (procurando de hoje até 4 dias atrás)
e carimba a data usada em **todo registro** (`versaoDosDados`) e no resumo. Se
uma base estiver indisponível em todas as datas da janela, ela entra em
`basesIndisponiveis` — **indisponibilidade jamais vira veredito**.

### O que este actor NÃO é

- **Não é score de risco.** Não emite nota, ranking, juízo de idoneidade nem
  recomendação de crédito — e o output não tem campo onde isso caiba.
- **Não é certidão.** "Sem registros" significa: sem registros **nas bases
  consultadas, na versão de dados indicada**. Não é atestado de idoneidade.
- **Não é prova de culpa.** A existência de registro é um fato público com
  fonte e data — confira sempre na fonte antes de qualquer decisão.

### Preço e regra de cobrança (declarada)

- `cnpj-screened` — **por CNPJ processado**. O veredito é o produto: **CNPJ
  limpo também é entrega cobrada** (é exatamente a resposta que compliance
  precisa). Duplicados e valores inválidos processados também contam — cada um
  vira um registro com veredito.
- Resumo da run (`RUN_SUMMARY`) com agregações (sancionados × limpos, contagem
  por base, versões dos dados): **grátis**.
- Custo típico de infraestrutura por run: centavos — a run baixa ~4 MB de
  arquivos oficiais e faz o match localmente, sem proxy e sem browser.

### Exemplo de input

```json
{
  "cnpjs": ["08.969.791/0001-74", "47.960.950/0001-21", "00000000000191"],
  "bases": ["CEIS", "CNEP", "CEPIM", "ACORDOS_LENIENCIA"]
}
```

Também aceita CSV (`csv` + `csvColumn`) para triar planilhas inteiras.

### Exemplo de output (registro real de run de prova, 30/08/2026 — fundamentação abreviada com "…" apenas aqui)

```json
{
  "recordType": "SCREENING_RESULT",
  "originalValue": "08.969.791/0001-74",
  "cnpj": "08969791000174",
  "cnpjFormatado": "08.969.791/0001-74",
  "formato": "numeric",
  "veredito": "REGISTROS_ENCONTRADOS",
  "totalRegistros": 1,
  "basesConsultadas": ["CEIS", "CNEP", "CEPIM", "ACORDOS_LENIENCIA"],
  "basesComRegistro": ["CEIS"],
  "basesSemRegistro": ["CNEP", "CEPIM", "ACORDOS_LENIENCIA"],
  "basesIndisponiveis": [],
  "registros": [
    {
      "base": "CEIS",
      "baseLabel": "CEIS — Empresas Inidôneas e Suspensas",
      "nomeSancionado": "CARVALHO PROJETOS LTDA",
      "numeroProcesso": "002417.0480.15-9",
      "categoriaSancao": "Declaração de Inidoneidade sem prazo determinado",
      "dataInicioSancao": "30/05/2016",
      "dataPublicacao": "30/05/2016",
      "publicacao": "Diário Oficial do Estado Seção 1 Pagina 1",
      "orgaoSancionador": "CIA ESTADUAL DE ENERGIA ELETRICA-CEEE",
      "ufOrgaoSancionador": "RS",
      "esferaOrgaoSancionador": "ESTADUAL",
      "fundamentacaoLegal": "LEI 8666 - ART. 87, IV - PELA INEXECUÇÃO TOTAL OU PARCIAL DO CONTRATO … (texto integral no dataset)",
      "origemInformacao": "Governo do Estado do Rio Grande do Sul (RS)",
      "fonte": "CEIS — Empresas Inidôneas e Suspensas — arquivo diário oficial do Portal da Transparência (CGU)",
      "versaoDosDados": "2026-08-28"
    }
  ],
  "versaoDosDados": { "CEIS": "2026-08-28", "CNEP": "2026-08-28", "CEPIM": "2026-08-27", "ACORDOS_LENIENCIA": "2026-08-28" },
  "duplicate": false,
  "aviso": "Fatos públicos com fonte, datas e processo… A existência de registro NÃO é juízo de culpa, score de risco nem recomendação — confira na fonte.",
  "observedAt": "2026-08-30T20:29:36.549Z"
}
```

### Limitações honestas

- **CEAF fora**: é base de CPF de pessoa física; a fonte oficial não consulta
  por CNPJ. Pessoas físicas no CEIS/CNEP também ficam fora (triagem por CNPJ).
- **Leniência**: sancionadas estrangeiras **sem CNPJ** existem na base (25 de
  152 na medição de 28/08/2026) e não são alcançáveis por match de CNPJ.
- **Frescor = arquivo diário oficial** (dias úteis). A run usa o mais recente
  disponível e carimba a data em cada registro — em fim de semana, tipicamente
  o de sexta-feira.
- O arquivo traz o **nome do meio de publicação** (ex.: Diário Oficial, seção e
  página), não um link clicável — é o que a fonte aberta publica.
- Duplicados, CNPJs inválidos e vereditos limpos são processados e **cobrados**
  (cada um vira um registro com veredito — a regra está declarada acima).

### Agende (Schedule it)

Rode em agenda (diária ou semanal) sobre a mesma carteira para acompanhar
entradas e saídas das bases — o arquivo é diário, então a agenda diária captura
cada mudança de status com a `versaoDosDados` provando o dia da fotografia.

### FAQ

**De onde vêm os dados?** Dos arquivos diários oficiais de dados abertos do
Portal da Transparência (CGU), a mesma fonte pública que alimenta o site — via
download oficial, sem chave. Dados públicos com dever legal de publicidade;
consulte os termos de uso de dados abertos do governo federal
(dados.gov.br).

**Com que atraso?** O arquivo é diário. A `versaoDosDados` em cada registro diz
exatamente de que dia é a fotografia usada na sua run.

**CNPJ alfanumérico funciona?** Sim — normalização pela regra oficial (norma da
IN RFB 2.229/2024), incluindo minúsculas e máscara.

**E se o Portal estiver fora do ar?** A base afetada entra em
`basesIndisponiveis` e o veredito passa a valer só para as bases consultadas.
Se TODAS falharem, a run termina com aviso e **nada além do início é cobrado**.

**Posso agendar?** Sim — rode diariamente/semanalmente sobre a mesma carteira
para acompanhar mudanças de status.

### Família CNPJ (cross-sell)

- **Validador de CNPJ Alfanumérico** — valida lotes pela regra oficial, sem
  consulta cadastral.
- **CNPJ & Company Data Brazil** — cadastro completo (razão social, CNAE, QSA,
  endereço) por CNPJ.
- Este actor — a camada de **sanções e compliance** da família.

### Suporte e transparência

- Suporte em até **24 h** via aba Issues do actor.
- Não afiliado à CGU, ao Portal da Transparência ou ao Governo Federal.
  Dados públicos oficiais; cada registro carrega fonte, datas e processo.

# Actor input Schema

## `cnpjs` (type: `array`):

Lote de CNPJs, com ou sem máscara. CNPJs alfanuméricos (formato de julho/2026) são aceitos e normalizados pela regra oficial.

## `csv` (type: `string`):

Conteúdo CSV com cabeçalho; informe a coluna dos CNPJs em csvColumn. Pode ser usado junto com a lista.

## `csvColumn` (type: `string`):

Nome (ou índice, começando em 0) da coluna que contém o CNPJ.

## `bases` (type: `array`):

Subconjunto de: CEIS, CNEP, CEPIM, ACORDOS\_LENIENCIA. CEAF (expulsões de servidores) é base de CPF de pessoa física e fica fora da triagem por CNPJ.

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

Cerca de entrega: CNPJs além do teto não são triados nem cobrados.

## `maxRequests` (type: `integer`):

A run faz no máximo 3 requests por base (fallback de datas). Cerca dura.

## `maxRuntimeMs` (type: `integer`):

Cerca dura de duração da run (SpendGuard).

## `debug` (type: `boolean`):

Log detalhado por etapa.

## Actor input object example

```json
{
  "cnpjs": [
    "08.969.791/0001-74",
    "47.960.950/0001-21",
    "00000000000191"
  ],
  "csvColumn": "cnpj",
  "bases": [
    "CEIS",
    "CNEP",
    "CEPIM",
    "ACORDOS_LENIENCIA"
  ],
  "maxResults": 100,
  "maxRequests": 30,
  "maxRuntimeMs": 600000,
  "debug": false
}
```

# 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 = {
    "cnpjs": [
        "08.969.791/0001-74",
        "47.960.950/0001-21",
        "00000000000191"
    ],
    "csv": "",
    "csvColumn": "cnpj",
    "bases": [
        "CEIS",
        "CNEP",
        "CEPIM",
        "ACORDOS_LENIENCIA"
    ],
    "maxResults": 100,
    "maxRequests": 30,
    "maxRuntimeMs": 600000,
    "debug": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("johnatan029/cnpj-sanctions-screening").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 = {
    "cnpjs": [
        "08.969.791/0001-74",
        "47.960.950/0001-21",
        "00000000000191",
    ],
    "csv": "",
    "csvColumn": "cnpj",
    "bases": [
        "CEIS",
        "CNEP",
        "CEPIM",
        "ACORDOS_LENIENCIA",
    ],
    "maxResults": 100,
    "maxRequests": 30,
    "maxRuntimeMs": 600000,
    "debug": False,
}

# Run the Actor and wait for it to finish
run = client.actor("johnatan029/cnpj-sanctions-screening").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 '{
  "cnpjs": [
    "08.969.791/0001-74",
    "47.960.950/0001-21",
    "00000000000191"
  ],
  "csv": "",
  "csvColumn": "cnpj",
  "bases": [
    "CEIS",
    "CNEP",
    "CEPIM",
    "ACORDOS_LENIENCIA"
  ],
  "maxResults": 100,
  "maxRequests": 30,
  "maxRuntimeMs": 600000,
  "debug": false
}' |
apify call johnatan029/cnpj-sanctions-screening --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,johnatan029/cnpj-sanctions-screening"
        }
    }
}

```

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/ZwA6xJyfuQdhGPIQ8/builds/SNhfYPRxbV9JLOiGv/openapi.json
