Inteligência competitiva de verdade começa com um inventário completo. Saber que a empresa "X" é sua concorrente não é suficiente — você precisa saber quantas empresas competem no mesmo espaço, com que tamanho, há quanto tempo estão no mercado e se estão se expandindo ou retraindo.
A boa notícia: o Brasil obriga toda empresa a registrar seu CNAE no CNPJ. Isso torna a base da Receita Federal no banco de dados de inteligência competitiva mais completo e confiável do país.
O que você consegue descobrir
| Pergunta | Endpoint | Plano |
|---|---|---|
| Quantos concorrentes ativos existem na cidade? | GET /empresas?cnae=&uf=&municipio= | Pro |
| Qual o CNPJ de cada concorrente? | Incluso no resultado acima | Pro |
| Quem são os sócios do concorrente? | GET /cnpj/:cnpj/socios | Free |
| Quantas filiais o concorrente tem? | GET /cnpj/:cnpj/estabelecimentos | Pro |
| Quando foi fundado? | Campo data_inicio_atividade | Free |
| Qual o porte declarado? | Campo porte (ME, EPP, etc.) | Free |
Montando o radar passo a passo
Passo 1 — Liste os concorrentes diretos
O parâmetro cnae aceita um código de 7 dígitos. Combine com situacao=ativa para filtrar apenas empresas operantes.
# Exemplo: escritórios de contabilidade em Campinas/SP (CNAE 6920601)
curl "https://api.cnpjob.com.br/empresas?cnae=6920601&uf=SP&municipio=Campinas&situacao=ativa&limit=50" \
-H "X-API-Key: SUA_CHAVE"
Passo 2 — Construa o perfil de cada concorrente
Para cada CNPJ retornado, faça uma consulta completa para obter endereço, capital social, porte, data de abertura e sócios:
// Node.js — monta perfil completo de todos os concorrentes
const API_KEY = process.env.CNPJOB_KEY;
const BASE = "https://api.cnpjob.com.br";
async function get(path) {
const r = await fetch(BASE + path, { headers: { "X-API-Key": API_KEY } });
return r.json();
}
async function radarConcorrentes({ cnae, uf, municipio }) {
const lista = await get(`/empresas?cnae=${cnae}&uf=${uf}&municipio=${encodeURIComponent(municipio)}&situacao=ativa`);
console.log(`\n🔍 ${lista.total} concorrentes encontrados em ${municipio}/${uf}\n`);
const perfis = [];
for (const empresa of lista.empresas.slice(0, 20)) { // primeiros 20 como exemplo
const [detalhes, socios] = await Promise.all([
get(`/cnpj/${empresa.cnpj}`),
get(`/cnpj/${empresa.cnpj}/socios`),
]);
perfis.push({
razao_social: detalhes.razao_social,
cnpj: detalhes.cnpj,
fundacao: detalhes.data_inicio_atividade,
porte: detalhes.porte,
capital_social: detalhes.capital_social,
socios: socios.socios?.map(s => s.nome_socio),
municipio: detalhes.endereco?.municipio,
});
}
// Ordena por capital social (proxy de porte)
perfis.sort((a, b) => (b.capital_social || 0) - (a.capital_social || 0));
console.log("Top 5 por capital social:");
perfis.slice(0, 5).forEach((p, i) => {
console.log(` ${i + 1}. ${p.razao_social} | Fundada: ${p.fundacao} | Capital: R$ ${p.capital_social?.toLocaleString("pt-BR")}`);
});
return perfis;
}
radarConcorrentes({ cnae: "6920601", uf: "SP", municipio: "Campinas" });
Passo 3 — Identifique grupos econômicos
Um concorrente aparentemente pequeno pode ser uma filial de um grande grupo. Use GET /cnpj/:cnpj/estabelecimentos para ver se a matriz tem filiais espalhadas:
import os, requests
API_KEY = os.getenv("CNPJOB_KEY")
BASE = "https://api.cnpjob.com.br"
HDR = {"X-API-Key": API_KEY}
def analisar_grupo(cnpj: str) -> dict:
# Busca estabelecimentos (filiais + matriz)
r = requests.get(f"{BASE}/cnpj/{cnpj}/estabelecimentos", headers=HDR)
r.raise_for_status()
data = r.json()
filiais_ativas = [e for e in data.get("estabelecimentos", []) if e.get("situacao_cadastral") == "ATIVA"]
estados = {e["endereco"]["uf"] for e in filiais_ativas if e.get("endereco")}
return {
"cnpj": cnpj,
"total_estabelecimentos": len(filiais_ativas),
"estados_presenca": sorted(estados),
"nacional": len(estados) > 3,
}
# CNPJ de um concorrente encontrado no passo anterior
info = analisar_grupo("00000000000191") # substitua pelo CNPJ real
print(f"Filiais ativas: {info['total_estabelecimentos']}")
print(f"Estados: {', '.join(info['estados_presenca'])}")
print(f"Concorrente nacional: {'Sim' if info['nacional'] else 'Não'}")
Segmentando por porte para priorizar ameaças
Nem todo concorrente merece o mesmo nível de atenção. A Receita Federal classifica as empresas pelo porte declarado: MEI, ME (Microempresa), EPP (Empresa de Pequeno Porte), Demais. Filtrando só por EPP e Demais, você isola os concorrentes com estrutura para realmente ameaçar seu market share.
Insight estratégico
Se a maioria dos seus concorrentes é MEI ou ME e você vai entrar como EPP, você tem vantagem estrutural em capacidade de investimento. Se a maioria é Demais (grande porte), o mercado já está dominado por players consolidados — sua estratégia precisará ser de nicho.
Automatizando o monitoramento contínuo
Um radar de concorrentes não é uma foto, é um vídeo. Novas empresas abrem toda semana. Concorrentes encerram atividades. Sócios mudam. Configure uma tarefa agendada para rodar o script acima semanalmente e enviar um relatório por e-mail ou Slack:
# cron: toda segunda às 8h, gera relatório da semana
# 0 8 * * 1 node radar-concorrentes.js >> /var/log/radar.log
# No script, compare o total atual com o total da semana passada
# armazenado em um arquivo JSON ou banco de dados simples
const hoje = await radarConcorrentes({ cnae: "6920601", uf: "SP", municipio: "Campinas" });
const semanaPassada = JSON.parse(fs.readFileSync("snapshot.json"));
const novos = hoje.filter(e => !semanaPassada.find(p => p.cnpj === e.cnpj));
const fecharam = semanaPassada.filter(e => !hoje.find(p => p.cnpj === e.cnpj));
if (novos.length > 0) console.log(`🆕 ${novos.length} novo(s) concorrente(s) esta semana`);
if (fecharam.length > 0) console.log(`🔴 ${fecharam.length} concorrente(s) encerrado(s) esta semana`);
fs.writeFileSync("snapshot.json", JSON.stringify(hoje));
Casos de uso por setor
- Varejo: mapear todos os concorrentes numa praça antes de decidir onde abrir a próxima loja
- Franquias: validar se uma cidade já tem saturação do segmento antes de conceder nova franquia
- Consultorias: identificar todos os escritórios de contabilidade, advocacia ou TI de uma região para prospecção ou benchmark
- Fintechs de crédito: analisar a saúde financeira de um segmento de mercado por região antes de lançar um produto específico
- M&A: mapear empresas-alvo de aquisição num nicho específico
Construa seu radar de concorrentes hoje
Os endpoints de filtragem por CNAE e município estão disponíveis a partir do Plano Pro. Comece grátis e faça upgrade quando precisar de mais volume.
Criar conta grátis