# Companies House API & Company Registry – UK, France, LEI (`ram1eal/company-registry-search`) Actor

Search and monitor companies in official registers: UK Companies House, France SIRENE (with revenue) and the global LEI database. KYB risk score, filing health, new companies daily. Clean English data, pay per company.

- **URL**: https://apify.com/ram1eal/company-registry-search.md
- **Developed by:** [Hiếu Trần Quang](https://apify.com/ram1eal) (community)
- **Categories:** Business, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Companies House API & Company Registry – UK, France, LEI

Look up and monitor companies from **official registers**: **UK Companies House**, France's SIRENE register (with **revenue and net income**) and the **global LEI register** (every country). Everything comes back in clean, consistent **English** data. Built for **KYB / vendor due diligence**, **B2B lead lists** and **monitoring newly incorporated companies**.

**Try it free:** a test with 10 companies costs about $0.04 – covered by the $5 monthly credit of the free Apify plan. After that, **$3 per 1,000 companies**, no subscription.

### Why this one

- **KYB risk score with reasons.** Every company gets `riskScore` (0–100) and `riskSignals` – insolvency proceedings or history, closed/inactive, accounts or confirmation statement overdue, incorporated in the last 30 days / 6 months, dormant, lapsed LEI. Explainable, so you can apply your own policy.
- **One schema for several registers.** UK, French and global LEI records share the same English fields. French LEI records are linked to their SIREN.
- **Daily new companies in the UK and France.** Filter new incorporations by date, industry (SIC / NACE) and town or department. Run it on a schedule and get each new company once.
- **Business-ready enrichment.** Official NACE Rev.2 industry names, legal form in English, company size and employee range. French revenue and net income are **converted to USD**. UK records add filing health: last accounts, accounts type, overdue flags and insolvency history.
- **Clean sourcing.** Official registers only. Business data only: no directors, no persons with significant control, no sole proprietors, no personal data.
- **Built for scheduled runs.** "Only new or changed companies" mode: run it daily and pay only for what changed.
- **Pay only for results.**

### Compared with alternatives

|                               | This Actor                                       | Typical alternatives     |
| ----------------------------- | ------------------------------------------------ | ------------------------ |
| Registers in one schema       | UK + France + global LEI                         | Usually one country      |
| KYB risk score with reasons   | Yes (insolvency, overdue accounts, new company…) | No                       |
| New companies daily (UK, FR)  | Yes, relative dates ("7 days")                   | Rarely                   |
| Only new or changed companies | Yes, unchanged are free                          | No                       |
| Personal data                 | Never (no officers, no sole traders)             | Often directors and PSCs |

### What you get

- Company name, other, trade or previous names, registry ID (UK company number, SIREN or LEI), VAT number, LEI ↔ SIREN link
- Status (active/closed/inactive) plus the register's detailed status (e.g. `liquidation`), legal form, incorporation and closure dates
- Registered office address (coordinates for France)
- Industry: NACE code, official English label and sector; UK SIC codes as filed
- Size: company category, employee range, number of establishments (France)
- Financials (France): latest revenue and net income, currency, USD conversion
- Filing health (UK): last accounts date, accounts type (micro-entity, small, full, group…), accounts or confirmation statement overdue, insolvency history, charges
- LEI register: LEI status and next renewal date, entity category

### KYB risk signals

| Signal                                                | Points |
| ----------------------------------------------------- | ------ |
| insolvency_proceedings (liquidation, administration…) | 40     |
| not_active (closed, dissolved, inactive)              | 40     |
| insolvency_history                                    | 25     |
| incorporated_last_30_days                             | 25     |
| accounts_overdue                                      | 20     |
| incorporated_last_6_months                            | 15     |
| dormant_company                                       | 15     |
| lei_lapsed                                            | 15     |
| confirmation_statement_overdue                        | 10     |

The score is the sum, capped at 100. A healthy, established company scores 0.

### Sample output

```json
{
  "id": "GB-00445790",
  "source": "find-and-update.company-information.service.gov.uk",
  "country": "GB",
  "name": "TESCO PLC",
  "otherNames": ["TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY"],
  "registryId": "00445790",
  "registryIdType": "UK_COMPANY_NUMBER",
  "status": "active",
  "legalForm": "Public limited company",
  "incorporationDate": "1947-11-27",
  "address": {
    "line": "Tesco House, Shire Park, Kestrel Way",
    "postalCode": "AL7 1GA",
    "city": "Welwyn Garden City",
    "country": "GB"
  },
  "industryCode": "47.11",
  "industry": "Retail sale in non-specialised stores with food, beverages or tobacco predominating",
  "sicCodes": ["47110"],
  "lastAccountsDate": "2026-02-28",
  "accountsType": "group",
  "accountsOverdue": false,
  "hasInsolvencyHistory": false,
  "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
}
```

French records also include `revenue`, `netIncome`, `revenueUsd`, `companySize` and `employeesRange`.

### How to use

1. Type a company name or keyword, or paste a list of UK company numbers or SIREN / SIRET / VAT / LEI numbers.
2. Optionally filter:
   - by industry (NACE code like `62.01`, UK SIC code like `62012`, or a section letter like `J`);
   - by location (UK town or postcode, or French postal code or department);
   - by country (LEI register);
   - by "registered since" (a date, or a period like `7 days`).
3. Click Start. Export as JSON, CSV or Excel, or call it from your app via the Apify API.

### Use cases

- **New company leads (UK and France):** every day, list companies created in the last 7 days in your industry and area. Useful for accountants, banks, insurers, SaaS and web agencies.
- **KYB and vendor checks:** verify that a supplier exists and is active, and check its accounts are not overdue and it has no insolvency history.
- **B2B prospecting:** list active French companies in an industry and area, with revenue bands.
- **New-company monitoring:** schedule a daily run with "Registered since" + "Only new or changed".
- **Data enrichment:** turn a list of registry IDs into a clean company table.

### Pricing

Pay per result, platform usage included:

| Apify plan | Per 1,000 companies | Per run |
| ---------- | ------------------- | ------- |
| Free       | $3.00               | $0.005  |
| Starter    | $2.80               | $0.005  |
| Scale      | $2.50               | $0.005  |
| Business   | $2.00               | $0.005  |

You only pay for companies delivered: zero results cost nothing, and in "only new or changed" mode unchanged companies are free. Example: checking one supplier costs about $0.008.

### Cost examples

- Check 1 supplier: ≈ $0.008
- 1,000 new UK companies (a daily lead list): $3
- Monitor 500 customers monthly (only changes): usually < $0.50

### Use it from code, n8n or AI agents

Run it from the Apify API, the Python or JavaScript client, n8n, Make or Zapier – or let an AI agent call it through the **Apify MCP server** (Claude, ChatGPT, Cursor).

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ram1eal/company-registry-search").call(run_input={"searchQuery":"tesco","sources":["uk"],"maxItems":10})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client
  .actor('ram1eal/company-registry-search')
  .call({ searchQuery: 'tesco', sources: ['uk'], maxItems: 10 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**MCP:** add `ram1eal/company-registry-search` to the Apify MCP server and ask in plain English – the agent fills the input and pays per result.

### Data sourcing & compliance

- UK: [Companies House public data API](https://developer.company-information.service.gov.uk/). Company information from the public register. Officers and persons with significant control are never requested.
- France: [API Recherche d'entreprises](https://recherche-entreprises.api.gouv.fr) (data.gouv.fr). SIRENE open data under Licence Ouverte / Etalab 2.0.
- France, new companies: [INSEE API Sirene](https://portail-api.insee.fr/). SIRENE open data under Licence Ouverte / Etalab 2.0.
- Global: [GLEIF API](https://www.gleif.org/en/lei-data/gleif-api). LEI data under CC0.
- Officers, directors and sole proprietors (individuals) are excluded by design.

### FAQ

- **Is this legal?** Yes. It uses official public-register APIs that allow reuse of company information.
- **Why do some French companies not appear?** Sole proprietors and entities that restricted publication are excluded to protect personal data.
- **Can I get directors or contact persons?** No. This Actor returns business data only.
- **Large UK runs?** Name searches look up each company's details (one request per company). For very large or frequent UK jobs you can add your own free Companies House API key in the input.
- **What if something breaks?** Open an issue. Typical response is under 12 hours.

### More tools from this author

- [Impressum Scraper – German Company Data, HRB & VAT Check](https://apify.com/ram1eal/company-imprint) – German/Austrian/Swiss company data from the Impressum, VAT checked
- [Contact Info Scraper – Company Emails, Phones & Socials](https://apify.com/ram1eal/company-contact-finder) – company e-mails, phones and social profiles, GDPR-safe
- [WHOIS Lookup & Domain Checker – Age, DNS, Email, SSL](https://apify.com/ram1eal/domain-intelligence) – bulk WHOIS: domain age, DNS, email provider, SSL and risk
- [SEC EDGAR API – Company Financials, 10-K Data & Filings](https://apify.com/ram1eal/sec-company-financials) – SEC EDGAR financials and 10-K/10-Q/8-K filings by ticker
- [Public Tenders – EU TED & UK Find a Tender Procurement](https://apify.com/ram1eal/public-tenders-search) – EU TED & UK Find a Tender notices with daily alerts
- [Shopify Scraper – Products, Prices, Stock & Price Monitor](https://apify.com/ram1eal/shopify-store-products) – any Shopify store: products, prices, stock, price-drop alerts
- [Tech Stack Detector – BuiltWith & Wappalyzer Alternative](https://apify.com/ram1eal/website-tech-stack) – 3,500+ technologies per website, plus the email provider
- [SAM.gov & USAspending – US Federal Contracts & Awards](https://apify.com/ram1eal/us-federal-contracts) – new US federal contract awards and SAM.gov opportunities
- [Startup Funding Rounds – Crunchbase Alternative (SEC Form D)](https://apify.com/ram1eal/startup-funding-rounds) – US startups raising money, daily from SEC Form D

### Need custom data?

Need another country's register or a custom KYB dataset? Open an issue describing what you need.

### Input reference

| Field                  | Type    | Default | Description                                                         |
| ---------------------- | ------- | ------- | ------------------------------------------------------------------- |
| `searchQuery`          | string  | –       | Company name or keyword                                             |
| `registryIds`          | array   | –       | UK company numbers, SIREN, SIRET, French VAT or LEI numbers         |
| `sources`              | array   | all     | `france`, `uk`, `gleif`                                             |
| `maxItems`             | integer | 100     | Maximum companies to return                                         |
| `onlyNew`              | boolean | false   | Only companies new or changed since the previous run                |
| `country`              | string  | –       | ISO country code for the LEI register                               |
| `industryCode`         | string  | –       | NACE code (`62.01`), UK SIC code (`62012`) or section letter (`J`)  |
| `location`             | string  | –       | UK town/postcode, or French postal code/department                  |
| `status`               | string  | active  | `active` or `all`                                                   |
| `newSince`             | date    | –       | Incorporated on/after this date, or within e.g. `7 days` (all)      |
| `includeFinancials`    | boolean | true    | Revenue (France); SIC, accounts and insolvency for UK name searches |
| `companiesHouseApiKey` | string  | –       | Optional own Companies House key for large UK runs                  |
| `stateKey`             | string  | –       | Name of the history used by "only new or changed"                   |

### Changelog

- 0.3 – New French companies from INSEE Sirene ("Registered since" now covers France).
- 0.2 – UK Companies House: name and company-number lookup, new-company search by date, SIC industry and town, filing health. Relative dates ("7 days") for scheduled runs.
- 0.1 – France SIRENE + global LEI register, English enrichment, only-new mode.

# Actor input Schema

## `searchQuery` (type: `string`):

Company name or keyword, e.g. "airbus" or "bakery".

## `registryIds` (type: `array`):

French SIREN/SIRET/VAT numbers, UK company numbers (e.g. 00445790, SC123456) or LEI codes, one per line. Each is looked up directly.

## `sources` (type: `array`):

Which official registers to search.

## `maxItems` (type: `integer`):

Stop after this many companies. You pay per company.

## `onlyNew` (type: `boolean`):

For scheduled runs: return (and pay for) only companies that are new or changed since your previous run with the same search.

## `country` (type: `string`):

Two-letter country code to filter the global LEI register, e.g. DE or US.

## `industryCode` (type: `string`):

NACE code like 62.01, a UK SIC code like 62012, or a section letter like J. With the UK register you can search by industry alone.

## `location` (type: `string`):

French postal code (75008) or department (75), or a UK town or postcode (Leeds, M1). A location limits the search to that country.

## `status` (type: `string`):

Include closed companies or not.

## `newSince` (type: `string`):

Only companies created on or after this date, or within a relative period like "7 days". Ideal for scheduled "new companies" lead lists in France and the UK.

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

France: latest revenue and net income with USD conversion. UK name searches: SIC codes, accounts and insolvency flags (slower: one extra lookup per company).

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

Runs with the same history name share what was already delivered. Leave empty to use one history per search.

## `companiesHouseApiKey` (type: `string`):

Only for very large UK runs: a free key from developer.company-information.service.gov.uk gives you your own rate limit. Never logged or stored in results.

## Actor input object example

```json
{
  "searchQuery": "airbus",
  "sources": [
    "france",
    "uk",
    "gleif"
  ],
  "maxItems": 20,
  "onlyNew": false,
  "status": "active",
  "includeFinancials": true
}
```

# Actor output Schema

## `results` (type: `string`):

One record per company: name, registry IDs (SIREN/LEI/VAT), status, legal form, incorporation date, address, NACE industry with English label, size, employees range, latest revenue and net income (France, with USD), LEI status. Business data only.

## `runSummary` (type: `string`):

JSON summary of the run: requests made, items delivered and charged, items skipped as unchanged (only-new mode), why the run stopped (maxItems, spending limit, no more results) and error counts by type.

# 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 = {
    "searchQuery": "airbus",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("ram1eal/company-registry-search").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 = {
    "searchQuery": "airbus",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("ram1eal/company-registry-search").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 '{
  "searchQuery": "airbus",
  "maxItems": 20
}' |
apify call ram1eal/company-registry-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ram1eal/company-registry-search"
        }
    }
}
```

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/T0LfCSFUVbzNEMQgv/builds/CB3JgXy6Wgv8NnGKa/openapi.json
