# UK Company Accounts Data — Companies House Accounts, Net Assets (`rein8/uk-company-financials`) Actor

Companies House accounts as company data, no API key: net assets, cash, creditors, employees, dormant flag and accounts type for every set of accounts filed (daily iXBRL files); turnover and profit when filed. No directors. Unofficial: not affiliated with or endorsed by Companies House.

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

## Pricing

from $5.00 / 1,000 accounts rows

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

**Net assets, cash, creditors, employees, dormant flag and accounts type for every UK company that files accounts — read straight from the iXBRL annual accounts filed at Companies House (the figures buyers look for in annual reports), with no API key and no account. Turnover and profit too, for the companies that file them (the larger ones). $5 per 1,000 rows, the first 5 rows free.**

- 📄 **What you get** — one row per set of accounts (a company and its accounting period): company number and name, period start and end, accounts type (full / filleted / abridged), accounts standard (micro-entity, small, FRS 102, IFRS…), audit status, dormant flag, net assets, fixed and current assets, cash, debtors, creditors (within and after one year), average employees, the prior-year comparatives, credit signals (`negativeNetAssets`, `creditorsToAssetsRatio`, `cashVsPriorPct`, `employeesVsPriorPct`, `filingLagDays`), the filing date, the source file and the link to the company's filing history — and turnover, gross / operating / pre-tax / after-tax profit **when the filing reports them** (about 2% of daily filings: full FRS 102 / IFRS accounts).
- 🏛️ **Source** — the *Free Accounts Data Product* Companies House publishes every morning, Tuesday to Saturday: a zip of the iXBRL accounts registered the day before (about 17,000 filings a day). Source and basis stated on every row (Companies House releases register information under its section 47 CDPA 1988 approvals; the Actor extracts figures, never a document).
- 💵 **Price** — $5 per 1,000 rows plus $0.10 per daily file read; the first 5 rows are free (Preview).
- 🔑 **No API key, no rate limit** — nothing to register; the Actor never touches the keyed Companies House API.
- 🔒 **No personal data** — company figures only: no directors, no signatories, no accountants' or auditors' names (they are dropped before a row exists).
- ⏱️ **Time to first result** — Preview: 5 filings, free, under a minute. A day's file with the default 200 rows returns in about 20 seconds (measured 26 Sep 2026); a full day with no filters takes a few minutes.

| Company no. | Name | Year to | Standard | Net assets | Cash | Employees | Dormant | Turnover |
|---|---|---|---|---|---|---|---|---|
| 04989385 | CHINA INDUSTRIES LIMITED TRADING AS WOW! STUFF | 2025-12-31 | FRS 102 | 4,588,332 | 2,147,448 | 34 | no | 20,601,243 |
| NI057478 | Red Star Brands Limited | 2025-12-31 | FRS 102 | 1,405,461 | — | 21 | no | 30,942,314 |
| 08324698 | HAPPY NEST LIMITED | 2025-12-31 | small | −7,667 | 55,018 | 2 | no | — |
| 07645403 | RED SQUIRREL SOLUTIONS LTD | 2026-03-31 | micro-entity | 5,534 | 52,631 | 3 | no | — |
| 00143311 | BARNSLEY INDEPENDENT COMPANY LIMITED | 2025-12-31 | small | 0 | — | 0 | yes | — |

*Real rows from a local run on 26 Sep 2026 on the daily file `Accounts_Bulk_Data-2026-09-26.zip`; amounts in GBP. The three last rows are what most of a day's file looks like: a balance sheet, a headcount and no profit and loss account (see [What is in the rows](#what-is-in-the-rows-measured)).*

**Price:** $5 per 1,000 rows plus $0.10 per daily file — 5 rows free. Apify's free plan ($5 of credit a month) covers about 900 rows a month at no cost to you.

#### Try it in 60 seconds

1. Tick **Preview (5 companies, free)** and press **Start**: five real filings from the newest daily file, no charge.
2. Untick Preview and press **Start** again: the form is prefilled with the newest day and 200 rows (about 20 seconds).
3. Download CSV, Excel or JSON — or call it from code:

```bash
curl -X POST "https://api.apify.com/v2/acts/rein8~uk-company-financials/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=csv" \
  -H 'Content-Type: application/json' -d '{"maxNetAssets":-1,"excludeDormant":true,"maxItems":500}'
```

### What does this UK company accounts data Actor do?

It turns the accounts UK companies file at Companies House into a spreadsheet. Every working day Companies House publishes, free of charge and without any login, a zip of the iXBRL accounts registered the day before; this Actor downloads the day's file (or a window of days, up to 60 days back), reads every set of accounts in it and returns the figures as one clean row per company and period. Filter by your own list of company numbers, by net assets (negative allowed), cash, employees, turnover, accounts standard (micro-entity, small, FRS 102…), accounts type, or keep only — or leave out — dormant companies.

