# Companies House Filings Scraper (`piotrv1001/companies-house-filings-scraper`) Actor

The Companies House Filings Scraper looks up UK companies by number, URL or name, capturing status, type, SIC codes, previous names, accounts deadlines and full filing history with dates, form types and document links, filterable by category and date — ideal for KYB checks and due diligence.

- **URL**: https://apify.com/piotrv1001/companies-house-filings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 companies

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 Filings Scraper

Look up UK companies on the Companies House register by company number, URL or name. The **Companies House Filings Scraper** returns each company's current status, type, incorporation and dissolution dates, SIC codes, previous names and its accounts and confirmation statement deadlines. It also returns the company's **filing history**: every filing from newest to oldest, with its date, form type, description and document link. You can filter the history by category and by date. Use it to check whether a supplier or customer is still active, to build a dated list of accounts filings, or to spot name changes, charges and strike-off notices.

### ✨ Features

- 🔢 **Company number, URL or name search**: paste `00445790`, `SC002180`, `NI022928`, `FC015640` or a Companies House company URL. Short numbers get their leading zeros back (`445790` becomes `00445790`). You can also search by name, e.g. `tesco`.
- 🏢 **Company profile**: name, status (Active, Dissolved, Liquidation…), company type, incorporation date, dissolution date, SIC codes with descriptions, and previous names with the dates each was used.
- 📅 **Accounts & confirmation statement deadlines**: the date the next accounts are made up to and their due date, the last accounts date, the next confirmation statement date and its due date, and whether either is overdue.
- 📂 **Full filing history, several pages deep**: filing date, form type (`AA`, `CS01`, `MR01`, `GAZ2`…), description, transaction ID, PDF document link and page count. Pagination runs automatically until the history ends or your limit is reached.
- 🎯 **Category and date filters**: keep only accounts, capital, charges, confirmation statements, incorporation or officer filings. Choose a "filed from" and "filed to" window. The date filter uses the date the document was filed at Companies House.
- 🧾 **Honest coverage**: each company record states how many filings were saved and why the history walk stopped: `complete`, `reached filedFrom`, `reached maxFilingsPerCompany` or a failure. Company numbers that are not on the register, invalid inputs and failed histories are listed in the `RUN_SUMMARY` record.
- 🔗 **Identity you can rely on**: a company is always identified by its number. A name search can return a company that now has a different name, and it is kept under its number, never matched by name.

### 🛠️ How It Works

1. **Enter company numbers or URLs** (one per line), or a **company name to search for**, or both.
2. **Set the limits**: the maximum number of companies, and the number of filings per company (`0` = company profiles only).
3. **Optionally filter filings** by category and filing date.
4. **Run the scraper.** Company records and filing records go to the same dataset, and the `recordType` field tells them apart (`company` or `filing`).

### 💵 Pricing

You pay per record saved. No monthly fee.

| Event   | Price                         | What you get                                                                                |
| ------- | ----------------------------- | ------------------------------------------------------------------------------------------- |
| Company | **$2.00 per 1,000 companies** | Status, type, dates, SIC codes, previous names, accounts & confirmation statement deadlines |
| Filing  | **$0.20 per 1,000 filings**   | Filing date, form type, description, transaction ID, document link and page count           |

Example: 100 companies with 25 filings each (2,500 filings) cost **$0.70**. Numbers that are not found and invalid inputs are free.

### 📊 Sample Output Data

