# Companies House Data — UK Company Search, No API Key (`rein8/uk-companies-house-snapshot`) Actor

Companies House company data for all 5.7M UK companies, no API key: filter the monthly snapshot by SIC code, postcode, town, status, incorporation date, overdue accounts or company numbers. Leads, KYB, credit watch. OGL, no officers. Unofficial: not affiliated with or endorsed by Companies House.

- **URL**: https://apify.com/rein8/uk-companies-house-snapshot.md
- **Developed by:** [Rein X](https://apify.com/rein8) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 company delivereds

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

**Companies House company data for every live UK company, filterable like a spreadsheet — from Companies House's own free monthly file, with no API key and no account.**

- 📄 **What you get** — one row per live UK company, filtered by SIC code, postcode area, town, status (including proposal to strike off and liquidation), incorporation dates, overdue accounts, or your own list of company numbers: number, name, status, type, incorporation date, up to four SIC codes, registered office, deadlines, charges, previous name and the official page link.
- 🏛️ **Source** — the free monthly snapshot Companies House publishes for everyone (the *Free Company Data Product*); the Open Government Licence attribution on every row.
- 💵 **Price** — $2 per 1,000 companies plus $0.05 per run for reading the monthly file; the first 3 rows are free (Preview).
- 🔑 **No API key, no rate limit** — there is nothing to register and nothing to throttle; the Actor never touches the keyed API.
- 🔒 **No personal data** — company-level only: no officers, no persons with significant control.
- ⏱️ **Time to first result** — Preview: 3 companies, free of charge; a search that fills *Max companies* early returns in about a minute, one that must read the whole register takes about 5–7 minutes. A list of company numbers stops reading as soon as every number has been found (the file is sorted by company name).

| Company no. | Name | Post town | District | Incorporated | Accounts due | SIC |
|---|---|---|---|---|---|---|
| 16975462 | ABRAXOS SOLUTIONS LTD | ST ALBANS | AL1 | 2026-01-20 | 2027-10-20 | 62020, 63110, 70229 |
| 17195313 | ACO TECH SERVICES LTD | WELWYN | AL6 | 2026-05-01 | 2028-02-01 | 62020 |
| 17313746 | AGAULBS LTD | HATFIELD | AL10 | 2026-07-01 | 2028-04-01 | 62020, 62090 |
| 17157255 | AI & CO. CONSULTING LTD | ST ALBANS | AL1 | 2026-04-14 | 2028-01-14 | 62020, 70229, 82990 |
| 17316969 | AIBRICKS LTD | ST. ALBANS | AL4 | 2026-07-03 | 2028-04-03 | 62020 |

*Real rows from a test run on 25 Sep 2026 (September 2026 snapshot) with `{"sicCode": "62020", "postcodePrefix": "AL", "incorporatedFrom": "2026-01-01", "maxItems": 8}` — 5 of the 8 shown, postcode cut to the district here. Every row also carries the status, company type, full registered office, SIC descriptions, confirmation-statement deadline, charges, previous name and the official page link.*

**Price:** $2 per 1,000 companies plus $0.05 per run for reading the monthly file — 3 rows free. Apify's free plan ($5 of credit a month) covers about 2,400 companies a month at no cost to you.

#### Try it in 60 seconds

1. Tick **Preview (3 companies, free)** and press **Start**: three real companies, no charge.
2. Untick Preview and press **Start** again: the form is prefilled with SIC 62020 (IT consultancy) in the AL postcode area, 50 companies. A search that fills *Max companies* early returns in about a minute; one that must read the whole register takes up to about 7 minutes.
3. Download CSV, Excel or JSON — or call it from code:

```bash
curl -X POST "https://api.apify.com/v2/acts/rein8~uk-companies-house-snapshot/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=csv" \
  -H 'Content-Type: application/json' -d '{"sicCode":"62020","postcodePrefix":"AL","maxItems":50}'
```

### What does this Companies House company search do?

Companies House company data for every live UK company — about 5.7 million — filterable like a spreadsheet: "IT consultancies (SIC 62020) in St Albans incorporated this year", "companies in Bristol proposed for strike-off", "companies in Leeds with overdue accounts". Rows come from Companies House's own **free monthly snapshot** under the Open Government Licence, so there is **no API key to register, no rate limit to manage, and no officers or PSCs**.

Each row carries the Companies House company number, name, status, type, incorporation date, up to four SIC codes, the registered office, accounts and confirmation-statement deadlines, charges, the most recent previous name, and a link to the company's official page — plus the Open Government Licence attribution.

**When to use it:** you need registry facts about UK companies at scale — new company incorporations, list enrichment, status monitoring — without registering for the Companies House API. **When to use something else instead:** for officers, persons with significant control, filing history documents or real-time changes during the month, use the official Companies House service or API under your own account; this Actor reads the monthly snapshot only and never returns people.

### Why use the Companies House snapshot?

- **New-company leads** — new incorporations: companies registered since a date, in your SIC codes and postcode areas.
- **Accountants and bookkeepers** — companies whose accounts or confirmation statement are overdue, in your town.
- **Market sizing** — count and list active companies of an industry in a town or region.
- **KYB, supplier checks, company intelligence and Companies House enrichment** — paste your company numbers: status, type, overdue accounts and confirmation statements, charges, previous names.
- **Credit control** — monitor a ledger monthly with *Only companies not delivered before*: status changes (strike-off proposals, liquidation) come back as changed records.
- **No key to manage** — the snapshot is published free of charge with no login; the Actor never touches the rate-limited, keyed API.

#### Why this one

| | This Actor |
|---|---|
| Source | The Companies House *Free Company Data Product* (the monthly snapshot of every live company) |
| Account or API key | None |
| Personal data | None: no officers, no PSCs, and the "care of" address line is never mapped |
| Licence | Open Government Licence v3.0 attribution on every row (`_source`, `_licence`, `_sourceUrl`) |
| Monitoring | *Only companies not delivered before*; an unchanged monthly file ends the run at once and costs nothing |
| Pay for what you use | $2 per 1,000 companies delivered plus one $0.05 scan fee; filtered-out companies are never charged |

#### How this compares

*How this compares — Store facts from the scan of 2026-09-23, public Store API; rivals' figures change daily.*

| Actor | Users / 30 d | Success | Rating | Price per 1,000 |
|---|---|---|---|---|
| **This actor** | new | see live status | new | $2.00 + $0.05 per run |
| [scrapesage/companies-house-scraper](https://apify.com/scrapesage/companies-house-scraper) | 41 | 100% | no reviews | $4.00 |
| [logiover/uk-companies-house-bulk-scraper](https://apify.com/logiover/uk-companies-house-bulk-scraper) | 12 | 85% | no reviews | — |
| [lexis-solutions/companies-house-uk-scraper](https://apify.com/lexis-solutions/companies-house-uk-scraper) | 2 | 100% | 4.64★ (8) | — |
| [automation-lab/companies-house-uk-company-search-scraper](https://apify.com/automation-lab/companies-house-uk-company-search-scraper) | 2 | 100% | no reviews | — |
| [alkausari\_mujahid/ofsted-providers-companies-house-enrichment](https://apify.com/alkausari_mujahid/ofsted-providers-companies-house-enrichment) | 2 | 100% | no reviews | $5.00 |

**Only this actor, on every run:** no API key or account, official source (download.companieshouse.gov.uk), the licence stamped on every row (Open Government Licence v3.0 — contains public sector information licensed under the OGL v3.0), no personal data, a declared bot identity, and a free 3-row preview.

### Examples — ready-made inputs

#### Examples (one click)

Each example below is also a public Task with its own page — open it, press **Start**, and the input is already filled in:

- [Find Leeds companies with overdue accounts](https://apify.com/rein8/uk-companies-house-snapshot/examples/overdue-accounts-leeds)
- [Check a list of UK company numbers](https://apify.com/rein8/uk-companies-house-snapshot/examples/check-uk-company-numbers)
- [List Bristol companies proposed for strike-off](https://apify.com/rein8/uk-companies-house-snapshot/examples/strike-off-bristol)
- [Track new IT consultancies in St Albans monthly](https://apify.com/rein8/uk-companies-house-snapshot/examples/new-it-companies-al-monthly)

Or copy one into the **JSON** tab of the input, or save it as a Task.

**UK companies with overdue accounts in Leeds** (accountants' leads; every row says by how many days, measured on the snapshot date):

```json
{ "postTown": "LEEDS", "accountsOverdueMinDays": 1, "companyStatus": "Active", "maxItems": 500 }
```

**Check a list of UK company numbers** (status, deadlines and charges for your customers or suppliers; a number missing from the results is no longer on the live register or was mistyped):

```json
{ "companyNumbers": "13873404\n16975462\n17195313", "companyStatus": "any", "maxItems": 100 }
```

**UK companies proposed for strike-off in Bristol** (credit control, debt recovery):

```json
{ "postTown": "BRISTOL", "companyStatus": "Active - Proposal to Strike off", "maxItems": 500 }
```

**New IT consultancies in the AL postcode area — monthly feed** (schedule monthly; each run returns only companies you have not received yet):

```json
{ "sicCode": "62020", "postcodePrefix": "AL", "incorporatedFrom": "2026-01-01", "incremental": true, "stateKey": "al-it-new", "maxItems": 1000 }
```

### How to scrape Companies House data

**Quick start (3 steps):** set a **SIC code** and a **postcode area** → press **Start** → download CSV/JSON or connect the API.

1. Combine any filters: SIC codes, name words, company type, postcode areas or districts, post towns, status, incorporation dates, accounts or confirmation-statement due dates — or paste your own company numbers. Every filter is optional.
2. Set **Max companies** and run. The Actor reads the newest monthly snapshot (about 5.7 million companies) once and returns only the companies that match — a search that fills Max companies early stops sooner; a full scan takes about 6–7 minutes at the default memory (2 GB), less with more memory (Apify gives 1 CPU core per 4 GB).
3. **Monitoring mode:** turn on *Only companies not delivered before*, give it a state key, and schedule the Actor monthly (the snapshot is published in the first week of each month). Each run returns companies you have not received yet, plus changed records marked `_changed`; if the file has not changed since your last complete run, the run ends at once and costs nothing.

**Preview** returns 3 companies free of charge.

### Input

| Input | What it does |
|---|---|
| `companyNumbers` | Your own list of company numbers — one per line or separated by commas, tabs or spaces; leading zeros optional (445790 = 00445790, SC12345 = SC012345); up to 5,000 per run |
| `sicCode` | SIC codes, comma-separated; a company matches when any of its codes contains one — give full 5-digit codes (a short "43" would also match 74300). Words work too: the match runs on the code and its description, so "dental" finds 86230 (dental practices) and 32500 (dental instruments) |
| `nameContains` | Words the name must contain, comma-separated alternatives — which makes it a **name check**: paste "ACME TRADING LTD, FOO BAKERY LIMITED" (names as written on the register) and get those companies back, a few hundred names per run |
| `companyCategory` | Company type (words of the register's category: "Private Limited Company", "Limited Liability Partnership"…) |
| `postcodePrefix`, `postTown` | Postcode areas/districts; exact post towns |
| `companyStatus` | Active by default; "Any live status" keeps every status |
| `incorporatedFrom`, `incorporatedTo` | Incorporation date window (YYYY-MM-DD) |
| `accountsOverdueMinDays`, `confirmationOverdueMinDays` | Only filings overdue by at least N days on the snapshot date (1 = every late filer) |
| `accountsDueBefore`, `confirmationDueBefore` | Deadlines on or before a date (upcoming deadlines) |
| `accountsType` | Keep only these accounts types (multi-select: MICRO ENTITY, SMALL, FULL, DORMANT, NO ACCOUNTS FILED…). To leave dormant shells out, pick every type except DORMANT |
| `yearEndMonth` | Accounting reference month(s), 1–12: "December year-ends" for a practice planning its workload |
| `chargesOutstandingMin` | Companies with at least N outstanding charges (1 = has borrowed against its assets) |
| `maxItems`, `incremental` + `stateKey`, `preview` | Rows, monitoring, free preview |

### What data can this Actor extract?

#### All fields

| Field | Meaning |
|---|---|
| `companyNumber`, `companyName` | Company number (unique id) and registered name |
| `companyStatus`, `companyCategory`, `countryOfOrigin` | Active / proposal to strike off / liquidation…; Private Limited Company, Public Limited Company, Limited Liability Partnership…; country |
| `incorporationDate`, `dissolutionDate` | Dates as YYYY-MM-DD |
| `sicCodes` | Up to four SIC 2007 codes with their descriptions, in one cell |
| `sicCode1`…`sicCode4`, `sicDescription1`…`sicDescription4` | The same SIC codes split for spreadsheets: code and description in separate columns (empty when the register says "None Supplied") |
| `addressLine1`, `addressLine2`, `postTown`, `county`, `country`, `postalCode` | Registered office |
| `accountsCategory`, `accountsNextDue`, `accountsLastMadeUp` | Accounts type and deadlines |
| `accountsRefDay`, `accountsRefMonth` | Accounting reference date — the company's financial year end (31 / 12 = 31 December) |
| `accountsOverdueDays`, `confirmationOverdueDays` | Days past the deadline on the snapshot date (0 = not overdue) |
| `confirmationStatementNextDue`, `confirmationStatementLastMadeUp` | Confirmation statement deadlines |
| `chargesOutstanding`, `chargesTotal` | Registered charges (mortgages) |
| `previousName`, `previousNameUntil` | Most recent previous name and when it changed |
| `companyUrl` | The company's page on the official Companies House service |
| `_source`, `_licence`, `_sourceUrl` | Attribution on every row: Companies House, Open Government Licence v3.0 |

#### Example output

A real record (September 2026 snapshot):

```json
{
  "companyNumber": "16092999",
  "companyName": "!ABRIDGE TAX LTD",
  "companyStatus": "Active",
  "companyCategory": "Private Limited Company",
  "incorporationDate": "2024-11-21",
  "postTown": "HATFIELD",
  "postalCode": "AL9 5BL",
  "sicCodes": "62020 - Information technology consultancy activities",
  "accountsCategory": "MICRO ENTITY",
  "accountsNextDue": "2027-08-31",
  "accountsOverdueDays": 0,
  "confirmationStatementNextDue": "2026-12-04",
  "confirmationOverdueDays": 0,
  "chargesOutstanding": 0,
  "previousName": "BLUECASE LTD",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/16092999",
  "_source": "Companies House",
  "_licence": "Open Government Licence v3.0 — contains public sector information licensed under the OGL v3.0"
}
```

### Output

One dataset item per company (fields above) and a `STATS` record: the snapshot file used, rows read, filters applied, companies filtered out, and any errors.

*If this helped, an honest review on the Store page helps others find licence-clean company data; if it did not, an issue on the Issues tab gets a reply within one business day.*

**Fields for AI agents.** Every row also carries `summary` — one plain-English sentence built from the row, empty values left out (e.g. *X LTD (00445790) is Active, Private Limited Company, incorporated 2015-03-01, registered in LEEDS LS1 4AP, accounts due 2026-07-31, confirmation statement due 2026-09-01.*). When you filter by `postTown`, the run also counts — during the same scan, nothing extra is fetched or charged — the companies it skipped for the town alone in the same postcode areas as your results, and says so in the run's status line and in `STATS.nearby` (e.g. *You searched LEEDS; 1,240 more companies matched in nearby LS areas → postcodePrefix=LS*). A finished run's status line names the row count and mentions that a review helps others find the actor.

### How much will it cost to get Companies House data?

| Event | When | Price |
|---|---|---|
| `scan` | once per run, when the monthly file is read (never in preview, never when the file is unchanged) | $0.05 |
| `result` | each company delivered | $0.002 |

| Scenario | Rows | Cost |
|---|---|---|
| Preview | 3 | $0 |
| IT consultancies (62020) in AL postcodes incorporated since 2024 | ~350 | ~$0.75 |
| Every active company in one town | ~5,000 | ~$10.05 |
| Monthly new-company feed for five SIC codes nationwide | ~2,000 / month | ~$4.05 / month |

You pay for the companies delivered plus one flat scan fee; filtered-out companies are never charged.

### Integrations and automation

- **API (curl):** `curl -X POST "https://api.apify.com/v2/acts/rein8~uk-companies-house-snapshot/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=csv" -H 'Content-Type: application/json' -d '{"sicCode":"62020","postcodePrefix":"AL","maxItems":500}'`
- **Python:** `ApifyClient(token).actor("rein8/uk-companies-house-snapshot").call(run_input={"postTown": "LEEDS", "accountsOverdueMinDays": 1, "maxItems": 500})` then `client.dataset(run["defaultDatasetId"]).iterate_items()`.
- **Schedule + Google Sheets:** a monthly schedule with *Only companies not delivered before*, and the Apify → Google Sheets integration in append mode.
- **n8n / Make / Zapier:** Apify node → *Run actor* → *Get dataset items* → CRM or e-mail.
- **AI assistants:** see the next section — this Actor is an MCP tool.

### Use with AI agents (MCP, Claude, Cursor)

This Actor is already a tool on Apify's hosted MCP server. Add it to Claude Desktop, Claude.ai, Cursor, VS Code or ChatGPT with one URL — the server signs you in with OAuth on first connect, so no API token goes into the config:

`https://mcp.apify.com?tools=rein8/uk-companies-house-snapshot`

```json
{ "mcpServers": { "apify": { "type": "http", "url": "https://mcp.apify.com?tools=rein8/uk-companies-house-snapshot" } } }
```

Then ask in plain words. The assistant reads this listing and the input schema, and maps your question to the inputs:

| You ask | The Actor runs with |
|---|---|
| "IT consultancies registered in St Albans" | `sicCode: "62020"`, `postcodePrefix: "AL"` |
| "Companies incorporated in Leeds this year" | `postTown: "LEEDS"`, `incorporatedFrom: "2026-01-01"` |
| "Active construction companies in Manchester" | `sicCode: "41201, 41202, 43210, 43220"`, `postcodePrefix: "M"` (letters only = the whole M area; ME, MK and ML are other areas) |
| "Which companies are proposed for strike-off in Bristol?" | `companyStatus: "Active - Proposal to Strike off"`, `postTown: "BRISTOL"` |
| "Are these customers still trading? 13873404, 16975462" | `companyNumbers: "13873404, 16975462"`, `companyStatus: "any"` |

Example prompt: *"Which of these supplier company numbers have overdue accounts or a strike-off proposal? 13873404, 16975462, 17195313"* — the agent runs `companyNumbers` with `companyStatus: "any"` and reads `accountsOverdueDays` and `companyStatus` from the rows. A full-register scan takes a few minutes, so an agent should start the run and read the dataset when it finishes.

**Agents without an Apify account:** through Apify's x402 integration an agent can pay per run in USDC (on Base) with no account and no API key — add `&payment=x402` to the URL above. x402 requires a pay-per-event Actor that runs with limited permissions and without Standby mode; this Actor meets all three (its public permission level reads `LIMITED_PERMISSIONS`).

### Where the data comes from — and why it is clean

- **Source:** the Companies House *Free Company Data Product* — a monthly snapshot of every live company on the register, published free of charge on `download.companieshouse.gov.uk` with no login. The Actor reads the download page to find the newest file and downloads that file; nothing else is requested, and robots.txt is respected.
- **Licence:** Companies House data is published under the **Open Government Licence v3.0**, which allows copying, publishing and commercial use with attribution. Every row carries the attribution.
- **Privacy:** the snapshot contains company-level facts only. The Actor never maps the "care of" address line (it can name a person) and never returns officers or persons with significant control.
- **Attribution line** to keep with any copy of the data (the snapshot date is the file date of your run, shown in `STATS`):

> Contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House, Free Company Data Product (basic company data snapshot of 2026-09-01), https://download.companieshouse.gov.uk/en\_output.html. Unofficial: not affiliated with or endorsed by Companies House. Company-level data only; corrections or removal requests: rein8.actors@gmail.com.

### Limits and honest notes

- **Monthly, not real time:** the snapshot is taken on the 1st and published in the first week of each month; changes during the month appear in the next file.
- **Live companies only:** companies dissolved before the snapshot date are not in the file.
- The file is large (about 490 MB zipped): each run downloads it once and scans it; the flat scan fee covers that.
- **Post towns are spelled as filed:** "ST ALBANS" and "ST. ALBANS" are both in the register. For complete coverage of a place, filter by postcode area or district instead of the town.
- Registered office is the company's official address; it is not where the company trades.
- Not affiliated with, endorsed by, or reviewed by Companies House. Not legal or credit advice.

### FAQ, Disclaimers, and Support

**What is the basis for using this data?** Companies House publishes the snapshot free of charge under the Open Government Licence v3.0, which permits commercial reuse with attribution. This is a description of the source's own terms, not legal advice.

**Intended use:** market data and research — B2B lead lists of companies, KYB and supplier checks, credit monitoring, market sizing. It is not a tool for profiling individuals, and it does not output personal data.

**Personal data / UK GDPR:** the output is company-level: no officers and no persons with significant control. A small company's registered office can be its director's home address, and a company name can contain a person's name, so UK GDPR can still apply to some records. Use the data for B2B purposes, refresh it monthly rather than keeping old copies, and honour removal requests (open an issue in the Issues tab or write to rein8.actors@gmail.com). If you combine it with personal data from other sources, you need your own lawful basis.

#### Do I need a Companies House API key?

No. This Actor never uses the API; it reads the free monthly snapshot, which needs no account.

#### How fresh is the data?

As fresh as the latest monthly snapshot (the 1st of the month, published in its first week). For same-day status, check the company's page — `companyUrl` links to it.

#### Companies House companies, directors, PSCs — which does it return?

Companies only. The snapshot holds no directors or PSC data, and this Actor would not return people anyway. If you need officers or persons with significant control, use the official Companies House service under your own account.

#### How do I find companies with overdue accounts?

Set **Accounts overdue by at least (days)** — 1 for every late filer, 90 for the seriously late — and add a town or postcode area; the same works for confirmation statements. Every row carries `accountsOverdueDays` and `confirmationOverdueDays`: days past the deadline on the snapshot date (0 = not overdue). A company due ON the snapshot date is not yet late.

#### How do I leave dormant companies out?

Set **Accounts type** to every type except *Dormant* (about a quarter of live companies are dormant shells). The same box keeps only micro entities, or only companies that have not filed accounts yet (usually new ones). A one-click "exclude dormant" is planned.

#### Can I check a list of company names, not numbers?

Yes, roughly: **Name contains** takes a comma-separated list, so "ACME TRADING LTD, FOO BAKERY LIMITED" returns those companies. Names must be written as the register writes them (LTD vs LIMITED, punctuation); for an exact check use **Check a list of company numbers**.

#### How do I export to Google Sheets, CSV or Excel?

Every run's dataset downloads as CSV, Excel, JSON or XML; the Apify → Google Sheets integration appends rows on a schedule. The **Leads** view (Storage → dataset → view) downloads a CRM-ready CSV: name, number, town, postcode, first SIC code and description, incorporation date, accounts type, year-end month, charges, link.

#### What does this Actor NOT do?

Officers, persons with significant control, filing documents, charge particulars (the persons entitled and the property charged are only in the keyed API, which this Actor does not use — open the Charges tab of `companyUrl`), real-time changes, or companies dissolved before the snapshot.

**Support:** open an issue on the Actor's **Issues** tab — answered within one business day. A review on the Store page helps others find licence-clean data.

### More official-data Actors by rein8

Same rules on every one: the source's own open route, no API key, the licence on every row, company-level data only.

- [Sirene Company Search — France SIREN/SIRET Lookup, No API Key](https://apify.com/rein8/france-company-search) — French companies from the official Sirene register by name, SIREN/SIRET, area, NAF code, size or label.
- [Form D Scraper — Startup Funding Rounds from SEC EDGAR, No API Key](https://apify.com/rein8/sec-form-d-funding-rounds) — every private raise filed with the U.S. SEC, as a daily feed of clean rows.

### Changelog

- 2026-09-26 — new filters: accounts type (multi-select; leave dormant shells out), year-end month (accounting reference date) and outstanding charges (at least N); new columns: `sicCode1`…`4` / `sicDescription1`…`4` (SIC split for spreadsheets) and `accountsRefDay` / `accountsRefMonth`; a "Leads" dataset view; documented that `nameContains` takes a comma list of names and that `sicCode` matches description words ("dental").
- 2026-09-25 (night) — listing: one-click links to the four public Tasks, a "Use with AI agents" section with the Actor's own MCP URL and the x402 note, the free-plan allowance next to the price; title and description lead with "Companies House" and say "company data".
- 2026-09-25 (evening) — new: `accountsOverdueDays` / `confirmationOverdueDays` on every row and the "overdue by at least N days" filters (measured on the snapshot date: a company due on that day is no longer counted as overdue); company numbers accepted without leading zeros and space- or tab-separated; "W1", "EC1", "SW1" match their lettered districts and unspaced postcodes match; a blank company-number box no longer filters out everything; the scan fee is charged only when your limit also pays for a row, and never for a row the dataset refused.
- 2026-09-25 — listing: a first screen with real sample rows, the price in one line and a 60-second start; ready-made example inputs (overdue accounts, your own company numbers, strike-off, new incorporations); the company-number and due-date filters documented; measured scan time stated.
- 0.1 (2026-09-24) — first release: the monthly Companies House snapshot, SIC / postcode / town / status / type / date / name filters, monitoring mode with a conditional download, attribution on every row.

# Actor input Schema

## `companyNumbers` (type: `string`):

Company numbers, one per line or separated by commas, tabs or spaces. Leading zeros are optional: 445790 = 00445790, SC12345 = SC012345. A number pasted next to its company name is read too (the name is ignored). Combine with Status "Any live status" to see every status. Up to 5,000 numbers per run; the read stops as soon as every number has been found.

## `sicCode` (type: `string`):

One or more SIC 2007 codes, comma-separated (e.g. 62020, 62012). A company matches when any of its up to four SIC codes contains one of them. Example: 62020 = IT consultancy. Words work too: the match runs on the code AND its description, so "dental" finds 86230 (dental practices) and 32500 (dental instruments), "software" finds 62012, 58290 and 62090.

## `nameContains` (type: `string`):

Words the company name must contain (comma-separated alternatives), e.g. "bakery, patisserie". A comma list of full names is a name check: "ACME TRADING LTD, FOO BAKERY LIMITED" returns those companies (up to a few hundred names per run; names as written on the register).

## `companyCategory` (type: `string`):

Words of the Companies House category, e.g. "Private Limited Company", "Public Limited Company", "Limited Liability Partnership", "Community Interest Company" (the register writes them in full: "PLC" matches nothing).

## `postcodePrefix` (type: `string`):

Postcode areas or districts, comma-separated. Letters only = the whole area ("B" = Birmingham, not BS or BT; "SW" = south-west London). Letters and digits = exactly that district ("M1" is not M11; "SW1A"). Spaces are ignored.

## `postTown` (type: `string`):

Exact post towns, comma-separated (e.g. "LONDON, LEEDS").

## `companyStatus` (type: `string`):

The snapshot contains live companies only; this narrows them by status. Choose "Any live status" to keep every status in the file (the file holds live companies only).

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

YYYY-MM-DD. Companies incorporated on or after this date. With "Only companies not delivered before" and a monthly schedule, each run returns the newly incorporated companies of your filters.

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

YYYY-MM-DD. Companies incorporated on or before this date; combine with "Incorporated on or after" for a window, e.g. 2026-01-01 to 2026-03-31 for the first quarter.

## `accountsDueBefore` (type: `string`):

YYYY-MM-DD. Companies whose next accounts are due on or before this date, e.g. the end of next month for filers with a deadline coming up. For accounts that are already late, use "Accounts overdue by at least (days)" instead: a company due ON the snapshot date is not yet overdue.

## `accountsOverdueMinDays` (type: `integer`):

Only companies whose accounts were overdue by at least this many days on the snapshot date (the date of the monthly file, e.g. 2026-09-01). 1 = every late filer; 90 = seriously late. Each row carries accountsOverdueDays. Leads for accountants, an early-warning list for credit teams.

## `confirmationOverdueMinDays` (type: `integer`):

Only companies whose confirmation statement was overdue by at least this many days on the snapshot date. Each row carries confirmationOverdueDays. A late confirmation statement is a common first step towards a strike-off.

## `confirmationDueBefore` (type: `string`):

YYYY-MM-DD. Companies whose confirmation statement is due on or before this date. For statements already late, use "Confirmation statement overdue by at least (days)".

## `accountsType` (type: `array`):

Keep only companies whose last accounts were of these types (empty = all). To exclude dormant shells, pick every type except DORMANT. NO ACCOUNTS FILED = usually a company too young to have filed.

## `yearEndMonth` (type: `array`):

Keep only companies whose accounting reference date falls in these months (empty = all). "December year-ends in Leeds" is how a practice plans its workload; each row carries accountsRefDay and accountsRefMonth.

## `chargesOutstandingMin` (type: `integer`):

Only companies with at least this many outstanding charges (mortgages) on the register. 1 = every company that has borrowed against its assets — brokers, lenders and asset-finance teams. Each row carries chargesOutstanding and chargesTotal.

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

Maximum companies to return. You pay only for companies delivered (plus the flat scan fee).

## `incremental` (type: `boolean`):

Remember delivered companies (per State key) and return only new or changed ones. If the monthly file has not changed since your last complete run, the run ends at once and nothing is charged.

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

Name of the memory used by "Only companies not delivered before". Left as "default", every saved Task gets its own memory automatically (a run started by hand remembers per set of filters). Type a name to share one memory between runs on purpose.

## `allowStateFallback` (type: `boolean`):

Only matters if an incremental run stops with "state store unavailable". Off (default): such a run stops before anything is charged. On: the run continues without memory, i.e. it delivers and charges every matching company again.

## `preview` (type: `boolean`):

Return 3 companies without any charge, to check the format.

## Actor input object example

```json
{
  "sicCode": "62020",
  "postcodePrefix": "AL",
  "companyStatus": "Active",
  "maxItems": 50,
  "incremental": false,
  "stateKey": "default",
  "allowStateFallback": false,
  "preview": false
}
```

# Actor output Schema

## `companies` (type: `string`):

One item per company. Add ?format=csv or ?format=xlsx to the URL for other formats.

## `stats` (type: `string`):

Rows read, filters applied, the file used, and any errors.

# 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 = {
    "sicCode": "62020",
    "postcodePrefix": "AL",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("rein8/uk-companies-house-snapshot").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 = {
    "sicCode": "62020",
    "postcodePrefix": "AL",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("rein8/uk-companies-house-snapshot").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 '{
  "sicCode": "62020",
  "postcodePrefix": "AL",
  "maxItems": 50
}' |
apify call rein8/uk-companies-house-snapshot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rein8/uk-companies-house-snapshot"
        }
    }
}
```

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/BbEolPSOlMFAXGMkk/builds/hOsm10UEPDm2TBCXj/openapi.json
