European Company Registry Search: 8 Registers
Pricing
from $3.00 / 1,000 company records
European Company Registry Search: 8 Registers
Company records from eight official European registers (Sirene, Brreg, PRH, ARES, Zefix, Estonia's e-Business Register, RPO and KRS) in one schema, by name or registration number. Company data only: no officers, owners or sole traders. No proxy, no API key. Pay per company found; misses are free.
Pricing
from $3.00 / 1,000 company records
Rating
0.0
(0)
Developer
Enis Bodlli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
This European company registry search looks up companies by name or registration number in eight official registers and returns every answer in one schema: France (Sirene), Norway (Brreg, Enhetsregisteret), Finland (PRH, YTJ), Czechia (ARES), Switzerland (Zefix), Estonia (e-Business Register), Slovakia (RPO) and Poland (KRS). It is built for teams that verify or clean European company lists: KYB and onboarding checks, CRM and supplier-master clean-up, VAT and invoicing data, market research. It returns company data only, with no proxy and no API key, and you pay for each company found. To try it, keep the sample input and press Start: two names are looked up in France and Norway in a few seconds.
- One schema, eight registers, queried live. Every row names its
registryand links the official entry inregistryUrl, so each value can be checked at the source. - Company data only. The output has no field for an officer, director, owner or any other person, and sole traders are left out. A row holds what the register publishes about the company itself.
- A miss costs nothing. A name or number that a register does not know gives a free row with
"found": falseand the reason. One price per company found, no second fee for details.
A row, shortened (the full shape is under Output):
{"country": "NO","registry": "Enhetsregisteret (Brønnøysundregistrene)","registrationNumber": "923609016","name": "EQUINOR ASA","legalForm": { "code": "ASA", "text": "Allmennaksjeselskap" },"status": "active","registeredOn": "1972-09-18","address": { "street": "Forusbeen 50", "postalCode": "4035", "city": "STAVANGER", "country": "NO" },"vatNumber": "NO923609016MVA","registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016","query": "Equinor","found": true}
How to use it
- Choose the countries whose registers should be searched by name. Leave the field empty for all eight.
- Enter company names, registration numbers, or both, one per line.
- A name is searched in every selected register (all but Poland, see Limits).
- A number is looked up in the register it belongs to. Put the country in front to say which one,
as in
CZ:00177041orPL:28860; without a prefix it is looked up in every selected register whose number rules it fits. Shape and check digit are verified before any request is sent, so a mistyped number costs nothing and is named in the run summary.
- Set Maximum results per name (1 for the best match only) and, if you want a hard stop, Maximum companies per run or a maximum charge in the run options.
- Start the run. Rows appear in the dataset while it runs; the
RUN_SUMMARYrecord in the key-value store says which registers answered and how every lookup ended.
Run it from Apify Console, on a schedule, through the Apify API, or as a tool for an AI agent through the Apify MCP server. To export a dataset, use the JSON, CSV or Excel buttons, or the dataset API.
To resolve a list to exactly one company each, use registration numbers. A name search returns what the
register itself considers a match, and registers match broadly: the French register, for example, also
matches words of the address, so Doctolib Levallois narrows a search to that town.
Pricing
Pay per event. The only event of this Actor is company-record: one company that was found and stored.
| Apify plan | Price per 1,000 companies | Per company |
|---|---|---|
| Free, Bronze | $4.00 | $0.004 |
| Silver | $3.50 | $0.0035 |
| Gold | $3.00 | $0.003 |
Worked example: you look up 1,000 companies and 940 are found. You pay for 940: 940 x $0.004 = $3.76
on Free and Bronze, $3.29 on Silver, $2.82 on Gold. The 60 rows with "found": false are free.
Not charged: lookups that find nothing, sole traders that are left out, companies filtered by "Active companies only", a company that a second lookup of the same run finds again (it is stored once), lookups that fail, and the LEI option. Plus $0.00005 per run start, Apify's default. Platform usage is included, so there is nothing else to pay.
You can set a maximum charge per run. The Actor then starts a lookup only while that limit has room for a company, stops when the limit is reached, and reports how many lookups it did not do.
If a run fails or is stopped, you pay only for the companies already stored in its dataset. If Apify moves or restarts a run, it continues from its saved progress: at most the lookup each register had in hand is asked again, and no company is stored or charged twice within a run.
Input
| Field | What it does |
|---|---|
countries | Registers to search by name: FR, NO, FI, CZ, CH, EE, SK, PL. Empty means all eight. Numbers without a country prefix are also looked up only in these. |
queries | Company names, 2 to 200 characters each (France needs at least 3), up to 500 per run. |
registrationNumbers | SIREN or SIRET, organisasjonsnummer, Y-tunnus, Czech or Slovak IČO, Swiss UID, Estonian registrikood, Polish KRS number. Up to 1,000 per run. A SIRET is reduced to the SIREN of its company. |
activeOnly | Only companies that are on the register and not in liquidation, bankruptcy or struck off. Applied before anything is charged. Default false. |
maxResultsPerQuery | Companies returned for one name from one register, 1 to 100. Default 5. A number always returns at most one company. |
maxResults | Stop after this many companies were stored. Empty means no cap. Free rows do not count. |
includeLei | Add each company's Legal Entity Identifier from GLEIF's public LEI data. Free; slows the run to about one company a second. Default false. |
{"countries": ["FR", "NO", "CH"],"queries": ["Doctolib", "Equinor"],"registrationNumbers": ["794598813", "NO:923609016", "CHE-105.909.036", "PL:0000028860"],"activeOnly": true,"maxResultsPerQuery": 2,"maxResults": 1000,"includeLei": false}
Output
One row per company found, plus one free row per lookup that returned no company. Every field is
always present; null means the register did not say. A company is identified by country together
with registrationNumber, and is stored once per run however many lookups find it. Rows arrive in the
order the registers answer, not in the order of your list: use query to match them to it.
[{"country": "FR","registry": "Sirene (INSEE), via API Recherche d'entreprises","registrationNumber": "794598813","registrationNumberType": "SIREN","name": "DOCTOLIB","legalForm": { "code": "5710", "text": "Société par actions simplifiée" },"status": "active","statusRaw": "A","registeredOn": "2013-07-15","dissolvedOn": null,"address": {"street": "54 QUAI CHARLES PASQUA","postalCode": "92300","city": "LEVALLOIS-PERRET","region": "Île-de-France","country": "FR","latitude": 48.900771302,"longitude": 2.2849148026},"activity": { "system": "NAF", "code": "62.01Z", "text": null },"purpose": null,"employeesRange": "1000-1999","establishmentsCount": 9,"financials": { "year": 2024, "revenue": 311448000, "netIncome": -127499000, "currency": "EUR" },"vatNumber": "FR14794598813","capital": { "amount": null, "currency": null },"website": null,"lei": null,"registryUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/794598813","query": "Doctolib","scrapedAt": "2026-10-07T22:09:16.683Z","found": true,"notFoundReason": null},{"country": "NO","registry": "Enhetsregisteret (Brønnøysundregistrene)","registrationNumber": "923609016","registrationNumberType": "organisasjonsnummer","name": "EQUINOR ASA","legalForm": { "code": "ASA", "text": "Allmennaksjeselskap" },"status": "active","statusRaw": "registrert","registeredOn": "1972-09-18","dissolvedOn": null,"address": {"street": "Forusbeen 50","postalCode": "4035","city": "STAVANGER","region": null,"country": "NO","latitude": null,"longitude": null},"activity": { "system": "SN", "code": "06.100", "text": "Utvinning av råolje" },"purpose": "Å utvikle, produsere og markedsføre ulike former for energi, avledede produkter og tjenester, samt annen virksomhet. Virksomheten kan også drives gjennom deltakelse i eller i samarbeid med andre selskaper.","employeesRange": "21272","establishmentsCount": null,"financials": { "year": null, "revenue": null, "netIncome": null, "currency": null },"vatNumber": "NO923609016MVA","capital": { "amount": 5976872600, "currency": "NOK" },"website": "https://www.equinor.com","lei": null,"registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016","query": "Equinor","scrapedAt": "2026-10-07T22:09:17.042Z","found": true,"notFoundReason": null},{"country": "NO","registry": "Enhetsregisteret (Brønnøysundregistrene)","registrationNumber": null,"registrationNumberType": null,"name": null,"legalForm": { "code": null, "text": null },"status": null,"statusRaw": null,"registeredOn": null,"dissolvedOn": null,"address": { "street": null, "postalCode": null, "city": null, "region": null, "country": null, "latitude": null, "longitude": null },"activity": { "system": null, "code": null, "text": null },"purpose": null,"employeesRange": null,"establishmentsCount": null,"financials": { "year": null, "revenue": null, "netIncome": null, "currency": null },"vatNumber": null,"capital": { "amount": null, "currency": null },"website": null,"lei": null,"registryUrl": null,"query": "Doctolib","scrapedAt": "2026-10-07T22:09:16.749Z","found": false,"notFoundReason": "no_match"}]
statusis one ofactive,liquidation(winding up or bankrupt, still on the register),dissolved(struck off or ceased) andunknown.statusRawis the register's own word or code.registeredOnanddissolvedOnare days (YYYY-MM-DD) as the register gives them.scrapedAtis ISO 8601 in UTC.notFoundReasonon a free row isno_match,sole_trader_withheld(the only matches were a natural person's business),inactive_filtered(the only matches were not active and "Active companies only" was on) orremoved_from_register(Poland: the number exists and the company was struck off).
Which register fills which field
A null in a row usually means that this register does not publish the field in the endpoint used. The
table is generated from the code of each register's module.
| Field | FR | NO | FI | CZ | CH | EE | SK | PL |
|---|---|---|---|---|---|---|---|---|
| Search by name | yes | yes | yes (best-fitting names of each 100 listed first) | yes | yes | yes (first 10 matches) | yes (ranked by this Actor) | - (KRS number only) |
legalForm | yes (INSEE code; text for its category) | yes | yes | yes | yes | partly (code; text for the common forms) | yes | partly (text, no code) |
status, statusRaw | yes | yes | yes | yes | yes | yes | partly (from the termination date and the name; no status word) | partly (from the removal date and the liquidation and bankruptcy sections) |
registeredOn | yes | yes | yes | yes | - | - | yes | yes |
dissolvedOn | yes | yes | yes | yes | yes | - | yes | yes |
address (street, postalCode, city, country) | yes | yes | yes | yes | yes | yes | yes | yes |
address.region | yes | - | - | yes | yes (canton code) | yes (county) | - | yes (voivodeship) |
address.latitude, address.longitude | yes | - | - | - | - | - | - | - |
activity | partly (NAF code, no text) | yes | yes | partly (first CZ-NACE code listed, no text) | - | - | yes | yes |
purpose | - | yes | - | - | yes | - | - | partly (associations and foundations only) |
employeesRange | yes (bracket) | yes (exact count) | - | - | - | - | - | - |
establishmentsCount | yes | - | - | - | - | - | - | - |
financials | partly (latest published year, where accounts are public) | - | - | - | - | - | - | - |
vatNumber | yes (as the register lists it) | yes (when in the VAT register) | yes (when liable for VAT on business activity) | yes (the tax number (DIČ), where registered) | - | - | - | yes (PL + tax number (NIP)) |
capital | - | yes (where registered) | - | - | - | - | yes (where registered) | yes (where registered) |
website | - | yes (where registered) | yes (where registered) | - | - | - | - | yes (where registered) |
The run summary
The RUN_SUMMARY record of the run's key-value store holds, per register, whether it answered, how many
lookups were found, not found, failed or not attempted, and why it was left alone if it refused or kept
failing. Per lookup it holds the outcome, the number of matches the register itself reports
(totalMatches, where it reports a total: you see how many there are before asking for more), whether
the list was cut (capped), and the reason for a failure. It also counts soleTradersSkipped, names
the input entries that could not be used, and says whether a limit stopped the run.
Limits
No personal data, by design. The dataset holds company-level data only. It has no field for the name, birth date, home address or ID number of a natural person:
- Officers, directors, managers, board members, shareholders, beneficial owners, partners and representatives are not returned, not even where a register publishes them. The French register is asked without its officer list; the Polish, Slovak and Swiss answers contain people and free text about them, which is dropped when the answer is read.
- Sole traders and other businesses that are legally a natural person are skipped and counted in
soleTradersSkipped, because their legal name is a person's name (French entrepreneurs individuels, Norwegian ENK, Finnish toiminimi, Czech and Slovak natural-person forms, Swiss Einzelunternehmen, Estonian FIE). The same goes for Norwegian estates, bankruptcy estates and other entries that are not legal entities, and for any entry whose legal form the register does not state. - What a register publishes about the company itself is returned as it stands: its registered name, its registered office and, where published, its purpose. The registered name of a partnership can contain a partner's surname, and a small company can be registered at a private address.
What this Actor does not do:
- Poland cannot be searched by name: the register's name search sits behind a bot wall, which is not worked around. Polish companies are looked up by KRS number only.
- Revenue and net income are returned for France only; the endpoints used for the other seven registers do not hold them.
- Legal events, publications and filings are not returned: register announcements are free text about people and need further requests per company.
- There is no location filter by department, postcode or canton. The Actor resolves names and numbers; it does not export a segment of a register.
- There are no filters by activity code, company size, legal form, registration date or distance from a point, for the same reason.
- There is no proxy setting: no proxy is needed or used.
- A search URL of a source site cannot be pasted in: the sources are APIs.
- There is no AI analysis and no risk or fit score.
- There is no separate, cheaper search-only row: one record, one event.
- VAT numbers are not validated against VIES.
vatNumberis what the register lists or what a public rule derives from the registration number; it does not say that the number is active for VAT. - There is no watchlist or "only new" mode: schedule the task and compare the datasets.
- Phone numbers and e-mail addresses are not returned;
websiteonly where the register publishes it. - The output is not a certified extract, and no documents are downloaded.
Speed and caps:
- Each register is asked one request at a time, at the pace its terms allow (table below). Estonia answers one lookup every 10 seconds, about 6 a minute, the delay its operator asks for. Switzerland (about one request a second) and Slovakia need one more request per company for its details.
- Up to 500 names and 1,000 numbers per run; longer lists are cut and the summary says by how much.
- For one name a register is read for at most three result pages (four in France). Estonia returns its
first 10 matches and Slovakia reads the details of the best-ranked matches only. A lookup whose list
was cut is marked
cappedin the summary. - Finland lists matches by Business ID and Slovakia in no useful order, so the Actor puts the best-fitting names first there. The other registers keep their own order.
- A register that answers 403 or a bot-check page, or fails three lookups in a row, is left alone for the rest of the run. Nothing is done to get around a refusal. The other registers go on, the summary names the register and counts what was not attempted, and you are charged only for what was stored.
- The Czech register forbids repeating an identical request, so a Czech lookup that fails is not retried within the run. It also answers a name search only when the name has at most 1,000 matches there: a broader name (a common surname, for example) fails for Czechia with a message that says so, and costs nothing. Write the name more fully or use the IČO.
- The data is as current as each register's public service: the Finnish and Estonian open data are refreshed once a day.
Sources and licences
Every row names its source in registry. If you publish or pass on the data, name the operator as
listed here. This Actor is not affiliated with or endorsed by any of the registers, nor by GLEIF.
| Country | registry in each row | Number | Operator to name | Licence or terms | Read from | Pace this Actor keeps |
|---|---|---|---|---|---|---|
| France (FR) | Sirene (INSEE), via API Recherche d'entreprises | SIREN, for example 794598813 | INSEE (Sirene) and DINUM (API Recherche d’entreprises) | Licence Ouverte 2.0 | licence name from secondary sources; the API terms were read in its own description | one request at a time, at most 4 a second (the API allows 7 a second per address); waits as long as a 429 asks |
| Norway (NO) | Enhetsregisteret (Brønnøysundregistrene) | organisasjonsnummer, for example 923609016 | Brønnøysundregistrene (Enhetsregisteret) | NLOD 2.0 | primary: the API documentation | one request at a time, at most 5 a second (no limit is stated) |
| Finland (FI) | YTJ and Trade Register (PRH) | Y-tunnus, for example 0112038-9 | Finnish Patent and Registration Office (PRH), YTJ | CC BY 4.0 | primary: the API description | one request at a time, at most 3 a second (no limit is stated) |
| Czechia (CZ) | ARES (Ministry of Finance of the Czech Republic) | IČO, for example 00177041 | Ministry of Finance of the Czech Republic (ARES) | Open access under the ARES conditions; data is informative only | primary: the Ministry’s page (the conditions page on ares.gov.cz could not be read with a plain request) | one request at a time, at most 2 a second (the conditions name 500 a minute); a request is never repeated, so a failed lookup is not retried |
| Switzerland (CH) | Zefix (Swiss Federal Commercial Registry Office) | UID, for example CHE-105.909.036 | Federal Office of Justice, Federal Commercial Registry Office (Zefix) | Open use with the source named, as listed on opendata.swiss; the site’s robots.txt disallows automated access | robots.txt primary; the licence from secondary sources (the opendata.swiss page answered 403) | one request at a time, under 1 a second; each company costs one more request for its details |
| Estonia (EE) | e-Business Register (RIK, Estonia) | registrikood, for example 12417834 | Centre of Registers and Information Systems (RIK), e-Business Register | CC BY 4.0 (open data); the autocomplete service needs no agreement | primary: the operator’s open data pages and terms of use | one request per 10 seconds, the delay the register’s robots.txt asks for: about 6 lookups a minute |
| Slovakia (SK) | RPO (Statistical Office of the Slovak Republic) | IČO, for example 31322832 | Statistical Office of the Slovak Republic (RPO) | CC BY 4.0 | primary: the licence text in every answer of the API | one request at a time, at most 2 a second (no limit is stated; the register itself is slow); each company costs one more request for its details |
| Poland (PL) | KRS (National Court Register, Ministry of Justice of Poland) | KRS, for example 0000028860 | Ministry of Justice of Poland (Krajowy Rejestr Sądowy) | Public register, open API; no licence text could be read | not confirmed: the API description page is an app shell | one request at a time, under 1 a second; a number not in the register of entrepreneurs costs a second request to the register of associations |
The optional LEI comes from GLEIF's public LEI data (CC0 1.0), at no more than one request a second.
FAQ
Is it legal to use this data?
The Actor reads only public, logged-out endpoints of official registers, sends plain requests at the pace each operator allows, and returns company-level fields only (Limits says exactly what that covers). Most of the sources publish the data under an open licence that asks you to name the source (table above). Two points to know: the Swiss site's robots.txt asks automated clients to stay away while the data itself is listed as open, and the Estonian operator's terms exempt the function used here while its robots.txt asks for a 10 second delay, which the Actor keeps. You are responsible for how you use the data and for following each licence.
Why are there no directors or owners?
Because they are natural persons. This Actor is for buyers who must not, or do not want to, hold personal data they did not ask for. If you need officers, this is the wrong tool.
Why does a row say "found": false?
The register answered and returned no company for that entry. notFoundReason says whether nothing
matched, the only match was a sole trader, or the only matches were filtered as inactive. These rows are
free, and they let you match every line of your input to an outcome.
Why did a name return a different company?
Registers search broadly: by words of the name, by former and trading names, in France also by address. Raise "Maximum results per name" to see more candidates, write the name more fully, or use the registration number, which always returns that company or nothing.
A register shows "answered": false or a stopped reason in the summary. What now?
The register refused the request or did not answer after the retries. France limits requests per network, which shared cloud addresses can reach; the Actor waits as long as the register asks and retries. Run the missing entries again later. Entries that were not attempted cost nothing.
How long does a run take?
Measured locally on 2026-10-08: the example input (two names in France and Norway) took 6 seconds, and 12 seconds when the French register had to be asked a second time; one number in each of the eight registers with the LEI option took 14 seconds; ten name lookups in Finland, Czechia, Switzerland, Slovakia and Estonia took 18 seconds. Large Estonian lists are the slow case: 600 lookups take about 100 minutes.
Where do I report a problem or ask for a field?
On the Issues tab of this Actor. Say which register and which name or number; the run's RUN_SUMMARY
usually shows the cause.
More Actors from this developer
- North Data Scraper: German and European company profiles.
- Handelsregister Scraper: search of the official German company register.
- Brazil CNPJ Scraper: Brazilian company search and lookup.
- US Business Entity Search: official state data and new business filings.
- Website Contact Scraper: role e-mail addresses, phone numbers and social links from company websites.
- Email Validator: sorts an e-mail list into valid, invalid, risky and unknown addresses.
- Company Jobs Search: open jobs by title, read live from company career sites.
- ATS Job Postings: jobs from Workday, Greenhouse, Lever and Ashby boards.
- Workday Jobs Scraper, Greenhouse Jobs Scraper, Lever Jobs Scraper and Ashby Jobs Scraper: one job system each.