Skip to content

About

North Data scraper in Python: EU company register lookup (Handelsregister, Companies House, KvK) with LEI, officers and financials to JSON/CSV via Apify

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

North Data scraper in Python: EU company register lookup (Handelsregister, Companies House, KvK) to JSON / CSV

North Data scraper Python tutorial: look up European companies on North Data by name and get one clean JSON row per company with register court and number, EUID, LEI, status, legal form, founding date, registered address, industry, current officers, latest revenue, earnings and employees, the per-year financial table and the register history. Covers the German Handelsregister, UK Companies House, French Sirene, Dutch KvK, Belgian KBO, Danish CVR, Austrian Firmenbuch, Swedish Bolagsverket and more. No browser, no login, no North Data subscription.

I built this actor; it's a paid tool on Apify (North Data Scraper, $0.90 per 1,000 companies, no start fee). This repo is a free, MIT-licensed example of how to call it from Python and Node and what to do with the data.

Who this is for: KYC and compliance teams checking counterparties, procurement teams verifying suppliers, sales teams enriching CRM accounts in DACH and the EU with firmographics (register ID, founding year, revenue, managing directors), and anyone who wants a North Data API without a business plan.

Quick start (Python)

pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("rel8ble/northdata-scraper").call(run_input={
    "companyNames": ["Robert Bosch GmbH", "Tesco PLC", "Adyen N.V."],  # add the legal form for exact matches
    "searchTerms": ["software berlin"],   # optional: up to 45 companies per search
    "activeOnly": True,                   # skipped companies are not charged
})

for c in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(c["name"], "|", c["register"], "|", c["lei"], "|", c["city"], c["countryCode"], "|", c["revenue"], c["currency"])

Get your token at https://console.apify.com/settings/integrations.

The full example: CSV + supplier / KYC check

example.py looks up a list of company names, writes northdata_companies.csv (one row per company, top officers flattened) and prints which names came back, register-ID coverage, a financial snapshot and the matches worth a second look.

pip install -r requirements.txt
export APIFY_TOKEN=<YOUR_APIFY_TOKEN>          # Windows: set APIFY_TOKEN=...
python example.py                              # 5 sample companies
python example.py "Robert Bosch GmbH" "Tesco PLC"
python example.py --file suppliers.txt --countries DE AT CH

Real output on the 22 company names from the sample run (scraped 28 Oct 2026, sample-output.json of the actor):

Saved 22 companies to northdata_companies.csv

Found 22/22 names
Status: active 22
Countries: DE 8, DK 3, NL 2, GB 2, AT 2, FR 1, CH 1, SE 1, ES 1, LI 1
Register no. 22/22 | EUID 17/22 | LEI 16/22 | revenue 9/22 | employees 3/22 | officers 19/22

Financial snapshot (latest figures on file):
company                            cc year   revenue  earnings margin officers
Logitech international SA          CH 2026     $4.9B   $714.3M  14.7%       30
Novo Nordisk A/S                   DK 2025   ?309.1B   ?102.4B  33.1%       53
Deliveroo Ltd.                     GB 2024     £2.1B     £2.9M   0.1%       16
Ocado Group plc                    GB 2025     £1.4B   £405.2M  29.3%       27
Koninklijke Ahold Delhaize N.V.    NL 2025    €92.4B     €2.2B   2.4%        9
Robert Bosch GmbH                  DE 2025    €91.0B  -€363.0M  -0.4%      289
Henkel AG & Co. KGaA               DE 2025    €20.5B     €2.0B   9.9%       38
HORNBACH Baumarkt AG               DE 2026     €6.1B   €108.8M   1.8%       50
Adyen N.V.                         NL 2025     €2.7B     €1.1B  39.8%       29

Check these matches (5):
  'N26 Bank AG' -> N26 Bank SE, District Court of Charlottenburg (Berlin) HRB 271697 B, DE: asked for AG, register says SE
  'Danone' -> Danone A/S, CVR 73128110, DK: partial match
  'Deliveroo plc' -> Deliveroo Ltd., Companies House 13227665, GB: asked for PLC, register says Ltd.
  'Logitech International S.A.' -> Logitech international SA, Schweizer Handelsregister CHE-101.502.641, CH: partial match
  'Flixbus' -> FlixBus Austria GmbH, Firmenbuch 457096a, AT: partial match

