# North Data Scraper | 2$/1k (`trev0n/northdata-scraper`) Actor

Company registry data for 26 European countries: register number and court, LEI, EU ID, status, address, industry codes, officers with roles, published financials, register events and corporate network. Includes change monitoring for scheduled runs.

- **URL**: https://apify.com/trev0n/northdata-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 3 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏛️ North Data Scraper — European Company Registry Data

🎯 **Look up any European company and get its official register record in seconds — register number, court, LEI, officers, financials and corporate network, all in one clean row.**

This scraper pulls company data from North Data, the search engine that aggregates official business registers across Europe. One company name in, one complete row out: identification numbers, legal form, status, full address with coordinates, industry codes, corporate purpose, directors and their roles, published revenue and equity, register events, and the parent and subsidiary companies around it. Covers **26 countries** — Germany, the UK, France, the Netherlands, Belgium, Austria, Switzerland, Poland, Spain, Sweden and more.

### 🚀 What Does It Do?

This scraper turns a company name — or a list of thousands of them — into **structured, ready-to-use registry data**. No manual searching, no copy-pasting from register portals in six languages. Just paste your list and hit Start.

💡 **Two modes of operation:**

1. **🔍 Search Mode** — Give it company names, brand names or keywords. It finds the matching companies and returns a full record for each. Filter by country, status and legal form.
2. **📋 Direct URL Mode** — Already know exactly which companies you want? Paste their North Data addresses and get one row per address, in the same order.

⚡ And a third way to use it: **monitoring**. Put your customer or supplier portfolio on a schedule and hear only about the companies whose register data actually changed — a new managing director, a move, an insolvency filing, a capital increase.

### 👥 Who Is This For?

| 🏢 Use Case                               | 💬 How It Helps                                                                                                                      |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| 🕵️ **Compliance & KYB teams**             | Verify a counterparty's legal identity, register number, status and directors before onboarding — across 26 countries from one place |
| 💼 **B2B sales & lead generation**        | Enrich a list of company names into a qualified pipeline with revenue, employee numbers, industry codes, websites and phone numbers  |
| 🏦 **Credit & risk analysts**             | Track published financials, capital changes and insolvency filings across a whole portfolio, automatically                           |
| 📰 **Investigative journalists**          | Follow ownership chains, spot shared directors and shared addresses, and map who really controls a company                           |
| 🤝 **M\&A and due diligence**              | Pull the complete corporate group — parents, subsidiaries, shareholders and the stated ownership shares                              |
| 📊 **Data teams building company graphs** | Get stable identifiers (register key, EU ID, LEI, ELF code, NACE, NAICS) to join registry data onto anything else                    |

### ✨ Features

- 🌍 **26 countries, one format** — Handelsregister, Companies House, Siren, KVK, KBO and more, all normalised into the same row shape
- 🆔 **Every identifier that matters** — register number and court, register key, EU ID, LEI, ELF code, VAT ID, stock tickers
- 👔 **Officers with their roles** — the full list of directors, board members and authorised signatories, not just the top name
- 💰 **Published financials** — revenue, earnings, equity, total assets, employee numbers and share capital per financial year, each with the publication it came from
- 📅 **Register timeline** — registration, name and address changes, capital changes, management changes, mergers, insolvency filings, trademarks and public funding
- 🕸️ **Corporate network** — parents, subsidiaries and connected people, with the ownership share where the register states it
- 📍 **Geocoded addresses** — street, postal code, city, region, country plus latitude and longitude, ready to map
- 🏭 **Industry classification** — NACE, NACE 2025, ISIC, NAICS, WZ and UK SIC codes side by side
- 🔄 **Change monitoring** — on a schedule, return only companies that are new or genuinely changed; typically 80-95% less output
- 🔔 **Alerts** — get a Telegram, Slack, Discord or webhook ping the moment something in your portfolio moves
- 🌐 **Three output languages** — English, German or French labels
- 🎛️ **Smart Filters** — country, status, legal form, keyword, minimum employees, only companies with published figures
- ⚡ **Fast & Scalable** — thousands of companies per run; a single-company lookup finishes in a couple of seconds
- 🧹 **Deduplication** — the same company is never returned twice, however many of your search terms matched it
- 📤 **Export Anywhere** — download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                                          | What It Does                                                                |
| ----------------------------------------------- | --------------------------------------------------------------------------- |
| 🏷️ **Company names or keywords**                | One entry per company or search term — look up a whole list in a single run |
| 🔗 **Company URLs**                             | Paste North Data company addresses directly for exact, one-to-one results   |
| 🌍 **Countries**                                | Restrict results to any of the 26 covered countries                         |
| 🚦 **Company status**                           | Keep only active, in-liquidation or terminated companies                    |
| ⚖️ **Legal forms**                              | Keep only GmbH, AG, Ltd., SA, B.V., sp. z o.o. and so on                    |
| 🗣️ **Output language**                          | English, German or French labels                                            |
| 💰 **Include published financials**             | Revenue, earnings, equity, assets and employee numbers per year             |
| 📅 **Include register events**                  | The company's full timeline with dates and sources                          |
| 👔 **Include officers and directors**           | Every person on record, with their role                                     |
| 🕸️ **Include corporate network**                | Parents, subsidiaries and connected people                                  |
| 🔍 **Corporate network size**                   | How far to walk the group — immediate relations or the whole tree           |
| ✅ **Must contain / must not contain**          | Keyword filters across name, city, website and corporate purpose            |
| 📈 **Only companies with published financials** | Drop companies that have never filed figures                                |
| 👥 **Minimum employees**                        | Keep only companies above a size threshold                                  |
| 🔄 **Only new or changed companies**            | Turn a lookup into a scheduled watch list                                   |
| 🔔 **Notifications**                            | Telegram, Slack, Discord or a webhook of your own                           |
| 📦 **Compact output**                           | A short row per company instead of every field                              |
| 🔢 **Max companies**                            | Control how many companies to return per run                                |

