# Company Data API - Global Business Registry Search (`nabeelbaghoor/global-business-registry-api`) Actor

Search a global registry database of companies by country, city, region, SIC industry code, headcount, revenue, founding year and data completeness. Returns name, address, registration number, CEO, phone, email, website and group structure as flat rows. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/global-business-registry-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$12.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/platform/actors/running/actors-in-store#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

## Company Data API - Global Business Registry Search

Search a worldwide registry database of companies and pull the matches as flat rows: legal name, trade name, full address, official registration number, CEO, phone, email, website, industry code, headcount, revenue, founding year and the corporate group chain above the company.

### What this actor does

- **Filters on real registry fields**, not a keyword box: ISO country code, province, region, city, street, postal code, four digit SIC industry code, legal status, company status and subsidiary code.
- **Filters on size and age** with true ranges: total headcount, on-site headcount, annual revenue, founding year and numeric postal code, each with an independent minimum and maximum.
- **Filters on data completeness**, which is what makes a list usable: only companies that have an email, a phone, a website, a named CEO, a contact person, a registration number or a street address.
- **Walks large result sets with the provider's scroll cursor** rather than deep offset paging, and stops the moment a page adds nothing new so a plan that does not page cannot loop and re-charge.
- **Separates search from export.** Search returns the preview record and is the cheap way to size a filter set. Export returns the full record and draws on your export allowance, so the actor never spends export credit unless you ask it to.
- **Keeps the untouched API record** under `raw` alongside the flat promoted columns.

### Input

| Field | What it does |
| --- | --- |
| `endpoint` | Search for the preview record, or export for the full record. |
| `search` | Free text terms matched across the record. |
| `countryCode`, `countryName` | ISO two letter codes, or full names when you lack the code. |
| `provinceName`, `regionName`, `cityName`, `streetName`, `postalCode` | Geographic narrowing. |
| `sic4Digits` | Four digit industry activity codes. |
| `legalStatus`, `statusCode`, `subsidiaryCode`, `importExportCode` | Registry classification codes. |
| `ids`, `nationalId`, `worldwideHeadquarterId` | Direct lookups by provider ID, registration number, or whole corporate group. |
| `employeesTotalMin/Max`, `employeesHereMin/Max` | Headcount ranges. |
| `annualSalesMin/Max` | Revenue range. |
| `foundingYearsMin/Max` | Founding year range. |
| `postalCodeIntegerMin/Max` | Numeric postal code range. |
| `hasEmail`, `hasPhone`, `hasWebsite`, `hasCEOName`, and the other presence flags | Data completeness filters. |
| `advancedParams` | Raw query string pairs for anything this form does not list. Wins over the fields above. |
| `useScroll`, `pageSize`, `maxResults` | Paging mode, page size and the hard cap on spend. |
| `apiKey` | Your own API key, sent in the `x-api-key` header. Stored as a secret. |

### Example output

```json
{
  "recordType": "company",
  "matched": true,
  "id": "492871553",
  "name": "Van Dijk Logistiek B.V.",
  "tradeName": "Van Dijk Logistics",
  "website": "vandijklogistiek.nl",
  "email": "info@vandijklogistiek.nl",
  "phone": "20 4567890",
  "phoneCountryCode": "31",
  "addressLine1": "Dam 12",
  "city": "Amsterdam",
  "stateProvince": "Noord-Holland",
  "postalCode": "1012 JS",
  "country": "Netherlands",
  "registrationNumber": "34215567",
  "ceoName": "P. van Dijk",
  "ceoTitle": "Directeur",
  "businessCategory": "Freight transport by road",
  "businessCategoryCode": "4213",
  "foundingYear": "2004",
  "employeesTotal": 84,
  "employeesHere": 61,
  "annualSalesUsd": 18400000,
  "currencyCode": "EUR",
  "globalHqName": "Van Dijk Holding B.V.",
  "companiesInGroup": 4,
  "raw": { }
}
```

