Brazil CNPJ Companies Scraper: Receita Federal Register Data
Pricing
from $0.70 / 1,000 companies
Brazil CNPJ Companies Scraper: Receita Federal Register Data
Company records from the Brazilian CNPJ register for a list of CNPJ numbers or a search by state, city and CNAE activity: legal name, trade name, status, legal nature, capital, address, opening date and size. Public data, optional partners and administrators (QSA), no API key.
Pricing
from $0.70 / 1,000 companies
Rating
0.0
(0)
Developer
Rowcraft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Features
Share
Get Brazilian companies from the CNPJ register of the Receita Federal, the national company register of Brazil. This Brazil CNPJ scraper has two ways in: give it a list of CNPJ numbers and it returns one row per company, or give it a state, an activity code (CNAE) and a city and it finds the companies for you. Each company comes back as one flat row: legal name, trade name, registration status, main and secondary activities, legal nature, share capital, size, opening date, the Simples Nacional option and the full registered address, as JSON, CSV or Excel.
It reads the register through free community services built on the Receita's open data, with a second service as a fallback, so there is no key, no login, no CAPTCHA and no proxy. Switch on Include partners and administrators (QSA) and each company also lists the partners and administrators the register publishes by law, in their business role only: name, role and entry date, at no extra price. It never delivers e-mail addresses, telephone numbers, ages, CPF numbers or addresses of people, and it leaves out sole traders and MEI registrations, whose name is the name of a person. You pay only for the companies delivered.

