Brazil CNPJ Scraper & Bulk Lookup - Receita Federal Data avatar

Brazil CNPJ Scraper & Bulk Lookup - Receita Federal Data

Pricing

from $5.84 / 1,000 company returneds

Go to Apify Store
Brazil CNPJ Scraper & Bulk Lookup - Receita Federal Data

Brazil CNPJ Scraper & Bulk Lookup - Receita Federal Data

Bulk CNPJ lookup for Brazilian companies: legal name, status, CNAE, capital, address, phones, Simples/MEI and shareholders from Receita Federal open data. Check digits are verified first, so a typo is never reported as "company not found".

Pricing

from $5.84 / 1,000 company returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Brazil CNPJ Scraper & Bulk Lookup

Look up Brazilian companies by CNPJ in bulk and get one row per company: legal name (razão social), trade name (nome fantasia), registration status (situação cadastral), opening date, main and secondary CNAE activities, legal nature (natureza jurídica), company size (porte), share capital (capital social), full address, phone numbers, Simples Nacional and MEI status, the tax regime by year, and the shareholder and officer structure (quadro societário, QSA). The data is the Receita Federal open CNPJ data, read through the public Minha Receita API. No API key, no proxy, no scraping of the Receita Federal website.

{
"cnpjs": ["33.000.167/0001-01", "00.000.000/0001-91", "33592510000154"]
}

Paste CNPJs with or without separators, one per line or separated by commas. Alphanumeric CNPJs, issued since July 2026, are accepted.

What this does that a plain lookup does not

Everything below was measured against the live source on 2026-09-11, not read from documentation. The sample counts come from 450 real records the source returned that day; they are kept in this Actor's test fixtures and recounted by its tests.

1. A typo is never reported as "company not found"

The source answers a malformed number or wrong check digits with HTTP 400 CNPJ ... inválido, and a valid number that is not in the register with HTTP 404 CNPJ ... não encontrado. Many tools collapse both into "not found", so a mistyped digit in your spreadsheet turns into "this supplier does not exist".

Here the check digits are verified before anything is sent:

What you giveWhat you getCharged
33.000.167/0001-02 (last digit wrong)bad-input: "its check digits do not match (they should be 01, not 02)" - not sent to the sourceNo
191 (a spreadsheet dropped the zeros)bad-input, suggesting 00.000.000/0001-91No
98.765.432/0001-98 (valid, not registered)not-found, naming the data release it was checked againstNo
A valid number the source still refusesrejected-by-source, with the source's own messageNo
The source does not answer (no response, 429, 5xx)Retried; if it still fails, failed with every status seenNo
The same CNPJ twice, formatted differentlyLooked up once, charged once; the second gets duplicate-inputNo

2. Alphanumeric CNPJs (July 2026 onwards)

New CNPJs can contain letters in the first 12 characters, and their check digits are computed from each character's ASCII code minus 48. A validator that only knows digits calls every new number "invalid". The Receita Federal example 12.ABC.345/01DE-35 is accepted here, and the source confirmed the same rule: it returns 404 (well-formed, not registered) for that number and 400 once the last digit is changed.

3. Personal data is left out (LGPD)

  • Shareholders who are natural persons are never named. Their name, masked CPF, age band and country are not in the output. For each shareholder you get its type (person, company or foreign-person), its role (for example Sócio-Administrador) and the date it joined. Company shareholders, including foreign parents such as GOOGLE INTERNATIONAL LLC, are named with their 8-digit CNPJ root and country.
  • Legal representatives are never named. The register lists the person who represents each shareholder; in the sample that included the mother of a shareholder who is a minor. None of these fields are returned.
  • Individual entrepreneurs (Empresário Individual, including MEI) are people, and their rows are delivered and charged with the personal fields left empty. Their legal name is their own name. In an unfiltered sample of 200 registrations from Rio de Janeiro, 115 of 200 were registered to an individual person (60 of them MEI), and 55 of those had the owner's full, unmasked CPF in the legal name (for example "NAME SURNAME 12345678901"). For every registration whose legal nature is an individual person (Empresário Individual including MEI, or the 4xxx codes such as election candidates), the row still comes back with status = ok and is charged like any other company row, but the legal name, phone numbers, street, number, complement and postal code are null and personalDataWithheld is true. The trade name is returned only when it shares no word with the owner's name. On those rows these columns keep their real values: registration status and isActive, main and secondary CNAE activities, opening date, city, state and neighborhood, legal nature and company size, Simples Nacional status and dates, and whether it is an MEI (mei, meiOptedOn, meiExcludedOn). If what you need is the owner's name or phone number, this Actor does not provide it for these registrations.
  • Any 11-digit CPF-shaped number is also removed from company names.
  • A company's registered name is returned as it is registered, even when it is built from a partner's name (for example "NAME SURNAME LTDA"): that happened in 9 of 450 sampled records. It is the company's legal name, not a list of its people, and the partner is still not named in the shareholder list.

