# Validador de CNPJ Alfanumérico — Lote e Migração (`johnatan029/cnpj-alphanumeric-validator`) Actor

Valide CNPJs numéricos e alfanuméricos em lote pela regra oficial da Receita Federal. Aceita lista, texto, JSON e CSV, calcula dígitos verificadores, aponta erros e duplicados e gera relatório de migração grátis. Validação estrutural determinística, sem consulta externa ou IA.

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

## Pricing

from $0.10 / 1,000 validation 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?

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

### Valide CNPJ alfanumérico e numérico em lote pela regra oficial

O **CNPJ alfanumérico já está em produção no Brasil**. Em 31 de julho de 2026, a Receita Federal informou a geração da primeira inscrição nesse formato: `00.000.000/E08G-12`.

Este Actor ajuda a localizar validações antigas que aceitam apenas `14 dígitos` e a tratar o novo formato corretamente.

Ele valida CNPJs **numéricos e alfanuméricos** em lote, calcula os dígitos verificadores pela regra implementada para o novo padrão e entrega um relatório gratuito para diagnóstico de migração da sua base.

Aceita lista direta, texto livre, registros JSON e CSV na mesma execução.

Sem consulta cadastral. Sem API externa. Sem navegador. Sem IA no veredito.

#### Principais recursos

- **CNPJ numérico e alfanumérico**
- **Validação estrutural determinística**
- **Dígitos verificadores**
- **Normalização com ou sem máscara**
- **Lista direta de CNPJs**
- **Extração de CNPJ em texto livre**
- **Registros JSON com campo configurável**
- **CSV com coluna configurável**
- **Vírgula ou ponto-e-vírgula no CSV**
- **Detecção de duplicados na execução**
- **Posição da primeira ocorrência duplicada**
- **Erros estruturados por registro**
- **Posição de caractere inválido**
- **DV informado x DV calculado**
- **Relatório de migração gratuito**
- **Contagem numérico x alfanumérico**
- **Principais erros da base**
- **Distribuição por fonte de entrada**
- **Até 50.000 resultados por execução**
- **Sem requisição externa**
- **Pay Per Event**

> **Actor comunitário não-oficial. Sem afiliação com a Receita Federal do Brasil ou qualquer órgão público.** A implementação usa a regra estrutural do CNPJ alfanumérico como referência técnica. Validação estrutural não confirma existência, situação cadastral, titularidade ou regularidade de uma inscrição.

***

### Por que este Actor existe

Muitos sistemas históricos ainda possuem validações parecidas com:

```regex
^\d{14}$
```

Esse tipo de regra aceita apenas números.

Com o CNPJ alfanumérico, as primeiras 12 posições podem incluir letras conforme o novo padrão, enquanto as posições de dígito verificador permanecem numéricas.

O problema não afeta somente formulários.

Pode aparecer em:

- ERP;
- CRM;
- gateways;
- APIs;
- ETLs;
- bancos de dados;
- importadores CSV;
- integrações;
- validações frontend;
- validações backend;
- expressões regulares;
- data warehouses;
- sistemas fiscais;
- cadastros de fornecedores.

Este Actor permite testar registros reais e exportações de base usando uma regra única e auditável.

***

### O primeiro CNPJ alfanumérico

A Receita Federal informou em 31/07/2026 que o primeiro CNPJ alfanumérico gerado no país foi:

```text
00.000.000/E08G-12
```

A inscrição corresponde a uma filial do Banco do Brasil S.A.

Fonte oficial:

```text
https://www.gov.br/receitafederal/pt-br/assuntos/noticias/2026/julho/receita-federal-gera-o-primeiro-cnpj-em-formato-alfanumerico
```

A página oficial do projeto também informa que os CNPJs já existentes permanecem válidos e que o novo formato passa a ser usado em novas inscrições.

Projeto oficial:

```text
https://www.gov.br/receitafederal/pt-br/acesso-a-informacao/acoes-e-programas/programas-e-atividades/cnpj-alfanumerico
```

***