**When to use it:** you need the *numbers* behind UK companies — credit control ("can this customer pay?"), lending and invoice finance, brokers and M\&A sourcing, accountants benchmarking clients, B2B sales lists by headcount or balance-sheet size — without buying reports one at a time or registering for the Companies House API. **When to use something else instead:** for the register facts of *every* live company (status, SIC code, address, deadlines) use [Companies House Data — UK Company Search](https://apify.com/rein8/uk-companies-house-snapshot); for monthly change alerts on a customer list use the UK Company Watch Actor; for the accounts PDF itself, officers or persons with significant control use the official Companies House service (`companyUrl` links to the filing history).

#### What is in the rows (measured)

Most UK companies are small and file a balance sheet only. This table is the honest picture, measured on the **whole** daily file of 26 Sep 2026 (17,734 filings): the share of rows in which each field carries a value.

| Field | Rows with a value | Why |
|---|---|---|
| `companyNumber`, `companyName`, `periodEnd`, `accountsType`, `accountsStandard`, `auditStatus` | 100% | every readable filing tags them |
| `dormant` | 100% (12.8% are `true`) | the dormant declaration is in every filing |
| `netAssets` | 98.1% (19.7% negative) | the one figure every balance sheet has |
| `employees` | 90.4% | the average headcount is a required note, micro-entities included |
| `priorNetAssets` | 86.2% | the comparative column |
| `totalAssetsLessCurrentLiabilities` | 79.2% | |
| `currentAssets` | 78.7% | |
| `legalForm` | 79.0% | |
| `creditors` (total, else within one year) | 58.4% | |
| `creditorsWithinOneYear` | 50.3% | |
| `cash` | 46.4% | many micro-entity balance sheets show current assets as one line |
| `fixedAssets` | 45.1% | |
| `priorCash` | 42.2% | |
| `debtors` | 30.7% | |
| `creditorsAfterOneYear` | 19.3% | |
| `profitAfterTax` | 4.4% | only accounts that include a profit and loss account |
| `profitBeforeTax` | 3.0% | |
| `turnover` | 1.8% | micro-entity (42% of filings), filleted and abridged small-company accounts file no profit and loss account; full FRS 102 / IFRS filers do |
| `grossProfit`, `operatingProfit` | 1.5% | |

Standards on that day: micro-entity 42%, small 30%, FRS 102 27%, medium / FRS 101 / IFRS under 1%. Types: full 63%, filleted 32%, abridged 5%. Currency: GBP 99.1%, EUR 35 filings, USD 20, NOK 1. The measurement is repeated in `STATS` of every run (`bulk.rowsRead`, filters, parse errors).

### Why use it?

- **Credit control and lending** — net assets (and the `negativeNetAssets` flag), cash, creditors due within one year, the `creditorsToAssetsRatio`, the prior-year comparatives and how long the company took to file (`filingLagDays`) for every company that filed this week: liabilities above assets and shrinking cash are visible before the invoice is overdue. The **Credit risk** view is a ready-made sheet.
- **B2B sales by size** — companies with 50+ employees or net assets over £1m, fresh from the day they filed: the accounts date is the trigger, and the list is new every day. The **Employers** view lists headcount with the prior year.
- **Accountants, strike-off and formation services** — dormant companies that filed this month; clients' and prospects' figures in one sheet; benchmark by standard (micro-entity, small, FRS 102) and audit status.
- **Brokers, M\&A, invoice finance** — the larger companies with real turnover and profit, by accounting period end (full FRS 102 / IFRS filers).
- **Check your own list** — paste customer or supplier numbers with a date window: every set of accounts they filed in that window comes back with the figures; or schedule it daily with *Only rows not delivered before* and be told when a customer's new accounts land.
- **No key to manage** — the daily files are 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 Accounts Data Product* (the daily iXBRL zips), read directly |
| Coverage | Every set of accounts filed electronically — about 75% of all filings, per Companies House; about 17,000 a day |
| Figures | Read from the iXBRL tags, not from a PDF: balance sheet, employees, dormant flag, prior year, and turnover / profit when filed |
| Key / login | None; nothing to register |
| Basis | Register information released by Companies House under its section 47 CDPA 1988 approvals, "no rules or requirements" on its use; figures extracted, no document reproduced; source stated on every row |
| Personal data | None: signatories, officers, auditors and accountants are dropped in the engine before a row exists |

#### How this compares

Company Check, Endole and Creditsafe sell the same figures per report or per subscription; the Companies House API returns the filing document, not the numbers, and needs a key. Store Actors that "scrape Companies House financials" go through the keyed API or the website. This Actor reads the free daily product Companies House built for bulk users: the figures are what the filer tagged, at bulk-data prices.

### 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:

- [Companies with negative net assets, filed yesterday](https://apify.com/rein8/uk-company-financials/examples/companies-with-negative-net-assets-filed-yesterday)
- [Employers with 50+ staff that filed accounts this week](https://apify.com/rein8/uk-company-financials/examples/employers-50-plus-staff-filed-this-week)
- [Accounts data for a list of company numbers](https://apify.com/rein8/uk-company-financials/examples/accounts-for-a-company-number-list)
- [Dormant companies that filed accounts this month](https://apify.com/rein8/uk-company-financials/examples/dormant-companies-filed-this-month)
- [Cash-rich small companies that filed this week](https://apify.com/rein8/uk-company-financials/examples/cash-rich-small-companies-this-week)
- [Every set of accounts filed yesterday](https://apify.com/rein8/uk-company-financials/examples/accounts-filed-yesterday-uk)
- [Companies with net assets over £1m, filed yesterday](https://apify.com/rein8/uk-company-financials/examples/companies-with-net-assets-over-1m-filed-yesterday)
- [Full FRS 102 / IFRS accounts filed yesterday (with turnover)](https://apify.com/rein8/uk-company-financials/examples/full-frs102-ifrs-accounts-filed-yesterday)
- [Watch a customer list for new accounts, daily](https://apify.com/rein8/uk-company-financials/examples/watch-customer-accounts-daily)
- [Companies with turnover over £1m, filed this week](https://apify.com/rein8/uk-company-financials/examples/uk-companies-turnover-over-1m-filed-this-week)

Or copy one into the **JSON** tab of the input, or save it as a Task. Five of them leave the dates empty (= the newest daily file) and suit a daily schedule at 08:00 UTC; the week / month ones carry the dates of the week they were written and need the dates moved.

**Companies with negative net assets, filed yesterday** (`companies-with-negative-net-assets-filed-yesterday`; credit control — about 1 in 5 filings):

```json
{ "maxNetAssets": -1, "excludeDormant": true, "maxItems": 5000 }
```

**Employers with 50+ staff that filed this week** (`employers-50-plus-staff-filed-this-week`; sales lists by headcount — 9 in 10 filings report employees, micro-entities included; a 7-day window is 5 daily files, so 5 scan fees):

```json
{ "dateFrom": "2026-09-20", "dateTo": "2026-09-26", "minEmployees": 50, "excludeDormant": true, "maxItems": 5000 }
```

**Accounts data for a list of company numbers** (`accounts-for-a-company-number-list`; every set of accounts these companies filed in the last 60 days — a number that did not file in the window is simply absent):

```json
{ "companyNumbers": "00004197\n00045916\n04989385\n01493898", "dateFrom": "2026-07-28", "maxItems": 100 }
```

**Dormant companies that filed this month** (`dormant-companies-filed-this-month`; accountants and strike-off services — the month's daily files, dormant filings only):

```json
{ "dateFrom": "2026-09-01", "dateTo": "2026-09-30", "onlyDormant": true, "maxItems": 5000 }
```

**Cash-rich small companies that filed this week** (`cash-rich-small-companies-this-week`; micro-entity and small accounts with £250,000 or more cash at bank):

```json
{ "dateFrom": "2026-09-20", "dateTo": "2026-09-26", "minCash": 250000, "accountsStandard": ["micro-entity", "small"], "excludeDormant": true, "maxItems": 5000 }
```

**Every set of accounts filed yesterday** (`accounts-filed-yesterday-uk`; the whole daily file, dormant left out — schedule daily; leave the dates empty):

```json
{ "excludeDormant": true, "maxItems": 20000 }
```

**Companies with net assets over £1m, filed yesterday** (`companies-with-net-assets-over-1m-filed-yesterday`):

```json
{ "minNetAssets": 1000000, "excludeDormant": true, "maxItems": 5000 }
```

**Full FRS 102 / IFRS accounts filed yesterday** (`full-frs102-ifrs-accounts-filed-yesterday`; the larger companies — the filings that carry turnover and profit):

```json
{ "accountsStandard": ["FRS 102", "FRS 101", "IFRS", "medium"], "accountsType": ["full"], "maxItems": 5000 }
```

**Watch a customer list for new accounts, daily** (`watch-customer-accounts-daily`; schedule daily — only the accounts your customers filed since the last run):

```json
{ "companyNumbers": "00004197\n00045916\n04989385\n01493898", "incremental": true, "stateKey": "customers", "maxItems": 1000 }
```

**Companies with turnover over £1m, filed this week** (`uk-companies-turnover-over-1m-filed-this-week`; the full FRS 102 / IFRS filers only):

```json
{ "dateFrom": "2026-09-20", "dateTo": "2026-09-26", "minTurnover": 1000000, "excludeDormant": true, "maxItems": 2000 }
```

A "companies in Manchester" Task is not offered: the accounts files carry no reliable address, so a town filter needs a join with the monthly snapshot — see [Joining with the other rein8 Actors](#joining-with-the-other-rein8-actors).

### How to scrape UK company accounts data

**Quick start (3 steps):** leave the dates empty (newest daily file) → set a filter such as **Net assets at most** −1 or **Employees at least** 50 → press **Start** → download CSV/JSON or connect the API.

1. Pick the day(s): nothing = the newest daily file; **Daily file** = one specific day; **From date** / **To date** = a window (oldest first, at most 31 files, one scan fee each). Files are published Tuesday to Saturday and stay online for 60 days.
2. Filter: company numbers, net assets band (negative allowed), cash, employees, turnover band, accounts standard, accounts type, only / no dormant companies. Every filter is optional; a company-number list is tested on the file names before anything is parsed, so it costs almost nothing per skipped filing.
3. Set **Max rows** and run. A day holds about 17,000 filings; the read stops as soon as the limit is reached. **Monitoring mode:** turn on *Only rows not delivered before* and schedule the Actor daily or weekly; a day already delivered is skipped (a 304 costs nothing), and an amended set of accounts comes back once as a changed row when a figure differs.

**Preview** returns 5 filings free of charge.

### Input

| Field | Type | What it does |
|---|---|---|
| `date` | string | One daily file, `YYYY-MM-DD`. Empty = the newest file |
| `dateFrom`, `dateTo` | string | A window of daily files (oldest first, at most 31 files, one scan fee each) |
| `companyNumbers` | string | Only these company numbers (one per line or comma-separated; leading zeros optional) |
| `minNetAssets`, `maxNetAssets` | integer | Net assets band in the filing's currency; `maxNetAssets: -1` = liabilities above assets |
| `minCash` | integer | Cash at bank and in hand at least; rows without a cash figure never match |
| `minEmployees` | integer | Average employees at least |
| `minTurnover`, `maxTurnover` | integer | Turnover band; only the ~2% of filings that report turnover can match |
| `accountsStandard` | array | `micro-entity`, `small`, `medium`, `FRS 102`, `FRS 101`, `IFRS`, `charity` |
| `accountsType` | array | `full`, `filleted`, `abridged` |
| `excludeDormant` | boolean | Drop filings that declare the company dormant |
| `onlyDormant` | boolean | Keep only filings that declare the company dormant |
| `maxItems` | integer | Rows per run (default 1,000; a whole day ≈ 17,000) |
| `incremental`, `stateKey` | boolean, string | Skip rows delivered before under this memory; amended accounts with different figures come back as `_changed` |
| `preview` | boolean | 5 rows, free, no memory touched |

### What data can this Actor extract?

#### All fields

`id` (companyNumber-periodEnd) · `companyNumber` · `companyName` · `periodStart` · `periodEnd` · `balanceSheetDate` · `accountsType` · `accountsStandard` · `accountsStandardText` · `auditStatus` · `legalForm` · `dormant` · `groupAccounts` · `currency` · `netAssets` · `negativeNetAssets` · `totalAssetsLessCurrentLiabilities` · `fixedAssets` · `currentAssets` · `cash` · `debtors` · `creditors` · `creditorsWithinOneYear` · `creditorsAfterOneYear` · `employees` · `turnover` · `grossProfit` · `operatingProfit` · `profitBeforeTax` · `profitAfterTax` · `priorPeriodEnd` · `priorNetAssets` · `priorCash` · `priorEmployees` · `priorTurnover` · `priorProfitBeforeTax` · `filingDate` · `filingLagDays` · `sourceFile` · `sourceUrl` · `companyUrl` · `creditorsToAssetsRatio` · `cashVsPriorPct` · `employeesVsPriorPct` · `summary` · `scrapedAt` · `_source` · `_licence` · `_sourceUrl` · `_changed` (incremental mode only)

Amounts are in currency units (not thousands), losses and net liabilities negative. `creditors` is the total when the filing tags one, else the amount due within one year (what most small companies file). `accountsType`, `accountsStandard` and `auditStatus` come from the filing's own tags (FullAccounts / FilletedAccounts / AbridgedAccounts; Micro-entities / SmallEntities / FRS102 / FRS101 / IFRS; Audited / AuditExempt…); `accountsStandardText` is the same as a readable label. `filingDate` is the date of the daily file; Companies House registered the accounts on the previous day (Tuesday's file covers Saturday to Monday). `filingLagDays` counts from the period end to that file date (private companies have 9 months; the median is about 270 days).

**Derived signals** (computed on the row, null when an input is missing): `negativeNetAssets` (net assets below 0), `creditorsToAssetsRatio` (creditors due within one year ÷ current assets: above 1 the short-term creditors exceed the current assets), `cashVsPriorPct` (cash as a percentage of last year's: 150 = up 50%), `employeesVsPriorPct`. A plain year-on-year difference is not computed — the prior figures are on the row for your own subtraction.

#### Example output

```json
{
  "id": "04989385-2025-12-31",
  "companyNumber": "04989385",
  "companyName": "CHINA INDUSTRIES LIMITED TRADING AS WOW! STUFF",
  "periodStart": "2025-02-01",
  "periodEnd": "2025-12-31",
  "balanceSheetDate": "2025-12-31",
  "accountsType": "full",
  "accountsStandard": "FRS 102",
  "accountsStandardText": "Full FRS 102 accounts",
  "auditStatus": "audited",
  "legalForm": "PrivateLimitedCompanyLtd",
  "dormant": false,
  "groupAccounts": false,
  "currency": "GBP",
  "netAssets": 4588332,
  "negativeNetAssets": false,
  "totalAssetsLessCurrentLiabilities": 4588332,
  "fixedAssets": 540677,
  "currentAssets": 9429228,
  "cash": 2147448,
  "creditors": 5381573,
  "creditorsWithinOneYear": 5381573,
  "employees": 34,
  "turnover": 20601243,
  "grossProfit": 7160605,
  "operatingProfit": 940393,
  "profitBeforeTax": 897310,
  "profitAfterTax": 729184,
  "priorPeriodEnd": "2025-01-31",
  "priorNetAssets": 3859148,
  "priorCash": 3315132,
  "priorEmployees": 31,
  "priorTurnover": 21350590,
  "priorProfitBeforeTax": 2199406,
  "filingDate": "2026-09-26",
  "filingLagDays": 269,
  "sourceFile": "Prod223_4316_04989385_20251231.html",
  "sourceUrl": "https://download.companieshouse.gov.uk/Accounts_Bulk_Data-2026-09-26.zip",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/04989385/filing-history",
  "creditorsToAssetsRatio": 0.57,
  "cashVsPriorPct": 64.78,
  "employeesVsPriorPct": 109.68,
  "summary": "CHINA INDUSTRIES LIMITED TRADING AS WOW! STUFF (04989385): Full FRS 102 accounts, year to 2025-12-31, net assets GBP 4,588,332, cash GBP 2,147,448, 34 employees, turnover GBP 20,601,243, profit before tax GBP 897,310.",
  "_source": "Companies House",
  "_licence": "Source: Companies House, Accounts Data Product … Register information is made available by Companies House under its approvals in accordance with section 47 of the Copyright, Designs and Patents Act 1988 … (the full line is under Where the data comes from)"
}
```

*A real row (26 Sep 2026), checked against the accounts on the Companies House website the same day; the fields the filing did not tag (`debtors`, `creditorsAfterOneYear`…) are `null` and left out here. A micro-entity row has the same columns with `turnover` and the profit lines empty.*

### Output

One dataset item per set of accounts (fields above), four ready-made views (**Accounts data**, **Credit risk**, **Employers**, **Turnover and profit (when filed)**), and a `STATS` record: the daily file(s) read, filings matched / read / skipped, rows delivered, filters applied, parse errors, and the file date.

*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 carries `summary` — one plain-English sentence built from the row, empty values left out, the standard and the balance sheet first (e.g. *RED SQUIRREL SOLUTIONS LTD (07645403): Micro-entity accounts (FRS 105): balance sheet only, year to 2026-03-31, net assets GBP 5,534, cash GBP 52,631, 3 employees.*). A row never says "turnover 0" when no turnover was filed. A finished run's status line names the row count.

#### Joining with the other rein8 Actors

The accounts files carry no address, no SIC code and no company status — those live in the monthly register snapshot. Two joins cover most needs, both on `companyNumber`:

- **Address, status, SIC code, deadlines** — paste the `companyNumber` column of this Actor's output into the *check-uk-company-numbers* Task of [Companies House Data — UK Company Search](https://apify.com/rein8/uk-companies-house-snapshot) (`companyNumbers` input): one register row per number with post town, postcode, status, SIC codes, incorporation date and the next accounts due date. In a sheet, `VLOOKUP` (or a Python `merge`) on `companyNumber` puts the town next to the net assets — that is how "companies with negative net assets in Manchester" is built.
- **Be told when the next accounts land** — paste the same numbers into the UK Company Watch Actor (`uk-company-watch`, `watchFields` including the accounts dates): each month it returns only the companies whose last-accounts date, status or charges changed. When it reports a new accounts date, run this Actor with the number and a date window to read the figures.
- The other way round: take a list from the register (a town, a SIC code, an incorporation year) and paste it as `companyNumbers` here with a 60-day window — every set of accounts those companies filed comes back with the numbers.

### How much will it cost to get UK company accounts data?

| Event | When | Price |
|---|---|---|
| `scan` | once per daily file read (never in preview, never for a file unchanged since the last incremental run) | $0.10 |
| `result` | each row (one company and period) delivered | $0.005 |

| Scenario | Rows | Cost |
|---|---|---|
| Preview | 5 | $0 |
| Newest day, negative net assets only | ~3,000 | ~$15.10 |
| Newest day, employers with 50+ staff | ~250 | ~$1.35 |
| A whole day, dormant left out | ~15,000 | ~$75.10 |
| Your 500 customers over the last 60 days (≈ 40 filed) | ~40 | ~$4.80 (46 files) |
| Companies with 50+ employees, this month (22 files) | ~2,500 | ~$14.70 |

You pay for the rows delivered plus one flat scan fee per daily file; filtered-out filings are never charged, and neither is a filing the parser could not read. A window of files is the expensive part: 60 days = 46 scan fees before a single row.

Apify adds its own **Actor start** event on top of these prices: $0.00005 per GB of run memory, once per run (about $0.0001 at 2 GB, $0.0002 at 4 GB). It is the platform's charge, not this Actor's, and it shows as "Actor start" on your bill.

### Integrations and automation

- **API (curl):** `curl -X POST "https://api.apify.com/v2/acts/rein8~uk-company-financials/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=csv" -H 'Content-Type: application/json' -d '{"minEmployees":50,"maxItems":1000}'`
- **Python:** `ApifyClient(token).actor("rein8/uk-company-financials").call(run_input={"companyNumbers": "00004197, 00045916", "dateFrom": "2026-08-01"})` then `client.dataset(run["defaultDatasetId"]).iterate_items()`.
- **Schedule + Google Sheets:** a daily schedule at 08:00 UTC with *Only rows not delivered before*, and the Apify → Google Sheets integration in append mode: a running sheet of every filing that matches.
- **n8n / Make / Zapier:** Apify node → *Run actor* → *Get dataset items* → CRM, credit system or e-mail.
- **AI assistants:** see the next section — this Actor is an MCP tool.

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

Add the Actor to Claude Desktop, Claude.ai, Cursor, VS Code or ChatGPT with one URL through Apify's hosted MCP server (OAuth on first connect, no token in the config):

`https://mcp.apify.com?tools=rein8/uk-company-financials`

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

| You ask | The Actor runs with |
|---|---|
| "UK companies that filed accounts yesterday with negative net assets" | `maxNetAssets: -1` (dates empty = newest file) |
| "What did these customers file recently? 00004197, 00045916" | `companyNumbers`, `dateFrom` (60 days back) |
| "Companies with more than 100 staff that filed yesterday" | `minEmployees: 100` |
| "Dormant companies filed in September" | `dateFrom`, `dateTo`, `onlyDormant: true` |
| "Companies that filed this week with turnover over £5m" | `dateFrom`, `dateTo`, `minTurnover: 5000000` |

Example prompt: *"Which of my suppliers filed accounts this month, and do any show negative net assets? 00004197, 08324698"* — the agent runs `companyNumbers` with a `dateFrom` and reads `netAssets`, `negativeNetAssets`, `cash` and `creditorsWithinOneYear` from the rows.

**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 (pay-per-event, limited permissions, no Standby: this Actor meets all three).

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

- **Source:** the Companies House *Free Accounts Data Product* — "a free downloadable ZIP file, which contains the individual data files (instance documents) of company accounts filed electronically", published every morning Tuesday to Saturday on `download.companieshouse.gov.uk` with no login. The Actor reads the download page to find the day's file(s) and downloads them; nothing else is requested, and robots.txt is respected. Companies House says of these files: "Each data file is provided free of charge and is not supported."
- **Basis for reuse:** Companies House states that "Information on the public register is made available by virtue of approvals issued by us in accordance with section 47 of the Copyright, Designs and Patents Act 1988" and that "We impose no rules or requirements on how the information on the public register is used". Filed accounts are the filing company's own documents, not Crown copyright: this Actor extracts the reported figures and codes from each filing and reproduces no document. The Companies House guidance quoted on this page is Crown copyright under the Open Government Licence v3.0. Every row carries the source line below.
- **Privacy:** the iXBRL files name the directors who signed the accounts, and often the accountants or auditors. The engine drops every such tag before a record exists; the output is company figures only. No input searches for a person. A filing whose company name the parser cannot read is skipped, never delivered with somebody else's name in its place.
- **Attribution line** to keep with any copy of the data (the file date is `filingDate` on each row and `STATS.bulk.fileDate`):

> Source: Companies House, Accounts Data Product (daily file of 2026-09-26), https://download.companieshouse.gov.uk/en\_accountsdata.html. Register information is made available by Companies House under its approvals in accordance with section 47 of the Copyright, Designs and Patents Act 1988; Companies House imposes no rules or requirements on how the information on the public register is used. Filed accounts are the filing company's own documents (not Crown copyright): this Actor extracts reported figures and codes only and reproduces no document. Companies House guidance quoted here is Crown copyright under the Open Government Licence v3.0. Unofficial: not affiliated with or endorsed by Companies House. Company-level figures only (no directors, signatories, auditors or accountants); corrections or removal requests: rein8.actors@gmail.com.

### Limits and honest notes

- **Only electronically filed accounts:** Companies House says the product covers "about 75% of the 2.2 million accounts we expect to be filed each year" (its gov.uk guidance page still says about 60%; a Companies House forum estimate is 75–90%). Paper filings are not in it at all.
- **Most filings carry no turnover or profit** — see the [coverage table](#what-is-in-the-rows-measured): turnover in 1.8% of a day's filings, profit before tax in 3%. Turnover and profit filters therefore return the full FRS 102 / IFRS filers — the larger companies — and nobody else.
- **The figures are what the filer tagged.** A wrong tag in the filing gives a wrong number; the Actor does not correct filings. One known pattern is corrected on the way out: 12.5% of a day's filings (one filing software) tag the headcount with a scale of −2 on the printed whole number ("443" read as 4.43), and the Actor restores the printed number — with a residue: under that software an exact multiple of 100 employees ("100") reads as 1, and a genuine fractional headcount (2 filings a day) reads ×100. Check `companyUrl` for anything that matters.
- **Group accounts** (`groupAccounts: true`, about 0.8% of filings): a figure the parent files only for the group — turnover, usually — is the group's; the balance sheet is the parent company's own unless only the group's is tagged. One row can therefore mix the two levels: where the parent did not tag its own figure for a concept (cash, often), the group's figure fills the gap, so on a `groupAccounts: true` row `cash` may be consolidated while `netAssets`, `currentAssets` and `debtors` are the parent's own (PA Media Group Limited, 00004197, on 26 Sep 2026: debtors equal to current assets, cash from the group). Treat such rows as the parent's balance sheet with group figures where the parent tagged none; 138 of 17,734 filings a day.
- **Prior-year comparatives** are missing in about 5% of filings that have them, when the filer's opening-balance context sits on the first day of the year (the Actor reads the last period end before it; a fix in the engine is queued).
- **Daily files only, 60 days back.** The monthly archives (1.8–4.1 GB each) are not read yet.
- **One row per company and period:** a company that files two years' accounts on the same day gives two rows. A re-filed (amended) set of accounts for the same period has the same row id: in incremental mode it comes back as a changed row (`_changed`) when a figure differs — a re-filing with the same figures is not a change; inside one plain date window that also holds the original, the first version read (the older file) is kept and the amendment is counted in `STATS.dupInRun`.
- **No address in the accounts files** — join with the UK Company Search Actor on `companyNumber` (recipe above).
- Community Interest Companies file a zip inside the zip (18 of 17,752 entries on 26 Sep); those are not read. Plain-XBRL `.xml` filings (rare, older) are not read either. About 36 filings a day are written by one software whose facts the reader cannot see yet: they are skipped (not delivered, not charged) and counted in `STATS.skippedInvalid`.
- Not affiliated with, endorsed by, or reviewed by Companies House. Not legal, credit or investment advice.

### FAQ, Disclaimers, and Support

**What is the basis for using this data?** Companies House publishes the Accounts Data Product free of charge and says it imposes no rules or requirements on how public-register information is used; register information is made available under Companies House's approvals in accordance with section 47 of the Copyright, Designs and Patents Act 1988. The accounts themselves are the filing company's documents; this Actor extracts figures and codes from them and never reproduces a document. This is a description of the source's own terms, not legal advice.

**Intended use:** market data and research — credit control and lending decisions on companies, B2B lists by size, benchmarking, 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 directors, signatories, auditors or accountants (their tags are dropped in the engine). A very small company's accounts still describe one person's business, and a company name can contain a person's name, so UK GDPR can apply to some records. Use the data for B2B purposes, refresh it 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 daily accounts files, which need no account.

#### Why is turnover empty for most rows?

Because most UK companies are allowed to file accounts without a profit and loss account, and the Actor only returns what the filing contains. Micro-entities (42% of a day's filings) file a balance sheet and a headcount under FRS 105; small companies (30%) may file "filleted" or abridged accounts, which leave the profit and loss account out. Measured on 26 Sep 2026, a turnover figure was present in 1.8% of filings and a profit-before-tax figure in 3%. What *is* there for nearly everyone: net assets (98%), employees (90%), the dormant flag, the accounts type and standard, and — for about half — cash and creditors due within one year. To keep only filings that report turnover, set **Accounts standard** to FRS 102 / IFRS or a **Turnover at least** value.

#### How fresh is the data?

Each daily file holds the accounts Companies House registered the previous day (Tuesday's file: Saturday to Monday). Schedule the Actor daily after 08:00 UTC for yesterday's filings.

#### Can I get the accounts for one specific company?

Only for the days it filed: paste the number and set a date window up to 60 days back. For older accounts, open `companyUrl` (the filing history on the official service).

#### How do I keep only, or leave out, dormant companies?

Tick **Only dormant companies** or **Leave dormant companies out**. The flag is the filing's own declaration (`dormant`); 12.8% of a day's filings declare it. The accounts *type* never says "dormant" in practice, so the flag is the way to select them.

#### 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 **Credit risk** and **Employers** views (Storage → dataset → view) download ready-made sheets.

#### What does this Actor NOT do?

Directors, signatories, auditors, persons with significant control, the accounts PDF, addresses, companies that filed on paper, filings older than 60 days (monthly archives not yet read), or corrections to what a company filed.

**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 source and its terms on every row, company-level data only.

- [Companies House Data — UK Company Search, No API Key](https://apify.com/rein8/uk-companies-house-snapshot) — every live UK company from the monthly snapshot: SIC code, postcode, status, deadlines, charges.
- [UK Company Watch — Companies House Changes on Your List, No Key](https://apify.com/rein8/uk-company-watch) — the same company-number list, watched monthly for status, deadline, charge, name and address changes.
- [LEI Lookup & Changes — Legal Entity Identifier Data, No API Key](https://apify.com/rein8/lei-legal-entity-lookup) — turn a company number into its LEI and its parent group.
- [Public Tenders UK & EU — Contracts Finder, Find a Tender, TED](https://apify.com/rein8/public-tenders-uk-eu) — which companies won public contracts; the winners carry a Companies House number for the `companyNumbers` box here.
- [Sirene Company Search — France SIREN/SIRET Lookup, No API Key](https://apify.com/rein8/france-company-search) — French companies from the official Sirene register.
- [Form D Scraper — Startup Funding Leads from SEC Form D, No Key](https://apify.com/rein8/sec-form-d-funding-rounds) — every private raise filed with the U.S. SEC, as a daily feed.
- [New Business Filings by State — Secretary of State Data, No Key](https://apify.com/rein8/us-state-business-filings) — new LLCs and corporations from five US Secretary of State portals.

### Changelog

- 0.1.1 (2026-09-26, unpublished) — README: group accounts explained honestly (a row can carry a consolidated figure next to parent-company figures where the parent tagged none).
- 0.1 (2026-09-26) — first release: the daily Companies House accounts files read as iXBRL, one row per company and period with the balance sheet, employees, dormant flag, accounts type and standard, prior-year comparatives, credit signals, and turnover / profit when filed; filters by company numbers, net assets, cash, employees, turnover, accounts standard and type, dormant; date windows; attribution on every row; signatories and officers dropped in the engine. Listing reframed the same day around what nearly every filing carries, after measuring the whole daily file.

# Actor input Schema

## `date` (type: `string`):

The date of one daily file, YYYY-MM-DD (e.g. 2026-09-26). Empty = the newest file on the download page. Files are published Tuesday to Saturday and kept for 60 days; a date with no file stops the run before anything is charged.

## `dateFrom` (type: `string`):

First day of a window of daily files, YYYY-MM-DD (e.g. a week: 2026-09-20). Every file from this date to "To date" is read, oldest first, one scan fee per file, at most 31 files. Ignored when "Daily file" is set.

## `dateTo` (type: `string`):

Last day of the window, YYYY-MM-DD. Empty with "From date" set = up to the newest file.

## `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). Only the accounts registered in the chosen day(s) come back: a company that did not file in that window is simply absent. Combine with a date window (up to 60 days back) to check a customer list.

## `minNetAssets` (type: `integer`):

Minimum net assets (shareholders' funds) in the filing's currency, e.g. 100000. Reported by 98% of filings, micro-entities included. Negative values are allowed.

## `maxNetAssets` (type: `integer`):

Maximum net assets. Set -1 to keep only companies whose liabilities exceed their assets (negative net assets: about 1 in 5 daily filings), the classic credit-risk signal.

## `minCash` (type: `integer`):

Minimum cash at bank and in hand, e.g. 250000. Reported by about half of daily filings (micro-entity balance sheets often show current assets only): rows without a cash figure never match.

## `minEmployees` (type: `integer`):

Minimum average number of employees during the period (reported by 9 in 10 filings, including micro-entities), e.g. 50.

## `minTurnover` (type: `integer`):

Minimum turnover in the filing's currency (usually GBP), e.g. 1000000 for £1m+. Only accounts that report turnover can match — about 2% of a day's filings (the larger companies filing full FRS 102 / IFRS accounts); micro-entity, filleted and abridged accounts file no profit and loss account.

## `maxTurnover` (type: `integer`):

Maximum turnover, e.g. 10000000 for companies up to £10m. Rows without a turnover figure never match (see "Turnover at least").

## `accountsStandard` (type: `array`):

Keep only accounts prepared under these standards. Empty = all. Measured on a day's file: micro-entity 42%, small 30%, FRS 102 27%, medium / FRS 101 / IFRS under 1%. Micro-entity and small accounts carry a balance sheet and employees; full FRS 102 / IFRS accounts are the ones with turnover and profit.

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

Keep only these filing types. Empty = all. Measured on a day's file: full 63%, filleted 32%, abridged 5%. "Filleted" = a small company that chose not to file its profit and loss account; "abridged" = a summarised balance sheet. Dormant companies are not a type: use "Only dormant companies".

## `excludeDormant` (type: `boolean`):

On: filings that declare the company dormant are dropped (about 1 in 8 daily filings). A filing that does not say either way is kept.

## `onlyDormant` (type: `boolean`):

On: only filings that declare the company dormant (about 1 in 8 daily filings) — accountants, strike-off and company-formation services. Off: no restriction.

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

Maximum rows per run (one row per company and accounting period). A daily file holds about 17,000 filings; 1,000 covers a filtered day, 20,000 a whole one. The read stops as soon as the limit is reached.

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

Off (default): every matching filing in the chosen day(s). On (for a schedule saved as a Task): rows already delivered under this memory are skipped; a re-filed (amended) set of accounts for the same period comes back as a changed row marked \_changed only when a figure differs. A daily file that has not changed since the last run is not downloaded again.

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

The memory an incremental run uses to remember what it delivered. Left as "default", every saved Task gets its own memory automatically (a run started by hand remembers per filter set). Type a name to share one memory between Tasks 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 everything again.

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

Return 5 filings without any charge, to check the format. A preview does not touch the memory.

## Actor input object example

```json
{
  "excludeDormant": false,
  "onlyDormant": false,
  "maxItems": 200,
  "incremental": false,
  "stateKey": "default",
  "allowStateFallback": false,
  "preview": false
}
```

# Actor output Schema

## `financials` (type: `string`):

One item per set of accounts (company and period). Add ?format=csv or ?format=xlsx to the URL for other formats.

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

The daily file(s) read, filings parsed and skipped, filters applied, 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 = {
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("rein8/uk-company-financials").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 = { "maxItems": 200 }

# Run the Actor and wait for it to finish
run = client.actor("rein8/uk-company-financials").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 '{
  "maxItems": 200
}' |
apify call rein8/uk-company-financials --silent --output-dataset

```

## MCP server setup

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

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/PRrOrlcFUePJ51K3D/builds/9sHuCOKeb3KLbE4Z9/openapi.json