4. Values the raw data gets wrong

  • CNAE codes lose their leading zero. The source stores them as numbers, so 0600-0/01 (oil and gas extraction) arrives as 600001; 4 of 450 sampled records were affected. Codes are returned as 7-digit strings plus the formatted 0600-0/01.
  • Share capital of 0 means "not declared". 57 of 450 sampled records hold 0, including 37 limited companies, which by law have capital. 0 is returned as null, not as a company worth nothing.
  • Phones. 284 of 450 sampled records have a usable first phone number. Values such as 00 are dropped. The +55 form is added only for 10- or 11-digit numbers.
  • Email is not available. The source publishes no email address: 0 of 450 sampled records had one. There is no email column rather than an always-empty one.

5. The source is a free public service, so it is used gently

Minha Receita is a volunteer-run public API with no service-level guarantee. Lookups are made one at a time, never in parallel, with a 0.3-second pause between them. HTTP 429 and 5xx answers are retried after 2, 5, 10 and 20 seconds, or after the time the source asks for. In a test of 60 back-to-back lookups every answer was HTTP 200 in about 0.27 seconds each; no rate limit was hit. In production a lookup takes about 0.6 seconds including the pause, so one run looks up at most 3,000 CNPJs (about half an hour), which keeps it inside Apify's default one-hour run limit. Anything beyond 3,000 is not looked up and is listed in an uncharged row saying how many.

What you get

Company: cnpj, cnpjFormatted, cnpjRoot, establishmentType (headquarters or branch), legalName, tradeName, personalDataWithheld, legalNatureCode, legalNature, companySize, companySizeCode, shareCapitalBrl, openedOn.

Status: registrationStatus (ATIVA, BAIXADA, INAPTA, SUSPENSA, NULA), registrationStatusCode, isActive, registrationStatusSince, registrationStatusReason, specialSituation, specialSituationSince.

Activities: mainActivityCode, mainActivityCodeFormatted, mainActivity, secondaryActivities (code, formatted code, description), secondaryActivityCount.

Tax: simplesNacional, simplesOptedOn, simplesExcludedOn, mei, meiOptedOn, meiExcludedOn, latestTaxRegime (for example LUCRO REAL, LUCRO PRESUMIDO), latestTaxRegimeYear, taxRegimeHistory.

Address and contact: streetType, street, number, complement, neighborhood, postalCode, city, cityIbgeCode, state, cityAbroad, countryAbroad, phone1, phone1International, phone2, phone2International, fax.

Shareholders: shareholderCount, shareholderNaturalPersons, shareholderCompanies, shareholderForeignNationals, shareholders.

Every row also has status, note, input (what you typed), sourceDataMonth (the Receita Federal release the source holds, for example 2026-08), sourceUrl and checkedAt.

Only rows with status = ok are charged. Rows that explain an invalid number, a number not in the register, a refusal, a failed lookup, a repeated input or an input that was not looked up are free.

Input

FieldWhat it does
cnpjsCNPJ numbers, with or without . / -. Several per line are split on commas, semicolons and line breaks. Up to 3,000 per run. If left empty, Petrobras, Banco do Brasil and Vale are looked up, and the log says so.
maxRetriesAttempts per CNPJ in total when the source does not answer (1 to 5, default 4).

cnpjs carries no default value, so nothing is ever added to your list that you did not type.

Limits worth knowing

  • The data is as current as the Receita Federal release the source has loaded (sourceDataMonth). A company registered after that release comes back as not-found, and the note says so.
  • Values are returned as the source holds them. Share capital matched a second public CNPJ API for Vale, Banco do Brasil and Itaú Unibanco; for Petrobras the two differed by R$ 490.52 (205,431,960,000 here against 205,431,960,490.52 there).
  • The shareholder list is the one the source holds for the current release. Another API can list more names for the same company (for Banco do Brasil 41 here against 88 there), for example by keeping people who have left.

Source and licence

Receita Federal do Brasil publishes the CNPJ register as open data under the Brazilian Access to Information Law (Lei de Acesso à Informação). Minha Receita (minhareceita.org, open-source code on Codeberg) consolidates those files and serves one company per request. This Actor makes plain HTTPS requests to that API. It does not use the Receita Federal website, its CAPTCHA-protected pages or the bulk download files.

Support

Found a CNPJ that comes back wrong? Open an issue in the Issues tab with the number and what you expected.