UK Company Accounts Feed: Net Assets & Distress
Pricing
from $7.00 / 1,000 results
UK Company Accounts Feed: Net Assets & Distress
Daily Companies House accounts, one row per filing: net assets, cash and employees vs last year, plus signals such as net assets turned negative.
Pricing
from $7.00 / 1,000 results
Rating
0.0
(0)
Developer
Mastazee Data Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
UK Company Accounts Feed: Net Assets, Cash & Distress Signals
Every day, Companies House publishes the accounts that UK companies filed electronically the day before. This Actor turns that file into one tidy row per filing: net assets, cash and employees with the prior year next to them, the change, and a short list of distress signals. It reads the official, free Companies House bulk file, so there is no API key to get and nothing to scrape.
Use it to:
- Spot trouble early. Get the roughly 350 companies a day whose net assets turned negative in the accounts they just filed, or everyone who now reports net liabilities or cash down by more than half.
- Watch customers, suppliers and borrowers. Give a list of company numbers (up to 10,000) and get a row the day any of them files accounts.
- Feed a CRM or credit file. Schedule it Tuesday to Saturday in monitor mode and receive each new filing once.
Tested on 26 October 2026 against the real Companies House download site, on a Mac and on the Apify platform: the default input returned 359 rows from the 24 October file; the example input below returned 25; every filing of the 30 September month-end file (39,244 rows) was read once; and two back-to-back monitor runs returned 359 rows, then 0. Automated tests use real accounts saved as trimmed fixtures.
This is not a turnover or profit feed. Most UK companies file micro-entity or small-company accounts, which are a balance sheet only. In the files we measured, about 99% have net assets, 89% average employees, 41% cash, but only about 1% turnover and 2% profit or loss. Those fields are filled only when the company tagged them and are null otherwise, never 0.
Example input
{"signals": ["net_assets_turned_negative"],"latestFiles": 1,"maxResults": 25}
Every input is optional. With no input at all you get the same as this example without the 25-row limit: the filings in the latest daily file whose net assets turned negative (359 on 24 October), at most 500.
More examples:
{ "companyNumbers": ["00445790", "SC123456"], "signals": [], "monitorMode": true, "stateKey": "my-customers" }
A row whenever either company files, scheduled each weekday.
{ "signals": ["net_liabilities"], "minEmployees": 20, "dateFrom": "2026-10-19", "dateTo": "2026-10-24" }
Companies with at least 20 average employees and net liabilities, filed in one week. A date range can cover at most 14 days.
Clear the signals list ("signals": []) to receive every filing, not just those with a signal.
Example output (one filing, trimmed)
{"filing_id": "Prod223_4336_01082080_20260630","company_number": "01082080","company_name": "UPPER GARDEN FLATS LIMITED","balance_sheet_date": "2026-06-30","accounts_type": "small","net_assets": -87,"net_assets_prior_year": 9638,"net_assets_change": -9725,"net_assets_change_pct": -100.9,"cash": 2844,"cash_prior_year": 17368,"cash_change_pct": -83.63,"current_assets": null,"average_employees": 4,"average_employees_prior_year": 5,"turnover": null,"profit_loss": null,"signals": ["net_assets_turned_negative", "net_liabilities", "cash_down_over_50pct"],"source_file": "Prod223_4336_01082080_20260630.html","source_file_date": "2026-10-24","source_url": "https://download.companieshouse.gov.uk/Accounts_Bulk_Data-2026-10-24.zip","company_url": "https://find-and-update.company-information.service.gov.uk/company/01082080"}
Fields
| Field | Meaning |
|---|---|
filing_id | The file name inside the daily zip, without .html. Unique per filing; used for deduplication |
company_number, company_name | Companies House number (8 characters) and the name as tagged in the accounts (it can differ from today's register name) |
balance_sheet_date, period_start | End and start of the accounting period the figures describe |
approved_date | Date the directors approved the accounts, if tagged |
filing_date, filing_window_start, filing_window_end | Companies House says each daily file holds the accounts registered the previous day (Tuesday's file: Saturday to Monday). filing_date is that day, or null for Tuesday files, where filing_window_* give the three days |
accounts_type | micro, small, full or dormant, derived from the tagged accounting standard and dormant flag; null if not tagged. full means a standard other than the micro-entity or small-entity regime, not that the company is large |
accounts_filing_type, accounting_standard | The raw tagged values behind it (for example FilletedAccounts, FullAccounts; Micro-entities, SmallEntities, FRS102) |
dormant | The company's own dormant flag; null if not tagged |
currency | Currency of the figures, almost always GBP |
net_assets, net_assets_prior_year | Net assets (liabilities) at the balance sheet date and a year earlier. Negative means net liabilities |
net_assets_basis | net_assets (the NetAssetsLiabilities tag) or equity (total equity, used when net assets is not tagged) |
net_assets_change, net_assets_change_pct | Difference and percentage of the prior year's absolute value. null when either year is unknown or the prior year is 0 |
cash, cash_prior_year, cash_change, cash_change_pct | Cash at bank and in hand, with the same comparison |
current_assets, current_liabilities, total_assets_less_current_liabilities | Current-year balance sheet subtotals. current_liabilities is the creditors due within one year as tagged; it is null for about 6 in 10 filings and is never calculated |
average_employees, average_employees_prior_year | Average number of employees (some filers report fractions) |
turnover, profit_loss and their _prior_year | Only where the company tagged them (about 1-2% of filings). Otherwise null |
signals | Any of the five signals below |
source_file, source_file_date, source_url | The member and date of the daily file in the official Companies House download |
company_url | The company's page on the official register (a link only; the Actor never fetches it) |
The five signals
| Signal | True when |
|---|---|
net_assets_turned_negative | Net assets were 0 or more a year earlier and are below 0 now |
net_liabilities | Net assets are below 0 |
cash_down_over_50pct | Cash was above 0 a year earlier and has fallen by more than half |
dormant | The company's own dormant flag is true |
first_accounts | Figures are present but no prior-year figure of any kind and no prior period are tagged (normally a company's first accounts) |
A signal is only raised from figures actually in the file. Unknown values never trigger a signal. On the two days measured, per day: about 360 turned negative, 2,100-2,300 net liabilities, 730-800 cash down, 1,500-1,600 dormant and 1,500-1,600 first accounts.
Monitor mode
Switch on monitorMode and schedule the Actor Tuesday to Saturday after 07:00 UK time (Companies House publishes at about 06:45 UTC). The Actor remembers the last daily file it finished and, on each run, processes only later files, at most 10 per run; the first run reads the latest file, or starts at dateFrom, and later runs never go back before that first file.
- Each filing once. The Actor remembers the ids of the filings it delivered, so a re-issued file or an overlapping day never produces duplicates. A corrected filing gets a new filing id from Companies House and is delivered as a new row.
- One memory per monitor. The memory is kept under your
stateKeytogether with your filters (watchlist, signals, name, net assets and employee limits). Two monitors with different filters never hide each other's filings, even with the samestateKey. Changing dates,maxResultsor the run time keeps the same memory. - Nothing lost, nothing charged twice. The memory is saved after every batch of rows the platform stores, and only rows actually stored count as delivered. If
maxResults,maxRuntimeSecondsor your spending limit stops a run, or the run is interrupted, the next run continues where it stopped; a daily file is only marked done once all of its matching filings were delivered. - One run at a time. If a run of the same monitor is still going, a second run stops at once with status
skippedand no rows. (The check is not atomic: two runs started within the same second could both proceed.) - A repeat run with nothing new takes about a second. If the saved memory is unreadable, the run starts fresh and says why in the run summary.
Data source and attribution
Source: the Companies House Accounts Data Product, free daily files of accounts filed electronically. This Actor is unofficial and is not affiliated with Companies House.
Companies House states that it "imposes no rules or requirements on how the information on the public register is used". It also says that reusers are responsible for complying with applicable data protection, copyright and other legislation. The data is not published under the Open Government Licence and this Actor does not claim it is. You are responsible for your own use of it, including data protection law and third-party copyright.
To respect that, the Actor outputs extracted facts only: numbers, dates, flags, the company number and the company name. It never outputs the accounts text, and never any director, signatory, accountant or auditor name, even though those appear in the source files. Its parser reads a fixed list of tags and none of them is a person.
Data limitations (please read)
- Electronically filed accounts only. Paper filings and accounts prepared under IFRS are not in the product. Companies House's own pages disagree about what share of filings is covered, so no coverage figure is claimed.
- Reported figures, as tagged. Filers sometimes tag figures with the wrong sign or scale. One real filing wrote 32.612 euros for 32,612; it is passed through unchanged (
currencyshows EUR). About 0.8% of filings that tag both net assets and total equity disagree in sign;net_assets_basistells you which tag was used, andNetAssetsLiabilitiesis preferred. - Turnover and profit are rare (about 1-2%) because micro and small companies file a balance sheet only. Cash is tagged in about 4 in 10 filings, current liabilities in about 4 in 10, employees in about 9 in 10.
- Net assets are not summed. If a filing tags only the components of equity and no total,
net_assetsisnull. - One prior year only. The comparison is with the previous year's figures printed in the same accounts.
- The filing date is a window, taken from Companies House's description of the daily files, not a timestamp in the file.
- Skipped: nested zips (Community Interest Company reports) and any plain-XBRL
.xmlfiles. They are counted in the run summary (unsupported_members_skipped). - Companies House describes the product as "not supported". The format could change without notice.
- Dormant companies have net assets of 0 or a small number; a dormant flag and a net-assets signal can both be present.
Pricing
Pay per event: $7.00 per 1,000 rows ($0.007 per filing row), plus Apify's standard tiny start fee. You are charged only for rows written to your dataset; filings that don't match your signals or filters cost nothing.
| How you use it | Rows | You pay (approx.) |
|---|---|---|
| Default run (latest file, net assets turned negative) | ~350 | ~$2.50 |
| Daily distress monitor, Tuesday to Saturday, for a month | ~7,500 | ~$50 a month |
| Month-end deadline day (busiest file of the month) | ~1,300 | ~$9 |
| Watchlist of a few hundred company numbers, monitor mode | a few a week | cents a month |
- No double billing in monitor mode: each filing is delivered to a monitor once.
- Spending limits: if you set a maximum cost per run, the Actor stops cleanly when it's reached, and the filings it didn't deliver come back on the next monitor run.
- Narrow it to pay less:
minEmployees,minNetAssets/maxNetAssets,nameContainsandcompanyNumbersall cut the rows (and the cost) before anything is written.
Running time and memory
Measured on the Apify platform on 26 October 2026, with the real files:
| Run | Memory | Filings read | Rows | Time |
|---|---|---|---|---|
| Default input (latest file, net assets turned negative) | 1,024 MB | 11,002 | 359 | 109 s |
| Same, at 512 MB | 512 MB | 11,002 | 359 | 209 s |
| Every filing on a month-end deadline day (2026-09-30, 398 MB) | 1,024 MB | 39,244 | 1,324 | 636 s |
| Monitor repeat run (no new file) | 512 MB | 0 | 0 | 3 s |
Reading the files is CPU work, and Apify gives more CPU to more memory, so 1,024 MB finishes twice as fast as 512 MB for about the same platform cost. On a Mac, for comparison:
| Run | Download | Filings read | Rows | Time | Peak memory | Disk |
|---|---|---|---|---|---|---|
| Default input (latest file, net assets turned negative) | 83 MB | 11,002 | 359 | 21-33 s | 132-139 MB | 83 MB |
| Example input above (stops after 25 rows) | 83 MB | 1,421 | 25 | 16 s | 123 MB | 83 MB |
| Every filing on a month-end deadline day (2026-09-30) | 398 MB | 39,244 | 39,244 | 116 s | 148 MB | 398 MB |
| Monitor, first run / repeat run | 83 MB / none | 11,002 / 0 | 359 / 0 | 21 s / 1.2 s | 111 MB | 83 MB / 0 |
Each daily file is downloaded to a temporary folder, read one filing at a time and deleted before the next file, so only one file is ever on disk. The Actor runs at 1,024 MB by default: it is twice as fast as 512 MB for about the same cost, and Apify gives about twice the memory as disk space, so month-end files (about 400-600 MB) fit with room to spare. 512 MB also works but a month-end file takes about 20 minutes. If a file doesn't fit, the run stops with a message asking for more memory.
Troubleshooting
- No rows? The default only keeps filings whose net assets turned negative. Clear
signalsto see every filing, or widendateFrom/dateTo. - "Companies House published no daily file in that date range": the range holds only Sundays, Mondays, bank holidays or future dates. Files appear Tuesday to Saturday at about 06:45 UTC.
- "published no accounts file in the last 14 days": the download site is unreachable or has paused. Try later.
- "The date range may cover at most 14 days": split a longer period into several runs, or use monitor mode.
- Status
skipped: another run of the same monitor was still running. Nothing was output or charged; run it again later. - Run says "stopped early":
maxResults,maxRuntimeSecondsor your spending limit was reached. In monitor mode the next run continues; otherwise raise the limit. - A company is missing: its accounts may be on paper, in IFRS, or not yet registered. Companies House has a one-day lag.
- Monitor mode returned nothing: everything up to the latest file was already delivered to this
stateKeyand filter set. Use a new key to start over.
Known restrictions
- A date range covers at most 14 days (about 10 daily files), and
latestFilesis at most 10. A run never reads more than 10 daily files; a monitor that is further behind catches up over several runs. - Companies House documents that daily files are removed after 60 days. A monitor idle for longer resumes 62 days back and warns that some days may be missing.
- Files are read one at a time, with at most 5 requests a second. Files over 1.5 GB are refused (the largest seen is 598 MB).
- Monitor memory keeps the latest 250,000 delivered filing ids per monitor (several weeks of unfiltered output).
- A watchlist is limited to 10,000 company numbers.
- Output is in the currency the filer used; there is no conversion.