Consultar CNPJ grátis com n8n
Antes de fechar negócio com um fornecedor, emitir uma nota ou cadastrar um cliente, é comum querer conferir se o CNPJ existe, qual é a razão social e se a empresa está ativa. Neste tutorial você vai montar no n8n uma pequena ferramenta para isso: um formulário onde você digita o CNPJ e, logo depois, vê os principais dados da empresa numa página final.
Os dados vêm da BrasilAPI, um projeto gratuito que reúne informações públicas do Brasil e não pede cadastro nem chave. O workflow tem só três nós e, no caminho, você aprende a limpar o que a pessoa digitou com uma expressão, para que o CNPJ funcione com ou sem pontos, barra e hífen.
O que você vai construir
Este é o workflow final no editor do n8n:

- n8n Form Trigger (no canvas, “On form submission”): cria o formulário com o campo CNPJ e dispara o workflow a cada envio.
- HTTP Request: consulta a BrasilAPI com o CNPJ digitado, já sem pontuação.
- n8n Form com a página Form Ending: mostra os dados da empresa na tela final.
Versão usada: n8n 2.40.7. Os nomes de botões e campos aparecem em inglês, exatamente como na interface. Como exemplo, usamos o CNPJ do Banco do Brasil, 00.000.000/0001-91, que é público e bem conhecido. Você também pode testar com o da Petrobras, 33.000.167/0001-01.
Pré-requisitos
- Um n8n funcionando no seu computador. Se ainda não tem, siga antes o tutorial n8n do zero com Docker: instale e receba a cotação do dólar no e-mail.
- Acesso à internet a partir do n8n, para consultar a BrasilAPI.
- Nenhuma conta, senha ou chave de API.
Montando o workflow, nó por nó
Crie um workflow novo e dê a ele o nome Consultar CNPJ (BrasilAPI). Depois, adicione os três nós abaixo, nesta ordem, sempre pelo botão + que aparece à direita do nó anterior.
Nó 1: n8n Form Trigger (o formulário)
Clique em Add first step, digite “form” na busca, clique em n8n Form e escolha o gatilho On new n8n Form event. O nó entra no canvas com o nome On form submission. Ele cria uma página web com os campos que você definir e entrega as respostas ao próximo nó.

| Campo | Valor | Por que assim |
|---|---|---|
| Authentication | None | Qualquer pessoa com o link pode usar o formulário. Os dados consultados são públicos. |
| Form Title | Consultar CNPJ | Título no topo da página do formulário. |
| Form Description | Digite um CNPJ para ver os dados públicos da empresa. | Explica em uma frase o que fazer. |
| Form Elements → Label | CNPJ | Nome do campo na tela. Também vira o nome do dado na saída do nó, e é assim que vamos usá-lo no Nó 2. |
| Form Elements → Element Type | Text Input | Campo de texto. Um campo de número perderia os zeros do começo, como os do CNPJ do exemplo. |
| Form Elements → Placeholder | ex.: 00.000.000/0001-91 | Exemplo em cinza que some quando a pessoa começa a digitar. |
| Form Elements → Required Field | ligado | Impede o envio com o campo vazio. |
| Options | (nenhuma) | As opções padrão bastam. |
No topo do nó ficam os Form URLs: a Test URL, para testar enquanto você monta o workflow, e a Production URL, o link definitivo, que só funciona depois que o workflow é publicado. Para testar agora, clique em Execute step. O n8n abre o formulário numa nova aba. Digite o CNPJ do exemplo, do jeito que ele costuma aparecer, com pontos, barra e hífen, e clique em Submit:

Volte ao n8n: a saída do nó (painel OUTPUT, no print anterior) traz o campo CNPJ exatamente como foi digitado, 00.000.000/0001-91, além de submittedAt (data e hora do envio) e formMode (test, porque usamos o link de teste).
Nó 2: HTTP Request (consultar a BrasilAPI)
A BrasilAPI recebe o CNPJ no fim da URL, só com os caracteres do número. O problema é que a barra do CNPJ formatado (a de “0001”) quebra o endereço: para a API, ela separa partes do caminho, e a consulta dá erro. Por isso, a URL usa uma expressão que remove tudo o que não é número ou letra antes de montar o endereço. Esta é a URL completa:
https://brasilapi.com.br/api/cnpj/v1/{{ $json.CNPJ.replace(/[^0-9A-Za-z]/g, '') }}
Clique no + à direita do Form Trigger, adicione um nó HTTP Request e preencha como na tabela:

