Abrir uma empresa sem fazer uma análise de mercado é o erro número um de empreendedores de primeira viagem. A boa notícia: o Brasil tem um dataset público com 67 milhões de CNPJs — e você pode acessá-lo via API em segundos.
Por que contar concorrentes antes de abrir
Imagine que você quer abrir uma academia de ginástica no bairro de Pinheiros, São Paulo. Intuitivamente você pode dar uma volta de carro e contar as academias visíveis, mas isso capta apenas quem tem fachada. O que dizer de estúdios de crossfit no fundo de um corredor comercial, ou de personal trainers com CNPJ próprio que operam na mesma região?
A Receita Federal exige que toda empresa registre seu CNAE (Classificação Nacional de Atividades Econômicas) no momento do cadastro. Isso cria um censo completo e confiável de toda empresa ativa por setor de atividade e localização.
Dado real
Em março de 2026, existiam 42.318 empresas ativas no Brasil com CNAE 9313-1/00 (academias de condicionamento físico). Só no município de São Paulo: 4.821. No bairro de Pinheiros (código de município 3550308 + filtro de endereço): 214.
O CNAE certo faz toda a diferença
Antes de fazer a consulta, você precisa do código CNAE exato do seu setor. Você pode listar todos os CNAEs disponíveis gratuitamente:
curl https://api.cnpjob.com.br/cnae \
-H "X-API-Key: SUA_CHAVE_AQUI" | jq '.[] | select(.descricao | test("academia"; "i"))'
O retorno será algo como:
{
"codigo": "9313100",
"descricao": "Atividades de condicionamento físico"
}
Consultando o volume de empresas por CNAE e região
Node.js
const API_KEY = process.env.CNPJOB_KEY;
const BASE = "https://api.cnpjob.com.br";
async function analisarViabilidade({ cnae, uf, municipio }) {
const params = new URLSearchParams({
cnae,
uf,
situacao: "ativa",
...(municipio && { municipio }),
});
const res = await fetch(`${BASE}/empresas?${params}`, {
headers: { "X-API-Key": API_KEY },
});
const data = await res.json();
console.log(`\n=== Análise de Viabilidade ===`);
console.log(`CNAE: ${cnae} | UF: ${uf} | Município: ${municipio || "todos"}`);
console.log(`Empresas ativas encontradas: ${data.total}`);
if (data.total < 50) console.log("Mercado: POUCO EXPLORADO — pode haver oportunidade.");
else if (data.total < 300) console.log("Mercado: MODERADO — há concorrência, mas não saturado.");
else console.log("Mercado: SATURADO — diferenciação é essencial.");
// Distribui por ano de abertura para ver tendência
const porAno = {};
for (const e of data.empresas) {
const ano = e.data_inicio_atividade?.slice(0, 4);
if (ano) porAno[ano] = (porAno[ano] || 0) + 1;
}
console.log("\nAbertura por ano (últimos 5 anos):");
const anoAtual = new Date().getFullYear();
for (let y = anoAtual - 4; y <= anoAtual; y++) {
const qtd = porAno[y] || 0;
const bar = "█".repeat(Math.min(qtd, 40));
console.log(` ${y}: ${bar} (${qtd})`);
}
}
// Exemplo: academias no Rio de Janeiro
analisarViabilidade({ cnae: "9313100", uf: "RJ" });
Python
import os, requests
from collections import Counter
API_KEY = os.getenv("CNPJOB_KEY")
BASE = "https://api.cnpjob.com.br"
HDR = {"X-API-Key": API_KEY}
def analisar_viabilidade(cnae: str, uf: str, municipio: str = None) -> dict:
params = {"cnae": cnae, "uf": uf, "situacao": "ativa"}
if municipio:
params["municipio"] = municipio
r = requests.get(f"{BASE}/empresas", params=params, headers=HDR)
r.raise_for_status()
data = r.json()
total = data["total"]
empresas = data.get("empresas", [])
# Tendência: contagem por ano de abertura
anos = Counter(
e["data_inicio_atividade"][:4]
for e in empresas
if e.get("data_inicio_atividade")
)
saturacao = (
"POUCO EXPLORADO" if total < 50
else "MODERADO" if total < 300
else "SATURADO"
)
return {
"total": total,
"saturacao": saturacao,
"tendencia_abertura": dict(sorted(anos.items())),
}
# Exemplo: restaurantes em Florianópolis
resultado = analisar_viabilidade(cnae="5611201", uf="SC", municipio="Florianópolis")
print(f"Total de restaurantes ativos: {resultado['total']}")
print(f"Avaliação de mercado: {resultado['saturacao']}")
print(f"Abertura por ano: {resultado['tendencia_abertura']}")
Indo além: densidade por habitante
O número bruto de empresas ativas não conta toda a história. Uma cidade com 100 academias e 1 milhão de habitantes tem densidade muito menor do que uma cidade com 30 academias e 50 mil habitantes. Combinar o total de CNPJs com dados de população (IBGE) permite calcular a razão empresas/habitante — uma métrica muito mais precisa de saturação.
Dica profissional
Use o endpoint GET /cnpj/:cnpj/estabelecimentos (Plano Pro) para descobrir o número de filiais dos seus principais concorrentes. Uma empresa com 10 filiais na região tem peso muito diferente de 10 microempreendedores individuais.
Identificando a tendência: o mercado está crescendo ou encolhendo?
O campo data_inicio_atividade retornado em cada empresa permite calcular se o número de novos entrantes tem crescido ou diminuído nos últimos anos. Um mercado com menos aberturas nos últimos 2 anos pode indicar:
- Baixa rentabilidade (empreendedores desistiram de entrar)
- Consolidação — grandes players engolindo os pequenos
- Ruptura tecnológica (o mercado físico está migrando para online)
Já um mercado com mais aberturas nos últimos 2 anos pode indicar aquecimento — ou exatamente o contrário: um hype temporário que está atraindo muitos concorrentes ao mesmo tempo.
Roteiro completo de due diligence pré-abertura
- Liste o CNAE principal e os secundários do seu negócio via
GET /cnae - Consulte o volume de empresas ativas na sua cidade:
GET /empresas?cnae=X&uf=Y&municipio=Z&situacao=ativa - Analise a tendência de abertura por ano usando
data_inicio_atividade - Para os 3-5 maiores concorrentes, chame
GET /cnpj/:cnpj/estabelecimentospara ver quantas filiais têm - Use
GET /cnpj/:cnpj/sociospara mapear os sócios e verificar se há grupos econômicos por trás - Configure um monitor de CNPJ nos principais concorrentes para ser alertado se abrirem novas filiais
Pronto para validar seu negócio com dados reais?
A filtragem por CNAE e município está disponível a partir do Plano Pro. Crie sua conta grátis e teste os primeiros endpoints agora.
Criar conta grátis