What you get
Price: $1.00 per 1,000 companies on the Free plan, $0.70 on the Business plan, paid per row delivered; the $5 monthly credit of a free Apify account covers about 5,000 companies. Details in Pricing below.
One row per company (one CNPJ is one establishment: a head office or a branch):
- Identity: CNPJ (14 characters, without mask), legal name (razão social), trade name (nome fantasia), head office or branch
- Status: registration status (ATIVA, BAIXADA, INAPTA, SUSPENSA, NULA), the date and the reason of the status
- Activity: the main activity with its CNAE code and description, and every secondary activity as code and description
- Legal nature and size: legal nature code and name (2062 limited company, 2054 closed corporation, 2038 mixed-economy company...), company size (micro, small or large), share capital in reais
- Dates and tax: start of activity, Simples Nacional option with its dates, history flags of former MEI registrations
- Address: street type, street, number, complement, district, postal code (CEP), city, IBGE city code and state (UF)
- Traceability: which source answered (
minhareceitaoropencnpj), the update of the source data (the register is republished every month) and the time the record was read - Optional, when switched on: the partners and administrators (QSA): the number of partners that can be delivered (
officersTotal) and a list with name, role in English (with the register's qualification code and Portuguese text inroleCode), entry date, the country of a partner based abroad and a flag for a legal entity
Why this actor
- Two modes in one run: a list of up to 10,000 CNPJ numbers, a search by state, activity and city, or both together. Duplicates are removed across the two.
- Search where the demand is: most buyers of Brazilian company data want "all active software companies in São Paulo", not a list they already have. Search by one or several states, CNAE codes and cities, active companies only by default, head offices only if you wish, and a start-of-activity date for new companies.
- Count before you pay: Count only reads the search without delivering anything and tells you how many companies match and what they would cost.
- A report for every number: the
COVERAGErecord says for each CNPJ you gave whether it was found, not in the register, left out as a sole trader, mistyped (wrong check digits) or failed, so a result with fewer rows than numbers is never a mystery. - Check digits first: a mistyped CNPJ is reported without a single request, and a number that does not exist is never charged.
- A fallback source: if the main service is down, slow or refuses, the lookup goes to a second public service and the row says which one answered.
- Partners in their business role, nothing private: switch on partners and each row lists the partners and administrators as the register shows them, without age range, CPF or other numbers, addresses or the legal representative. Minors and legally incapable partners are never listed. With the option off, which is the default, rows are built from a fixed list of company fields and hold no personal data.
- Partners at no extra price: they ride inside the company row, so you still pay per delivered company, with a charge cap, and no extra request is made.
- Polite and cheap to run: robots.txt is read before the first request to each host, requests are spaced 150 ms or more, four lookups run in parallel, and the run keeps within 256 MB of memory.
How to use it
- Open the Actor and fill in CNPJ numbers (the other fields are optional filters).
- Set Maximum companies to a small number for a first try (the default is a safe start).
- Optional: tick Count only and start once. You get the number of matching rows and the estimated cost, for free (only the start event is charged). Untick it to get the data.
- Click Start. The status line shows progress; the run stops cleanly at your limit or at the charge limit you set in the run options.
- Open the Dataset tab and download JSON, CSV, Excel, XML or HTML, or send the rows to Google Sheets, Slack, Make, n8n or Zapier with the Integrations tab.
- To run it on a schedule, use Schedules in Apify Console and turn on Only new rows since the last run below: every run then costs only the new rows, and a webhook URL tells you when something new came in.
Input
Quick start. This input is ready to run (it is also the example in the API tab):
{"cnpjs": ["33000167000101","00000000000191","60701190000104"],"maxItems": 50}
One real row it returns (long texts shortened here):
{"id": "33000167000101","cnpj": "33000167000101","legalName": "PETROLEO BRASILEIRO S A PETROBRAS","tradeName": "PETROBRAS - EDISE","headOffice": true,"status": "ATIVA","statusDate": "2005-11-03","statusReason": "SEM MOTIVO","mainActivityCode": "0600001","mainActivity": "Extração de petróleo e gás natural","secondaryActivities": [{"code": "1921700","description": "Fabricação de produtos do refino de petróleo"},{"code": "3520401","description": "Produção de gás; processamento de gás natural"},{"code": "3520402","description": "Distribuição de combustíveis gasosos por redes urbanas"},"… 2 more"],"legalNatureCode": "2038","legalNature": "Sociedade de Economia Mista","size": "DEMAIS","sizeCode": 5,"shareCapital": 205431960000,"openedAt": "1966-09-28","simplesOptant": null,"simplesOptedAt": null,"simplesExcludedAt": null,"meiOptant": false,"meiOptedAt": null,"meiExcludedAt": null,"streetType": "AVENIDA","street": "REPUBLICA DO CHILE","number": "65","complement": null,"district": "CENTRO","zip": "20031170","city": "RIO DE JANEIRO","cityIbgeCode": "3304557","state": "RJ","officersTotal": 8,"officers": [{"name": "ANGELICA GARCIA COBAS LAUREANO","role": "Director","roleCode": "10 - Diretor","appointedOn": "2025-07-29","countryOfResidence": null,"isCorporate": false},{"name": "CLARICE COPPETTI","role": "Director","roleCode": "10 - Diretor","appointedOn": "2023-04-17","countryOfResidence": null,"isCorporate": false},{"name": "FERNANDO SABBI MELGAREJO","role": "Director","roleCode": "10 - Diretor","appointedOn": "2024-07-17","countryOfResidence": null,"isCorporate": false}],"source": "minhareceita","sourceUpdatedAt": "2026-10","fetchedAt": "2026-10-22T11:02:44.861Z"}
| Field | What it does |
|---|---|
cnpjs | CNPJ numbers to look up, one per line, with or without the mask (33000167000101 or 33.000.167/0001-01). Up to 10,000 per run. Companies you look up are delivered with their status, active or not. |
states | Two-letter state codes (SP, RJ, MG...) for the search. Several states are searched together. |
activityCodes, activityScope | 7-digit CNAE codes (6201501 software development). By default the code must be the company's main activity; choose "main or secondary" to include companies that list it among their secondary activities (many more). |
cityCodes | 7-digit IBGE municipality codes (3550308 São Paulo, 3304557 Rio de Janeiro). |
onlyActive | On by default: skips closed, suspended and unfit companies (about four in ten records of a search). |
headOfficesOnly, openedAfter | Skip branches; keep only companies that started activity on or after a date (2025-01-01). |
legalNatureCodes | 4-digit legal nature codes (2062 limited company, 2054 and 2046 corporations). Makes searches of common activities much faster, because sole traders are then not read. Codes of sole traders and other forms named after a person are ignored and said so in the run summary. |
maxItems | Stop after this many companies (default 500, 0 = no limit). |
includeOfficers, maxOfficersPerCompany | Add the partners and administrators to each row (off by default), up to 50 per company by default and 500 at most. The list is in the answer already read: no extra request and no extra price. |
concurrency | Parallel lookups, 1 to 8 (default 4). The delay between requests still applies. |
countOnly, onlyNew, stateName, notifyUrl, notifyWhenEmpty | Count only (deliver nothing); only new rows, the webhook: see Automation below. |
requestIntervalMs | Delay between requests to the same host, 150 ms or more (default 150). |
A search needs at least one state, one activity code or one city: without one of them it would read the whole register of more than 70 million establishments, so the run stops with a clear message.
Example: look up three large companies.
{"cnpjs": ["33000167000101", "00000000000191", "60701190000104"],"maxItems": 50}
Example: two large companies with their partners and administrators.
{"cnpjs": ["33000167000101", "33592510000154"],"includeOfficers": true,"maxOfficersPerCompany": 10}
Example: active software development companies in São Paulo opened since 2024, head offices only.
{"states": ["SP"],"activityCodes": ["6201501"],"headOfficesOnly": true,"openedAfter": "2024-01-01","maxItems": 1000}
Example: restaurants in the city of Rio de Janeiro.
{"states": ["RJ"],"activityCodes": ["5611201"],"cityCodes": ["3304557"],"maxItems": 500}
Output
37 fields per row. Empty values are null, never missing, so CSV and Excel columns are stable.
| Field | Type | Example |
|---|---|---|
id | string | 33000167000101 |
cnpj | string | 33000167000101 |
legalName | string | PETROLEO BRASILEIRO S A PETROBRAS |
tradeName | string | PETROBRAS - EDISE |
headOffice | boolean | True |
status | string | ATIVA |
statusDate | string | 2005-11-03 |
statusReason | string | SEM MOTIVO |
mainActivityCode | string | 0600001 |
mainActivity | string | Extração de petróleo e gás natural |
secondaryActivities | array | [{"code": "1921700", "description": "Fabricação de produtos do refi… |
legalNatureCode | string | 2038 |
legalNature | string | Sociedade de Economia Mista |
size | string | DEMAIS |
sizeCode | number | 5 |
shareCapital | number | 205431960000 |
openedAt | string | 1966-09-28 |
simplesOptant | boolean | Opted for the Simples Nacional tax regime (null = no record) |
simplesOptedAt | string | Date of the Simples Nacional option |
simplesExcludedAt | string | Date of exclusion from the Simples Nacional |
meiOptant | boolean | False |
meiOptedAt | string | Date a former MEI registration started |
meiExcludedAt | string | Date a former MEI registration ended |
streetType | string | AVENIDA |
street | string | REPUBLICA DO CHILE |
number | string | 65 |
complement | string | Address complement |
district | string | CENTRO |
zip | string | 20031170 |
city | string | RIO DE JANEIRO |
cityIbgeCode | string | 3304557 |
state | string | RJ |
officersTotal | integer | 8 |
officers | array | Partners and administrators (name, role, roleCode, appointedOn, countryOfResidence, isCorporate; only with Include partners) |
source | string | minhareceita |
sourceUpdatedAt | string | 2026-10 |
fetchedAt | string | 2026-10-22T10:54:26.143Z |
Example rows
Two real rows from a run (long texts shortened here, complete in the dataset):
[{"id": "33000167000101","cnpj": "33000167000101","legalName": "PETROLEO BRASILEIRO S A PETROBRAS","tradeName": "PETROBRAS - EDISE","headOffice": true,"status": "ATIVA","statusDate": "2005-11-03","statusReason": "SEM MOTIVO","mainActivityCode": "0600001","mainActivity": "Extração de petróleo e gás natural","secondaryActivities": [{"code": "1921700","description": "Fabricação de produtos do refino de petróleo"},{"code": "3520401","description": "Produção de gás; processamento de gás natural"},{"code": "3520402","description": "Distribuição de combustíveis gasosos por redes urbanas"},"… 2 more"],"legalNatureCode": "2038","legalNature": "Sociedade de Economia Mista","size": "DEMAIS","sizeCode": 5,"shareCapital": 205431960000,"openedAt": "1966-09-28","simplesOptant": null,"simplesOptedAt": null,"simplesExcludedAt": null,"meiOptant": false,"meiOptedAt": null,"meiExcludedAt": null,"streetType": "AVENIDA","street": "REPUBLICA DO CHILE","number": "65","complement": null,"district": "CENTRO","zip": "20031170","city": "RIO DE JANEIRO","cityIbgeCode": "3304557","state": "RJ","officersTotal": 8,"officers": [{"name": "ANGELICA GARCIA COBAS LAUREANO","role": "Director","roleCode": "10 - Diretor","appointedOn": "2025-07-29","countryOfResidence": null,"isCorporate": false},{"name": "CLARICE COPPETTI","role": "Director","roleCode": "10 - Diretor","appointedOn": "2023-04-17","countryOfResidence": null,"isCorporate": false},{"name": "FERNANDO SABBI MELGAREJO","role": "Director","roleCode": "10 - Diretor","appointedOn": "2024-07-17","countryOfResidence": null,"isCorporate": false}],"source": "minhareceita","sourceUpdatedAt": "2026-10","fetchedAt": "2026-10-22T11:02:44.861Z"},{"id": "60701190000104","cnpj": "60701190000104","legalName": "ITAU UNIBANCO S.A.","tradeName": "ITAU UNIBANCO","headOffice": true,"status": "ATIVA","statusDate": "2005-11-03","statusReason": "SEM MOTIVO","mainActivityCode": "6421200","mainActivity": "Bancos comerciais","secondaryActivities": [],"legalNatureCode": "2054","legalNature": "Sociedade Anônima Fechada","size": "DEMAIS","sizeCode": 5,"shareCapital": 76200000000,"openedAt": "1944-08-22","simplesOptant": null,"simplesOptedAt": null,"simplesExcludedAt": null,"meiOptant": false,"meiOptedAt": null,"meiExcludedAt": null,"streetType": "PRACA","street": "ALFREDO EGYDIO DE SOUZA ARANHA","number": "100","complement": "BLOCO TORRE OLAVO SETUBAL","district": "PARQUE JABAQUARA","zip": "04344902","city": "SAO PAULO","cityIbgeCode": "3550308","state": "SP","source": "minhareceita","sourceUpdatedAt": "2026-10","fetchedAt": "2026-10-22T11:02:44.866Z"}]
Results can be downloaded as JSON, CSV, Excel, XML or HTML from the Dataset tab, or read through the Apify API.

Besides the dataset, every run writes two records to the key-value store. RUN_SUMMARY has the counts: delivered, found, not found, left out as sole traders (with the reason), mistyped numbers, pages read, rate-limit waits, which source answered, and why the run stopped. COVERAGE has one entry per CNPJ you gave and one for the search.
Pricing
Pay per result. You pay for each company delivered to your dataset, nothing else: no subscription, no minimum, no charge for rows your filters drop or for the requests behind them.
| Your Apify plan | Price per 1,000 rows | Price per row |
|---|---|---|
| Free plan | $1.00 | $0.001 |
| Starter plan | $0.95 | $0.00095 |
| Scale plan | $0.85 | $0.00085 |
| Business plan and above | $0.70 | $0.0007 |
Example: 1,000 companies cost $1.00 on the Free plan and $0.70 on the Business plan. Platform usage of the run (compute, storage) is included in that price and is not billed to you separately (pay per event: the actor covers it).
A start event of $0.00005 is charged once per run (Apify default).
Cap your spend: set Maximum total charge in the run options. The actor stops cleanly when the cap is reached and you keep everything delivered until then. The run summary (RUN_SUMMARY in the key-value store) says why a run stopped.
Check before you pay: turn on Count only to see how many rows match and what they would cost at your tier. That run delivers nothing and costs only the start event.
Not charged: a CNPJ that is not in the register, a mistyped number, a sole trader or MEI left out, a duplicate, a company already delivered in an earlier run when Only new rows is on, a count-only run, and a failed lookup.
Automation: only new rows, notifications, schedules
Only new rows since the last run. Turn on onlyNew and the actor remembers every company it delivered to you (in a key-value store named rowcraft-brazil-cnpj-companies-scraper-state in your Apify account). The next run with the same stateName skips what you already have and you pay only for new rows. The first run delivers everything that matches. Use a different stateName for each schedule or search so they keep separate memories.
Notification when the run ends. Put a webhook address in notifyUrl and the actor sends one JSON POST with the number of new rows, links to the dataset (JSON and CSV) and the run. It works out of the box with Slack and Discord incoming webhooks (the message is in text and content), with Make, n8n and Zapier catch hooks, and with your own endpoint. By default it is sent only when there is at least one new row; notifyWhenEmpty sends it every time.
Schedules. Create a schedule in Apify Console (hourly, daily, weekly or cron) with onlyNew on. A daily schedule gives you a feed of new companies for the price of the new rows only.
Integrations. Send the results to Make, n8n, Zapier, Google Sheets, Slack, Google Drive, Airtable or any webhooks from the Integrations tab of the Actor, with no code. Apify also offers native actions for Make, n8n and Zapier.
API, SDKs and AI agents. Every run is available through the Apify API and the official JavaScript and Python clients; the Actor can also be called by AI agents through the Apify MCP server. The example input in the API tab is a working call.
Count only. countOnly returns the number of matching companies and the estimated cost without delivering anything, so you can size a job before paying for it.
Use with AI agents (MCP). Add the Apify MCP server to Claude, Cursor, VS Code or any MCP client and the agent can run this Actor as a tool:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=rowcraft/brazil-cnpj-companies-scraper","headers": {"Authorization": "Bearer <YOUR_APIFY_TOKEN>"}}}}
Call it from a shell or any language. One request runs the Actor with the input below and returns the rows as JSON:
curl -X POST "https://api.apify.com/v2/acts/rowcraft~brazil-cnpj-companies-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"cnpjs": ["33000167000101", "00000000000191", "60701190000104"], "maxItems": 50}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("rowcraft/brazil-cnpj-companies-scraper").call(run_input={'cnpjs': ['33000167000101', '00000000000191', '60701190000104'], 'maxItems': 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('rowcraft/brazil-cnpj-companies-scraper').call({"cnpjs": ["33000167000101", "00000000000191", "60701190000104"], "maxItems": 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For this actor, Only new rows is useful for a standing search: schedule "software companies in São Paulo opened after 2025-01-01" every week and you receive only the companies that appeared since the last run.
Use cases
- Lead lists by activity and place: every active restaurant, clinic, accountant or software house of a city, with its legal name, address, size and opening date, ready for a CRM or a Google Sheet.
- New company monitoring: a weekly search with
openedAfterand Only new rows gives the companies opened in your region and industry, for the price of the new rows. - Enriching a list of CNPJs: you have numbers from invoices, tenders or a customer list; get the current legal name, status, activity, size and address of each, and the numbers that are mistyped or closed are flagged.
- Supplier and counterparty checks: is this CNPJ active, since when, with what main activity and which capital? One lookup answers in a fraction of a second.
- Who runs this company: switch on partners to see the partners and administrators of a CNPJ with their role and entry date, for due diligence, onboarding checks and B2B sales research, with the legal basis explained under Privacy.
- Market sizing: how many active companies of an activity, in a state or a city, with a free count before you buy the rows.
- Prospecting by size and legal nature: limited companies with large size flags, head offices only, in the states you sell to.
Ready-made examples, each with the input filled in (open one and press Start, or save it as your own task):
What this actor does not do
- Search by company name. The free sources only filter by state, city, activity and legal nature, and the sites that search by name sit behind CAPTCHAs, which this actor does not solve. Give CNPJ numbers, or search by activity and place.
- Deliver anything private about a partner: age range, CPF or other identity numbers, the legal representative, addresses, telephone numbers or e-mail addresses. Partners who are minors or legally incapable are left out and not counted.
- Search by person or list the other companies of a person. The source can search by the CPF of a partner; this actor does not offer it and never sends it.
- Deliver e-mail addresses or telephone numbers. Contact data is left out on purpose; an e-mail address typed into a trade name is removed as well.
- Deliver sole traders, MEI, EIRELI and the other forms named after a person. Their name is the name of a person (and for MEI sometimes carries the CPF). They are skipped and counted, never delivered, never charged.
- Give real-time data. The register is republished once a month by the Receita Federal and the services here follow it; the
sourceUpdatedAtfield tells which month you are reading. - Deliver financial statements, tax regime history, establishments of a company in one row, or debts. One row is one CNPJ with the registration data.
- Use proxies or solve CAPTCHAs. The sources are open and need neither.
Limits and fair use
- The search is rationed by the source. The paged search of the main service is marked "in testing" by its author and is limited per server, not per user: heavy searches (a big state with a very common activity) can be answered with HTTP 429 and "try again in 1 minute". The actor waits the time the service asks for, up to three times per page, then stops and says so:
searchIncomplete: truein the run summary. What was delivered before stays; run again later or narrow the search (a state plus an activity code is the lightest). - Common activities are slow unless you name the legal nature. Most records of a mass-market activity are sole traders and MEI registrations, which are read and left out. In a test on 22 October 2026, a state-wide search for clothing retail in São Paulo without legal nature codes delivered about 85 companies per minute (eight of ten records skipped, a one-minute wait after most pages); the same search with
legalNatureCodesset to2062delivered 3,000 companies in 22 seconds. The run log says so when more than six in ten records are skipped. - A page holds up to 1,024 records and the actor reads page by page. In a test on 22 October 2026, one page of software developers in São Paulo held 130 sole traders or MEI and 418 closed companies out of 1,024 records; the rest were delivered. Narrow searches therefore read many pages for few rows, which costs time, not money.
- Lookups: about 0.15 to 0.25 seconds each, four in parallel, at least 150 ms between requests to the same host. A list of 10,000 numbers takes roughly half an hour.
- Count only reads at most 100 pages (about 100,000 records) and says when the count stopped early.
- Up to 10,000 CNPJs per run. Split longer lists.
- The order of a search is the order of the source, not by size or date, and the same search can be repeated and resumed with Only new rows.
- Simples and MEI dates are history fields of the register and can look odd for large companies; they are shown as published.
- Partners come with the company. They are in the same answer as the company record, so partners cost no extra request. They follow the monthly update of the register, are sorted by name (so that
maxOfficersPerCompanycuts the same partners whichever service answered) andofficersTotalcounts all partners that can be delivered; minors and legally incapable partners are not delivered and not counted (officersLeftOutProtectedin the run summary). A company with no partners on record hasofficersTotal0. - Partner roles are in English for the usual qualifications (director, president, administrator, partner, partner-administrator, board member, and the same for partners abroad); any other qualification keeps its Portuguese text, and
roleCodealways has the register's code and Portuguese text. If the fallback service answers without a partner list, the row has no officers fields and the run summary counts those rows (officersUnavailable). - Partners and Only new rows. A company already delivered in an earlier run is not delivered again, so switching partners on later does not add them to companies you already have: use a new state name for the run, or fetch those CNPJs once with partners on.
- Data is as old as the last monthly update of the register. A company opened this week is not there yet.
- The main service has no service level. It is run by one volunteer; when it is down, lookups go to the second service (the search has no second service).
- The run stops 90 seconds before its timeout with the summary saved; for very large searches raise the timeout and use Only new rows.
Data source
The records come from the Cadastro Nacional da Pessoa Jurídica (CNPJ) of the Receita Federal do Brasil, published as open data in the national open-data portal under the Creative Commons Attribution (CC BY) licence: dados.gov.br, with the files on the Receita Federal data site. The actor does not read those files (7.8 GB a month); it reads two free public services that republish them: Minha Receita (lookup by CNPJ and the paged search; open-source, no key and no registration) and, as a fallback for lookups only, OpenCNPJ (free, commercial use allowed, no key). The documentation of the first one describes the search parameters used here: state, city, activity (main or any), legal nature, page size and cursor. The partner list is part of the same open data; the services republish it with the CPF masked by the Receita, and this actor does not copy that field.
Attribution: contains data of the Receita Federal do Brasil (CNPJ open data, CC BY), served through Minha Receita or OpenCNPJ; the row says which one, and the month of the data.
This actor is independent and not affiliated with Receita Federal, minhareceita.org or OpenCNPJ, and none of them provides, endorses or guarantees it. The data is shown as published; names belong to their owners.
Privacy: company data, partners only when you switch them on
With Include partners and administrators off, which is the default, a row holds no personal data about partners or owners. For the CNPJ register that needs care, because the register is full of people. With it on:
- Only the partner list of each company is read, the same list the Receita publishes by law with the company record. Each partner keeps name, role, entry date and, for a partner who lives or is based abroad, the country. The age range, the masked CPF (or the CNPJ root of a company), the legal representative with his or her CPF, and every other field of the list are dropped before the row is saved, and they are not in the logs or the run summary.
- Minors and legally incapable partners are never delivered or counted (qualification "Menor" or "Incapaz", or an age range up to 20 years); the run summary says how many were left out (
officersLeftOutProtected). - The actor keeps no copy of the rows: they go only to your own dataset. If you are a partner shown in an example on this page and want it removed, open an issue on the Issues tab and it is removed within 14 days; the register itself is changed only through the Receita Federal.
- The e-mail address, the tax regime history and the person fields of the source answer are not on the fixed list of company fields, so they cannot reach the dataset, the logs or the run summary.
- Sole traders and MEI are left out. For these registrations the company name is the name of a person (for MEI, sometimes with the CPF at the end). The legal natures 2135 (sole trader), 2305 and 2313 (EIRELI), 4014 (individual real-estate company), 4090 (candidate for political office) and 4120 (rural producer, individual), every MEI registration, and any answer that does not state a legal nature, are skipped before delivery, counted as
excludedIndividualin the run summary, and never charged. A name that ends in a CPF-like number is skipped as well. - No e-mail addresses and no telephone numbers. An e-mail address or a telephone typed by an owner into a trade name or an address complement is redacted.
- The search never filters by person. The source can search by the CPF of a partner; this actor does not offer it and never sends it, so nobody is searched by person and no list of the other companies of a person is made.
What remains is the registered company name, which can contain a family name ("Silva Comércio Ltda"). That is the name of a legal entity as registered, but it can read like a person; judge your use of it under the law that applies to you.
Partner names are personal data under the Brazilian data protection law (LGPD) and, for people in the EU, under the GDPR. Use them for business purposes such as due diligence, compliance and company research, with a legal basis of your own, and do not combine them with other sources to profile individuals. You are responsible for using the data in line with the law that applies to you; this is not legal advice.
Other Rowcraft actors
Related Rowcraft actors. All of them read official or public sources, deliver flat rows without private contact details and support only-new runs and notifications; the full list is on the Rowcraft profile:
- Company Register Lookup Europe: Name, ID, Domain or LEI — Look up a European company by name, domain or registry number and get one unified profile from the official registers of France, Norway, Poland, the UK and the LEI index.
- SIRENE France Company Scraper: SIREN, NAF, Revenue, Status — French companies from the official Recherche d'entreprises API (INSEE SIRENE + INPI): SIREN and SIRET, legal form, NAF activity, head-office address, employee band, revenue, net income, labels, VAT number and optional directors (no birth dates).
- KRS Poland Companies Scraper: Register Data, PKD, Status — Polish companies from the official KRS register API of the Ministry of Justice: name, KRS, NIP and REGON numbers, legal form, status, address, PKD activity codes, share capital, branches and registration dates.
- Norway Company Register Scraper: Brønnøysund Business Data — Norwegian companies from the Central Coordinating Register for Legal Entities (Brønnøysund, NLOD open data): organisation number, legal form, industry, employees, share capital, addresses, website, VAT and bankruptcy status; optional directors and board (name and role only).
- UK Companies House Scraper: Company Search & Profiles API — UK companies from the official Companies House API with your free key: search by name, status, type, SIC code, date or location, or look up company numbers.
- Email List Hygiene API: Syntax, MX, Disposable Check — Clean an e-mail list for $0.50 per 1,000 addresses without contacting any mail server: syntax, MX records, null MX, disposable domains, typos and repeats checked from DNS.
FAQ
Is it legal to use this data? The CNPJ register is public by law in Brazil (the Access to Information Law) and the Receita publishes it as open data under the CC BY licence, which allows copying and commercial use with attribution. That includes the partner list, which the Receita publishes with the CPF masked. Partner names are still personal data under the Brazilian LGPD and, for people in the EU, the GDPR: you need a legal basis of your own, such as a legitimate interest in due diligence, and the purpose must fit it. How you use the companies and partners you receive (marketing, contact, profiling) is your responsibility under the law that applies to you, including consent and anti-spam rules; this is not legal advice.
Can I get the partners and administrators? Yes: switch on includeOfficers. Each row then lists the partners and administrators with name, role, entry date and the country of a partner based abroad, plus officersTotal. They are included in the company price and cost no extra request. Up to 50 are listed per company by default (maxOfficersPerCompany, 500 at most). Partners who are minors or legally incapable are left out.
Why are there no ages, CPF numbers, e-mails or telephone numbers, and why no sole traders or MEI? Because they say more about the person than about the company. The age range, CPF numbers, the legal representative and the contact data of a person are dropped even when partners are switched on, and for sole traders and MEI the company name is the owner's name, so they are skipped. The rows contain the CNPJ, which you can use with sources you are entitled to.
Does it collect personal data? Only when includeOfficers is switched on, and then only the partners' business-role fields listed above. Without it a row holds company data only. E-mail addresses and telephone numbers are never delivered. See the Privacy section.
I am a partner shown in an example. How do I have my name removed? Open an issue on the Issues tab of this Actor and your name is removed from the example within 14 days. The register itself is changed only through the Receita Federal.
Why is my result empty or smaller than the list I gave? Open COVERAGE and RUN_SUMMARY. Each CNPJ is found, notFound (not in the register), excludedIndividual (a sole trader or MEI), invalidInput (wrong length or check digits, no request made), error (both sources failed) or notChecked (the run stopped at your maximum or charge limit). With a search, the summary shows the records read, how many were closed (onlyActive), how many sole traders were left out, and whether the search was complete.
Why do I get HTTP 429, "incomplete search" or a long wait? The paged search of the main service is rationed per server and answers "busca muito custosa" with a wait of one minute when it is busy. The actor waits as asked, three times per page; if the service keeps refusing it stops with searchIncomplete: true and charges only the rows already delivered. Run again later, or narrow the search to a state and an activity code, and add legal nature codes such as 2062 so that sole traders are not read at all. Lookups by CNPJ have no such limit.
Can I search by company name? No. Free sources do not filter by name, and the sites that do are protected by CAPTCHAs. If you have a name, find its CNPJ first and look it up here; to find many companies, search by activity and place.
How do I find the activity code (CNAE) of a business? CNAE codes have seven digits and are listed by the national statistics institute (IBGE). 6201501 is custom software development, 5611201 restaurants, 4120400 building construction, 8630504 dental clinics, 6920601 accounting. Look at the mainActivityCode and secondaryActivities of a company you know and reuse its code.
What is the difference between "main activity" and "main or secondary"? Each company has one main CNAE and often many secondary ones. Searching the main activity finds companies whose business is that activity. Searching "main or secondary" also finds companies that merely list it, which can be many times more rows and less relevant ones.
Why are there rows with status BAIXADA or INAPTA? onlyActive is on by default for searches. If you turn it off, closed (BAIXADA), unfit (INAPTA) and suspended companies are delivered with their status and date. Companies you look up by CNPJ are always delivered with their status, because you asked for that number.
What does a CNPJ with letters mean? From July 2026 new CNPJs can contain letters. The actor accepts 14 letters and digits, but it checks the check digits only for numbers made of digits; a CNPJ with letters is validated by length only, and COVERAGE says so (validationMode: length-only).
How current is the data? It follows the monthly publication of the Receita Federal. The sourceUpdatedAt field shows the month (or the timestamp when the fallback answered).
Why does cityIbgeCode sometimes come empty? The fallback source gives the city name and its SIAFI code but not the IBGE code. Rows from the main source always have it.
How many companies can I get in one run? Without a limit, as many as the search matches, but a very broad search (a whole large state) is long and rationed by the source; split it by activity code or city and use Only new rows.
How do I get the results into Slack, Google Sheets, Make, n8n or Zapier? Use the Integrations tab of the Actor for the data, and the notifyUrl field for a message when a run ends (Slack and Discord webhooks work directly; catch hooks of Make, n8n and Zapier too).
Can I call it from code or from an AI agent? Yes: through the Apify API, the JavaScript and Python clients, and the Apify MCP server. The API tab shows a working example with the input of this Actor.
The run finished with 0 rows. Did I pay? No: with no rows delivered nothing is charged apart from the start event. Check the run summary (RUN_SUMMARY) for warnings, widen the filters, or run with Only new rows off if everything matching was already delivered to you.
Support and reviews
Problems, missing fields, questions: open an issue on the Issues tab of this Actor. We answer within one working day and fix confirmed bugs in the next release; the changelog lists every change.
If this Actor saved you time, a short review on its page helps other users find it and helps us keep improving it.