### 📦 What You Get (Output Fields)

Every company includes:

#### 🆔 Identity & Register

| Field           | Example                                  |
| --------------- | ---------------------------------------- |
| companyId       | `5735524187`                             |
| name            | `Siemens AG`                             |
| rawName         | `Siemens Aktiengesellschaft`             |
| legalForm       | `AG`                                     |
| status          | `active`                                 |
| foundingDate    | `1897-06-28`                             |
| registerId      | `HRB 6684`                               |
| registerCourt   | `München`                                |
| registerCountry | `DE`                                     |
| registerKey     | `128033306684`                           |
| euId            | `DED2601V.HRB6684`                       |
| lei             | `W38RGI023J3WT1HWRP32`                   |
| elfCode         | `6QQB`                                   |
| vatId           | `DE129274202`                            |
| stockSymbols    | `["SIA.BR", "SIEGY", "SMAWF", "SIE.DE"]` |
| riskLevel       | `GREEN`                                  |

#### 📍 Address & Contact

| Field            | Example                                             |
| ---------------- | --------------------------------------------------- |
| street           | `Werner-von-Siemens-Str. 1`                         |
| postalCode       | `80333`                                             |
| city             | `München`                                           |
| state            | `BY`                                                |
| country          | `DE`                                                |
| addressFormatted | `Werner-von-Siemens-Str. 1, 80333 München, Germany` |
| latitude         | `48.1443652`                                        |
| longitude        | `11.5746769`                                        |
| phone            | `+49 8963600`                                       |
| email            | `contact@siemens.com`                               |
| website          | `https://www.siemens.com`                           |

#### 🏭 Activity & Classification

| Field            | Example                                                              |
| ---------------- | -------------------------------------------------------------------- |
| corporatePurpose | `Development, manufacture, supply, operation and distribution of...` |
| proxyPolicy      | `The Company is represented by two members of the Managing Board...` |
| naceCodes        | `["27.90"]`                                                          |
| naicsCodes       | `["333618", "333318", "339950"]`                                     |
| isicCodes        | `["2790"]`                                                           |
| wzCodes          | `["27.90.0"]`                                                        |
| capitalAmount    | `2346000000`                                                         |
| capitalCurrency  | `EUR`                                                                |

#### 👔 People

| Field        | Example                                                           |
| ------------ | ----------------------------------------------------------------- |
| officerCount | `140`                                                             |
| officers     | `[{ "name": "Busch, Roland", "role": "CEO", "city": "München" }]` |

#### 💰 Financials

| Field            | Example                                                                |
| ---------------- | ---------------------------------------------------------------------- |
| latestRevenue    | `{ "value": 75930000000, "formattedValue": "€75.9B", "year": "2024" }` |
| latestEarnings   | `{ "value": 8301000000, "formattedValue": "€8.30B", "year": "2024" }`  |
| latestEquity     | `{ "value": 56231000000, "formattedValue": "€56.2B", "year": "2024" }` |
| latestEmployees  | `{ "value": 45000, "year": "2024" }`                                   |
| financials       | `[{ "fiscalYear": "2024", "consolidated": true, "items": { ... } }]`   |
| financialsCsvUrl | `https://www.northdata.com/indicators.csv?...`                         |

