L logiover
business · May 19, 2026 · 6 min read

EU Company Registry Data Export — Germany, France, Netherlands

How to extract company-registry records from Handelsregister, INPI, and KvK in a unified schema — for KYC, B2B lead generation, and compliance workflows.

In Europe, every limited company is required to file with a national business register. These registers are public — that’s the point of them. But each member state runs its own register, in its own language, with its own data shape, and they don’t talk to each other. If you need company-registry data across the EU for a KYC workflow, a B2B lead-gen system, or a compliance check, you can’t just hit one endpoint and call it done. This guide walks through the three biggest registries — Germany’s Handelsregister, France’s INPI, the Netherlands’ KvK — and how to extract them into a unified schema.

The three registries that cover the most ground

Germany, France, and the Netherlands between them host more than 6 million registered companies. They’re also the three jurisdictions that EU-active B2B sellers, KYC platforms, and procurement teams most often need to verify.

Germany — Handelsregister

The official source is handelsregister.de, run jointly by the federal states. The data is comprehensive: every German GmbH, AG, KG, and OHG is filed here, with directors, registered capital, registered office, status (active / liquidated / dissolved), and a full filing history.

Quirks:

  • The search interface is built around a session cookie and a hidden anti-bot token. Direct GET requests without a session won’t return data.
  • Company numbers (HRB / HRA codes) follow a <court>/<type>/<number> format that isn’t standardized across the country.
  • The free tier returns a summary; full detailed documents (like the most recent annual filing) are paywalled at €4.50 per document.
  • The site rate-limits aggressively beyond a few hundred requests per IP per day.

France — INPI / recherche-entreprises

France’s national business register is split between INPI (the patent and trademark office, which also runs the company database) and recherche-entreprises.api.gouv.fr, an open government API that returns the same data with friendlier rate limits.

The government API is the best path for most use cases: rate-limited but unauthenticated, JSON output, search by name or SIREN code (the 9-digit French company identifier). For deep records — beneficial ownership, full filing history — you fall back to INPI’s main site, which has its own session-and-token dance.

Netherlands — KvK

The Dutch Kamer van Koophandel publishes a search at kvk.nl/zoeken/. The public search returns name, KvK number, city, status, and trade name (handelsnamen). Detail-level data — directors, equity, primary activity (SBI codes) — is also surfaced but requires drilling into the entity page.

KvK is the cleanest of the three from a scraping standpoint: HTML pages, predictable URL patterns, modest rate limiting.

What a unified schema looks like

The point of pulling all three into one pipeline is that you get a consistent view of European companies. A reasonable per-row schema:

{
  "country": "DE",
  "registry_id": "HRB 198765",
  "registry_court": "Berlin (Charlottenburg)",
  "name": "Example GmbH",
  "legal_form": "GmbH",
  "registered_address": "Friedrichstraße 100, 10117 Berlin",
  "status": "active",
  "registered_capital_eur": 25000,
  "registration_date": "2018-03-14",
  "directors": [
    { "name": "Anna Schmidt", "role": "Geschäftsführer", "since": "2018-03-14" }
  ],
  "industry_code": "62.01",
  "industry_label": "Computer programming activities",
  "scraped_at": "2026-05-19T12:00:00Z"
}

A few schema choices worth making upfront:

  • Always store country and a country-specific registry_id. The combination is the natural key. Don’t try to mint your own surrogate ID across jurisdictions.
  • Store legal_form in the local form (GmbH, SAS, BV) but include a normalized field if your downstream system needs cross-country grouping.
  • status should be a tight enum: active, dissolved, liquidating, struck-off. Each register uses different terms locally; map them at extraction time.
  • Directors as an array, never flattened. The shape per director (name, role, since-date, until-date if departed) should be uniform across countries.

Run the EU Companies Registry Scraper — searches Handelsregister, INPI, and KvK in one call, returns a unified schema. Pay per company record returned.

Use cases driving this data

This isn’t an academic exercise; there’s a real market for clean EU company data:

  • KYC and AML compliance — banks and fintechs need to verify a counterparty company exists, is active, and has the directors it claims.
  • B2B lead generation — sales teams target by industry code, registered capital range, and director churn (companies that just got a new CEO often need new vendors).
  • Procurement due diligence — verify a supplier isn’t insolvent or recently restructured before signing.
  • Investor research — venture funds and PE shops track newly registered entities in a region or industry.
  • Credit scoring — building risk models requires registered-capital and director-history signals at scale.

The common thread: the value is in the recency. A snapshot of European companies from a year ago is mostly stale — directors change, statuses flip from active to liquidating, new entities appear. The pipeline needs to refresh.

Company registers are explicitly public. Reading them isn’t legally complicated. But a few things are worth knowing:

  • Director names are personal data in EU privacy law (GDPR). Re-publishing them at scale on a public website triggers data-controller obligations. Use the data internally or for one-to-one customer queries; don’t build a public directory.
  • Some registers technically prohibit “bulk extraction” in their terms of use, even though the data is public. Practically, none have enforced this against responsible scraping (low concurrency, real use case). But if you blast 100 requests/second from one IP, expect a friendly block.
  • France’s open API is fully permitted for any use, including commercial — it’s an api.gouv.fr government API explicitly licensed for reuse.
  • Document fees are real. The summary search is free everywhere; full filings carry per-document charges in Germany (€4.50) and the Netherlands (€2.00–€3.00 depending on document). Plan for this if your workflow needs deep records.

Build it yourself vs. managed scraper

Building from scratch:

  • 2–4 days for a single country (Germany is the hardest; KvK is the easiest).
  • 1–2 weeks for a unified three-country pipeline with normalized output.
  • Ongoing maintenance every 2–6 months when one of the three sites tweaks its HTML.

Using a managed actor:

  • 5 minutes to first row.
  • Pay per company record returned.
  • Schema is already normalized across jurisdictions.

For a one-time research pull of a few hundred companies, build it yourself. For an ongoing KYC or lead-gen pipeline, the managed approach pays for itself in the first month of maintenance time saved.

Pitfalls to avoid

A few traps that catch first-time builders of this pipeline:

  • Encoding — German and French registers use UTF-8 but with quirks (Bavarian umlauts, French accents in director names). Test against names with non-ASCII characters early.
  • Name collisions — “Example GmbH” might exist in three different states. Always join on country + registry_id, never on name alone.
  • Liquidation lag — a company can be technically dissolved but still show as “active” for weeks while the formal liquidation processes. Use the latest filing date as a freshness signal.
  • Multi-language fields — France stores both denomination and denomination_usuelle (legal vs trading name). Capture both.
  • Industry code systems differ — Germany uses WZ codes, France uses NAF, Netherlands uses SBI. None map cleanly to each other. If you need cross-country grouping, normalize to NACE (the EU-wide system) at ingestion.

Wrapping up

EU company-registry data is genuinely public, genuinely valuable, and genuinely annoying to pull from scratch because every country runs its own system. A unified pipeline pays for itself the moment you need to verify or enrich more than a few hundred companies. Either build for the three biggest jurisdictions first and add more later, or use a managed scraper that handles the unification for you.

Open the EU Companies Registry Scraper on Apify — unified company-registry data across DE, FR, NL. KYC, B2B prospecting, compliance use cases. Pay per record.

Related guides