Pular para o conteúdo
cnpj/ob

Radar de Fornecedores: saiba quando um CNPJ é cancelado ou muda de sócio automaticamente

Seu fornecedor acabou de ter o CNPJ cancelado pela Receita Federal. Você ficou sabendo como? Provavelmente na pior hora possível — quando tentou emitir uma NF-e ou ficou sem estoque crítico. Existe um jeito melhor.

← Blog · Gestão de RiscoBlog do cnpj/ob

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