### Para quem é

#### Desenvolvedores

Teste validadores, APIs, importadores e sistemas que precisam aceitar o novo formato.

#### Empresas de software e SaaS

Verifique bases de clientes, fornecedores e parceiros antes ou durante a migração.

#### ERP, CRM e sistemas financeiros

Use o Actor para localizar padrões de dados incompatíveis e separar registros numéricos de alfanuméricos.

#### Contabilidade e BPO

Valide estruturalmente lotes recebidos de diferentes sistemas sem consultar uma base externa.

#### Equipes de dados

Passe exportações CSV/JSON e obtenha um relatório consolidado de migração.

#### Automação e integrações

Conecte os resultados a:

- Apify API;
- n8n;
- Make;
- Google Sheets;
- bancos de dados;
- pipelines internos;
- validações de ETL;
- sistemas de qualidade de dados.

***

### Importante: validação estrutural não é consulta cadastral

Este Actor responde:

> A estrutura e os dígitos verificadores deste CNPJ estão corretos?

Ele não responde:

> Esta empresa existe?

Ele também não retorna:

- razão social;
- situação cadastral;
- CNAE;
- endereço;
- sócios;
- capital social;
- regime tributário.

Para dados cadastrais, use um Actor específico de consulta de empresas.

***

### Como funciona

Para cada valor recebido, o Actor:

1. preserva o valor original;
2. remove máscara e espaços;
3. converte letras para maiúsculas;
4. verifica o comprimento;
5. verifica os caracteres aceitos nas posições;
6. calcula os dígitos verificadores;
7. compara os DVs calculados com os informados;
8. rejeita sequência repetida inválida;
9. classifica o formato como numérico ou alfanumérico quando possível;
10. registra os erros encontrados;
11. identifica duplicados dentro da execução;
12. preserva a origem do registro;
13. escreve um `VALIDATION_RESULT`;
14. agrega o relatório gratuito no `RUN_SUMMARY`.

Não existe requisição HTTP no fluxo de validação.

***

### Regra estrutural usada

O formato continua visualmente compatível com:

```text
SS.SSS.SSS/SSSS-NN
```

Na implementação deste Actor:

```text
posições 1–12
=
0–9 ou A–Z

posições 13–14
=
dígitos numéricos
```

Letras minúsculas recebidas no input são normalizadas para maiúsculas antes da validação.

***

### Cálculo dos dígitos verificadores

A implementação usa a conversão descrita para o padrão alfanumérico:

```text
valor do caractere
=
código ASCII − 48
```

Assim:

```text
0 → 0
1 → 1
...
9 → 9

A → 17
B → 18
...
Z → 42
```

O primeiro DV usa os pesos:

```text
5 4 3 2 9 8 7 6 5 4 3 2
```

O segundo DV usa:

```text
6 5 4 3 2 9 8 7 6 5 4 3 2
```

O cálculo é módulo 11.

A implementação foi construída como cálculo puro e não depende de uma API externa.

***

### Input

Você pode combinar as quatro fontes de entrada na mesma execução.

#### Exemplo completo

```json
{
  "cnpjs": [
    "12.ABC.345/01DE-35",
    "00.000.000/E08G-12",
    "47.960.950/0001-21"
  ],
  "text": "Fornecedor da filial: 00.000.000/E08G-12",
  "records": [
    {
      "empresa": "Exemplo",
      "cnpj": "12.ABC.345/01DE-35"
    }
  ],
  "recordsField": "cnpj",
  "csv": "empresa;cnpj\nEmpresa A;47.960.950/0001-21",
  "csvColumn": "cnpj",
  "maxResults": 10000,
  "maxRuntimeMs": 300000
}
```

#### Campos de input