qsa foi recolhido de propósito (veja o aviso abaixo).| Campo | Valor | Por que assim |
|---|---|---|
| Method | GET | Vamos apenas consultar dados. |
| URL | a URL do bloco acima | Endereço de CNPJ da BrasilAPI. A expressão entre chaves duplas é trocada pelo CNPJ sem pontos, barra e hífen. |
| Authentication | None | A BrasilAPI é pública e não pede chave. |
| Send Query Parameters | desligado | O CNPJ já vai dentro da própria URL. |
| Send Headers | desligado | Não são necessários cabeçalhos especiais. |
| Send Body | desligado | Uma consulta GET não envia corpo. |
| Options | (nenhuma) | As opções padrão bastam. |
Vamos entender a expressão por partes. $json.CNPJ é o campo que veio do formulário. O .replace(/[^0-9A-Za-z]/g, '') troca por nada (as aspas vazias no final) todo caractere que não seja um algarismo de 0 a 9 ou uma letra; o g faz a troca valer para todas as ocorrências, e não só para a primeira. Assim, pontos, barra, hífen e espaços somem. As letras ficam de propósito: o novo formato de CNPJ adotado pela Receita Federal pode ter letras, e a expressão já está pronta para ele.
Confira a prévia abaixo do campo URL: com o CNPJ digitado como 00.000.000/0001-91, a URL resolvida ficou https://brasilapi.com.br/api/cnpj/v1/00000000000191, só com os 14 algarismos. Clique em Execute step. A resposta é um único objeto (1 item) com dezenas de campos, como razao_social (BANCO DO BRASIL SA), nome_fantasia (DIRECAO GERAL), municipio (BRASILIA), uf (DF), porte (DEMAIS) e capital_social.
Cuidado com dados pessoais. A resposta da BrasilAPI também traz o campo qsa (quadro de sócios e administradores), com nomes de pessoas ligadas à empresa. Esses dados são públicos, mas continuam sendo dados pessoais, protegidos pela LGPD. Neste tutorial, a página final mostra apenas dados da empresa, e nos prints o campo qsa aparece recolhido (na visão Schema, basta clicar na setinha ao lado dele). Evite guardar ou repassar esses nomes sem um motivo legítimo.
Nó 3: n8n Form com Form Ending (a página final)
Agora vamos mostrar o resultado. Clique no + à direita do HTTP Request, procure por n8n Form e adicione o nó. Em Page Type, escolha Form Ending. O nó aparece no canvas com o nome Form e a legenda “Form Ending”. Como a mensagem final é longa, ela está completa no bloco abaixo; o <br> serve para quebrar a linha na página:
Nome fantasia: {{ $json.nome_fantasia }}<br>Situação: {{ $json.descricao_situacao_cadastral }}<br>Cidade: {{ $json.municipio }}/{{ $json.uf }}<br>Início das atividades: {{ $json.data_inicio_atividade }}<br>Atividade principal: {{ $json.cnae_fiscal_descricao }}

| Campo | Valor | Por que assim |
|---|---|---|
| Page Type | Form Ending | Indica que esta é a última tela do formulário. |
| On n8n Form Submission | Show Completion Screen | Mostra uma tela de conclusão com título e mensagem. |
| Completion Title | {{ $json.razao_social }} | O título da página final é a própria razão social da empresa. |
| Completion Message | o texto do bloco acima | Uma linha para cada dado: nome fantasia, situação, cidade/UF, início das atividades e atividade principal. |
| Limit Wait Time | desligado | Não precisamos limitar o tempo de espera. |
| Options | (nenhuma) | As opções padrão bastam. |
Você não precisa digitar os nomes dos campos: arraste cada um do painel INPUT para dentro da Completion Message e escreva os rótulos (“Nome fantasia:”, “Situação:” etc.) entre eles. Os campos usados são nome_fantasia, descricao_situacao_cadastral, municipio, uf, data_inicio_atividade e cnae_fiscal_descricao. Na prévia abaixo do campo, o n8n já mostra o começo do resultado: “Nome fantasia: DIRECAO GERAL<br>Situação: ATIVA…”. Na prévia o <br> aparece como texto, mas na página final ele vira uma quebra de linha.
O workflow completo e o teste
Feche o nó e clique em Execute workflow, na parte de baixo do canvas. O n8n abre o formulário de teste numa nova aba e fica esperando. Digite 00.000.000/0001-91 e clique em Submit. Em poucos segundos, aparece a página final:

A página mostra a razão social como título e, abaixo, o nome fantasia (DIRECAO GERAL, que é o nome do estabelecimento matriz), a situação cadastral (ATIVA), a cidade (BRASILIA/DF), a data de início das atividades (1966-08-01, no formato ano-mês-dia) e a atividade principal (Bancos múltiplos, com carteira comercial). De volta ao editor, os três nós estão em verde, com 1 item em cada ligação:

