European Company Registry Search: 8 Registers avatar

European Company Registry Search: 8 Registers

Pricing

from $3.00 / 1,000 company records

Go to Apify Store
European Company Registry Search: 8 Registers

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

Enis Bodlli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 registry and links the official entry in registryUrl, 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": false and 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

  1. Choose the countries whose registers should be searched by name. Leave the field empty for all eight.
  2. 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:00177041 or PL: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.
  3. 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.
  4. Start the run. Rows appear in the dataset while it runs; the RUN_SUMMARY record 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 planPrice per 1,000 companiesPer 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

FieldWhat it does
countriesRegisters 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.
queriesCompany names, 2 to 200 characters each (France needs at least 3), up to 500 per run.
registrationNumbersSIREN 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.
activeOnlyOnly companies that are on the register and not in liquidation, bankruptcy or struck off. Applied before anything is charged. Default false.
maxResultsPerQueryCompanies returned for one name from one register, 1 to 100. Default 5. A number always returns at most one company.
maxResultsStop after this many companies were stored. Empty means no cap. Free rows do not count.
includeLeiAdd 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"
}
]
  • status is one of active, liquidation (winding up or bankrupt, still on the register), dissolved (struck off or ceased) and unknown. statusRaw is the register's own word or code.
  • registeredOn and dissolvedOn are days (YYYY-MM-DD) as the register gives them. scrapedAt is ISO 8601 in UTC.
  • notFoundReason on a free row is no_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) or removed_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.

FieldFRNOFICZCHEESKPL
Search by nameyesyesyes (best-fitting names of each 100 listed first)yesyesyes (first 10 matches)yes (ranked by this Actor)- (KRS number only)
legalFormyes (INSEE code; text for its category)yesyesyesyespartly (code; text for the common forms)yespartly (text, no code)
status, statusRawyesyesyesyesyesyespartly (from the termination date and the name; no status word)partly (from the removal date and the liquidation and bankruptcy sections)
registeredOnyesyesyesyes--yesyes
dissolvedOnyesyesyesyesyes-yesyes
address (street, postalCode, city, country)yesyesyesyesyesyesyesyes
address.regionyes--yesyes (canton code)yes (county)-yes (voivodeship)
address.latitude, address.longitudeyes-------
activitypartly (NAF code, no text)yesyespartly (first CZ-NACE code listed, no text)--yesyes
purpose-yes--yes--partly (associations and foundations only)
employeesRangeyes (bracket)yes (exact count)------
establishmentsCountyes-------
financialspartly (latest published year, where accounts are public)-------
vatNumberyes (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. vatNumber is 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; website only 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 capped in 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.

Countryregistry in each rowNumberOperator to nameLicence or termsRead fromPace this Actor keeps
France (FR)Sirene (INSEE), via API Recherche d'entreprisesSIREN, for example 794598813INSEE (Sirene) and DINUM (API Recherche d’entreprises)Licence Ouverte 2.0licence name from secondary sources; the API terms were read in its own descriptionone 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 923609016Brønnøysundregistrene (Enhetsregisteret)NLOD 2.0primary: the API documentationone 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-9Finnish Patent and Registration Office (PRH), YTJCC BY 4.0primary: the API descriptionone 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 00177041Ministry of Finance of the Czech Republic (ARES)Open access under the ARES conditions; data is informative onlyprimary: 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.036Federal 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 accessrobots.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 12417834Centre of Registers and Information Systems (RIK), e-Business RegisterCC BY 4.0 (open data); the autocomplete service needs no agreementprimary: the operator’s open data pages and terms of useone 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 31322832Statistical Office of the Slovak Republic (RPO)CC BY 4.0primary: the licence text in every answer of the APIone 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 0000028860Ministry of Justice of Poland (Krajowy Rejestr Sądowy)Public register, open API; no licence text could be readnot confirmed: the API description page is an app shellone 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

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