| Campo | Default | Descrição |
|---|---:|---|
| `cnpjs` | lista de exemplo | Lista direta de CNPJs. |
| `text` | texto de exemplo | Texto livre do qual candidatos são extraídos. |
| `records` | exemplo JSON | Objetos contendo o CNPJ em uma propriedade. |
| `recordsField` | `cnpj` | Nome da propriedade usada em `records`. |
| `csv` | exemplo | Conteúdo CSV com cabeçalho. |
| `csvColumn` | `cnpj` | Nome ou índice zero-based da coluna. |
| `maxResults` | `10000` | Teto de resultados entregues/cobrados. Máximo 50.000. |
| `maxRuntimeMs` | `300000` | Teto de duração da execução. |
| `debug` | `false` | Logs adicionais. |

Pelo menos uma fonte precisa conter dados utilizáveis.

***

### Lista direta

Exemplo:

```json
{
  "cnpjs": [
    "00.000.000/E08G-12",
    "12.ABC.345/01DE-35",
    "47960950000121"
  ]
}
```

A lista é preservada na ordem recebida.

***

### Texto livre

Exemplo:

```json
{
  "text": "Fornecedores homologados: 33.000.167/0001-01 e filial 00.000.000/E08G-12."
}
```

O Actor tenta localizar:

- formato mascarado;
- sequência compatível de 14 posições terminando em dois dígitos.

A linha de origem fica disponível em:

```text
sourceLine
```

***

### Extração de texto é heurística

A rota de texto livre foi criada para conveniência.

Ela não substitui uma lista estruturada quando você precisa de máxima previsibilidade.

Formatos muito diferentes, como:

```text
00.000.
000/E08G
-12
```

podem não ser reconhecidos como um único CNPJ.

Para cargas críticas, prefira:

```text
cnpjs
records
csv
```

***

### Registros JSON

Exemplo:

```json
{
  "records": [
    {
      "empresa": "Empresa A",
      "documento": "00.000.000/E08G-12"
    },
    {
      "empresa": "Empresa B",
      "documento": "47.960.950/0001-21"
    }
  ],
  "recordsField": "documento"
}
```

Se o campo configurado não existir no objeto de amostra, o input é rejeitado antes da cobrança de início.

***

### CSV

Exemplo:

```json
{
  "csv": "empresa;cnpj\nEmpresa A;00.000.000/E08G-12\nEmpresa B;47.960.950/0001-21",
  "csvColumn": "cnpj"
}
```

O parser escolhe entre:

```text
,
;
```

com base no cabeçalho.

Também aceita célula entre aspas duplas no parser simples implementado.

***

### Coluna CSV por índice

Também é possível usar índice começando em zero.

Exemplo:

```json
{
  "csv": "empresa;cnpj\nEmpresa A;00.000.000/E08G-12",
  "csvColumn": "1"
}
```

***

### Output

O Dataset contém principalmente:

```text
VALIDATION_RESULT
RUN_SUMMARY
```

***

### `VALIDATION_RESULT`

Cada valor processado recebe um veredito próprio.

#### Exemplo — válido

```json
{
  "recordType": "VALIDATION_RESULT",
  "originalValue": "00.000.000/E08G-12",
  "normalizedCnpj": "00000000E08G12",
  "normalizedFormatted": "00.000.000/E08G-12",
  "format": "alphanumeric",
  "lengthValid": true,
  "charactersValid": true,
  "checkDigitsValid": true,
  "isValid": true,
  "validationErrors": [],
  "duplicate": false,
  "firstSeenPosition": null,
  "sourceType": "list",
  "sourceIndex": 0,
  "sourceLine": null,
  "observedAt": "2026-08-27T00:00:00.000Z"
}
```

#### Exemplo — DV inválido

```json
{
  "recordType": "VALIDATION_RESULT",
  "originalValue": "47.960.950/0001-20",
  "normalizedCnpj": "47960950000120",
  "normalizedFormatted": "47.960.950/0001-20",
  "format": "numeric",
  "lengthValid": true,
  "charactersValid": true,
  "checkDigitsValid": false,
  "isValid": false,
  "validationErrors": [
    {
      "code": "CHECK_DIGITS_INVALID",
      "message": "Dígitos verificadores não conferem: informado \"20\", calculado pela norma \"21\"."
    }
  ],
  "duplicate": false,
  "firstSeenPosition": null,
  "sourceType": "list",
  "sourceIndex": 0,
  "sourceLine": null,
  "observedAt": "2026-08-27T00:00:00.000Z"
}
```