O painel Logs, na barra inferior, também mostra a saída de cada nó. Só que, na tabela dele, o campo qsa aparece aberto, com os nomes dos administradores; por isso, neste tutorial, preferimos mostrar o resultado pela página final.
Usar o formulário de verdade (Production URL)
O link de teste só funciona enquanto o editor está esperando um envio. Para ter um link fixo, clique em Publish, no canto superior direito do editor, e confirme. Depois, abra o Form Trigger, clique na aba Production URL e copie o endereço. As consultas feitas por esse link aparecem na aba Executions, no topo do editor. Com o n8n rodando só no seu computador, o link também só abre nele.
Erros comuns
“The resource you are requesting could not be found” (erro 404) com um texto cheio de código. É o que acontece se a URL usar só {{ $json.CNPJ }}, sem a limpeza. Com o CNPJ digitado como 00.000.000/0001-91, a barra entra na URL (veja a prévia: …/cnpj/v1/00.000.000/0001…) e o servidor responde com uma página de “não encontrado”, cujo código aparece na mensagem. A solução é usar a expressão com .replace mostrada no Nó 2.

“Bad request – please check your parameters”, com a mensagem “CNPJ … inválido.” A BrasilAPI confere os dígitos verificadores (os dois últimos números) e responde com o código 400 quando a conta não fecha. No teste abaixo, trocamos só o último dígito do CNPJ do exemplo (00.000.000/0001-92). Na aba do formulário, a pessoa vê “Problem submitting response”. Confira se o número foi digitado corretamente.

- “Form Trigger isn’t listening yet”. Você abriu a Test URL sem que o editor estivesse esperando um envio. Clique em Execute workflow (ou em Execute step no Form Trigger) e use o formulário que o n8n abre.
- “Problem loading form” ao abrir a Production URL. O link de produção só funciona com o workflow publicado. Clique em Publish e tente de novo.
- Campos em branco na página final. Alguns campos, como
nome_fantasia, podem vir vazios para certas empresas. Não é defeito do workflow: a informação simplesmente não consta no cadastro.
JSON do workflow para importar
Se preferir, importe o workflow pronto. Baixe o arquivo abaixo ou copie o JSON. No n8n, crie um workflow novo e escolha uma das opções: abra o menu … (três pontinhos) no topo do editor, vá em Import e depois em From file; ou cole o JSON direto no canvas com Ctrl+V.
O download é um arquivo .zip com o consultar-cnpj-brasilapi.json dentro. Descompacte antes de importar (ou copie o JSON do bloco abaixo).
{
"name": "Consultar CNPJ (BrasilAPI)",
"nodes": [
{
"parameters": {
"formTitle": "Consultar CNPJ",
"formDescription": "Digite um CNPJ para ver os dados públicos da empresa.",
"formFields": {
"values": [
{
"fieldLabel": "CNPJ",
"placeholder": "ex.: 00.000.000/0001-91",
"requiredField": true
}
]
},
"options": {}
},
"id": "7b2d4e61-1111-4a5b-9c02-0e0000000001",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.6,
"position": [
0,
0
],
"webhookId": "7b2d4e61-aaaa-4a5b-9c02-0e00000000f1"
},
{
"parameters": {
"url": "=https://brasilapi.com.br/api/cnpj/v1/{{ $json.CNPJ.replace(/[^0-9A-Za-z]/g, '') }}",
"options": {}
},
"id": "7b2d4e61-2222-4a5b-9c02-0e0000000002",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.5,
"position": [
260,
0
]
},
{
"parameters": {
"operation": "completion",
"completionTitle": "={{ $json.razao_social }}",
"completionMessage": "=Nome fantasia: {{ $json.nome_fantasia }}<br>Situação: {{ $json.descricao_situacao_cadastral }}<br>Cidade: {{ $json.municipio }}/{{ $json.uf }}<br>Início das atividades: {{ $json.data_inicio_atividade }}<br>Atividade principal: {{ $json.cnae_fiscal_descricao }}",
"options": {}
},
"id": "7b2d4e61-3333-4a5b-9c02-0e0000000003",
"name": "Form",
"type": "n8n-nodes-base.form",
"typeVersion": 2.5,
"position": [
520,
0
],
"webhookId": "7b2d4e61-bbbb-4a5b-9c02-0e00000000f2"
}
],
"connections": {
"On form submission": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Form",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": false
}
}
O workflow não usa credenciais, então funciona logo depois de importado. Os campos webhookId identificam os endereços do formulário dentro do seu n8n; você não precisa mexer neles.
Recapitulando
- O n8n Form Trigger cria um formulário com o campo CNPJ, com link de teste e link de produção.
- A expressão com
.replace(/[^0-9A-Za-z]/g, '')limpa pontos, barra e hífen, e evita o erro 404. - O HTTP Request consulta a BrasilAPI e devolve os dados públicos da empresa em 1 item.
- O n8n Form com Form Ending mostra só os dados da empresa, sem expor os nomes do quadro de sócios.
Com esse modelo de formulário, consulta e resposta, você pode criar outras ferramentas internas, como consultas de CEP, de feriados ou de bancos pelo código. Nos próximos tutoriais, vamos continuar explorando APIs públicas e gratuitas com o n8n.