North Data Scraper
Scrape North Data company records. Rows carry name, legal form, HRB number, EUID, LEI, address and officers. 26 national registers. $2.55 per 1,000.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,startUrls,countries(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00255 per company = $2.55 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Company returned | Charged once per genuine company record. Sample rows, diagnostics, blocked pages and empty searches are never charged. | $0.00255 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-07, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | Company names or keywords to look up on North Data. One per line. North Data serves anonymous callers roughly 59 results per search term, so use narrower terms if you need more. | array |
startUrls | Optional. Paste company pages (https://www.northdata.com/Zalando%20SE,%20Berlin/HRB%20158855%20B) or search pages (https://www.northdata.com/?query=Zalando). Works alongside the search terms above. Person pages are not supported. | array |
countries | Optional. Restrict results to these countries. Leave empty to search all of North Data's coverage. | array |
maxItems | Hard cap on company records returned across all searches and URLs. You are charged per company returned. | integer |
includeDetails | On (default): opens every company page and returns the full record - register number, EUID, LEI, full address, industry, corporate purpose, officers and revenue. Off: returns only what the search listing shows (name, city, country, register id, status), which is much faster. | boolean |
includeOfficers | Include the company's registered legal representatives (name and role only, as published in the commercial register). No contact details are collected. | boolean |
includePublications | Include up to 25 register announcements per company (date, register, text): appointments, capital changes, annual reports, mergers, insolvency notices. Makes rows noticeably larger. | boolean |
includeFinancialHistory | Include the full revenue and earnings series instead of just the latest year. Only companies that publish accounts have any figures at all. | boolean |
includeEvents | Add the dated register events North Data lists in the company's history: registration, name and legal form changes, capital, address moves, mergers and officer entries. It is the short list from the company page (12 entries at most in our tests), not the whole register file. Needs "Open each company page" on. Officer entries are left out when "Include officers" is off. | boolean |
What you get
A structured dataset — each result includes fields like:
namelegalFormstatusregisterNumberaddresscitycountryindustryofficerCountrevenueFormattedemployeesurlregistryLineregistereuidleicountryCodefoundingDateExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
1 ready-to-run use cases
North Data - German Company Officers and Filings
Look up a German company on North Data: officers, address, register court and published filings. Company due diligence.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
North Data Scraper: European company register records, officers and published financials
Type a company name or paste a North Data page, and you get the register record: registered name, legal form, court and register number, EUID, LEI, address, status, industry, corporate purpose and the registered legal representatives with their roles. 26 national registers, no account needed.
The awkward part first. Revenue and employee figures are rare. They exist only where a company is required to publish accounts, and most small European companies publish nothing. On a 260-company run of mostly small private companies, revenue was filled on 2% of rows and employees on 1%. The register fields were on every row. Buy this for the register data, and treat the financials as a bonus when they turn up.
| Input | Company names, or North Data company and search URLs |
| Output | One row per company |
| Ceiling | 2,000 companies per run. About 59 results per search term is North Data's own limit |
| Account needed | None, and nothing to install |
| Price | $2.55 per 1,000 companies, flat on every plan |
🏷️ What North Data Scraper does
North Data pulls 26 national company registers into one site. The German Handelsregister, Austria's Firmenbuch, UK Companies House, France's Sirene, the Dutch KvK, Sweden's Bolagsverket, Spain's Registro Mercantil and the Greek GEMI are all in there, along with Israel.
Search by name, or paste company pages and ?query= search pages. Both in the same run is fine.
includeDetails is the setting that changes the run. Left on, every company page is opened and you get the full record. Turned off, you get only what the results listing shows: name, city, country, register id and status. That is much faster and it is the right choice when you are building a shortlist rather than a dataset.
Three extras are off by default because they make rows noticeably bigger. includePublications adds up to 25 register announcements per company, which is where appointments, capital changes, mergers and insolvency notices live. includeEvents adds the company page's short, dated register history. includeFinancialHistory swaps the latest-year figures for the whole year-by-year series.
📥 What you give it
{
"searchQueries": ["Zalando SE", "Red Bull GmbH"],
"countries": ["DE", "AT"],
"maxItems": 50,
"includeDetails": true
}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at Zalando | Company names or keywords, one per line. |
startUrls | none | North Data company pages or ?query= search pages. Person pages are rejected. |
countries | all of them | Restrict to any of the 26 countries North Data indexes. |
includeDetails | on | Open each company page for the full record. Off gives you the listing fields only. |
includeOfficers | on | Registered legal representatives, name and role as the register publishes them. |
includePublications | off | Up to 25 register announcements per company, with date and text. |
includeEvents | off | Dated register events from the company page's history. 12 at most per company in our tests. Needs includeDetails on. |
includeFinancialHistory | off | The full revenue and earnings series instead of the latest year. |
maxItems | box starts at 20 | Total companies for the whole run, up to 2,000. |
proxyConfiguration | leave it alone | Optional, under Advanced. Only if you want the run to go out through a particular network of your own. |
📤 What you get back
A real row from a run on 20 September 2026, with the full detail turned on:
{
"ok": true,
"name": "Zalando Stores Experiences & Clearance Solutions GmbH & Co. KG",
"formerNames": ["Zalando Stores GmbH & Co. KG", "Zalando Outlet Stores GmbH & Co. KG", "..."],
"legalForm": "KG",
"status": "Active",
"registryId": "Amtsgericht Charlottenburg (Berlin) HRA 55406 B",
"registryLine": "District Court of Charlottenburg (Berlin) HRA 55406 B",
"register": "District Court of Charlottenburg (Berlin)",
"registerNumber": "HRA 55406 B",
"northDataId": null,
"euid": "DEF1103R.HRA55406B",
"lei": null,
"otherIdentifiers": [{ "source": "EUID", "label": null, "value": "DEF1103R.HRA55406B" }],
"address": "Valeska-Gert-Str. 5, 10243 Berlin, Germany",
"formerAddresses": [],
"street": "Valeska-Gert-Str. 5",
"postalCode": "10243",
"city": "Berlin",
"countryCode": "DE",
"country": "Germany",
"industry": "Renting and operating of own or leased residential real estate",
"foundingDate": "2018-11-08",
"corporatePurpose": "Object of the company: The management of own assets.",
"officers": [],
"officerCount": 0,
"revenue": null,
"revenueYear": null,
"revenueFormatted": null,
"earnings": null,
"earningsYear": null,
"employees": null,
"patentsLatestYear": null,
"patentsLatestCount": null,
"publicationCount": 10,
"latestPublicationDate": "2026-04-27",
"url": "https://www.northdata.com/Zalando%20Stores%20Experiences...",
"detailsFetched": true,
"searchQuery": "Zalando",
"scrapedAt": "2026-09-20T07:05:00.985Z"
}
The formerNames list and the url are cut short above. A real row carries them in full. This is what a small subsidiary looks like: register data complete, financials empty.
| Field | What it is |
|---|---|
registerNumber / register | The register id and the court that holds it, so HRB 158855 B plus its Amtsgericht. |
euid / lei | The EU-wide identifier, and the Legal Entity Identifier where the company has one. lei is null for most private companies. |
legalForm | Worked out from the registered name's suffix, because North Data prints no legal-form field. null rather than a guess when the suffix is not a known one. |
status | Active, Liquidation or Terminated. With includeDetails off, only Terminated can be told apart. |
officers | Name, first and last name, role and North Data profile link. No contact details, ever. |
revenue / revenueFormatted | The number, and North Data's own formatting like €12.3B. revenueYear says which year. |
northDataId | Filled instead of registryId on records North Data holds without a register entry. |
events | Only with includeEvents. Newest first, each with date, text such as Capital: €263M, the register code, and endDate when the entry has ended, like a director's term. eventCount says how many. Officer entries are left out when includeOfficers is off. |
detailsFetched | Whether the company page was opened for this row. |
🧾 Reading the output
| Row | How to spot it | Billed |
|---|---|---|
| A company | ok: true and no charged key | yes |
| The sample row | _sample: true and charged: false | no |
| A diagnostic | ok: false, _diagnostic: true and an errorCode | no |
Company rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark them as not real results.
| Code | What it means |
|---|---|
BAD_URL | A link that is not a North Data company or search page. Person pages land here. |
NO_RESULTS | North Data matched nothing for that term. |
NOT_FOUND | No page at that address. |
RATE_LIMITED | North Data throttled the request. Re-run to pick that one up. |
SUGGEST_BLOCKED, SUGGEST_BAD_JSON, LISTING_BLOCKED, SEARCH_FAILED | The search step did not come back usable. |
PAGE_BLOCKED, UNEXPECTED_PAGE, PAGE_FAILED | A company page did not come back usable. |
Rows are written as each company page finishes, so a run that hits its timeout keeps everything already delivered.
▶️ How to run it
1. Open North Data Scraper and click Try for free. 2. Type names into Company names to search, or paste links into North Data URLs. 3. Pick Countries if you want to narrow it. 4. Set Maximum companies. Leave Open each company page on unless you only need a shortlist. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$2.55 per 1,000 companies. Flat on every Apify plan, with no volume tiers.
One billed row per company delivered. The sample row is not billed, diagnostic rows are not billed, and a search that matches nothing produces no billed rows.
💡 What people use it for
- Verifying a supplier or customer before contracting: register number, status, address and who can
sign for the company.
- Building a list of companies in one industry and country, then enriching it from the register
fields rather than guessing.
- Watching
statusandlatestPublicationDateon a schedule to catch liquidations and insolvency
notices early.
- Pulling EUID and LEI for reconciliation against an internal system that keys on them.
- Tracing a group:
formerNamesandformerAddressesconnect entities that have been renamed or
moved.
🚧 What it does not do
- No paywalled data. Balance sheets, profit-and-loss statements, shareholders, ownership graphs
and risk reports sit behind a North Data subscription and are not read.
- No personal contact details. Officers come back as the register publishes them, name and role.
No emails, no phone numbers, no home addresses. Person pages are rejected as input.
- About 59 results per search term is North Data's own ceiling for visitors without an account.
Split into narrower terms, by city or keyword or legal form, rather than expecting one broad term to return everything.
- Country, legal form and status are not deep filters. The
countriesoption narrows the pool
that a term returns. It does not make North Data search further down.
includeEventsis a short list. North Data's page showed 12 entries at most in our tests,
not a company's full register record.
employeesis a hint, not a headcount. It is read from the page text and can pick up a number
that belongs to a register announcement rather than to the company. Check it before relying on it.
- A search term that fails on its first page is reported as failed and any partial matches it
had are dropped rather than delivered. Re-run that term on its own.
- With
includeDetailsoff, most columns are empty. That mode is a shortlist, not a record.
🧭 Which business data scraper do you need?
| If you want | Use |
|---|---|
| European register records, officers and published financials | This one |
| Who imports what into the US, and from which factory | ImportYeti Scraper |
| People at a company, from public LinkedIn profiles | LinkedIn Company Employees Scraper |
| Public LinkedIn profiles by title, company or location | LinkedIn Profile Search Scraper |
| Local businesses with addresses and phone numbers | Google Maps Reviews Scraper |
❓ Questions people ask
How do I get a German company's HRB number? Search the name and read registerNumber together with register. euid gives you the EU-wide identifier on top.
Which countries are covered? Austria, Belgium, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Ireland, Israel, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Spain, Sweden, Switzerland and the United Kingdom.
Can I get full accounts? No. Only the revenue and earnings figures North Data shows openly. Balance sheets are behind its subscription and are not touched.
Can I search for people? No. This is a company scraper and person pages are rejected. Officer records carry names and roles only.
How do I get more than 59 results for one term? Use several narrower terms in the same run. City names, keywords and legal form suffixes all work well as splits.
Is this legal? It reads pages North Data publishes without a login, and the underlying facts are public register records. Officer names are personal data, so GDPR applies to what you do next. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the name or URL you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.