***

### Campos de `VALIDATION_RESULT`

| Campo | Descrição |
|---|---|
| `recordType` | `VALIDATION_RESULT`. |
| `originalValue` | Valor exatamente como foi recebido. |
| `normalizedCnpj` | Valor normalizado sem máscara. |
| `normalizedFormatted` | Valor formatado quando possível. |
| `format` | `numeric`, `alphanumeric` ou `null`. |
| `lengthValid` | Exatamente 14 posições após normalização. |
| `charactersValid` | Classes de caracteres compatíveis. |
| `checkDigitsValid` | Dígitos verificadores conferem. |
| `isValid` | Veredito estrutural final. |
| `validationErrors` | Lista de problemas encontrados. |
| `duplicate` | O mesmo valor normalizado já apareceu antes nesta execução. |
| `firstSeenPosition` | Posição da primeira ocorrência. |
| `sourceType` | `list`, `records`, `csv` ou `text`. |
| `sourceIndex` | Índice dentro da fonte. |
| `sourceLine` | Linha quando disponível. |
| `observedAt` | Timestamp da validação. |

***

### Códigos de erro

O validador pode retornar códigos como:

```text
EMPTY_VALUE
LENGTH_INVALID
INVALID_CHARACTER
DV_POSITION_NOT_NUMERIC
CHECK_DIGITS_INVALID
REPEATED_SEQUENCE
```

#### `EMPTY_VALUE`

O valor ficou vazio após a normalização.

#### `LENGTH_INVALID`

O valor não possui exatamente 14 posições.

#### `INVALID_CHARACTER`

Existe caractere incompatível nas primeiras 12 posições.

A mensagem informa a posição quando detectável.

#### `DV_POSITION_NOT_NUMERIC`

As posições 13 e/ou 14 não são dígitos.

#### `CHECK_DIGITS_INVALID`

Os DVs informados não correspondem ao cálculo.

A mensagem inclui o DV calculado.

#### `REPEATED_SEQUENCE`

Sequência com todas as 14 posições iguais que passaria por uma checagem matemática simplista, mas não é tratada como inscrição válida pelo Actor.

***

### Duplicados

Duplicados não são removidos.

Cada linha/registro recebe o próprio veredito.

Exemplo:

```text
posição 0: 00.000.000/E08G-12
posição 3: 00000000E08G12
```

A segunda ocorrência pode retornar:

```json
{
  "duplicate": true,
  "firstSeenPosition": 0
}
```

Isso é útil para auditoria de uma base porque o Actor preserva a cardinalidade do input processado.

***

### Relatório de migração gratuito

O `RUN_SUMMARY` inclui:

```text
migrationReport
```

com agregações da execução.

Exemplo:

```json
{
  "migrationReport": {
    "analyzed": 9,
    "valid": 6,
    "invalid": 3,
    "numericFormat": 6,
    "alphanumericFormat": 2,
    "duplicates": 1,
    "incompatibleCharacters": 1,
    "bySource": {
      "list": 5,
      "records": 1,
      "csv": 2,
      "text": 1
    },
    "topProblems": {
      "CHECK_DIGITS_INVALID": 1,
      "DV_POSITION_NOT_NUMERIC": 1
    }
  }
}
```

***

### O que o relatório ajuda a responder

O resumo pode mostrar:

- quantos registros foram analisados;
- quantos passaram;
- quantos falharam;
- quantos são numéricos;
- quantos são alfanuméricos;
- quantos duplicados apareceram;
- quantos possuem caracteres incompatíveis;
- quais fontes produziram registros;
- quais erros apareceram com mais frequência.

***

### Importante: relatório de base não certifica seu software

Uma base validada não prova automaticamente que:

```text
seu ERP aceita letras no CNPJ
sua API aceita letras
seu banco de dados aceita letras
seu frontend aceita letras
```

Este Actor valida os **dados fornecidos**.

A compatibilidade do software precisa ser testada no próprio software.

***

### API da Apify

Execute o Actor e obtenha o Dataset sincronamente:

```bash
curl -s "https://api.apify.com/v2/acts/<SEU_USUARIO>~cnpj-alphanumeric-validator/run-sync-get-dataset-items?token=<SEU_TOKEN>" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "cnpjs":[
      "00.000.000/E08G-12",
      "12.ABC.345/01DE-35"
    ],
    "maxResults":100
  }'
```

Substitua:

```text
<SEU_USUARIO>
<SEU_TOKEN>
```

pelos seus dados da Apify.

***

### Integrações

Use com:

- Apify API;
- Tasks;
- Schedules;
- webhooks;
- n8n;
- Make;
- Google Sheets;
- bancos de dados;
- pipelines ETL;
- sistemas de QA;
- ferramentas internas.

***

### Agendamento

Validação de base normalmente é:

```text
migração pontual
```

ou:

```text
validação de cada nova carga
```

Para uma esteira recorrente:

1. salve o input como uma **Task**;
2. abra **Schedules**;
3. escolha a frequência;
4. processe o Dataset no sistema downstream.

***

### Cobrança

Este Actor usa **Pay Per Event**.

O código utiliza:

```text
actor-start
validation-result
```

#### `actor-start`

É chamado uma vez depois que o input passa pela validação.

Input inválido é rejeitado antes da abertura da cobrança.

#### `validation-result`

É cobrado para cada `VALIDATION_RESULT` entregue.

Um registro inválido também é um resultado útil:

```text
válido
=
veredito

inválido
=
veredito
```

Por isso o produto cobra pela validação processada, não somente pelos CNPJs válidos.

***

### O que é gratuito

O `RUN_SUMMARY` é gratuito.

O relatório:

```text
migrationReport
```

também fica dentro desse resumo gratuito.

Input inválido é tratado antes da cobrança de início.

A aba **Pricing** da página do Actor é sempre a fonte autoritativa dos valores vigentes.

***

### Controle de custo

O principal controle é:

```text
maxResults
```

Faixa atual:

```text
1–50000
```

O Actor processa os valores na ordem:

```text
cnpjs
records
csv
text
```

Quando o limite é atingido, os registros restantes são contabilizados em:

```text
skippedByCap
```

***

### Desempenho

A validação é compute puro.

O Actor não:

- consulta a Receita Federal;
- abre páginas;
- resolve DNS;
- chama API externa;
- executa navegador.

O custo de infraestrutura tende a ser pequeno em relação ao volume de resultados, embora tempo e custo finais dependam do ambiente da Apify e do tamanho da entrada.

***

### Health e diagnóstico

O `RUN_SUMMARY` e o registro:

```text
STATS
```

fornecem transparência operacional.

Podem incluir:

- registros escritos;
- cobrança;
- limite de resultados;
- runtime;
- warnings;
- qualidade;
- relatório de migração;
- métricas de custo.

***

### Limites honestos

#### Não confirma existência do CNPJ

Um número pode ser estruturalmente válido e não corresponder a uma inscrição existente.

#### Não consulta situação cadastral

O Actor não informa se uma empresa está:

```text
ATIVA
BAIXADA
SUSPENSA
INAPTA
```

#### Não corrige o CNPJ automaticamente

Quando o DV está errado, o resultado pode informar o DV calculado.

O Actor não substitui automaticamente o valor recebido, porque o erro real pode estar em outra posição.

#### Texto livre usa heurística

A extração automática não cobre todo formato arbitrário possível.

#### Duplicados são entregues e cobrados

A cardinalidade do lote é preservada.

#### O parser CSV é intencionalmente simples

Suporta as necessidades documentadas desta versão, mas não pretende substituir uma biblioteca CSV completa para formatos extremamente complexos.

#### `recordsField` precisa apontar para a propriedade correta

