Editais do Brasil
API de empresas

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âmetroO que faz
cnpjUm CNPJ (14 dígitos, com ou sem pontuação): devolve o cadastro dele. Se vier, os demais parâmetros são ignorados.
perguntaPergunta em português. Um modelo transforma em SQL. Se vier, os filtros abaixo são ignorados.
atividadeTexto da atividade, convertido para CNAE. Ex.: padaria, software, construção.
ufSigla do estado. Ex.: PR.
municipioCódigo do município (só números).
diasSó as empresas abertas nos últimos N dias.
portemicroempresa, pequeno porte ou demais.
matriz1 para trazer só as matrizes.
limiteLinhas 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.