API de CNPJ para automação
Consulte e busque empresas no n8n, Make ou Zapier pelo nó HTTP Request: chave no header, JSON previsível, custo declarado e erros com código estável.
Automação de cadastro, enriquecimento ou prospecção precisa de uma API que responda sempre no mesmo formato, cobre o que declarou e diga com clareza quando repetir. É isso: JSON com data e meta, custo em créditos conhecido antes da chamada, erros custam 0 e cada um traz retryable; o 429 traz Retry-After. Funciona em qualquer ferramenta que faça uma requisição HTTP: n8n, Make, Zapier, Pipedream ou um cron.
O fluxo em três passos
-
Guarde a chave como credencial
No n8n, uma credencial Header Auth com Authorization: Bearer SUA_CHAVE. Nunca no corpo do fluxo, nunca em nó de código versionado.
Authorization: Bearer cnpj_live_… -
Um nó HTTP Request por operação
GET /v1/cnpjs/{cnpj} para enriquecer um registro; GET /v1/cnpjs com filtros para descobrir empresas. O JSON volta com data e meta.
GET https://api.cnpj.ia.br/v1/cnpjs/{{ $json.cnpj }}?profile=full -
Trate os erros pelo código, não pelo texto
Com a resposta completa ligada no nó, um IF sobre body.error.retryable decide entre repetir (esperando o header Retry-After, quando vier), corrigir o dado ou parar. Erros não consomem crédito.
IF {{ $json.body.error.retryable }} → Wait {{ $json.headers['retry-after'] || 2 }}s → repetir
Configuração dos nós
Não há nó comunitário ainda; o nó HTTP Request resolve. Os blocos abaixo são os parâmetros a preencher no nó, não um export importável. Make e Zapier funcionam pelo módulo HTTP de cada um, com a chave guardada como conexão.
n8n · HTTP Request (consulta)
{
"node": "HTTP Request",
"method": "GET",
"url": "https://api.cnpj.ia.br/v1/cnpjs/{{ $json.cnpj }}",
"queryParameters": { "profile": "full" },
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerAuth": { "name": "Authorization", "value": "Bearer <credencial>" }
}
n8n · HTTP Request (busca paginada)
{
"node": "HTTP Request",
"method": "GET",
"url": "https://api.cnpj.ia.br/v1/cnpjs",
"queryParameters": {
"uf": "PR", "municipio": "4106902", "cnae": "1091102",
"situacao": "ATIVA", "simples": "true",
"cursor": "{{ $json.meta.next_cursor }}"
},
"pagination": { "stopWhen": "{{ $response.body.meta.next_cursor === null }}" }
}
Make / Zapier
Módulo HTTP → Make a request
URL: https://api.cnpj.ia.br/v1/cnpjs/{cnpj}?profile=basic
Método: GET
Header: Authorization: Bearer <chave guardada como conexão>
Parse: JSON → data.razao_social, data.situacao_cadastral.descricao, meta.data_as_of
Campos mais usados
| Campo | Perfil | Descrição |
|---|---|---|
cnpj | basic | CNPJ do estabelecimento, 14 caracteres sem pontuação, com zeros à esquerda. Vem da Receita Federal; aceita entrada numérica ou alfanumérica, com ou sem pontuação. |
razao_social | basic | Nome empresarial registrado na Receita Federal. É o único nome sempre presente. |
situacao_cadastral.codigo | basic | Código da situação cadastral do estabelecimento na Receita Federal, com dois dígitos. É o campo que diz se a empresa está ativa. |
endereco.municipio | basic | Nome do município de jurisdição do estabelecimento, traduzido pela tabela de municípios da Receita Federal. |
endereco.uf | basic | Sigla da unidade da federação do estabelecimento, campo da Receita Federal. |
has_email | basic | Indica se a empresa tem e-mail na base, sem revelar o e-mail. Sinal derivado, calculado no processamento da Oportunidados; serve para filtrar antes de gastar o perfil full. |
email | full | Endereço de correio eletrônico do contribuinte, campo da Receita Federal. null quando a empresa não tem e-mail na base. |
meta.next_cursor | meta | Cursor opaco da próxima página da busca. null na última página; ignorado nas outras operações. |
meta.credits_remaining | meta | Créditos restantes na conta, somando franquia do plano e pacotes avulsos. |
Regras que evitam surpresa no fluxo
- Paginação da busca: repita com
cursor = meta.next_cursoraté virnull; mudar um filtro invalida o cursor. Cada empresa retornada custa 1 crédito, emeta.total_count_cappedna primeira página dá a contagem até o teto de exibição, ou um mínimo quando vem com+, antes de você percorrer tudo. - Rate limit por conta: todas as chaves e fluxos somam no mesmo contador. Em
429 rate_limited, espereRetry-After; em lote grande, coloque um nó Wait entre páginas em vez de disparar em paralelo. - Franquia:
402 quota_exceededé hard cap. ConsulteGET /v1/usageno início do fluxo e compare com o custo estimado; nada é cobrado sem uma ação sua. 404 not_foundé resultado: CNPJ válido que não existe na base não é falha do fluxo, e custa 0.- Data da base:
meta.data_as_ofdiz qual foto mensal respondeu; grave junto com o registro enriquecido.
Tier indicado
Starter é o plano indicado: o de menor mensalidade entre os que incluem a busca de empresas.
O Free não atende a este fluxo porque não inclui a busca de empresas.
- 15 mil créditos por mês
- 30 requisições por minuto
- R$ 0,0196 por consulta
full - R$ 0,0033 por empresa retornada na busca
Perguntas frequentes
Existe um nó do n8n para o cnpj.ia.br?
Ainda não. O nó HTTP Request cobre tudo: uma credencial Header Auth com a chave, a URL da operação e o parse do JSON. A receita completa está nesta página; um nó comunitário está no radar, sem data.
Funciona no Make e no Zapier?
Sim, pelo módulo HTTP de cada um: método GET, a URL da operação e o header Authorization: Bearer com a chave guardada como conexão. O JSON de resposta é o mesmo em qualquer cliente.
Como repetir uma chamada que falhou sem duplicar custo?
Repita só quando error.retryable for verdadeiro, esperando o header Retry-After quando ele vier. Erros não consomem crédito, então repetir um 429, um 503 ou um 504 não custa nada; só respostas 200 são cobradas.
Posso disparar muitas consultas em paralelo?
Até o limite de requisições por minuto do seu plano, que é por conta. Acima disso a API responde 429 rate_limited com Retry-After. Em lotes, um nó Wait entre chamadas ou entre páginas evita o erro.
O que acontece quando a franquia do mês acaba no meio do fluxo?
A API responde 402 quota_exceeded e o fluxo para de receber dados até o reset ou até você subir de plano ou, sendo assinante pago, comprar um pacote. Nada é cobrado automaticamente. Consultar GET /v1/usage no início do fluxo evita a surpresa.
Como sei a data dos dados que gravei?
Toda resposta de consulta e busca traz meta.data_as_of, a data da foto mensal da Receita Federal. Grave esse campo junto com o registro; é ele que diz se vale reenriquecer depois da próxima carga.
Para continuar
Atualizado em