```json
[
    {
        "recordType": "company",
        "companyNumber": "SC002180",
        "name": "SCOTTISH NAVIGATION COMPANY LIMITED",
        "status": "Active",
        "entityKind": "company",
        "companyType": "Private limited Company",
        "incorporatedOn": "1891-06-25",
        "ceasedOn": null,
        "cessationLabel": null,
        "parentCompanyNumber": null,
        "sicCodes": [{ "code": "99999", "description": "Dormant Company" }],
        "previousNames": [],
        "accounts": {
            "nextMadeUpTo": "2026-12-31",
            "nextDueBy": "2027-09-30",
            "lastMadeUpTo": "2025-12-31",
            "overdue": false
        },
        "confirmationStatement": {
            "nextDate": "2027-03-28",
            "nextDueBy": "2027-04-11",
            "lastDated": "2026-03-28",
            "overdue": false
        },
        "url": "https://find-and-update.company-information.service.gov.uk/company/SC002180",
        "filingHistoryUrl": "https://find-and-update.company-information.service.gov.uk/company/SC002180/filing-history",
        "foundBy": "input",
        "requestedAs": ["SC002180"],
        "filingsSaved": 25,
        "filingsStatus": "reached maxFilingsPerCompany",
        "scrapedAt": "2026-09-24T12:33:33.744Z"
    },
    {
        "recordType": "filing",
        "companyNumber": "SC002180",
        "companyName": "SCOTTISH NAVIGATION COMPANY LIMITED",
        "filingDate": "2026-07-03",
        "type": "AA",
        "description": "Accounts for a dormant company made up to 31 December 2025",
        "transactionId": "MzUzMDAyMDgxN2FkaXF6a2N4",
        "documentUrl": "https://find-and-update.company-information.service.gov.uk/company/SC002180/filing-history/MzUzMDAyMDgxN2FkaXF6a2N4/document?format=pdf&download=0",
        "pageCount": 2,
        "scrapedAt": "2026-09-24T12:33:33.744Z"
    }
]
```

### ℹ️ Good to Know

- **Filing dates** are the dates documents were filed at Companies House, not the accounting period end. The period is usually given in the description ("made up to 31 December 2025").
- **UK establishments** (`BR…` numbers) have no filing history of their own; it is kept under the parent overseas company. The record gives the parent number in `parentCompanyNumber`, and `filingsStatus` says `on parent company FC…`.
- **Current status and past events are separate**: a company can be `Active` even though its history contains an earlier strike-off notice and a restoration.
- A few very old filings have no document and therefore no transaction ID. They are still saved, with `transactionId: null`.
- The scraper returns company and filing metadata only. It does not return officers, persons with significant control or addresses, and it does not download or read the PDF documents.

Get a dated, filterable UK company filing history in minutes with the **Companies House Filings Scraper**! 🚀

# Actor input Schema

## `companyNumbers` (type: `array`):

UK company numbers (`00445790`, `SC002180`, `NI022928`, `FC015640`) or Companies House company URLs. Short numbers are padded with leading zeros (`445790` → `00445790`).

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

Optional. Find companies by name, e.g. `tesco`. Matches on previous names too, so results can include companies that are now called something else. Found companies are added after the company numbers above.

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

Maximum number of companies to save.

## `maxFilingsPerCompany` (type: `integer`):

How many filing-history rows to save for each company, newest first. Set to 0 for company profiles only.

## `filingCategories` (type: `array`):

Only save filings in these categories. Leave empty for all filings.

## `filedFrom` (type: `string`):

Only save filings filed at Companies House on or after this date.

## `filedTo` (type: `string`):

Only save filings filed at Companies House on or before this date.

## `proxyConfiguration` (type: `object`):

Proxy settings. The default Apify Proxy works well.

## Actor input object example

```json
{
  "companyNumbers": [
    "00445790",
    "SC002180",
    "09384423"
  ],
  "maxItems": 50,
  "maxFilingsPerCompany": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "companyNumbers": [
        "00445790",
        "SC002180",
        "09384423"
    ],
    "maxItems": 50,
    "maxFilingsPerCompany": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/companies-house-filings-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 = {
    "companyNumbers": [
        "00445790",
        "SC002180",
        "09384423",
    ],
    "maxItems": 50,
    "maxFilingsPerCompany": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/companies-house-filings-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 '{
  "companyNumbers": [
    "00445790",
    "SC002180",
    "09384423"
  ],
  "maxItems": 50,
  "maxFilingsPerCompany": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/companies-house-filings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/companies-house-filings-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/iSRV4npuRcVnxeEej/builds/a6n15vaY1UClXylap/openapi.json