What the check catches: N26 converted from AG to SE and Deliveroo from plc to Ltd., so the name you have on file is out of date; "Danone" and "Flixbus" without a legal form landed on a Danish and an Austrian subsidiary, so add the legal form or a --countries filter. Novo Nordisk's row has no currency symbol on file (its figures are in DKK), which is why it shows ?. Revenue sits on 9 of 22 rows: North Data publishes figures mainly for larger and listed companies.

Node.js

npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('rel8ble/northdata-scraper').call({
    companyNames: ['Siemens AG', 'Personio SE & Co. KG', 'Tesco PLC'],
    countries: ['DE', 'GB'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const c of items) console.log(c.name, c.register, c.officers.length, 'officers');

Input

Field Default What it does
companyNames - Companies to look up; each returns its best exact or whole-word match. Add the legal form (GmbH, AG, plc, N.V.) for best results
searchTerms - Free-text North Data searches such as software berlin, up to maxResultsPerSearch companies each
startUrls - North Data company page URLs (northdata.com, .de, .fr)
maxResultsPerSearch 15 Companies per search term, 1-45
acceptFuzzyMatches false Also save the closest result when no company has the same name
includeOfficers / includeHistory / includeFinancials true Optional sections; latest revenue, earnings and employees are always included
activeOnly false Skip terminated and liquidated companies (not charged)
countries - ISO codes to keep, e.g. DE, AT, CH (not charged when skipped)
minRevenue / minEmployees 0 Skip smaller companies (needs figures on file, not charged)

With no input at all, a 5-company demo (Siemens, SAP, Tesco, Zalando, Spotify) runs.

What a row looks like

A real row from 28 Oct 2026, trimmed (lists are cut to two items; the full row also has formerNames, formerAddresses, the full identifiers, financials per year, personEvents and marketingEvents):

{
  "name": "HORNBACH Baumarkt AG",
  "status": "active",
  "legalForm": "AG",
  "register": "District Court of Landau HRB 2311",
  "euid": "DET3304V.HRB2311",
  "lei": "5299008WW53GLXRORN29",
  "foundingDate": "1992-08-20",
  "address": "Hornbachstr. 11, 76879 Bornheim, Germany",
  "city": "Bornheim",
  "countryCode": "DE",
  "industry": "Retail sale of hardware, building materials, paints and glass",
  "revenue": 6081689000,
  "revenueYear": 2026,
  "earnings": 108821000,
  "earningsYear": 2026,
  "totalAssets": 4939164000,
  "currency": "€",
  "officers": [
    { "name": "Erich Kurt August Harsch", "role": "Member of the Executive Board", "type": "person" },
    { "name": "Nils Hornbach", "role": "Member of the Executive Board", "type": "person" }
  ],
  "tickers": ["HBM.DE"],
  "history": [
    { "date": "2025-07-18", "event": "Company statute", "source": "Hrcdd" },
    { "date": "2024-07-11", "event": "Company statute", "source": "Hrcdd" }
  ],
  "url": "https://www.northdata.com/HORNBACH%20Baumarkt%20AG,%20Bornheim/Amtsgericht%20Landau%20HRB%202311",
  "searchQuery": "Hornbach Baumarkt AG",
  "matchType": "exact",
  "scrapedAt": "2026-10-28T00:51:57.256Z"
}

Pricing

$0.90 per 1,000 companies (pay per result), no start fee, officers, financials and history included. Names that do not match, companies skipped by your filters, duplicates and failed requests are never charged.

Companies Cost
100 $0.09
500 $0.45
1,000 $0.90
10,000 $9.00

The Apify free plan ($5 of monthly credit) covers about 5,500 companies a month.

Limits

  • Only what North Data shows without an account: ownership charts, full balance sheets and register documents are premium and not included.
  • Financial figures exist mainly for larger and listed companies; many small companies have register data only.
  • A free-text search returns at most 45 companies per term; for bulk lists, pass company names.
  • A name that exists in several countries can match the wrong register (in the sample, BASF SE matched a Danish Basf SE entry under CVR). Use the legal form, the countries filter, or a company URL, and check countryCode and register.
  • North Data limits requests per IP, so large runs take a few minutes per thousand companies.
  • Officer names are personal data under GDPR; you need a legitimate purpose to process them.

Related

Store page: https://apify.com/rel8ble/northdata-scraper

License

MIT. North Data is a trademark of its owner; this project is not affiliated with North Data.

Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

About

North Data scraper in Python: EU company register lookup (Handelsregister, Companies House, KvK) with LEI, officers and financials to JSON/CSV via Apify

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages