Empresas que dependem de uma cadeia de fornecedores enfrentam um risco silencioso: mudanças cadastrais que acontecem sem aviso. Um fornecedor pode ter o CNPJ baixado por irregularidade fiscal, mudar de sócios sem comunicar nada, ou simplesmente encerrar as atividades e deixar contratos em aberto.
Com a API cnpjob você pode transformar esse risco passivo em alerta ativo — sem precisar checar manualmente um por um, sem depender de e-mail e sem esperar a surpresa chegar.
Os 5 cenários que mais geram prejuízo
- CNPJ baixado: a empresa encerrou as atividades e não pode mais emitir NF-e. Compras feitas depois da baixa viram problema fiscal.
- CNPJ inapto ou suspenso: a Receita marca como inapta a empresa que deixou de entregar declarações ou não foi localizada no endereço. Notas emitidas por ela podem ser consideradas inidôneas.
- Troca no quadro societário: a empresa foi vendida ou o sócio com quem você negociou saiu. Condições combinadas podem não ser honradas pelo novo controle.
- Mudança de endereço: fornecedor mudou de município ou estado, com impacto em retenções (ISS, ICMS), logística e contratos regionais.
- Troca do CNAE principal: o fornecedor mudou de ramo oficial, o que pode invalidar habilitações em licitações ou homologações.
Opção 1: Monitores no painel (sem código)
Em Monitores, no portal, você cadastra os CNPJs que quer acompanhar. A cada 6 horas o cnpj/ob compara o cadastro atual com a última versão vista e, se algo mudou, avisa o seu sistema por webhook. A quantidade de monitores depende do plano e aparece na própria tela.
Monitores e webhooks são configurados pelo portal (não pela chave de API). Depois de configurados, o recebimento é todo automático.
Opção 2: Receber as mudanças por webhook
Em Webhooks, cadastre a URL do seu sistema. O portal mostra um secret uma única vez: guarde-o para validar que o envio veio mesmo do cnpj/ob.
Quando um CNPJ monitorado muda, chega um POST com o evento cnpj.updated e o cadastro completo já atualizado:
{
"id": "6f1c…",
"timestamp": "2026-11-07T14:00:00.000Z",
"event": "cnpj.updated",
"payload": {
"cnpj": "33000167000101",
"old_hash": "9a1f…",
"new_hash": "c27e…",
"data": { "razao_social": "…", "situacao": "Ativa", "endereco": { … }, "socios": [ … ] }
}
}
O payload traz o cadastro novo, não a lista de campos alterados. Para saber o que mudou, compare com a versão que você guardou:
// Node.js / Express
import crypto from "node:crypto";
import express from "express";
const app = express();
app.post("/webhooks/cnpjob", express.raw({ type: "application/json" }), async (req, res) => {
// 1. Confere a assinatura (HMAC-SHA256 do corpo com o secret do endpoint)
const recebida = req.get("X-Cnpjob-Signature") || "";
const esperada = crypto.createHmac("sha256", process.env.CNPJOB_WEBHOOK_SECRET)
.update(req.body).digest("hex");
if (recebida.length !== esperada.length ||
!crypto.timingSafeEqual(Buffer.from(recebida), Buffer.from(esperada))) {
return res.status(401).end();
}
res.status(200).end(); // responda rápido e processe depois
const { event, payload } = JSON.parse(req.body);
if (event !== "cnpj.updated") return;
const novo = payload.data;
const antigo = await buscarFornecedor(payload.cnpj); // sua última versão salva
const critico =
novo.situacao !== "Ativa" ||
novo.endereco?.uf !== antigo?.endereco?.uf ||
JSON.stringify(novo.socios?.map((s) => s.nome).sort()) !==
JSON.stringify(antigo?.socios?.map((s) => s.nome).sort());
if (critico) await alertarCompras(payload.cnpj, novo);
await salvarFornecedor(payload.cnpj, novo);
});
Opção 3: Verificação no cadastro do fornecedor
No momento em que um fornecedor novo entra no seu ERP, consulte o CNPJ antes de aprovar o cadastro. Funciona em qualquer plano, com a chave de API:
import os, requests
from datetime import datetime
BASE = "https://api.cnpjob.com.br"
HDR = {"X-API-Key": os.getenv("CNPJOB_KEY")}
def validar_fornecedor(cnpj: str) -> dict:
r = requests.get(f"{BASE}/cnpj/{cnpj}", headers=HDR, timeout=10)
r.raise_for_status()
d = r.json()
riscos = []
if d["situacao"] != "Ativa":
riscos.append(f"Situação cadastral: {d['situacao']} desde {d['data_situacao']}")
return {
"cnpj": d["cnpj"],
"razao_social": d["razao_social"],
"aprovado": not riscos,
"riscos": riscos,
"socios": [s["nome"] for s in d.get("socios", [])],
"verificado_em": datetime.now().isoformat(),
}
resultado = validar_fornecedor("33000167000101")
print("APROVADO" if resultado["aprovado"] else "REPROVADO", resultado["razao_social"])
for risco in resultado["riscos"]:
print(" -", risco)
Revisando a base inteira de fornecedores
Para conferir centenas de CNPJs de uma vez, por exemplo numa rotina semanal, use o endpoint em lote: até 5 CNPJs por chamada no Free, 50 no Pro e 500 no Business.
import csv, os, re, requests
HDR = {"X-API-Key": os.getenv("CNPJOB_KEY")}
LOTE = 50 # plano Pro
with open("fornecedores.csv", encoding="utf-8") as f:
cnpjs = [re.sub(r"\D", "", row["cnpj"]) for row in csv.DictReader(f)]
for i in range(0, len(cnpjs), LOTE):
r = requests.post("https://api.cnpjob.com.br/cnpj/batch",
json={"cnpjs": cnpjs[i:i + LOTE]}, headers=HDR, timeout=60)
r.raise_for_status()
for item in r.json()["results"]:
if "error" in item:
print(f"{item['cnpj']}: {item['error']}")
elif item["data"]["situacao"] != "Ativa":
print(f"{item['cnpj']}: {item['data']['situacao']} ({item['data']['razao_social']})")
Relatório semanal de saúde da cadeia de fornecedores
Com os fornecedores monitorados, você pode gerar um relatório executivo automático toda semana mostrando a saúde da sua cadeia de fornecedores:
- Verde: CNPJ ativo, sem alterações recentes
- Amarelo: Alguma mudança detectada nos últimos 30 dias (endereço, sócio, atividade)
- Vermelho: Situação irregular, suspensa ou baixada — ação imediata necessária
Esse relatório pode ser automaticamente enviado para o time de procurement toda segunda-feira antes do horário de negociação começar.
Compliance e LGPD
Todos os dados retornados pela API cnpjob são de domínio público — publicados pela Receita Federal (Lei 12.527/2011). O monitoramento de CNPJs de fornecedores é uma prática legítima de gestão de risco e não configura coleta indevida de dados pessoais.
Teste com seus dadosCrie a conta grátis e faça a primeira consulta em minutos.
Criar conta grátis