# Changelog of Brazil CNPJ Scraper: Company Search & Lookup (`enisbodlli/brazil-cnpj-company-search`) Actor

- **URL**: https://apify.com/enisbodlli/brazil-cnpj-company-search/changelog.md
- **Full Actor documentation**: https://apify.com/enisbodlli/brazil-cnpj-company-search.md

## Changelog

### 0.0 (2026-10-07)

First build. Not pushed yet.

- **Lookup by CNPJ.** A list of CNPJs, with or without punctuation, numeric or alphanumeric (the format
  issued since July 2026). Check digits are verified before any request. One row per valid CNPJ.
- **Search.** By state, city (name or IBGE code), CNAE activity code (main, or main and secondary) and
  legal form at the source; by active status, company size and opening date in the Actor.
- **Company-level rows.** The partner list is returned as `partnersCount` only. Sole traders, MEI and
  other registrations of natural persons are skipped and counted, and so are the two registrations that
  are no legal entity and carry a person as their name: consortia of rural employers (legal nature 2283)
  and notary offices (3034). A status reason or special situation that describes an owner (estate,
  death, incapacity, interdiction) is returned as `null`.
- **Charging.** One `company-record` event per row with `"found": true`. Rows for CNPJs that are not in
  the register or belong to a natural person, and search rows dropped by a filter, are not charged.
- **Sources.** `minhareceita.org` for lookups, search and the date of the register extract;
  `brasilapi.com.br` as a slow second path for lookups when the first does not answer.
- **Restarts.** A run that is migrated, aborted or resurrected continues from the dataset and its `STATE`
  record: no CNPJ is fetched, stored or charged twice. A run that is being moved to another server waits
  for the platform to restart it instead of ending itself as finished; if nothing restarts it, it ends
  as failed, not as a success with part of its results.
- **Exit code.** A lookup run that the source cut off fails when more CNPJs went without an answer
  (asked in vain or never asked) than were answered. A run that cannot read its own storage does nothing
  and fails with one sentence.
- **Codes that do not exist.** A CNAE or legal-nature code made of zeros is refused before any request.
  When a search by code alone never gets an answer, the final message says to check the codes: the
  source does not answer a search for a code that does not exist.
- **Limits.** With a maximum charge set, no lookup is started and no search page is fetched that the
  limit could not pay for. A search that keeps almost nothing ends at a scan cap (20,000 rows plus 200
  per stored company, at most 300,000).
- **Run summary** in the key-value store record `RUN_SUMMARY`.