### Frequently asked questions

#### What data does this company data API return?

Each row carries the company's legal name and trade name, address status, two address lines, city, state or province, postal code and country, the official registration number and its type code, phone with country dialling code, fax, email and website, the CEO name and title, the business category with its numeric code, founding year, legal type, location type, total and on-site headcount, annual revenue in local currency and US dollars, and the local, national and global headquarters IDs and names with the size of the corporate group. Export records also carry executive names and titles.

#### Do I need my own API key?

Yes. This actor does not include data access. You use your own API key from CompanyData.com, which is the provider whose API this actor calls. Your own plan, search allowance and export allowance apply. Paste the key into the `apiKey` field, where it is stored as an Apify secret and sent in the `x-api-key` request header rather than as a URL parameter, so it never appears in a log line or a redirect.

#### What is the difference between the search and export endpoints?

Search returns a preview record and is the cheap way to check that a filter set matches the companies you expect. Export returns the complete record, including the headquarters chain and executives, and consumes your export allowance. The actor defaults to search so a filter experiment never quietly spends export credit.

#### How do I filter by company size or revenue?

Use the range fields. `employeesTotalMin` and `employeesTotalMax` bound company-wide headcount, `employeesHereMin` and `employeesHereMax` bound the headcount at that specific location, and `annualSalesMin` and `annualSalesMax` bound yearly revenue. Either side of a range can be left empty for an open-ended bound.

#### Can I pull every company in a corporate group?

Yes. Put the group's global headquarters ID into `worldwideHeadquarterId` and every member of that group is returned. Each row also carries the local, national and global headquarters ID and name, so you can walk the structure from any member you already have.

#### How do I use a filter this form does not list?

Put it in `advancedParams` as query string pairs joined by `&`, for example `legalStatus=3&hasBusinessName=true`. Anything there is sent verbatim and overrides a form field of the same name, so your own API reference stays the authority on what your plan supports.

#### How much does a run cost?

Pricing is pay per result: you are charged for each company returned to the dataset, and duplicates are not charged. Apify platform usage is included in the per-result price. Your own API provider's search and export allowances are separate and billed by them.

#### Why did my run stop early?

Either it hit `maxResults`, or a page returned only companies already collected. The second case means the result set is not paging for your key, and the actor stops rather than looping over the same records and charging again. Narrow the filter to reach different companies.

### Keyword map

company data API, business registry API, company search API, global company database, firmographic data API, company lookup by country, SIC code search, company registration number lookup, B2B company list building, corporate group structure API, headcount and revenue filters, company enrichment API, business data export, chamber of commerce data, international company records

# Actor input Schema

## `endpoint` (type: `string`):

Search returns a preview record and is the cheap way to size a filter set. Export returns the full company record including headquarters chain and executives, and draws on your export allowance.

## `search` (type: `array`):

Free text terms matched across the company record, one per line, for example a company name or a trade name.

## `countryCode` (type: `array`):

ISO two letter country codes, one per line, for example NL, DE or US.

## `countryName` (type: `array`):

Full country names, one per line. Use this only when you do not have the ISO code.

## `provinceName` (type: `array`):

Province or state names, one per line.

## `regionName` (type: `array`):

Region names, one per line.

## `cityName` (type: `array`):

City names, one per line. Spellings must match the provider's city list.

## `streetName` (type: `array`):

Street names, one per line.

## `postalCode` (type: `array`):

Exact postal codes, one per line. To match a postal code range instead, use the numeric postal code range fields below.

## `sic4Digits` (type: `array`):

Four digit industry activity codes, one per line, for example 7372.

## `legalStatus` (type: `array`):

Legal form or status codes as defined in your API reference, one per line.

## `statusCode` (type: `array`):

Company status codes as defined in your API reference, one per line.

## `subsidiaryCode` (type: `array`):

Subsidiary status codes, one per line, used to include or exclude group subsidiaries.

## `importExportCode` (type: `array`):

Trade activity classification codes, one per line.

## `ids` (type: `array`):

Provider company IDs to fetch directly, one per line. This is how you re-pull records you already stored.

## `nationalId` (type: `array`):

Official company registration numbers, one per line, for example a chamber of commerce number.

## `worldwideHeadquarterId` (type: `array`):

Global headquarters IDs, one per line. Use this to pull every member of a corporate group.

## `phoneNumber` (type: `array`):

Phone numbers to match, one per line.

## `email` (type: `array`):

Email addresses to match, one per line.

## `employeesTotalMin` (type: `integer`):

Lowest company-wide headcount to include.

## `employeesTotalMax` (type: `integer`):

Highest company-wide headcount to include.

## `employeesHereMin` (type: `integer`):

Lowest headcount at this specific location.

## `employeesHereMax` (type: `integer`):

Highest headcount at this specific location.

## `annualSalesMin` (type: `integer`):

Lowest yearly revenue to include, as a whole number.

## `annualSalesMax` (type: `integer`):

Highest yearly revenue to include, as a whole number.

## `foundingYearsMin` (type: `integer`):

Earliest founding year to include, for example 2000.

## `foundingYearsMax` (type: `integer`):

Latest founding year to include, for example 2010.

## `postalCodeIntegerMin` (type: `integer`):

Lowest numeric postal code to include, for countries whose postal codes are numeric.

## `postalCodeIntegerMax` (type: `integer`):

Highest numeric postal code to include.

## `hasEmail` (type: `boolean`):

Return only companies that have at least one email address on record.

## `hasPhone` (type: `boolean`):

Return only companies that have a phone number on record.

## `hasWebsite` (type: `boolean`):

Return only companies that have a website on record.

## `hasCEOName` (type: `boolean`):

Return only companies whose top executive is named on the record.

## `hasContactPerson` (type: `boolean`):

Return only companies that carry at least one named contact.

## `hasNationalID` (type: `boolean`):

Return only companies that carry an official national registration number.

## `hasStreetAddress` (type: `boolean`):

Return only companies with a street level address rather than a postal box.

## `hasFax` (type: `boolean`):

Return only companies that have a fax number on record.

## `hasMarketability` (type: `boolean`):

Return only companies the provider flags as contactable for marketing.

## `advancedParams` (type: `string`):

Any additional filters, written as query string pairs joined by &, for example legalStatus=3\&hasBusinessName=true. Whatever you put here wins over the fields above, so it is also the way to override one. Use it for filters your plan has that this form does not list.

## `useScroll` (type: `boolean`):

Walk the result set with the provider's scroll cursor, which is what it intends for a large extract. Turn this off to use simple page number paging instead, which is fine for small repeatable pulls.

## `pageSize` (type: `integer`):

Records per request. The provider's documented maximum is 100.

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

Stop after this many companies. This is the cap on both spend and run time.

## `apiKey` (type: `string`):

Your own business registry data API key, sent in the x-api-key header. The actor never ships a key of its own: your plan, quota and terms apply.

## Actor input object example

```json
{
  "endpoint": "search",
  "countryCode": [
    "NL"
  ],
  "hasEmail": false,
  "hasPhone": false,
  "hasWebsite": false,
  "hasCEOName": false,
  "hasContactPerson": false,
  "hasNationalID": false,
  "hasStreetAddress": false,
  "hasFax": false,
  "hasMarketability": false,
  "useScroll": true,
  "pageSize": 100,
  "maxResults": 100
}
```

# 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 = {
    "countryCode": [
        "NL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/global-business-registry-api").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 = { "countryCode": ["NL"] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/global-business-registry-api").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "countryCode": [
    "NL"
  ]
}' |
apify call nabeelbaghoor/global-business-registry-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nabeelbaghoor/global-business-registry-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GX0srDH5QtUuEVQer/builds/63QxRUkENohQFkVPZ/openapi.json
