# UK Company Data API - Financials, Employees, Filings (`nabeelbaghoor/uk-company-data-api`) Actor

Search UK and Ireland registered companies by name, status, industry, region, headcount and filed financials including turnover, EBITDA, net assets and post-tax profit, with year-on-year growth filters. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/uk-company-data-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

$15.00 / 1,000 company 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

## UK Company Data API - Financials, Employees, Filings

Search registered companies in the United Kingdom and Ireland and export the matches as clean rows. Filter by name, country, registration status, incorporation date, industry, keywords, website domain and region, and by the numbers companies actually file: employees, turnover, EBITDA, net assets, total assets and post-tax profit. Every financial filter has a growth twin, so you can ask for companies whose turnover grew more than 20 percent as easily as companies with turnover above 5 million. You pay only for the companies you actually receive.

This actor is built for building a target list of UK and Irish businesses, screening suppliers, sizing a market, running credit and risk prechecks, and finding fast-growing companies before anyone else does.

### What you can do with it

- Build a list of active UK companies in a given industry, region and size band.
- Find high-growth companies by filtering on year-on-year turnover, EBITDA or headcount growth.
- Screen suppliers or prospects by net assets, total assets and post-tax profit before you commit.
- Pull registration number, incorporation date and official status for a compliance or KYC file.
- Match a list of website domains back to their registered legal entities.
- Export everything as JSON, CSV or Excel, or push it into your CRM or warehouse.

### Features

- Every documented criterion is a real input field, built in the exact JSON shape the API expects: plain text for names, `values` plus `mode` for lists, and `min` plus `max` for ranges.
- Twelve range filters covering headcount and five financial measures, each with a value range and a year-on-year growth range.
- Match modes on the list filters, so `any` and `all` are both a single dropdown away.
- Country codes are lower-cased automatically, which is the only form the provider matches.
- A `rawCriteria` passthrough sends any criterion the API supports that is not modelled here, so a new filter never needs a code change.
- A preview toggle runs the same search against the provider sandbox, letting you check criteria without consuming live quota.
- Financial fields are split into a value column and a currency column, with the original object kept intact.
- The registered or primary address is preferred over whichever address happens to come first.
- Duplicate companies are removed across pages before anything is charged.
- Rate limits are handled with retry-after aware backoff, and a run that hits a limit keeps everything already collected.
- Pay-per-result pricing with a hard result cap so a run can never surprise you.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `name` | string | Match the registered company name. |
| `countryCodes` | array | Two-letter country codes, for example `gb`, `ie`. |
| `simplifiedStatuses` | array | Registration statuses such as `Active`. |
| `incorporatedMin` / `incorporatedMax` | string | Incorporation date window, `YYYY-MM-DD`. |
| `industries`, `keywords`, `domainNames`, `regions` | array | List filters on what a company does and where. |
| `employeesMin` / `employeesMax` | integer | Headcount range. |
| `turnoverMin` / `turnoverMax` | integer | Turnover range in the filing currency. |
| `ebitdaMin` / `ebitdaMax` | integer | EBITDA range. |
| `netAssetsMin` / `netAssetsMax` | integer | Net assets range. |
| `totalAssetsMin` / `totalAssetsMax` | integer | Total assets range. |
| `postTaxProfitMin` / `postTaxProfitMax` | integer | Post-tax profit range, negatives allowed. |
| `…GrowthMin` / `…GrowthMax` | integer | Year-on-year percentage change for each measure above. |
| `creditRisk` | array | Credit risk bands. Needs the credit report package. |
| `countryCodesMode`, `industriesMode`, `keywordsMode` | string | `any` or `all` for those list filters. |
| `rawCriteria` | object | Any extra criterion, merged last. |
| `usePreviewDataset` | boolean | Run against the sandbox instead of live data. |
| `maxResults` | integer | Stop after this many companies (1 to 20,000). |
| `pageSize` | integer | Companies per API call (1 to 100). |
| `apiKey` | string | Your API key. Required, stored securely. |

At least one criterion is required.

### Example output

Each dataset item is one company. Fields are populated where the provider has data, and the complete provider payload is kept under `raw`:

```json
{
  "companyId": "06463016",
  "countryCode": "gb",
  "name": "Example Trading Limited",
  "type": "Private limited company",
  "incorporationDate": "2007-12-19",
  "officialStatus": "Active",
  "simplifiedStatus": "Active",
  "numberOfEmployees": 184,
  "turnover": 24800000,
  "turnoverCurrency": "GBP",
  "ebitda": 3100000,
  "ebitdaCurrency": "GBP",
  "netAssets": 9450000,
  "netAssetsCurrency": "GBP",
  "totalAssets": 18700000,
  "totalAssetsCurrency": "GBP",
  "postTaxProfit": 2240000,
  "postTaxProfitCurrency": "GBP",
  "creditRisk": "Low risk",
  "addressLine": "12 Example Street",
  "city": "Manchester",
  "region": "Greater Manchester",
  "postalCode": "M1 4AB",
  "addressCountry": "United Kingdom",
  "industries": ["Wholesale of electronic equipment"],
  "keywords": ["distribution", "electronics"],
  "domains": ["exampletrading.co.uk"],
  "raw": { "companyId": "06463016", "name": "Example Trading Limited" }
}
```

### Pricing and the credit model

This actor uses pay-per-result pricing. You are charged a fixed price for each company delivered to the dataset, after duplicates are removed. A search that matches nothing costs nothing. Set `maxResults` to cap how many rows a run can collect, and set a run spending limit as a second safety net. Your own provider plan meters its own API calls separately, so a larger `pageSize` uses fewer of them for the same number of rows.

### Bring your own API key

This actor connects to a third-party UK and Ireland company data provider (FullCircl, formerly DueDil) on your behalf and requires your own provider API key. It is stored securely and never logged, and the actor never ships with or shares credentials.

### Frequently asked questions

#### What data does this actor return?

Registration number and country code, registered name and company type, incorporation date, official and simplified registration status, employee count, turnover, EBITDA, net assets, total assets and post-tax profit each with their currency, a credit risk band where your key includes it, the registered address broken into street, city, region, postal code and country, plus industries, keywords and website domains. Every record also carries the untouched provider payload.

#### Which countries are covered?

The company registry data covers the United Kingdom and Ireland. Pass the country codes in `countryCodes` as two-letter codes; the actor lower-cases them for you, since that is the only form the provider matches.

#### How do I find fast-growing companies?

Use the growth filters. Each financial measure has a percentage twin, so `turnoverGrowthMin` set to 20 returns companies whose turnover grew by at least 20 percent year on year. `employeesGrowthMin` does the same for headcount. Negative values select companies that shrank, which is useful for distress screening.

#### Why is my credit risk filter rejected?

Credit risk is a restricted criterion. It only works on API keys that include the credit report package, and the provider rejects the request outright otherwise. Remove `creditRisk` from the search or ask the provider to add the package to your key.

#### What is the preview dataset for?

Turning `usePreviewDataset` on runs the identical search against the provider's sandbox copy of the endpoint. It is the cheap way to confirm your criteria are well formed before spending live quota. The rows it returns are demo data, not real search results, so never treat them as live company records.

#### What is `rawCriteria` for?

It sends any criterion the data API accepts that does not yet have its own input field, in the API's own JSON shape. It is merged last, so it also overrides a modelled field when you need it to.

#### How does pagination work?

The API pages by `offset` and `limit`. The actor walks the offsets for you until it reaches `maxResults`, the provider's reported total, or a short page, and removes duplicates along the way.

#### How does the actor handle rate limits?

It throttles requests, honours the retry-after signal on a rate-limited response, and backs off exponentially. If the limit is still in force it stops early and keeps everything already collected rather than failing the whole run.

#### How am I charged?

You pay a fixed price per company returned to the dataset. Duplicates are removed before charging and empty runs cost nothing. Use `maxResults` and the run spending limit to control cost.

#### What output formats are available?

The dataset can be exported as JSON, CSV, Excel, HTML or RSS, or read through the API for pushing into a CRM or warehouse.

### Keyword map

uk company data api, companies house data api, uk company search api, ireland company data, company financials api, turnover data uk companies, ebitda data api, net assets data, post tax profit data, company registration number lookup, uk business database, high growth companies list, company credit risk data, kyc company data, supplier screening data, b2b data uk, firmographic data uk, company incorporation date search, sic industry search uk, registered company address data.

# Actor input Schema

## `name` (type: `string`):

Match the registered company name against this text.

## `countryCodes` (type: `array`):

Two-letter country codes to include, one per line, for example `gb` or `ie`. They are sent in lower case, which is what the provider matches on.

## `simplifiedStatuses` (type: `array`):

Simplified registration statuses to include, one per line, for example `Active` or `Closed`.

## `incorporatedMin` (type: `string`):

Earliest incorporation date, written as `YYYY-MM-DD`.

## `incorporatedMax` (type: `string`):

Latest incorporation date, written as `YYYY-MM-DD`.

## `industries` (type: `array`):

Industry identifiers to include, one per line, using the provider's own industry codes or labels.

## `keywords` (type: `array`):

Keywords to match against a company's description and filings, one per line.

## `domainNames` (type: `array`):

Website domains to match, one per line, for example `example.co.uk`.

## `regions` (type: `array`):

Regions to include, one per line, using the provider's region names.

## `employeesMin` (type: `integer`):

Only return companies with at least this many employees.

## `employeesMax` (type: `integer`):

Only return companies with at most this many employees.

## `employeesGrowthMin` (type: `integer`):

Only return companies whose headcount grew by at least this percentage. Negative values select companies that shrank.

## `employeesGrowthMax` (type: `integer`):

Only return companies whose headcount grew by at most this percentage.

## `turnoverMin` (type: `integer`):

Only return companies with at least this much turnover, in the filing currency. Plain number, no symbols.

## `turnoverMax` (type: `integer`):

Only return companies with at most this much turnover.

## `turnoverGrowthMin` (type: `integer`):

Only return companies whose turnover grew by at least this percentage.

## `turnoverGrowthMax` (type: `integer`):

Only return companies whose turnover grew by at most this percentage.

## `ebitdaMin` (type: `integer`):

Only return companies with at least this much EBITDA.

## `ebitdaMax` (type: `integer`):

Only return companies with at most this much EBITDA.

## `ebitdaGrowthMin` (type: `integer`):

Only return companies whose EBITDA grew by at least this percentage.

## `ebitdaGrowthMax` (type: `integer`):

Only return companies whose EBITDA grew by at most this percentage.

## `netAssetsMin` (type: `integer`):

Only return companies with at least this much in net assets.

## `netAssetsMax` (type: `integer`):

Only return companies with at most this much in net assets.

## `netAssetsGrowthMin` (type: `integer`):

Only return companies whose net assets grew by at least this percentage.

## `netAssetsGrowthMax` (type: `integer`):

Only return companies whose net assets grew by at most this percentage.

## `totalAssetsMin` (type: `integer`):

Only return companies with at least this much in total assets.

## `totalAssetsMax` (type: `integer`):

Only return companies with at most this much in total assets.

## `totalAssetsGrowthMin` (type: `integer`):

Only return companies whose total assets grew by at least this percentage.

## `totalAssetsGrowthMax` (type: `integer`):

Only return companies whose total assets grew by at most this percentage.

## `postTaxProfitMin` (type: `integer`):

Only return companies with at least this much post-tax profit. Negative values select loss-making companies.

## `postTaxProfitMax` (type: `integer`):

Only return companies with at most this much post-tax profit.

## `postTaxProfitGrowthMin` (type: `integer`):

Only return companies whose post-tax profit grew by at least this percentage.

## `postTaxProfitGrowthMax` (type: `integer`):

Only return companies whose post-tax profit grew by at most this percentage.

## `creditRisk` (type: `array`):

Credit risk bands to include, one per line. This filter is only available on API keys that include the credit report package; without it the provider rejects the request.

## `countryCodesMode` (type: `string`):

`any` matches a company in at least one of the listed countries. `all` requires every listed value to apply.

## `industriesMode` (type: `string`):

`any` matches at least one listed industry, `all` requires every one of them.

## `keywordsMode` (type: `string`):

`any` matches at least one listed keyword, `all` requires every one of them.

## `rawCriteria` (type: `object`):

Advanced. Any extra criterion the data API supports, as a JSON object using the API's own shapes, for example `{"employeesValue": {"min": 10, "max": 500}}`. Merged last, so it also overrides the fields above.

## `usePreviewDataset` (type: `boolean`):

When enabled, the search runs against the provider's sandbox dataset instead of live company data. Useful for checking your criteria without consuming live quota. Results are a limited demo set, not real search output.

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

Stop after this many companies (1-20,000). One row is one company.

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

How many companies to fetch per API call (1-100). Larger pages mean fewer calls against your provider quota.

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

Your own API key for the data provider. Required. It is issued in the provider's platform. Stored securely here and never logged.

## Actor input object example

```json
{
  "countryCodes": [
    "gb"
  ],
  "simplifiedStatuses": [],
  "industries": [],
  "keywords": [],
  "domainNames": [],
  "regions": [],
  "creditRisk": [],
  "countryCodesMode": "any",
  "industriesMode": "any",
  "keywordsMode": "any",
  "rawCriteria": {},
  "usePreviewDataset": false,
  "maxResults": 100,
  "pageSize": 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 = {
    "countryCodes": [
        "gb"
    ],
    "simplifiedStatuses": [],
    "industries": [],
    "keywords": [],
    "domainNames": [],
    "regions": [],
    "creditRisk": [],
    "rawCriteria": {},
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/uk-company-data-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 = {
    "countryCodes": ["gb"],
    "simplifiedStatuses": [],
    "industries": [],
    "keywords": [],
    "domainNames": [],
    "regions": [],
    "creditRisk": [],
    "rawCriteria": {},
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/uk-company-data-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 '{
  "countryCodes": [
    "gb"
  ],
  "simplifiedStatuses": [],
  "industries": [],
  "keywords": [],
  "domainNames": [],
  "regions": [],
  "creditRisk": [],
  "rawCriteria": {},
  "maxResults": 100
}' |
apify call nabeelbaghoor/uk-company-data-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MChm6Wfu3eEQL1aKF/builds/cXc16SbvUvExP7XV4/openapi.json
