# Monitor de Mudanças Cadastrais de CNPJ (`johnatan029/cnpj-company-change-events`) Actor

Acompanha o cadastro público de empresas brasileiras e informa apenas o que mudou: situação cadastral, endereço, CNAE, quadro societário ou razão social. Cada evento traz o valor anterior e o novo.

- **URL**: https://apify.com/johnatan029/cnpj-company-change-events.md
- **Developed by:** [Johnn Mottin](https://apify.com/johnatan029) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 evento de mudanças

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Monitor de Mudanças Cadastrais de CNPJ

Detecte alterações cadastrais de empresas brasileiras sem consultar CNPJ por CNPJ

Uma mudança no cadastro de um fornecedor, cliente ou parceiro pode acontecer antes de alguém da sua equipe perceber.

Este Actor monitora os CNPJs que você escolher e retorna somente as mudanças detectadas entre uma leitura e outra: situação cadastral, endereço, CNAE, quadro societário e dados de identificação da empresa.

Cada mudança é entregue como um evento estruturado com o valor anterior e o valor atual, facilitando monitoramento de fornecedores, KYB, compliance operacional, cadastros internos e automações.

Sem login. Sem CAPTCHA. Sem navegador. Sem IA no runtime.

### Principais recursos

Monitore até 200 CNPJs por execução

Detecte mudança de situação cadastral

Detecte mudança de endereço

Detecte mudança de CNAE principal e secundários

Detecte alteração no quadro societário

Detecte mudança de razão social, nome fantasia, natureza jurídica ou porte

Receba previous e current no mesmo evento

Escolha quais tipos de evento deseja receber

Primeira leitura cria a linha de base sem gerar falso evento

Estado persistente entre execuções

Fallback entre fontes públicas compatíveis com o fluxo

Proteção contra falso positivo quando a família da fonte muda

Resumo gratuito RUN\_SUMMARY em toda execução

Health checks e avisos de qualidade

Controle de volume por maxResults e maxRuntimeMs

Apify Tasks, Schedules, API, webhooks e integrações

Pay Per Event para eventos efetivamente entregues

Actor comunitário não-oficial. Sem afiliação com a Receita Federal do Brasil, Minha Receita, CNPJ.ws ou qualquer órgão público. Os dados são obtidos de fontes públicas e permanecem sujeitos às condições, disponibilidade, atualização e políticas de cada fonte.

### Por que monitorar alterações cadastrais

Uma consulta de CNPJ mostra o estado atual da empresa.

Um monitor responde a uma pergunta diferente:

O que mudou desde a última vez que consultei esta empresa?

Isso pode ajudar a identificar alterações relevantes em:

fornecedores;

clientes B2B;

parceiros comerciais;

empresas homologadas;

carteira de crédito;

cadastros internos;

processos de KYB;

compliance operacional;

bases de CRM e ERP;

listas de empresas acompanhadas continuamente.

O Actor não decide sozinho se uma alteração representa risco. Ele transforma a mudança cadastral em um evento estruturado que pode alimentar seu processo de análise ou automação.

### Para quem é

#### Compras e gestão de fornecedores

Monitore fornecedores recorrentes e identifique quando ocorrer alteração em dados cadastrais relevantes.

Exemplo:

O CNPJ deste fornecedor mudou de ATIVA para BAIXADA desde a última verificação?

#### Equipes financeiras, risco e compliance

Use os eventos como um sinal adicional em processos de:

atualização cadastral;

KYB;

revisão de fornecedores;

revisão de clientes empresariais;

checagens operacionais;

rotinas internas de compliance.

O Actor fornece o dado. A decisão de risco continua pertencendo à sua política e ao seu processo.

#### Operações e cadastro

Mantenha sistemas internos informados quando houver mudança em:

razão social;

nome fantasia;

endereço;

CNAE;

porte;

natureza jurídica;

quadro societário;

situação cadastral.

#### Integradores e equipes de automação

Os eventos podem ser enviados para:

n8n;

Make;

Google Sheets;

Slack;

CRM;

ERP;

webhooks;

bancos de dados;

dashboards;

agentes de IA;

aplicações internas.

### Como funciona

O Actor trabalha com histórico persistente.

Para cada CNPJ:

valida o número e os dígitos verificadores;

consulta as fontes públicas configuradas na ordem definida;

normaliza os dados recebidos;

carrega o snapshot anterior salvo pelo Actor;

compara apenas os campos monitorados;

gera um evento para cada grupo de dados que realmente mudou;

salva o snapshot atual para a próxima execução;

escreve um RUN\_SUMMARY gratuito com o resultado da execução.

A comparação é determinística e feita por regras declaradas no código. O Actor não usa LLM para decidir se algo mudou.

#### A primeira execução cria a linha de base

Na primeira leitura de um CNPJ ainda não monitorado, o Actor salva o cadastro atual como baseline.

Ele não gera evento nessa primeira leitura.

Isso é intencional.

Se o Actor tratasse todo o cadastro atual como mudança, a primeira execução produziria falsos eventos para dados que já existiam antes do monitoramento começar.

A partir da próxima execução, a nova leitura é comparada com a linha de base persistida.

### Tipos de evento

O input eventTypes permite escolher quais mudanças devem gerar eventos.

#### STATUS\_CHANGED

Detecta mudança em:

situacaoCadastral
dataSituacao

Exemplos de situação cadastral que podem aparecer conforme a fonte:

ATIVA
BAIXADA
SUSPENSA
INAPTA

#### ADDRESS\_CHANGED

Compara o bloco de endereço normalizado:

logradouro
numero
bairro
municipio
uf
cep

#### CNAE\_CHANGED

Detecta mudança em:

cnaePrincipal
cnaeDescricao
cnaesSecundarios

Os CNAEs secundários são normalizados como conjunto ordenado para evitar falso positivo causado apenas por mudança de ordem na resposta da fonte.

#### PARTNER\_CHANGED

Detecta mudança no quadro societário normalizado.

O snapshot de cada sócio pode incluir:

nome
qualificacao
cpfMascarado

A ordem dos sócios não é tratada como mudança.

#### COMPANY\_UPDATED

Detecta mudança em dados de identificação da empresa:

razaoSocial
nomeFantasia
naturezaJuridica
porte

### Input

#### Exemplo recomendado para monitoramento diário

```json
{
  "cnpjs": [
    "47960950000121",
    "19131243000197"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "ADDRESS_CHANGED",
    "CNAE_CHANGED",
    "PARTNER_CHANGED",
    "COMPANY_UPDATED"
  ],
  "sources": [
    "minhareceita",
    "cnpjws"
  ],
  "maxResults": 1000,
  "maxRuntimeMs": 300000,
  "debug": false
}
```

#### Campos de input

| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
| cnpjs | array | obrigatório | Lista de CNPJs a monitorar. Aceita até 200 itens por execução, com ou sem pontuação. |
| eventTypes | string\[] | todos os 5 eventos | Define quais tipos de mudança devem ser emitidos. |
| sources | string\[] | \['minhareceita','cnpjws'] | Ordem de tentativa das fontes públicas. |
| maxResults | int 1–10000 | 1000 | Limite máximo de eventos de mudança entregues na execução. |
| maxRuntimeMs | int 10000–3600000 | 300000 | Limite de duração controlado pelo Actor em milissegundos. |
| debug | boolean | false | Ativa logs mais detalhados de espera de fonte e decisões de comparação. |

CNPJs inválidos são ignorados com aviso quando existe pelo menos um CNPJ válido na entrada.

Se nenhum CNPJ válido for fornecido, o input é tratado como inválido.

#### Validação de CNPJ

O Actor não verifica apenas se existem 14 números.

Ele também valida os dígitos verificadores.

Por isso, uma entrada como:

99999999999999

não é considerada um CNPJ válido apenas por possuir 14 dígitos.

CNPJs duplicados são normalizados e processados uma única vez na mesma execução.

#### Escolha apenas os eventos que você precisa

Você pode reduzir o tipo de saída escolhendo apenas os eventos relevantes para seu fluxo.

Exemplo: monitorar apenas situação cadastral e quadro societário.

```json
{
  "cnpjs": [
    "47960950000121"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "PARTNER_CHANGED"
  ]
}
```

Mudanças em grupos não selecionados podem ser identificadas internamente para atualização do estado, mas não são entregues como eventos cobrados daquele tipo.

### Output

O dataset pode conter dois tipos principais de registro:

CHANGE\_EVENT
RUN\_SUMMARY

#### CHANGE\_EVENT

É um evento de mudança cadastral efetivamente detectada e entregue.

#### RUN\_SUMMARY

É a linha gratuita de resumo da execução.

Ela mantém o dataset informativo mesmo em uma execução sem mudança cadastral.

#### Exemplo de evento de mudança

Exemplo de estrutura usada pelo Actor para uma alteração de situação cadastral:

```json
{
  "recordType": "CHANGE_EVENT",
  "eventType": "STATUS_CHANGED",
  "changeKind": "CHANGED",
  "entityId": "cnpj:47960950000121",
  "source": "minhareceita",
  "observedAt": "2026-08-16T18:41:03.552Z",
  "previousObservedAt": "2026-08-15T18:40:11.204Z",
  "changedFields": [
    "status"
  ],
  "previous": {
    "situacaoCadastral": "ATIVA",
    "dataSituacao": "2005-11-03"
  },
  "current": {
    "situacaoCadastral": "BAIXADA",
    "dataSituacao": "2026-08-01"
  },
  "cnpj": "47960950000121",
  "razaoSocial": "MAGAZINE LUIZA S/A",
  "sourceFamily": "receita"
}
```

#### Campos de CHANGE\_EVENT

| Campo | Presença | Descrição |
|---|---|---|
| recordType | sempre | CHANGE\_EVENT. |
| eventType | sempre | Tipo de mudança detectada. |
| changeKind | sempre | Neste Actor, eventos de diff usam CHANGED. |
| entityId | sempre | Identidade estável no formato cnpj:<CNPJ>. |
| source | sempre | Fonte usada na leitura que gerou o evento. |
| observedAt | sempre | Momento em que a leitura atual foi observada pelo Actor. |
| previousObservedAt | quando existe histórico | Momento da leitura anterior usada na comparação. |
| changedFields | sempre | Grupo comparado que mudou. |
| previous | sempre no evento | Recorte dos valores anteriores relevantes ao evento. |
| current | sempre no evento | Recorte dos valores atuais relevantes ao evento. |
| cnpj | sempre | CNPJ normalizado com 14 dígitos. |
| razaoSocial | quando disponível | Razão social normalizada da leitura atual. |
| sourceFamily | sempre quando a leitura é válida | Família usada para impedir comparação incompatível entre fontes. |

#### Estrutura de previous e current

Cada evento traz somente os dados relevantes ao tipo de mudança.

##### STATUS\_CHANGED

```json
{
  "situacaoCadastral": "ATIVA",
  "dataSituacao": "2005-11-03"
}
```

##### ADDRESS\_CHANGED

```json
{
  "endereco": {
    "logradouro": "AVENIDA EXEMPLO",
    "numero": "100",
    "bairro": "CENTRO",
    "municipio": "SAO PAULO",
    "uf": "SP",
    "cep": "01001000"
  }
}
```

##### CNAE\_CHANGED

```json
{
  "cnaePrincipal": "4711302",
  "cnaeDescricao": "Comércio varejista de mercadorias em geral",
  "cnaesSecundarios": [
    "4751201",
    "4753900"
  ]
}
```

##### PARTNER\_CHANGED

```json
{
  "socios": [
    {
      "nome": "NOME DO SOCIO",
      "qualificacao": "Administrador",
      "cpfMascarado": "***123456**"
    }
  ],
  "total": 1
}
```

##### COMPANY\_UPDATED

```json
{
  "razaoSocial": "EMPRESA EXEMPLO LTDA",
  "nomeFantasia": "EMPRESA EXEMPLO",
  "naturezaJuridica": "Sociedade Empresária Limitada",
  "porte": "DEMAIS"
}
```

Os valores acima mostram o shape esperado. A disponibilidade e o conteúdo real dependem do cadastro publicado pela fonte consultada.

##### RUN\_SUMMARY

Toda execução finalizada pelo fluxo normal escreve uma linha de resumo gratuita.

Ela pode incluir informações como:

startedAt
finishedAt
recordsWritten
unitsRequested
unitsOk
unitsFailed
capReason
qualityAlert
sourceUnavailable
warnings
units
outcomeKind
eventsByType
baselinesCreated
cnpjsNaoEncontrados
trocasDeFamiliaDeFonte
esperaPorFonteMs
fontesConsultadas
camposForaDoDiff
cost
pricingLabel

Isso ajuda a diferenciar:

execução sem mudança;

baseline criado;

CNPJ não encontrado;

unidade com falha;

troca de família de fonte;

limite atingido;

alerta de qualidade;

execução com eventos entregues.

#### CNPJ não encontrado não vira evento de encerramento

Se uma fonte responder que determinado CNPJ não consta naquele momento, o Actor registra a situação no resumo da execução.

Ele não transforma automaticamente isso em STATUS\_CHANGED ou em evento de empresa encerrada.

Essa decisão reduz o risco de um falso alerta causado por:

atraso de espelho;

inconsistência temporária;

diferença de cobertura;

indisponibilidade parcial da fonte.

Para um monitor cadastral, um falso aviso de encerramento pode ser mais prejudicial do que não emitir um evento naquele momento.

### Fontes públicas

A cadeia padrão é:

minhareceita
cnpjws

#### Minha Receita

É a fonte tentada primeiro na configuração padrão.

O Actor aplica uma pequena cortesia entre chamadas e não assume SLA da fonte.

#### CNPJ.ws

É usada como fallback quando configurada e necessária.

O cliente do Actor respeita o limite público documentado usado pela implementação:

3 consultas por minuto

Por construção, existe um intervalo de aproximadamente:

20 segundos

entre chamadas dessa fonte.

Isso significa que uma execução grande pode ficar significativamente mais lenta quando o fallback entra em uso.

#### Proteção contra falso positivo na troca de fonte

Fontes diferentes podem representar alguns campos de maneiras diferentes mesmo quando a empresa não mudou.

Por isso o Actor salva também a família da fonte usada no baseline.

O diff só é executado quando a leitura anterior e a atual pertencem à mesma família compatível.

Se a família mudar:

o Actor atualiza a linha de base;

registra a troca em RUN\_SUMMARY;

ativa aviso de qualidade;

não gera evento de mudança nessa janela.

Esse comportamento evita transformar diferença de fonte em falsa mudança cadastral.

#### Campos propositalmente fora do diff

O Actor não compara atualmente:

capitalSocial
opcaoSimples
opcaoMei
email
telefones
socios.faixaEtaria

Esses campos ficam explicitamente listados no resumo através de:

camposForaDoDiff

A exclusão é intencional para reduzir falso positivo em dados que podem divergir entre fontes, sofrer normalização diferente ou mudar sem representar uma alteração cadastral útil para este produto.

### Monitoramento diário

O uso recomendado é salvar sua lista como uma Apify Task e executá-la de forma recorrente.

Exemplo:

```json
{
  "cnpjs": [
    "47960950000121",
    "19131243000197"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "ADDRESS_CHANGED",
    "CNAE_CHANGED",
    "PARTNER_CHANGED",
    "COMPANY_UPDATED"
  ],
  "maxResults": 1000
}
```

Na primeira execução, os CNPJs novos criam baseline.

Nas próximas execuções, o Actor compara a leitura atual com o histórico persistido.

#### Agendamento na Apify

Use Apify Schedules para executar o monitor na nuvem.

Seu computador não precisa permanecer ligado.

##### Exemplo de configuração

Configure sua lista de CNPJs.

Salve o input como uma Task.

Vá em Console → Schedules → Create schedule.

Adicione a Task.

Defina a frequência desejada.

Conecte o dataset ou o run ao destino necessário.

Para este tipo de cadastro, uma cadência diária costuma ser mais adequada do que execuções muito frequentes, porque as fontes podem refletir atualizações em lote e não representam um feed em tempo real.

Exemplo de cron diário às 6h:

```text
0 6 * * *
```

#### Exemplo de pipeline de monitoramento

##### Input

```json
{
  "cnpjs": [
    "47960950000121",
    "19131243000197"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "PARTNER_CHANGED"
  ]
}
```

##### Fluxo possível

O Actor consulta os CNPJs.

Compara a leitura com o baseline persistido.

Entrega somente os eventos selecionados que realmente mudaram.

O dataset segue para seu workflow.

O workflow pode:

atualizar cadastro no CRM ou ERP;

registrar mudança em banco de dados;

enviar alerta no Slack;

disparar webhook;

solicitar revisão humana;

alimentar um dashboard;

executar uma regra interna de compliance.

O Actor detecta a alteração cadastral. A ação posterior é responsabilidade do workflow downstream.

#### API da Apify

Execute o Actor e receba os itens do dataset em uma chamada:

curl -s "https://api.apify.com/v2/acts/\<SEU\_USUARIO>~cnpj-company-change-events/run-sync-get-dataset-items?token=\<SEU\_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"cnpjs":\["47960950000121"],"eventTypes":\["STATUS\_CHANGED","PARTNER\_CHANGED"]}'

O resultado pode ser integrado a:

APIs internas;

n8n;

Make;

webhooks;

CRM;

ERP;

bancos de dados;

Google Sheets;

dashboards;

automações próprias.

### Cobrança

Este Actor usa Pay Per Event.

Existem dois nomes de cobrança usados pela implementação:

actor-start
change-event

#### actor-start

Pode representar a taxa de início da execução conforme a configuração publicada na aba Pricing.

O código só abre a cobrança de início depois que o input é validado.

Input inválido não deve ser tratado como resultado cobrável pelo fluxo do Actor.

#### change-event

É usado para os registros CHANGE\_EVENT efetivamente entregues.

O RUN\_SUMMARY é uma linha gratuita e não passa pela cobrança de resultados.

A aba Pricing da página do Actor é sempre a fonte autoritativa para os valores atuais de cada evento.

#### Controle de custo

Os principais controles de volume são:

eventTypes
maxResults
maxRuntimeMs
cnpjs

##### Menor volume de eventos

Selecione somente os tipos de mudança relevantes:

```json
{
  "eventTypes": [
    "STATUS_CHANGED"
  ]
}
```

##### Teto explícito de resultados

Use:

```json
{
  "maxResults": 100
}
```

Ao atingir o limite admitido pelo controle de gasto, o Actor encerra a entrega de novos eventos de forma controlada e preserva o que já foi coletado.

##### Frequência adequada

Executar o monitor com frequência muito maior do que a velocidade de atualização das fontes geralmente não cria mais informação útil.

Para muitos cenários cadastrais, uma execução diária é suficiente.

### Health checks e qualidade

O Actor inclui verificações para evitar que mudanças de contrato da fonte gerem silenciosamente eventos quebrados.

Entre os campos core dos eventos estão:

eventType
entityId
observedAt
source

Também existe histórico persistente de sinais de saúde e avisos de qualidade.

Quando necessário, o RUN\_SUMMARY pode indicar:

qualityAlert
warnings
sourceUnavailable

Esses campos ajudam consumidores automatizados a distinguir um resultado normal de uma execução que merece revisão.

### Limites honestos

#### Não é informação em tempo real

Os dados dependem da atualização dos espelhos públicos consultados.

observedAt indica quando o Actor observou a informação, não necessariamente o instante em que a Receita Federal registrou a mudança original.

#### Capital social não é monitorado

O capital social ficou fora do diff porque fontes públicas podem divergir no valor ou na representação do mesmo cadastro.

O Actor prefere não emitir um alerta a emitir um falso positivo.

#### Simples e MEI não são monitorados

Campos como:

opcaoSimples
opcaoMei

podem ser representados de forma diferente entre fontes, incluindo diferenças entre null e false.

Eles não entram no diff atual.

#### Email e telefone não são monitorados

A disponibilidade e a normalização desses dados variam entre as fontes usadas.

Eles ficam fora do contrato de mudança deste Actor.

#### Faixa etária de sócio não é monitorada

A faixa etária pode mudar apenas com o passar do tempo, mesmo sem qualquer alteração societária.

Por isso ela não participa da comparação do quadro societário.

#### CPF de sócio permanece mascarado

O Actor não tenta reconstruir, revelar ou desmascarar identificadores pessoais que a fonte pública entrega de forma mascarada.

#### Um CNPJ ausente na fonte não prova encerramento

Uma resposta de ausência pode refletir diferença de cobertura ou atualização da fonte.

Por isso o Actor registra o caso no resumo e evita gerar automaticamente um falso evento de encerramento.

#### A fonte de fallback pode tornar a execução lenta

Quando cnpjws é usada, o intervalo aplicado pelo Actor para respeitar o limite da fonte pode aumentar bastante o tempo total.

Uma lista de dezenas de CNPJs pode levar vários minutos quando essa fonte assume a cadeia.

O Actor não substitui análise jurídica, fiscal, de crédito ou compliance

Os eventos são sinais cadastrais estruturados.

Antes de tomar decisões relevantes, valide as informações necessárias nas fontes oficiais e aplique suas próprias políticas, controles e revisão humana quando apropriado.

### Perguntas frequentes

Por que a primeira execução não trouxe eventos?

Porque a primeira leitura de cada CNPJ cria a linha de base.

A partir da próxima leitura compatível, o Actor compara os snapshots e emite apenas as mudanças detectadas.

Quantos CNPJs posso monitorar por execução?

Até:

200

CNPJs por run.

Posso enviar CNPJ com pontuação?

Sim.

A entrada é normalizada antes da validação.

O Actor valida os dígitos verificadores?

Sim.

Ter apenas 14 dígitos não é suficiente para a entrada ser considerada válida.

O que acontece com CNPJ inválido?

Quando existe pelo menos um CNPJ válido, entradas inválidas são ignoradas e registradas como aviso.

Se nenhum CNPJ válido existir, o input é rejeitado como inválido.

Posso monitorar apenas a situação cadastral?

Sim.

Exemplo:

```json
{
  "cnpjs": [
    "47960950000121"
  ],
  "eventTypes": [
    "STATUS_CHANGED"
  ]
}
```

Posso monitorar mudança de endereço?

Sim.

Use:

ADDRESS\_CHANGED

Posso monitorar CNAE?

Sim.

Use:

CNAE\_CHANGED

Posso monitorar quadro societário?

Sim.

Use:

PARTNER\_CHANGED

Posso monitorar razão social ou nome fantasia?

Sim.

Esses dados fazem parte de:

COMPANY\_UPDATED

O Actor informa o valor anterior e o novo?

Sim.

Os eventos usam:

previous
current

para mostrar os dois lados da mudança.

Trocar de fonte pode gerar evento falso?

O Actor possui proteção específica para isso.

Se a família da fonte atual for diferente da anterior, a linha de base é substituída e nenhum evento é emitido naquela janela.

O que acontece se um CNPJ não aparecer na fonte?

O caso é registrado no RUN\_SUMMARY.

Ele não vira automaticamente um evento de encerramento.

Usa IA para comparar os cadastros?

Não.

As comparações são determinísticas e declaradas no código.

Preciso de login na Receita Federal?

Não.

Preciso fornecer uma chave de API da Receita Federal?

Não.

O Actor usa navegador?

Não.

O fluxo consulta fontes públicas diretamente.

Posso agendar todos os dias?

Sim.

O uso recorrente através de Apify Tasks + Schedules é um dos principais cenários deste Actor.

Meu computador precisa ficar ligado?

Não.

A execução ocorre na infraestrutura da Apify.

Posso integrar com n8n ou Make?

Sim.

Use o dataset, API da Apify, webhooks ou integrações disponíveis.

O que é RUN\_SUMMARY?

É a linha gratuita de resumo operacional escrita no dataset ao final da execução.

Ela ajuda a entender o que aconteceu mesmo quando nenhum CHANGE\_EVENT foi gerado.

Pelo que eu pago?

Pelos eventos configurados na página do Actor conforme o modelo Pay Per Event.

A implementação usa actor-start e change-event.

Consulte sempre a aba Pricing para os valores atuais.

O Actor tem ligação com a Receita Federal?

Não.

É um Actor comunitário não-oficial que trabalha com dados disponibilizados por fontes públicas.

### Suporte

Encontrou um erro, mudança de contrato da fonte ou campo importante para este monitor?

Use os canais de suporte disponíveis na página do Actor.

Você também pode escrever para **johnatan291303@gmail.com** — respondemos em até 24 horas.

### Parte da suíte JM Forge

Também do mesmo desenvolvedor:

Consulta CNPJ Brasil e Empresas por CNAE — consulte CNPJs e pesquise empresas brasileiras usando dados cadastrais públicos.

Google Maps Business Leads Scraper — extraia dados públicos de empresas do Google Maps para pesquisa de mercado, prospecção e CRM.

ATS Hiring Signals — Greenhouse, Lever & Ashby — monitore vagas recentes publicadas em APIs públicas de ATS para pesquisa e sinais de contratação.

# Actor input Schema

## `cnpjs` (type: `array`):

Lista de CNPJs (14 dígitos, com ou sem pontuação). Até 200 por run. Entradas inválidas são ignoradas com aviso, não derrubam a execução.

## `eventTypes` (type: `array`):

A primeira leitura de cada CNPJ cria a linha de base e não emite eventos. Da segunda em diante, você recebe só o que mudou.

## `sources` (type: `array`):

Minha Receita é a primária. CNPJ.ws entra como reserva e respeita o limite documentado de 3 consultas por minuto, o que torna o run mais longo.

## `maxResults` (type: `integer`):

Teto de eventos cobráveis. Ao atingir, o run encerra de forma controlada e entrega o que já coletou.

## `maxRuntimeMs` (type: `integer`):

Teto de duração. Útil quando o CNPJ.ws entra na cadeia, porque o limite da fonte alonga o run.

## `debug` (type: `boolean`):

Registra no log cada espera de limite de fonte e cada decisão de comparação.

## Actor input object example

```json
{
  "cnpjs": [
    "47960950000121",
    "19131243000197"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "ADDRESS_CHANGED",
    "CNAE_CHANGED",
    "PARTNER_CHANGED",
    "COMPANY_UPDATED"
  ],
  "sources": [
    "minhareceita",
    "cnpjws"
  ],
  "maxResults": 1000,
  "maxRuntimeMs": 300000,
  "debug": false
}
```

# Actor output Schema

## `resultados` (type: `string`):

Dataset com os eventos CHANGE\_EVENT detectados e o registro RUN\_SUMMARY da execução.

## `estatisticas` (type: `string`):

Registro STATS com métricas, avisos, qualidade, CNPJs processados e informações operacionais da execução.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "cnpjs": [
        "47960950000121",
        "19131243000197"
    ],
    "eventTypes": [
        "STATUS_CHANGED",
        "ADDRESS_CHANGED",
        "CNAE_CHANGED",
        "PARTNER_CHANGED",
        "COMPANY_UPDATED"
    ],
    "sources": [
        "minhareceita",
        "cnpjws"
    ],
    "maxResults": 1000,
    "maxRuntimeMs": 300000,
    "debug": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("johnatan029/cnpj-company-change-events").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "cnpjs": [
        "47960950000121",
        "19131243000197",
    ],
    "eventTypes": [
        "STATUS_CHANGED",
        "ADDRESS_CHANGED",
        "CNAE_CHANGED",
        "PARTNER_CHANGED",
        "COMPANY_UPDATED",
    ],
    "sources": [
        "minhareceita",
        "cnpjws",
    ],
    "maxResults": 1000,
    "maxRuntimeMs": 300000,
    "debug": False,
}

# Run the Actor and wait for it to finish
run = client.actor("johnatan029/cnpj-company-change-events").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cnpjs": [
    "47960950000121",
    "19131243000197"
  ],
  "eventTypes": [
    "STATUS_CHANGED",
    "ADDRESS_CHANGED",
    "CNAE_CHANGED",
    "PARTNER_CHANGED",
    "COMPANY_UPDATED"
  ],
  "sources": [
    "minhareceita",
    "cnpjws"
  ],
  "maxResults": 1000,
  "maxRuntimeMs": 300000,
  "debug": false
}' |
apify call johnatan029/cnpj-company-change-events --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,johnatan029/cnpj-company-change-events"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bh9NWCroaaH0eQSSz/builds/8waRjls5nsgewSbA2/openapi.json