Um campo inexistente na amostra é tratado como input inválido.

#### Validação estrutural não certifica adequação de sistemas

Use os resultados como dados de teste e diagnóstico, não como certificado de conformidade do software.

#### A regra pode receber atualização normativa

Se a Receita Federal alterar o padrão no futuro, uma nova versão do Actor poderá ser necessária.

***

### Perguntas frequentes

#### O CNPJ alfanumérico já existe?

Sim.

A Receita Federal informou a geração do primeiro CNPJ alfanumérico em 31 de julho de 2026.

#### Qual foi o primeiro CNPJ alfanumérico?

Segundo a Receita Federal:

```text
00.000.000/E08G-12
```

#### Os CNPJs numéricos antigos deixaram de valer?

Não.

A Receita Federal informa que os CNPJs já existentes continuam válidos.

#### O Actor valida CNPJ numérico?

Sim.

#### O Actor valida CNPJ alfanumérico?

Sim.

#### Aceita máscara?

Sim.

#### Aceita letras minúsculas?

Sim.

Elas são normalizadas para maiúsculas.

#### As duas últimas posições podem ter letras?

Não no contrato implementado.

As posições de DV são numéricas.

#### Posso validar CSV?

Sim.

#### Posso colar texto de contrato ou e-mail?

Sim.

Use `text`.

#### Posso enviar objetos JSON?

Sim.

Use `records` + `recordsField`.

#### O Actor consulta a Receita Federal?

Não.

#### Preciso de API key externa?

Não.

#### Usa IA?

Não.

#### "Válido" significa que a empresa existe?

Não.

Significa somente que o valor passou pela validação estrutural implementada.

#### Duplicados são removidos?

Não.

Eles são identificados, mas cada registro recebe um veredito.

#### Registros inválidos são cobrados?

Sim.

O produto entregue é o veredito de validação.

#### O relatório de migração é cobrado?

Não.

#### Posso usar o Actor em uma integração?

Sim.

Use a API da Apify, webhooks ou outra automação.

#### Este Actor é oficial da Receita Federal?

Não.

É uma ferramenta comunitária independente.

***

### Suporte

Para bugs, dúvidas ou casos de validação:

```text
johnatan291303@gmail.com
```

Você também pode usar a aba **Issues** na página do Actor.

***

### Parte da suíte JM Forge

Também do mesmo desenvolvedor:

- [Consulta CNPJ Brasil e Empresas por CNAE](https://apify.com/johnatan029/cnpj-empresas-brasil-scraper) — consulta cadastral e pesquisa de empresas brasileiras.
- **Monitor de Mudanças Cadastrais de CNPJ** — monitore mudanças em situação, endereço, CNAE, razão social e quadro societário.
- **PNCP Vencedores & Inteligência de Fornecedores** — resultados homologados e fornecedores vencedores de compras públicas.

Os Actors permanecem ferramentas independentes.

Use este Actor para **validação estrutural e diagnóstico de migração**.

Use um Actor cadastral quando precisar confirmar ou enriquecer os dados de uma empresa.

# Actor input Schema

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

Lista de CNPJs para validar — numéricos ou alfanuméricos, com ou sem máscara. Minúsculas são normalizadas. Use qualquer combinação das 4 fontes de entrada (lista, texto, records, csv).

## `text` (type: `string`):

Texto de onde extrair CNPJs (contratos, planilhas coladas, e-mails). Reconhece o formato mascarado e o formato de 14 posições sem máscara terminado em 2 dígitos.

## `records` (type: `array`):

Lista de objetos JSON (ex.: exportação de CRM). Informe em recordsField qual campo contém o CNPJ.

## `recordsField` (type: `string`):

Nome do campo que contém o CNPJ dentro de cada objeto de records.

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

Conteúdo CSV com cabeçalho (vírgula ou ponto-e-vírgula). Informe em csvColumn a coluna do CNPJ.

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

Nome da coluna (case-insensitive) ou índice numérico começando em 0.

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

Teto de registros cobráveis. Ao atingir, o run encerra de forma controlada e entrega o que já validou.

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

Teto de duração do run.

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

Registra decisões de normalização e extração no log.

## Actor input object example

```json
{
  "cnpjs": [
    "12.ABC.345/01DE-35",
    "00.000.000/E08G-12",
    "47.960.950/0001-21",
    "47.960.950/0001-20",
    "12abc34501de35"
  ],
  "text": "Fornecedores homologados: 33.000.167/0001-01 (ativo) e a filial nova 00000000E08G12 citada no aditivo.",
  "records": [
    {
      "empresa": "Banco do Brasil",
      "cnpj": "00.000.000/0001-91"
    }
  ],
  "recordsField": "cnpj",
  "csv": "empresa;cnpj\nPetrobras;33.000.167/0001-01\nExemplo Inválido;11.111.111/1111-XX",
  "csvColumn": "cnpj",
  "maxResults": 10000,
  "maxRuntimeMs": 300000,
  "debug": false
}
```

# Actor output Schema

## `resultados` (type: `string`):

Dataset padrão com VALIDATION\_RESULT e RUN\_SUMMARY.

## `estatisticas` (type: `string`):

Registro STATS com cobrança, limites, qualidade, runtime e métricas operacionais.

# 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": [
        "12.ABC.345/01DE-35",
        "00.000.000/E08G-12",
        "47.960.950/0001-21",
        "47.960.950/0001-20",
        "12abc34501de35"
    ],
    "text": "Fornecedores homologados: 33.000.167/0001-01 (ativo) e a filial nova 00000000E08G12 citada no aditivo.",
    "records": [
        {
            "empresa": "Banco do Brasil",
            "cnpj": "00.000.000/0001-91"
        }
    ],
    "recordsField": "cnpj",
    "csv": `empresa;cnpj
Petrobras;33.000.167/0001-01
Exemplo Inválido;11.111.111/1111-XX`,
    "csvColumn": "cnpj",
    "maxResults": 10000,
    "maxRuntimeMs": 300000,
    "debug": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("johnatan029/cnpj-alphanumeric-validator").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": [
        "12.ABC.345/01DE-35",
        "00.000.000/E08G-12",
        "47.960.950/0001-21",
        "47.960.950/0001-20",
        "12abc34501de35",
    ],
    "text": "Fornecedores homologados: 33.000.167/0001-01 (ativo) e a filial nova 00000000E08G12 citada no aditivo.",
    "records": [{
            "empresa": "Banco do Brasil",
            "cnpj": "00.000.000/0001-91",
        }],
    "recordsField": "cnpj",
    "csv": """empresa;cnpj
Petrobras;33.000.167/0001-01
Exemplo Inválido;11.111.111/1111-XX""",
    "csvColumn": "cnpj",
    "maxResults": 10000,
    "maxRuntimeMs": 300000,
    "debug": False,
}

# Run the Actor and wait for it to finish
run = client.actor("johnatan029/cnpj-alphanumeric-validator").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": [
    "12.ABC.345/01DE-35",
    "00.000.000/E08G-12",
    "47.960.950/0001-21",
    "47.960.950/0001-20",
    "12abc34501de35"
  ],
  "text": "Fornecedores homologados: 33.000.167/0001-01 (ativo) e a filial nova 00000000E08G12 citada no aditivo.",
  "records": [
    {
      "empresa": "Banco do Brasil",
      "cnpj": "00.000.000/0001-91"
    }
  ],
  "recordsField": "cnpj",
  "csv": "empresa;cnpj\\nPetrobras;33.000.167/0001-01\\nExemplo Inválido;11.111.111/1111-XX",
  "csvColumn": "cnpj",
  "maxResults": 10000,
  "maxRuntimeMs": 300000,
  "debug": false
}' |
apify call johnatan029/cnpj-alphanumeric-validator --silent --output-dataset

```

## MCP server setup

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

```

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/rCEfrqIJTZy837bgv/builds/B12weam5kM6MiZg4c/openapi.json
