# North Data Scraper & API - EU Company Register Data (`rel8ble/northdata-scraper`) Actor

North Data scraper and API for EU company register data: look up companies by name or URL on northdata.com. One result = one company: register number, LEI, address, founding date, status, officers, revenue, earnings, employees, history. No login. $0.70 per 1,000, cheapest in Nov 2026.

- **URL**: https://apify.com/rel8ble/northdata-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## North Data Scraper & API - EU Company Register Data

This **North Data scraper** looks up European companies on northdata.com, the search engine over official trade registers (German Handelsregister, UK Companies House, French Sirene, Belgian KBO, Dutch KvK, Danish CVR, Austrian Firmenbuch and more), and returns one clean row per company: **register number, EUID, LEI, status, legal form, founding date, registered address, industry, corporate purpose, current officers, latest revenue, earnings and employees, the full per-year financial table and the register history**, as JSON, CSV or Excel.
Use it as a **North Data API**, a **Handelsregister scraper**, a **company register lookup** for KYC, due diligence and supplier checks, or a **B2B data enrichment** step from your own code, Make, Zapier or n8n.

Give it company names (it uses North Data's own autocomplete to find the exact company), free-text searches, or company page URLs. Plain HTTP, **no headless browser and no login**. **$0.70 per 1,000 companies, no start fee: the cheapest North Data scraper on the Store (checked 3 Nov 2026)**, officers, financials and history included.

### What you get

- **Identity**: registered name, former names, legal form, status (active / terminated / in liquidation), register court and number, EUID, LEI, stock tickers and every other register ID on file.
- **Address**: registered street, postal code, city, country (plus former seats).
- **Business**: industry class and the registered corporate purpose.
- **Financials**: latest revenue, earnings, employees, balance sheet total and equity with their year and currency, plus every published figure per year (revenue, earnings, employees, public funding, patents ...).
- **People**: current legal representatives and executives (name, role, city) and management changes with dates.
- **History**: registrations, name, address and capital changes, mergers, trademarks, public funding and patents, newest first.
- **Lookup info**: the name you searched for and how it matched (exact / partial).

### Sample output

Real rows from the 5-company demo (cloud run of the prefilled input, build 1.0.3):

| query | company | register | city | revenue | officers |
|---|---|---|---|---|---|
| Siemens AG | Siemens AG | District Court of Munich HRB 6684 | München | €78.9B (2025) | 139 |
| SAP SE | SAP SE | District Court of Mannheim HRB 719915 | Walldorf | €36.8B (2025) | 79 |
| Tesco PLC | Tesco plc | Companies House 00445790 | Welwyn Garden City | £73.3B (2026) | 28 |
| Zalando SE | Zalando SE | District Court of Charlottenburg (Berlin) HRB 158855 B | Berlin | €12.3B (2025) | 16 |
| Spotify AB | Spotify AB | Bolagsverket 5567037485 | Stockholm | - | 5 |

### Use cases

- **KYC and due diligence**: confirm a counterparty's register entry, status, legal representatives and address before you sign
- **Supplier and customer checks**: bulk-verify that a list of companies is active, with their register number and LEI
- **B2B data enrichment**: add register IDs, founding year, industry, revenue and headcount to your CRM accounts
- **M\&A and investment research**: pull revenue, earnings and management history for a target list
- **Sales prospecting in DACH and the EU**: look up decision makers (managing directors, board members) of the companies on your list

### Pricing

**Pay per result: $0.70 per 1,000 companies** (one result = one company saved to the dataset). Platform usage is included, and there is no start fee.

| You look up | You pay |
|---|---|
| 100 companies | $0.07 |
| 1,000 companies | $0.70 |
| 10,000 companies | $7.00 |
| 100,000 companies | $70.00 |

Names that do not match a company, companies skipped by your filters, duplicates and failed requests are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. The Apify free plan's $5 monthly credit covers about 7,100 companies; the 5-company demo costs under half a cent.

Other North Data actors on the Apify Store (free-plan prices per 1,000 companies, checked 3 Nov 2026; 30-day users in brackets):

| Actor | Price per 1,000 |
|---|---|
| **This actor** | **$0.70, no start fee, officers, financials and history included** |
| topapi North Data Scraper (1) | $0.90 per company, $0.72 per listing or person row |
| getascraper Northdata Companies Scraper (1) | $0.80 per search row + $2.00 per company profile |
| jungle_synthesizer North Data financials (1) | $1.00 + start fee |
| trev0n North Data Scraper (25) | $2.00 + start fee |
| madeingermany North Data Scraper (1) | $2.00 |
| dami_studio North Data Scraper (7) | $2.55 + $0.002 per run |
| v0iddo / scrapingmonkey / kamerozkan (1-2) | $2.98 to $3.00 |
| blackfalcondata North Data Scraper (1) | $3.15 + start fee |
| memo23 North Data Scraper (20) | $3.50 + start fee |
| parsebird / fetch_cat / hipersoft / automation-lab (2-5) | $3.50 to $4.59 |
| scrapewise / crawloop (1 each) | $3.90 / $4.50 + $0.005 per run |
| solidcode North Data Scraper (56, most used) | $4.75 + start fee |
| xtracto North Data Company & Register Extractor (8) | $6.00 + $0.005 per run |
| silentflow Northdata Company Scraper (23) | $8.00 + start fee |
| themineworks / scrapesage / axery / sian.agency (1-2) | $7.20 to $16.00 |

The "low-cost" / "cheap" actors (delectable_incubator, scrapestorm) show $0.05 but add $2.99-$3.49 per dataset item.

### FAQ

**Is there an official North Data API?**
North Data sells API access with its paid business plans. This actor needs no subscription: it reads the public company pages, and you pay per company found. Start it over the Apify API with a list of names and get JSON back.

**What does a typical run cost?**
Checking 500 suppliers costs $0.35. Enriching 10,000 CRM accounts costs $7.00. A weekly check of 200 key accounts costs about $0.60 a month.

**Does it need a North Data account?**
No. It reads the public company pages and the site's own autocomplete over plain HTTPS.

**What if a name is ambiguous?**
The actor takes the company with the same name (legal form ignored) or, failing that, the one containing all your words, preferring active companies. Anything looser is reported as not found and not charged, unless you turn on `acceptFuzzyMatches`. Each row carries `matchType`.

**Is scraping North Data legal?**
The actor reads only public pages that robots.txt allows. Register data includes names of company officers, which is personal data under GDPR; you are responsible for having a legitimate purpose for processing it.

### How to use

1. Paste **Company names**, one per line: `Siemens AG`, `Tesco PLC`, `Personio SE & Co. KG`. Adding the legal form gives the best matches.
2. Optionally add **Search terms** like `software berlin` (up to 45 companies each), or **North Data company URLs**.
3. Choose what to include: officers, register history, the full financial table.
4. Optionally keep only active companies, certain countries, or a minimum revenue / headcount.
5. Click **Start** and download the results from the **Output** tab, or fetch them through the Apify API.

### Input

| Field | Default | Description |
|---|---|---|
| `companyNames` | - | Company names to look up; each returns its best exact / whole-word match |
| `searchTerms` | - | Free-text searches; up to `maxResultsPerSearch` companies each (max 45) |
| `startUrls` | - | North Data company page URLs |
| `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 |
| `activeOnly` | false | Skip terminated and liquidated companies |
| `countries` | - | ISO codes to keep, e.g. `DE`, `AT`, `CH` |
| `minRevenue` / `minEmployees` | 0 | Skip smaller companies (needs figures on file) |

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

### Input example

```json
{
    "companyNames": ["Siemens AG", "Personio SE & Co. KG", "Tesco PLC"],
    "searchTerms": ["software berlin"],
    "maxResultsPerSearch": 15,
    "activeOnly": true
}
```

### Output example

```json
{
    "name": "Siemens AG",
    "status": "active",
    "legalForm": "AG",
    "register": "District Court of Munich HRB 6684",
    "euid": "DED2601V.HRB6684",
    "lei": "W38RGI023J3WT1HWRP32",
    "foundingDate": "1996-08-28",
    "address": "Werner-von-Siemens-Str. 1, 80333 München, Germany",
    "street": "Werner-von-Siemens-Str. 1",
    "postalCode": "80333",
    "city": "München",
    "countryCode": "DE",
    "industry": "Manufacture of electronic components",
    "revenue": 78914000000,
    "revenueYear": 2025,
    "earnings": 9620000000,
    "earningsYear": 2025,
    "currency": "€",
    "officers": [{ "name": "Roland Busch", "role": "CEO", "city": "München", "type": "person" }],
    "tickers": ["SIE.DE", "SIEGY"],
    "history": [{ "date": "2026-04-24", "event": "Company statute", "source": "Hrcdd" }],
    "url": "https://www.northdata.com/Siemens%20AG,%20M%C3%BCnchen/HRB%206684",
    "searchQuery": "Siemens AG",
    "matchType": "exact"
}
```

(Shortened: rows also carry corporatePurpose, formerNames, formerAddresses, identifiers, financials, personEvents and marketingEvents; lists are cut here.)

The dataset has four views: **Overview**, **Officers**, **History** and **Lookup matches**. The `RUN_SUMMARY` record shows how every name and search was matched and lists anything that was not found.

### Integrations

- **Our Companies House scraper**: deeper UK data (filings, PSCs) straight from the official API.
- **Our Website Contact Extractor**: add e-mails and phone numbers from each company's website.
- **Make, Zapier and n8n**: enrich new CRM accounts automatically.
- **Google Sheets**: export the dataset straight to a spreadsheet.
- **Apify API**: start runs and download results over REST, or with the JavaScript and Python clients.
- **MCP for AI agents**: the Apify MCP server (https://mcp.apify.com) lets Claude, ChatGPT, Cursor and other agents call this North Data scraper as a tool.

### Limits

- **Only what North Data shows without an account**: premium-only items (ownership charts, full balance sheets, documents) are not included.
- Financial figures exist mainly for larger and listed companies; many small companies only have register data.
- Free-text search shows at most 45 companies per term without login; for bulk lists, supply company names.
- North Data limits requests per IP; the actor spreads requests over rotating datacenter IPs, so large runs take a few minutes per thousand companies.

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

# Actor input Schema

## `companyNames` (type: `array`):

Companies to look up, one per line, e.g. "Siemens AG", "Tesco PLC", "Personio SE & Co. KG". Each name returns its best matching company (exact or whole-word match). Add the legal form for better matches.

## `searchTerms` (type: `array`):

Optional. Free-text North Data searches, e.g. "software berlin". Each returns up to maxResultsPerSearch companies (North Data shows at most 45 per search without login).

## `startUrls` (type: `array`):

Optional. Company pages, e.g. https://www.northdata.com/Siemens%20AG,%20M%C3%BCnchen/HRB%206684 (northdata.de and .fr work too). Search URLs are treated as search terms. Person pages are not supported.

## `maxResultsPerSearch` (type: `integer`):

Optional. 1-45. Default 15.

## `acceptFuzzyMatches` (type: `boolean`):

Default false: a company name is only saved when North Data has a company with the same name or all the same words; otherwise it is reported as not found (not charged). Turn on to take the closest result anyway.

## `includeOfficers` (type: `boolean`):

Default true. Current legal representatives and executives, and management changes.

## `includeHistory` (type: `boolean`):

Default true. Register, management and funding / patent events.

## `includeFinancials` (type: `boolean`):

Default true. The full per-year table; the latest revenue, earnings and employees are always included.

## `activeOnly` (type: `boolean`):

Optional. Skip terminated and liquidated companies. Not charged.

## `countries` (type: `array`):

Optional. ISO country codes to keep, e.g. DE, AT, CH, GB. Not charged when skipped.

## `minRevenue` (type: `integer`):

Optional. Skip companies whose latest revenue on file is below this (companies without revenue data are skipped when set). Not charged.

## `minEmployees` (type: `integer`):

Optional. Skip companies with fewer employees on file. Not charged.

## `maxConcurrency` (type: `integer`):

Optional, advanced. Parallel requests, 1-10. Default 3.

## `maxRequestsPerMinute` (type: `integer`):

Optional, advanced. 0 = automatic (90 with rotating proxies, 20 on a single IP, which is what North Data tolerates).

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, 0-20. Default 6.

## `proxyConfiguration` (type: `object`):

Optional, advanced. Leave as is. Default {"useApifyProxy": false} = automatic: rotating Apify datacenter IPs (North Data limits each IP), residential only for requests that keep failing.

## Actor input object example

```json
{
  "companyNames": [
    "Siemens AG",
    "Zalando SE",
    "Tesco PLC"
  ],
  "maxResultsPerSearch": 15,
  "acceptFuzzyMatches": false,
  "includeOfficers": true,
  "includeHistory": true,
  "includeFinancials": true,
  "activeOnly": false,
  "minRevenue": 0,
  "minEmployees": 0,
  "maxConcurrency": 3,
  "maxRequestsPerMinute": 0,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per company: register, address, officers, financials and history.

## `summary` (type: `string`):

How each name or search was matched, and anything that was not found.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companyNames": [
        "Siemens AG",
        "Zalando SE",
        "Tesco PLC"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/northdata-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "companyNames": [
        "Siemens AG",
        "Zalando SE",
        "Tesco PLC",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/northdata-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyNames": [
    "Siemens AG",
    "Zalando SE",
    "Tesco PLC"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/northdata-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/northdata-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TloiwFhBSNtQfKKsK/builds/8i42CRaoKgA4CKmqu/openapi.json
