# UK Companies House Scraper: Company Lists | $1/1K (`one_dollar_store/uk-company-register-bulk-scraper`) Actor

UK companies from the Companies House free monthly file: company number, name, status, type, address, SIC codes, accounts dates, charges. Filter by SIC, postcode, town, age and name. $1 per 1,000 results, platform usage included.

- **URL**: https://apify.com/one_dollar_store/uk-company-register-bulk-scraper.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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?

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

## UK Companies House Scraper: company lists by SIC code, postcode, age and status

**$1 per 1,000 companies. Platform usage included. No rental, no minimum.**

UK Companies House Scraper builds company lists from the free Companies House company data file, the monthly snapshot of every live company on the UK register (about 5.7 million). Each row has up to 50 fields: company number, name, status, type, incorporation date, a split registered office address, SIC codes with names, accounts and confirmation statement dates, charges and previous names. You filter by SIC code, postcode area, town, status, company type, incorporation date, name and accounts category, so one run produces a ready lead list.

The four most used Companies House actors on Apify Store charge $1.50 to $50.00 per 1,000 results (Store prices checked 27 October 2026). This actor returns UK company records for $1.

[Open it in Apify Console](https://console.apify.com/actors/k2OOt4pAT6t14art9/input)

### How much does UK Companies House Scraper cost?

| Companies | This actor | Most used Companies House actors on the Store |
|---|---|---|
| 1,000 | $1.00 | $1.50 to $50.00 |
| 10,000 | $10.00 | $15 to $500 |
| 100,000 | $100.00 | $150 to $5,000 |

Plus $0.001 per run. A monthly pull of 3,000 new software companies costs about $3 a month.

### Why use it

- **One flat price.** The bill follows the number of companies and nothing else. Compute is included.
- **Filters that build a lead list.** SIC codes (a full code or a short start such as `62`), postcode areas and districts, towns, status, company type, incorporation date range or "last N days", name words, accounts category, accounts overdue and outstanding charges.
- **Wide, clean rows.** Dates are ISO, the address is split into street, town, county, postcode, postcode area and country code, SIC codes come with their names and an industry section, and `companiesHouseUrl` links every row to the register page for officers and filings.
- **Fast on narrow filters.** The 494 MB file is searched as text for your most selective filter, so only the matching lines are parsed. A 50 company run took about 2 seconds, and reading the whole file for a filter that matches nothing took about 100 seconds.
- **Official open data.** The file is published by Companies House under the Open Government Licence v3.0. No key, no login, no scraping of web pages.

### How to use UK Companies House Scraper

1. Open the actor, adjust the filters, press **Start**.
2. Or paste this input (software and IT companies in central London, active only):

```json
{ "sicCodes": ["62012", "62020"], "postcodes": ["EC", "WC"], "statuses": ["Active"], "maxItems": 500 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

For a list of newly formed companies:

```json
{ "incorporatedWithinDays": 30, "sicCodes": ["62", "70229"], "maxItems": 1000 }
```

The file is a snapshot dated the first of the month, so "the last 30 days" ends on the file date.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~uk-company-register-bulk-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sicCodes": ["62012"], "postcodes": ["EC"], "maxItems": 100}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/uk-company-register-bulk-scraper").call(
    run_input={"sicCodes": ["62012", "62020"], "postcodes": ["EC", "WC"], "statuses": ["Active"], "maxItems": 500}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["companyNumber"], item["name"], item["postalCode"], item.get("primarySicDescription"))
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/uk-company-register-bulk-scraper
```

Then ask, for example: "List 200 active UK companies in SIC 62012 with a Manchester postcode that were formed in the last two years."

### Switching from another Companies House actor

Most Companies House actors take a company number or a name to look up. This one takes filters and returns many companies per run: `sicCodes`, `postcodes`, `towns`, `statuses`, `companyTypes`, `incorporatedFrom`, `incorporatedTo`, `nameContains` and `maxItems`. The core fields are `companyNumber`, `name`, `status`, `companyType`, `incorporationDate`, `registeredAddress`, `sicCodes` and `companiesHouseUrl`. It does not return officers, persons with significant control or filing documents, because the free file does not hold them.

### Input

Every filter you fill in must match. A filter you leave empty is ignored. The default status filter is `Active`.

| Field | Type | Default | What it does |
|---|---|---|---|
| `sicCodes` | list | none | SIC 2007 codes. A full five digit code (`62012`) or a start (`62`, `6201`). A code that does not exist in the file matches nothing and is reported. |
| `sicMatch` | text | `any` | `any` looks at all four SIC codes of a company, `primary` only at the first. |
| `postcodes` | list | none | Postcode areas (`EC`, `M`) or districts (`EC1V`, `SW1A`). `SW1` covers `SW1A` but not `SW10`. |
| `towns`, `counties` | list | none | Post town or county of the registered office, in any capitals. |
| `statuses` | list | `Active` | Exact register statuses such as `Active`, `Active - Proposal to Strike off` or `Liquidation`. Clear the list for all. |
| `companyTypes` | list | none | Company types such as `Private Limited Company`, `Limited Liability Partnership` or `Community Interest Company`. |
| `incorporatedFrom`, `incorporatedTo` | text | none | Incorporation date range, `YYYY-MM-DD`. |
| `incorporatedWithinDays` | number | none | Companies formed in the last N days (up to the file date). |
| `nameContains`, `nameExcludes` | list | none | Keep names with any of these words, or drop names that have any. |
| `accountsCategories` | list | none | Type of the last accounts: `MICRO ENTITY`, `DORMANT`, `FULL`, `SMALL` and others. |
| `accountsOverdue` | text | `any` | `yes` keeps active companies whose next accounts date is before the file date. |
| `outstandingCharges` | text | `any` | `yes` keeps companies with a charge (mortgage) still outstanding, `no` the others. |
| `maxItems` | number | 100 | Stop after this many companies (10 to 100,000). |

Example, active micro entities with a Leeds postcode and an outstanding charge:

```json
{
  "postcodes": ["LS"],
  "accountsCategories": ["MICRO ENTITY"],
  "outstandingCharges": "yes",
  "maxItems": 1000
}
```

### What data does UK Companies House Scraper return?

| Field | Meaning |
|---|---|
| `companyNumber`, `companyNumberPrefix` | The register number and its letter prefix (`SC` Scotland, `NI` Northern Ireland, `OC` or `SO` limited liability partnership, `LP` limited partnership). Plain numbers have no prefix. |
| `name`, `previousName`, `previousNameChangedOn`, `previousNames`, `previousNameCount` | Registered name and up to ten earlier names with the date each was dropped. |
| `status`, `isActive`, `proposedStrikeOff` | Register status text and two flags worked out from it. |
| `companyType`, `countryOfOrigin` | Company category and country of formation as the file writes them. |
| `incorporationDate`, `companyAgeYears`, `dissolutionDate` | Dates as `YYYY-MM-DD` and the age in whole years on the day of the run. |
| `careOf`, `poBox`, `addressLine1`, `addressLine2`, `city`, `county`, `country`, `countryCode`, `postalCode` | Registered office address, split into parts. `countryCode` is the two letter ISO code. |
| `postcodeArea`, `postcodeDistrict`, `registeredAddress` | The leading letters of the postcode, the outward code, and the whole address on one line. |
| `primarySicCode`, `primarySicDescription`, `sicCodes`, `sicDescriptions` | The main SIC code and its name, and all codes (up to four). |
| `industrySection`, `industrySectionName` | SIC 2007 section letter A to U and its name, for example `J` Information and communication. |
| `accountsCategory`, `accountsRefDay`, `accountsRefMonth`, `accountsNextDueDate`, `accountsLastMadeUpDate`, `accountsOverdue` | Type of the last accounts, the year end, the dates and an overdue flag against the file date. |
| `confirmationStatementNextDueDate`, `confirmationStatementLastMadeUpDate`, `confirmationStatementOverdue` | Confirmation statement dates and an overdue flag against the file date. |
| `returnsNextDueDate`, `returnsLastMadeUpDate` | Dates of the old annual return, mostly empty for newer companies. |
| `chargesTotal`, `chargesOutstanding`, `chargesPartSatisfied`, `chargesSatisfied`, `hasOutstandingCharges` | Number of registered charges (mortgages) and how many are still outstanding. |
| `generalPartners`, `limitedPartners` | Partner counts, only for limited partnerships and Scottish partnerships. |
| `companiesHouseUrl`, `dataUri` | Link to the company page on the Companies House service, and the open data identifier. |
| `sourceFile`, `fileDate`, `scrapedAt` | The part file the row came from, the date of the snapshot and the collection time. |

### Sample results

Real rows from test runs on 27 October 2026. Some fields are left out here to keep the page short.

```json
[
 {"companyNumber": "11168742", "name": "'ENG PA' LIMITED", "status": "Active", "companyType": "Private Limited Company", "incorporationDate": "2018-01-25", "companyAgeYears": 8, "registeredAddress": "C/O JOHNSTON CARMICHAEL BIRCHIN COURT, 20 BIRCHIN LANE, LONDON, EC3V 9DU, ENGLAND", "postcodeArea": "EC", "primarySicCode": "62012", "primarySicDescription": "Business and domestic software development", "accountsCategory": "TOTAL EXEMPTION FULL", "accountsNextDueDate": "2027-10-31", "chargesTotal": 0, "chargesOutstanding": 0, "fileDate": "2026-10-01"},
 {"companyNumber": "SC288561", "name": "A SURED LTD", "status": "Active", "companyType": "Private Limited Company", "incorporationDate": "2005-08-08", "companyAgeYears": 21, "registeredAddress": "18 NORTH SILVER STREET, ABERDEEN, AB10 1JU, SCOTLAND", "postcodeArea": "AB", "primarySicCode": "68209", "primarySicDescription": "Other letting and operating of own or leased real estate", "accountsCategory": "TOTAL EXEMPTION FULL", "accountsNextDueDate": "2026-12-31", "chargesTotal": 12, "chargesOutstanding": 11, "fileDate": "2026-10-01", "previousName": "ASSURANCE HOMES LIMITED", "previousNameChangedOn": "2026-07-21", "companyNumberPrefix": "SC"},
 {"companyNumber": "SO300397", "name": ".....1ST CALL LOCKSMITHS (EDINBURGH) LLP", "status": "Active", "companyType": "Limited Liability Partnership", "incorporationDate": "2004-06-22", "companyAgeYears": 22, "registeredAddress": "19 BRUNSTANE GARDENS, PENICUIK, MIDLOTHIAN, EH26 9AA", "postcodeArea": "EH", "accountsCategory": "TOTAL EXEMPTION FULL", "accountsNextDueDate": "2028-01-05", "chargesTotal": 0, "chargesOutstanding": 0, "fileDate": "2026-10-01", "companyNumberPrefix": "SO"},
 {"companyNumber": "17483976", "name": "2 TO 1 POWERLIFTING LTD", "status": "Active", "companyType": "Private Limited Company", "incorporationDate": "2026-09-27", "companyAgeYears": 0, "registeredAddress": "81A ADELAIDE GROVE, LONDON, W12 0JX, UNITED KINGDOM", "postcodeArea": "W", "primarySicCode": "62012", "primarySicDescription": "Business and domestic software development", "accountsCategory": "NO ACCOUNTS FILED", "accountsNextDueDate": "2028-06-27", "chargesTotal": 0, "chargesOutstanding": 0, "fileDate": "2026-10-01"}
]
```

### Limits

- **Live companies only.** The Companies House file lists companies that are on the register today: Active (about 5.17 million), Active with a proposal to strike off (about 423,000), in liquidation (about 108,000) and a few thousand in administration or receivership. Dissolved companies are not in the file.
- **No contact details.** The file has no email, phone number or website, and no officers, persons with significant control, filings or financial figures. It gives the type of the last accounts and the dates, not the numbers. Use `companiesHouseUrl` to open the register page for a company.
- **A monthly snapshot.** Companies House publishes the file within five working days of the end of each month. The actor reads the current file named on the download page, so a new month needs nothing from you. `fileDate` on every row says which snapshot it is.
- **File order.** Rows come in the order of the file, which is alphabetical by company name. With a small `maxItems` you get the first matches in that order, not a random sample.
- **Narrow filters read the whole file.** A filter that matches few companies makes the actor read all 494 MB (about 100 seconds). A filter that matches many stops early. Asking for 5,000 companies with a filter spread over the whole file took about 2.5 minutes.
- **Overdue flags** compare the due date with the file date. A company may have filed since then.
- **Addresses** are written as the register holds them, mostly in capitals. The country is empty for about one company in six; `countryCode` is then taken from the postcode.
- **Company level data only.** Registered office addresses are public, but a few belong to a director's home. The file holds no officer names, and the actor adds none.
- One record in the file is split over two lines by the publisher and is skipped.
- Runs from a free Apify plan return the first 10 results.

### FAQ

**What is the cheapest Companies House scraper on Apify?**
This actor costs $1 per 1,000 companies with platform usage included. The most used Companies House actors on the Store charged $1.50 to $50.00 per 1,000 when we checked on 27 October 2026.

**How much does it cost to get 10,000 UK companies?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. The price covers platform usage. The data comes from the Companies House download site, so no proxy is used.

**Where does the data come from, and how fresh is it?**
From the free company data product on download.companieshouse.gov.uk. It is a snapshot published once a month, and the run in this README used the file dated 1 October 2026. Every row carries `fileDate`.

**Why are dissolved companies missing?**
The free file only lists live companies. Companies House does not publish dissolved ones in this product.

**Can I get emails, phone numbers or director names?**
No. The file does not hold them. For officers and filings, use the Companies House website or its official API, which needs a free key.

**Is it legal?**
Yes. Companies House publishes this file for anyone to download free of charge under the Open Government Licence v3.0, which allows commercial use. Contains public sector information licensed under the Open Government Licence v3.0. The download site's robots.txt has no restrictions. The file is company data, but registered office addresses can be a person's home, so follow UK GDPR and the rules on marketing (PECR) when you contact anyone.

**Is this an official Companies House product?**
No. It is an independent actor that reads the free public data file. Companies House does not support or endorse it.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### Feedback and support

Found a problem or want a field added? Open an issue on the Issues tab of this actor and it gets read. If the actor saved you time, an honest rating on the Reviews tab helps other people find it.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Company records**

- [Bundesanzeiger Scraper](https://apify.com/one_dollar_store/bundesanzeiger-filings-scraper): German company filings and notices.
- [US Business Registry Search](https://apify.com/one_dollar_store/us-business-registry-search): Company records from 6 US state registries.
- [France Company Search](https://apify.com/one_dollar_store/france-company-register-sirene): French companies from the official SIRENE register.
- [Sanctions List Search](https://apify.com/one_dollar_store/sanctions-list-search): Name search across four official sanctions lists.
- [SEC Company Financials](https://apify.com/one_dollar_store/sec-company-financials-xbrl): Reported financial figures for US listed companies.
- [Norway Company Search](https://apify.com/one_dollar_store/norway-company-register-brreg): Norwegian companies from the official Brreg register.
- [GLEIF LEI Lookup](https://apify.com/one_dollar_store/gleif-lei-lookup): Legal entity identifiers and ownership links.
- [SEC 13F Holdings](https://apify.com/one_dollar_store/sec-13f-institutional-holdings): What funds hold, from 13F filings.
- [SEC Form 4 Scraper](https://apify.com/one_dollar_store/sec-form-4-insider-trades): Insider buys and sells from Form 4.
- [EU VAT Validator](https://apify.com/one_dollar_store/eu-vat-number-validator): Check EU VAT numbers against VIES.

### Changelog

- 27 October 2026: clearer description and headings, field details for AI tools. Price and output unchanged.
- October 2026: first release.

# Actor input Schema

## `sicCodes` (type: `array`):

Keep companies with one of these SIC 2007 codes. Use a full five digit code such as 62012 (business software development) or a shorter start such as 62 (all computer programming and consultancy) or 6201. The file lists up to four codes per company; by default any of them can match. Leave empty for every industry.

## `sicMatch` (type: `string`):

Look at all SIC codes of a company, or only its first (main) one.

## `postcodes` (type: `array`):

Keep companies whose registered office postcode is in one of these areas or districts, for example EC, M, SW (areas) or EC1V, SW1A, B33 (districts). A district such as SW1 also covers SW1A but not SW10.

## `towns` (type: `array`):

Keep companies whose registered office post town is one of these, for example Leeds or Cardiff. Capital letters do not matter. The town must be spelled as the register spells it.

## `counties` (type: `array`):

Keep companies whose registered office county is one of these, for example Hertfordshire. Many addresses have no county, so postcodes or towns are more reliable.

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

Keep companies with one of these statuses. The default is Active. The file lists live companies only, so dissolved companies are never included. Clear the list for every status.

## `companyTypes` (type: `array`):

Keep companies of these types. Leave empty for all types.

## `incorporatedFrom` (type: `string`):

Keep companies incorporated on or after this date (YYYY-MM-DD).

## `incorporatedTo` (type: `string`):

Keep companies incorporated on or before this date (YYYY-MM-DD).

## `incorporatedWithinDays` (type: `integer`):

Keep companies incorporated in the last N days before the run, for new company lead lists. The file is a monthly snapshot, so the newest companies are those up to the file date.

## `nameContains` (type: `array`):

Keep companies whose name contains any of these words or phrases. Capital letters do not matter. Searching a very common word such as limited returns most of the register.

## `nameExcludes` (type: `array`):

Drop companies whose name contains any of these words or phrases.

## `accountsCategories` (type: `array`):

Keep companies whose last accounts are of these types, for example MICRO ENTITY or DORMANT. Leave empty for all.

## `accountsOverdue` (type: `string`):

Keep only active companies whose next accounts due date is before the file date, or only those that are not. Companies may have filed since the file was made.

## `outstandingCharges` (type: `string`):

Keep only companies with a charge (mortgage) still outstanding, or only those without.

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

Stop after this many companies (minimum 10, maximum 100,000). The file is read in alphabetical order of company name, and the run ends as soon as this many are found. A narrow filter can need the whole file, which takes a few minutes.

## Actor input object example

```json
{
  "sicCodes": [
    "62012"
  ],
  "sicMatch": "any",
  "postcodes": [
    "EC",
    "WC"
  ],
  "statuses": [
    "Active"
  ],
  "incorporatedFrom": "2025-01-01",
  "incorporatedTo": "2025-12-31",
  "accountsOverdue": "any",
  "outstandingCharges": "any",
  "maxItems": 50
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "sicCodes": [
        "62012"
    ],
    "postcodes": [
        "EC",
        "WC"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/uk-company-register-bulk-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 = {
    "sicCodes": ["62012"],
    "postcodes": [
        "EC",
        "WC",
    ],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/uk-company-register-bulk-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 '{
  "sicCodes": [
    "62012"
  ],
  "postcodes": [
    "EC",
    "WC"
  ],
  "maxItems": 50
}' |
apify call one_dollar_store/uk-company-register-bulk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,one_dollar_store/uk-company-register-bulk-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/k2OOt4pAT6t14art9/builds/ZQQaozhKmignhe8tE/openapi.json
