# Brazil Company Sanctions (CEIS, CNEP): sanções a empresas (`soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas`) Actor

Empresas sancionadas no CEIS e no CNEP do Portal da Transparência (CGU): consulte por CNPJ, nome, órgão ou período. Só pessoa jurídica. JSON, CSV ou Excel, sem chave de API.

- **URL**: https://apify.com/soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas.md
- **Developed by:** [Soleene Dados](https://apify.com/soleene) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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.

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

## Sanções a empresas: CEIS e CNEP do Portal da Transparência

Empresas sancionadas no **CEIS** (Cadastro Nacional de Empresas Inidôneas e Suspensas) e no **CNEP** (Cadastro Nacional de Empresas Punidas, da Lei Anticorrupção), a partir dos arquivos diários de dados abertos do Portal da Transparência do Governo Federal (CGU). Consulte por CNPJ (completo ou raiz), nome, órgão sancionador, esfera, categoria, período de publicação ou vigência. Não precisa de chave de API.

**Fonte: Portal da Transparência (CGU), dados abertos.** Este Actor não é da CGU nem tem ligação com ela. Os cadastros mudam todo dia e podem ter erros ou atrasos: **não use este resultado como certidão nem como única base de uma decisão de contratação**. Confira no Portal.

### O que devolve

Um registro por sanção aplicada a uma **pessoa jurídica**: cadastro (CEIS ou CNEP), código da sanção, CNPJ (14 dígitos), nome do sancionado, razão social e nome fantasia (Receita), número do processo, categoria da sanção, valor da multa (só no CNEP), datas de início, fim, publicação e trânsito em julgado, órgão sancionador (com UF e esfera), abrangência, fundamentação legal, origem da informação, observações e a URL do arquivo.

`vigente` é **calculado por este Actor** na data da execução, a partir das datas de início e fim do arquivo (sem data final conta como vigente). Não é um campo da fonte.

Exemplo (CNEP; valores ilustrativos, formato real):

```json
{
  "cadastro": "CNEP",
  "codigoSancao": "12345",
  "cnpj": "00000000000191",
  "nomeSancionado": "EMPRESA EXEMPLO LTDA",
  "razaoSocial": "EMPRESA EXEMPLO LTDA",
  "categoriaSancao": "Multa",
  "valorMulta": 137260.07,
  "dataInicio": "2020-01-01",
  "dataFim": null,
  "vigente": true,
  "dataPublicacao": "2020-01-15",
  "orgaoSancionador": "Ministério Exemplo",
  "ufOrgaoSancionador": "DF",
  "esferaOrgaoSancionador": "FEDERAL",
  "arquivoUrl": "https://portaldatransparencia.gov.br/download-de-dados/cnep/20261104"
}
```

### Dado pessoal: o que NÃO sai

Os cadastros trazem **pessoa física sancionada** com nome e CPF completos (em 2026-11-04, 9.155 de 23.693 linhas do CEIS e 28 de 1.840 do CNEP). Neste Actor:

- **Só pessoa jurídica** (tipo de pessoa J). Pessoa física não sai, nem nome nem CPF. Linhas sem tipo de pessoa também ficam de fora.
- Ficam de fora as empresas cujo nome termina com 11 dígitos, que é o padrão do nome de microempreendedor individual (nome da pessoa mais o CPF). É uma **heurística**: pode deixar passar um empresário individual com outro formato de nome.
- CPF que aparecer em texto livre (publicação, observações, fundamentação) sai mascarado (`***.456.789-**`) quando `mascararCpf` está ligado (o padrão). No arquivo inteiro de 2026-11-04 não restou CPF reconhecível nos campos devolvidos.

Razão social e CNPJ de empresas são dado público de sanção administrativa e saem como a fonte publica. Mesmo assim, você é responsável por usar o dado de forma lícita e conforme a LGPD.

### Entrada

| Campo | Obrigatório | Padrão | O que faz |
|---|---|---|---|
| `cadastro` | sim | `cnep` | `ceis` ou `cnep` |
| `cnpj` | não | todos | CNPJ de 14 dígitos, ou raiz de 8 (pega matriz e filiais). Com ou sem pontuação |
| `nome` | não | todos | Parte da razão social, do nome fantasia ou do nome informado pelo órgão |
| `uf` | não | todas | UF do **órgão sancionador**, não da empresa |
| `orgao` | não | todos | Parte do nome do órgão sancionador |
| `esfera` | não | todas | `federal`, `estadual` ou `municipal` |
| `categoria` | não | todas | Parte da categoria: `inidoneidade`, `suspensão`, `impedimento`, `multa`... |
| `apenasVigentes` | não | `false` | Só sanções que já começaram e ainda não terminaram (ou sem data final) |
| `publicadoDesde` / `publicadoAte` | não | sem filtro | Data de publicação, inclusive, `AAAA-MM-DD` |
| `valorMinimoMulta` | não | sem mínimo | Só CNEP: descarta multas menores ou ausentes |
| `mascararCpf` | não | `true` | Mascara CPF no texto livre |
| `limite` | não | 20 | Teto de 10.000 registros |

Para consultar uma lista de CNPJs, rode uma execução por CNPJ (cada uma baixa o arquivo de novo). Esta versão não aceita lista de CNPJs.

### Preço

Cobrança por evento. O preço em vigor aparece sempre na página do Actor.

| Evento | Preço |
|---|---|
| Início de cada execução | US$ 0,001 |
| Cada registro devolvido | US$ 0,002 (US$ 2,00 por mil) |

Consultar um CNPJ com uma sanção custa US$ 0,003. Vinte registros, o limite padrão, custam US$ 0,041.

### Limites

- Cada execução baixa o arquivo diário inteiro (CEIS: 3,5 MB compactado e 34 MB de CSV; CNEP: 0,2 MB) e filtra localmente. Leva de 4 a 6 s sem resultado.
- O arquivo é um retrato do dia. O Actor tenta a data de hoje (horário de Brasília) e volta até 7 dias se o Portal não tiver o arquivo daquele dia. Se nenhum existir, a execução falha com mensagem clara.
- Só CEIS e CNEP. O CEPIM (entidades sem fins lucrativos impedidas) e o CEAF (expulsões da administração) não fazem parte desta versão: o CEPIM respondeu HTTP 403 ao mesmo padrão de endereço.
- Em 2026-11-04 o CEIS tinha cerca de 14,4 mil empresas depois dos filtros de dado pessoal e o CNEP, 1.809. O teto de 10.000 registros corta o CEIS inteiro; use filtros.
- Um filtro sem resultado não é erro: a execução termina com a mensagem "Nenhum registro encontrado para esses filtros".

### Fonte

GET direto, sem login, sem chave e sem proxy, em `https://portaldatransparencia.gov.br/download-de-dados/<ceis|cnep>/AAAAMMDD`, que redireciona para o ZIP do dia em `dadosabertos-download.cgu.gov.br`. Um CSV por ZIP, em Latin-1, separado por `;`. O Actor não contorna nenhuma proteção.

### Como testar

Na pasta deste Actor, com o ambiente virtual criado:

```powershell
.venv\Scripts\python -m pytest -m "not live"
.venv\Scripts\python -m pytest -m live
.venv\Scripts\python run_local.py '{"cadastro":"cnep","limite":5}'
```

O teste ao vivo baixa o CNEP e o CEIS reais (cerca de 4 MB) e confere que nenhum CPF sobrou.

***

### English summary

Brazilian **corporate sanctions lists** from the Federal Government's Portal da Transparência (CGU) open data: **CEIS** (companies barred or suspended from public contracts) and **CNEP** (companies punished under the Anti-Corruption Law, with fines). Search by CNPJ (company id, full or root), name, sanctioning body, level of government, category, publication period or currently-in-force. No API key needed. Returns clean JSON, CSV or Excel rows with stable field names (in Portuguese).

- **Input**: `cadastro` (`ceis` | `cnep`), optional `cnpj`, `nome`, `uf` (of the sanctioning body), `orgao`, `esfera`, `categoria`, `apenasVigentes`, `publicadoDesde` / `publicadoAte`, `valorMinimoMulta` (CNEP), `mascararCpf` (default on), `limite` (default 20, max 10,000).
- **Output**: one row per sanction on a legal entity, with CNPJ, category, dates, sanctioning body, fine amount (CNEP) and a computed `vigente` flag (in force today; calculated by this Actor, not a source field).
- **Pricing** (pay per event): US$ 0.001 per run start and US$ 0.002 per record. Checking one CNPJ with one sanction costs US$ 0.003.
- **Personal data**: sanctions on **individuals are not returned** (name and CPF are dropped), nor are companies whose name follows the sole-proprietor pattern (name + 11 digits). CPF numbers found in free text are masked by default.
- **Limits**: each run downloads the whole daily file and filters locally; up to 10,000 records. Data can be late or wrong: not a certificate and not a sole basis for a decision. Not affiliated with the CGU.

# Actor input Schema

## `cadastro` (type: `string`):

ceis: Cadastro Nacional de Empresas Inidôneas e Suspensas (cerca de 14,5 mil empresas). cnep: Cadastro Nacional de Empresas Punidas, da Lei Anticorrupção, com valor de multa (cerca de 1,8 mil).

## `cnpj` (type: `string`):

CNPJ completo (14 dígitos) ou só a raiz (8 dígitos, que pega matriz e filiais). Com ou sem pontuação.

## `nome` (type: `string`):

Parte da razão social, do nome fantasia ou do nome informado pelo órgão. Pelo menos 3 letras. Ignora acento e maiúscula.

## `uf` (type: `string`):

Estado do órgão que aplicou a sanção, não da empresa.

## `orgao` (type: `string`):

Parte do nome do órgão que aplicou a sanção.

## `esfera` (type: `string`):

Esfera do órgão sancionador.

## `categoria` (type: `string`):

Parte do nome da categoria. Exemplos: inidoneidade, suspensão, impedimento, multa.

## `apenasVigentes` (type: `boolean`):

Mantém só as que já começaram e ainda não terminaram, ou que não têm data final. A vigência é calculada pelas datas do arquivo, na data da execução.

## `publicadoDesde` (type: `string`):

Data de publicação da sanção, inclusive, no formato AAAA-MM-DD.

## `publicadoAte` (type: `string`):

Data de publicação da sanção, inclusive, no formato AAAA-MM-DD.

## `valorMinimoMulta` (type: `number`):

Descarta sanções com multa abaixo desse valor ou sem multa.

## `mascararCpf` (type: `boolean`):

Ligado por padrão. Alguns campos de texto livre trazem CPF de terceiros; ele sai como \***.456.789-**. Desligue para manter o texto como a fonte publica.

## `limite` (type: `integer`):

Máximo de sanções nesta execução. O padrão é pequeno para teste. O teto é 10.000.

## Actor input object example

```json
{
  "cadastro": "cnep",
  "apenasVigentes": false,
  "mascararCpf": true,
  "limite": 20
}
```

# Actor output Schema

## `sancoes` (type: `string`):

Um item por sanção. A visão em tabela está no schema do 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas").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 '{}' |
apify call soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,soleene/brazil-company-sanctions-ceis-cnep-sancoes-a-empresas"
        }
    }
}
```

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/hCjNB6dA60cY0gfS6/builds/2VOOnOnL4cNTNwRk0/openapi.json