#### 📅 History & Network

| Field            | Example                                                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------------------- |
| events           | `[{ "date": "2024-10-15", "category": "management", "text": "CEO Peter Körte" }]`                       |
| eventCount       | `25`                                                                                                    |
| formerNames      | `[{ "name": "Siemens Setr", "date": "1986-09-26" }]`                                                    |
| formerAddresses  | `[{ "city": "Berlin", "date": "2017-05-09" }]`                                                          |
| networkCompanies | `[{ "name": "Siemens Energy AG", "companyId": "5678901234" }]`                                          |
| networkPersons   | `[{ "name": "Roland Busch", "city": "München" }]`                                                       |
| networkRelations | `[{ "from": "Siemens AG", "to": "Siemens Mobility GmbH", "relation": "Shareholder", "share": "100%" }]` |

### 📊 Example Output

```json
{
    "companyId": "5957967749578752",
    "name": "Aumann AG",
    "rawName": "Aumann AG",
    "legalForm": "AG",
    "status": "active",
    "foundingDate": "2012-01-31",
    "registerId": "HRB 16399",
    "registerCourt": "Münster",
    "registerCountry": "DE",
    "registerKey": "1248149016399",
    "euId": "DER2713.HRB16399",
    "lei": "529900GLI93PGU71F690",
    "elfCode": "6QQB",
    "vatId": "DE282538996",
    "stockSymbols": ["AAG.DE"],
    "riskLevel": "GREEN",
    "street": "Dieselstr. 6",
    "postalCode": "48361",
    "city": "Beelen",
    "state": "NW",
    "country": "DE",
    "addressFormatted": "Dieselstr. 6, 48361 Beelen, Germany",
    "latitude": 51.9319,
    "longitude": 8.1084,
    "phone": "+49 25868887800",
    "email": "info@aumann.com",
    "website": "https://www.aumann.com",
    "corporatePurpose": "Development, manufacture and distribution of machines and production lines for the e-mobility sector.",
    "proxyPolicy": "The Company is represented by two members of the Managing Board.",
    "naceCodes": ["28.29"],
    "naicsCodes": ["333249"],
    "capitalAmount": 12905765,
    "capitalCurrency": "EUR",
    "capitalFormatted": "€12.9M",
    "officerCount": 4,
    "officers": [
        {
            "name": "Pollitt, Jan-Henrik",
            "firstName": "Jan-Henrik",
            "lastName": "Pollitt",
            "role": "Member of the Executive Board",
            "city": "Gütersloh",
            "profileUrl": "https://www.northdata.com/Pollitt,%20Jan-Henrik,%20G%C3%BCtersloh/rml"
        }
    ],
    "latestRevenue": { "value": 312346000, "formattedValue": "€312.3M", "unit": "EUR", "year": "2024" },
    "latestEarnings": { "value": 11284000, "formattedValue": "€11.3M", "unit": "EUR", "year": "2024" },
    "latestEmployees": { "value": 1100, "formattedValue": "1,100", "unit": null, "year": "2024" },
    "financialsCsvUrl": "https://www.northdata.com/indicators.csv?filename=financials_aumann_ag",
    "eventCount": 25,
    "events": [
        {
            "date": "2026-02-25",
            "category": "nameOrRegister",
            "subjectType": "filing",
            "text": "Company statute",
            "source": "Hrcdd"
        }
    ],
    "formerNames": [{ "name": "MBB Fertigungstechnik GmbH", "legalForm": "GmbH", "date": "2016-11-24" }],
    "formerAddresses": [],
    "networkRelations": [
        { "from": "Aumann AG", "to": "Aumann Berlin GmbH", "relation": "Shareholder", "share": "100%", "current": true }
    ],
    "lastUpdatedOnSource": "2026-08-22T04:11:03.921Z",
    "profileUrl": "https://www.northdata.com/Aumann%20AG,%20Beelen/Amtsgericht%20M%C3%BCnster%20HRB%2016399",
    "contentHash": "ee5e6584ac1a81ea322e7a61fbfdf8085698f951",
    "scrapedAt": "2026-08-23T17:55:03.906Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **six ready-made table views** to quickly browse your results:

| View                      | What It Shows                                                                              |
| ------------------------- | ------------------------------------------------------------------------------------------ |
| 📊 **Overview**           | Company, legal form, status, register number, registrar, country, city, address            |
| 🆔 **Identifiers**        | Every reference number in one place — register, EU ID, LEI, ELF, VAT, NACE, NAICS, tickers |
| 📇 **Contacts**           | Address, phone, e-mail, website and the number of officers on record                       |
| 💰 **Financials**         | Revenue, earnings, equity, employees, share capital and the figures download link          |
| 🔄 **Monitoring changes** | What changed since the last run, when each company was first and last seen                 |
| 📋 **All fields**         | Every single field — the complete dataset                                                  |

### ❓ FAQ

**🤔 Which countries are covered?**
Twenty-six: 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. Every one of them was tested individually.

**🤔 Do I get the complete financial statements?**
You get what the registers actually publish: revenue, earnings, equity, total assets, employee numbers, share capital and more, per financial year, with the publication and auditor behind each figure — plus a download link for the full figures table. North Data keeps its own deepest financial analysis behind a subscription, and this scraper does not go there.

**🤔 How exact is the company matching?**
Very. Paste a company URL and you get that exact company. Search by name and it uses the register number and city to tell apart companies that share a name — the two different "Siemens AG" entities in Munich and Berlin come back as two separate rows, correctly.

**🤔 What happens if a company cannot be found?**
You still get a row, with whatever the search knew about it and a flag saying the full profile was unavailable. A list of 500 companies always returns 500 rows, so nothing silently vanishes from your spreadsheet.

**🤔 How does the change monitoring work?**
The first run records what every company looks like. Later runs compare against that and return only what is new or genuinely different — a new director, a move, a capital change, an insolvency filing. Give each watch list a name and you can run several schedules independently.

**🤔 How fast is it, and how do I keep it cheap?**
A single-company lookup takes a couple of seconds. Switching off the extras you do not need (officers is the heaviest) makes a large run about three times faster. For recurring runs, change monitoring is the big saving — typically 80-95% less output.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook or API endpoint.

**🤔 Does it work with proxies?**
Yes, and the proxy option is on by default. North Data limits how many requests it accepts from a single address, so spreading a run across several addresses is what keeps large or frequent runs reliable.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (industry code ranges, revenue bands, specific registers, director name matching, shared-address detection)
- 📊 Extra data fields, a flattened financial table, or a custom output format
- 🔄 Integration with your CRM, KYB workflow, Google Sheets or data warehouse
- ⏰ Scheduled monitoring of a portfolio with change alerts straight into Slack or Teams
- 🌐 Company data from other registry sources alongside North Data

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** — the same company records any visitor can read on the site without logging in. It does not log into accounts, does not touch subscriber-only pages, and does not attempt to reach anything behind a paywall.

The site's robots file was read and respected before a line of this was written. That file names about twenty specific crawlers and blocks each one by name; it sets no rules for anyone else, so this scraper is not among those excluded — and it identifies itself as an ordinary browser rather than borrowing the name of a blocked crawler. Requests are kept to a modest number in parallel, well under the point where the site starts to push back, and a refused request backs off instead of hammering.

Registry data about companies is public by law and by design. Please still use it responsibly, in line with applicable laws — including data-protection rules where officer names are personal data — and with the site's terms of service.

# Actor input Schema

## `queries` (type: `array`):

One entry per company or search term, e.g. <b>Siemens AG</b>, <b>Tesco plc</b>, <b>Zalando SE</b>. Each entry is searched separately, so you can look up a whole list of companies in one run. Works with plain names, brand names and register numbers.

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

Paste North Data company page addresses directly — one row comes back for each. Use this when you already know exactly which companies you want. Search result addresses work too and are expanded into a search.

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

Restrict results to these countries. All 26 were verified individually against the live site. Leave empty to search everywhere.

## `statuses` (type: `array`):

Keep only companies in these states. Leave empty to include every company, whatever its state.

## `legalForms` (type: `array`):

Keep only these legal forms, written exactly as they appear on the company page — for example <b>GmbH</b>, <b>AG</b>, <b>Ltd.</b>, <b>SA</b>, <b>B.V.</b>, <b>sp. z o.o.</b>

## `language` (type: `string`):

The language of labels and descriptions in the results. Company names, addresses and register numbers always come back in their original form.

## `maxResults` (type: `integer`):

Stop after this many companies. Set to <b>0</b> for no limit.

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

Revenue, earnings, equity, total assets, employee numbers and more, per financial year, with the publication each figure came from. Only what the registers actually publish — North Data keeps its deepest financial analysis behind its own paywall.

## `includeEvents` (type: `boolean`):

The company's timeline: registration, name and address changes, capital changes, management changes, mergers, insolvency filings, public funding and patents — each with its date and source register.

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

The full list of people on record with their roles (CEO, managing director, board member, authorised signatory) and their home cities. This is the slowest option — one heavier page load per company.

## `includeNetwork` (type: `boolean`):

Parent companies, subsidiaries and associated people, with the ownership relationship and share where the register states it.

## `networkMaxNodes` (type: `integer`):

How far to expand the corporate network. Small numbers give the immediate parents and subsidiaries; large numbers walk the whole group and take noticeably longer.

## `includeKeywords` (type: `array`):

Keep only companies whose name, city, website or corporate purpose contains all of these words.

## `excludeKeywords` (type: `array`):

Drop companies whose name, city, website or corporate purpose contains any of these words.

## `onlyWithFinancials` (type: `boolean`):

Drop companies that have never filed figures. Needs "Include published financials" switched on.

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

Keep only companies whose latest published employee number is at least this. Set to 0 to ignore. Needs "Include published financials" switched on.

## `incrementalMode` (type: `boolean`):

Remembers what it saw last time and returns only companies that are new or whose register data actually changed. On a scheduled watch list this typically cuts the output by 80-95%.

## `stateKey` (type: `string`):

A name for this watch list, so several schedules can track different portfolios independently. Leave empty and one is derived from your search settings.

## `emitUnchanged` (type: `boolean`):

Return every company every run, tagged with whether it changed. Useful for a full snapshot with change flags.

## `emitExpired` (type: `boolean`):

Add a row for each company that was on the list before and is no longer found.

## `webhookUrl` (type: `string`):

Send the new and changed companies to this address as JSON at the end of each run.

## `telegramBotToken` (type: `string`):

Token of the Telegram bot that should send you the summary.

## `telegramChatId` (type: `string`):

The chat or channel that receives the summary.

## `discordWebhookUrl` (type: `string`):

Post the summary into a Discord channel.

## `slackWebhookUrl` (type: `string`):

Post the summary into a Slack channel.

## `notificationLimit` (type: `integer`):

How many companies to list in the message before summarising the rest.

## `notifyOnlyChanges` (type: `boolean`):

Stay silent on runs that found nothing new.

## `includeRunSummary` (type: `boolean`):

Add the counts of new, changed and disappeared companies to the webhook payload.

## `compact` (type: `boolean`):

Return a short row per company — identity, register, address, contact details and the headline financials — instead of every field.

## `excludeEmptyFields` (type: `boolean`):

Leave out fields that have no value for a given company, for a slimmer export.

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

How many companies to look up at the same time. North Data starts refusing requests above roughly 16 from one address, so 8 is the safe default and 16 the hard ceiling.

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

North Data limits requests per address. A proxy spreads a run across several addresses and lets a refused request retry from a different one, which is what keeps larger runs and several simultaneous runs working.

## Actor input object example

```json
{
  "queries": [
    "Siemens AG"
  ],
  "startUrls": [],
  "countries": [],
  "statuses": [],
  "legalForms": [],
  "language": "en",
  "maxResults": 25,
  "includeFinancials": true,
  "includeEvents": true,
  "includeOfficers": true,
  "includeNetwork": false,
  "networkMaxNodes": 25,
  "includeKeywords": [],
  "excludeKeywords": [],
  "onlyWithFinancials": false,
  "minEmployees": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notificationLimit": 10,
  "notifyOnlyChanges": true,
  "includeRunSummary": true,
  "compact": false,
  "excludeEmptyFields": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `identifiers` (type: `string`):

No description

## `financials` (type: `string`):

No description

## `monitoring` (type: `string`):

No description

# 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 = {
    "queries": [
        "Siemens AG"
    ],
    "startUrls": [],
    "countries": [],
    "statuses": [],
    "legalForms": [],
    "includeKeywords": [],
    "excludeKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/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 = {
    "queries": ["Siemens AG"],
    "startUrls": [],
    "countries": [],
    "statuses": [],
    "legalForms": [],
    "includeKeywords": [],
    "excludeKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("trev0n/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 '{
  "queries": [
    "Siemens AG"
  ],
  "startUrls": [],
  "countries": [],
  "statuses": [],
  "legalForms": [],
  "includeKeywords": [],
  "excludeKeywords": []
}' |
apify call trev0n/northdata-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trev0n/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/vKs8nu688v4F1se82/builds/BQzeXGc8tjTOa94Aw/openapi.json
