API de CNPJ
A base pública de CNPJs da Receita Federal — 72,8 milhões de estabelecimentos — consultada da sua aplicação: um CNPJ pelo número, listas por atividade, estado, cidade, porte e data de abertura, ou uma pergunta em português que vira consulta. A resposta traz sempre o SQL que foi executado.
Um CNPJ
?cnpj=33000167000101
2 créditos por consulta.
Listas por filtro
?atividade=padaria&uf=PR&dias=90
1 crédito + 1 a cada 20 empresas.
Pergunta em português
?pergunta=transportadoras em SC
+40 créditos pela interpretação.
O Plano Pro inclui 20.000 créditos por mês — cerca de 10 mil consultas de CNPJ. A chave é criada em Minha conta → Integrações e API.
O que vem em cada empresa
- cnpj
- 14 dígitos
- nome, razao_social
- nome fantasia (ou a razão) e razão social
- situacao, ativa
- situação cadastral na Receita
- abertura
- data de início de atividade
- atividade, atividade_codigo
- CNAE principal, com a descrição
- atividades_secundarias
- CNAEs secundários
- uf, cidade, bairro, logradouro, cep
- endereço do estabelecimento
- matriz
- matriz ou filial
- porte, capital_social
- porte e capital social da empresa
E-mail e telefone não saem pela API nem pelo site, por decisão de produto: a base serve para pesquisa e prospecção por atividade, não como lista de contatos.
Veja uma ficha antes
A mesma informação da API, numa página pública por CNPJ:
Documentação da API de CNPJ
A base de empresas da Receita Federal (72 milhões de CNPJs, sem e-mail e sem telefone), a mesma do explorador de empresas, consultada direto da sua aplicação.
1. Autenticação
Mande a chave no cabeçalho Authorization: Bearer edb_cnpj_…. Guarde a chave numa variável de ambiente do seu projeto e chame a API só do servidor. Se a chave for usada no navegador ou num app, qualquer pessoa consegue vê-la. Crie uma chave por projeto: se uma vazar, você revoga só aquela.
2. Consulta
GET https://editaisdobrasil.com/api/v1/cnpj
| Parâmetro | O que faz |
|---|---|
| cnpj | Um CNPJ (14 dígitos, com ou sem pontuação): devolve o cadastro dele. Se vier, os demais parâmetros são ignorados. |
| pergunta | Pergunta em português. Um modelo transforma em SQL. Se vier, os filtros abaixo são ignorados. |
| atividade | Texto da atividade, convertido para CNAE. Ex.: padaria, software, construção. |
| uf | Sigla do estado. Ex.: PR. |
| municipio | Código do município (só números). |
| dias | Só as empresas abertas nos últimos N dias. |
| porte | microempresa, pequeno porte ou demais. |
| matriz | 1 para trazer só as matrizes. |
| limite | Linhas por chamada: padrão 100, máximo 1000. |
3. Exemplos
# Um CNPJ curl -H "Authorization: Bearer $EDB_CNPJ_KEY" "https://editaisdobrasil.com/api/v1/cnpj?cnpj=33000167000101" # Filtro curl -H "Authorization: Bearer $EDB_CNPJ_KEY" \ "https://editaisdobrasil.com/api/v1/cnpj?atividade=padaria&uf=PR&dias=90&limite=50" # Pergunta em português curl -G -H "Authorization: Bearer $EDB_CNPJ_KEY" "https://editaisdobrasil.com/api/v1/cnpj" \ --data-urlencode "pergunta=padarias abertas em Curitiba nos últimos 90 dias"
// Node / TypeScript
const url = new URL("https://editaisdobrasil.com/api/v1/cnpj");
url.search = new URLSearchParams({ atividade: "software", uf: "SP", dias: "30" }).toString();
const r = await fetch(url, { headers: { Authorization: `Bearer ${process.env.EDB_CNPJ_KEY}` } });
const corpo = await r.json();
if (!r.ok) throw new Error(`${r.status}: ${corpo.erro}`);
console.log(corpo.total, corpo.dados[0]);# Python
import os, requests
r = requests.get(
"https://editaisdobrasil.com/api/v1/cnpj",
params={"atividade": "software", "uf": "SP", "dias": 30},
headers={"Authorization": f"Bearer {os.environ['EDB_CNPJ_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()["total"])4. Resposta
{
"sql": "select cnpj, nome, atividade, … limit 50",
"explicacao": "…", // só em pergunta em português
"colunas": ["cnpj", "nome", "atividade", "cidade", "uf", "abertura", "porte"],
"dados": [{ "cnpj": "…", "nome": "…", "uf": "PR" }],
"total": 50,
"fonte": { "cadastro": "2026-09", "empresas": 72000000 },
"consumo": { "creditos": 4, "restantes": 19996, "franquia": 20000 }
}O SQL executado vem sempre na resposta, para você conferir o que foi pedido. Os cabeçalhos X-Creditos-Consumidos e X-Creditos-Restantes repetem o consumo. Numa conta sem limite, restantes e franquia vêm null.
5. Créditos
Cada chamada custa 1 crédito, mais 1 a cada 20 linhas devolvidas. A pergunta em português custa 40 a mais, porque passa por um modelo antes de virar consulta. Os créditos voltam no início de cada mês.
6. Erros
- 400Filtro insuficiente (é preciso atividade, UF ou dias), SQL recusado ou tempo esgotado. O campo erro diz qual.
- 401Chave ausente, inválida ou revogada.
- 402O plano da conta não inclui a API.
- 422A pergunta em português não virou uma consulta possível. O motivo vem em erro.
- 429Os créditos do mês acabaram.