UK Company Growth Signals: Companies House + LinkedIn
Pricing
from $30.00 / 1,000 companies
UK Company Growth Signals: Companies House + LinkedIn
Rank UK companies by Companies House filings and optional LinkedIn headcount changes. Get a 0-100 score, dated evidence and research angles. Free demo; bring a Companies House API key for live records.
Pricing
from $30.00 / 1,000 companies
Rating
0.0
(0)
Developer
Jessy Mariau
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Turn a UK company list into a shortlist you can explain. Combine Companies House filings with optional LinkedIn headcount snapshots, then sort the companies by a published 100-point rubric. Each row includes the figures and source link behind the score.
Use it to choose which prospects deserve research this month. Filing activity is a lead signal; it does not prove revenue growth, a funding round or buying intent.
See the result first
Leave the API key blank and run the Actor. You get three fictional companies without external requests or Actor event charges. The growth example includes a fictional previous headcount snapshot; your first live run has no previous snapshot.
| Fictional company | Score | Band | Appointments | SH01 filings | Headcount change |
|---|---|---|---|---|---|
| DEMO ROBOTICS LIMITED | 90 | GROWING | 2 | 2 | 8 |
| DEMO PRINT AND PACKAGING LIMITED | 45 | STEADY | 1 | 0 | 2 |
| DEMO HIGHLAND HAULAGE LIMITED | 0 | QUIET | 0 | 0 | Not available |
These are actual outputs from the built-in fictional demo, not customer results. Open the dataset to inspect every reason, then export the rows as JSON, CSV or Excel.
Cost of a real run
$0.03 per matched company checked. A 20-company run costs $0.60 in this Actor's events; checking that list weekly for four weeks costs $2.40. Unmatched names and failed company lookups have no event charge.
Optional LinkedIn reads use harvestapi/linkedin-company on your account and add that Actor's charges. Your plan must permit those runs. Switch linkedinLookup off for register-only research. Check the Pricing tab and your Apify plan for current platform or standby usage costs.
What it reads
For each company it pulls the profile, every officer on the register including the ones who resigned, and the filing history back to the start of your lookback window (six months by default). From those it counts:
- Board appointments in the window, from
appointed_onon the officer list and the AP01 to AP04 filings - Resignations in the window, from
resigned_onand the TM01 and TM02 filings - Share allotments (SH01), with the nominal capital stated on the form
- A registered office move (AD01) and a change of name (CERTNM and the other change-of-name types)
- Company age from the incorporation date
- Whether the accounts and the confirmation statement are on time
When linkedinLookup is on, it also runs the LinkedIn Company Details Scraper (harvestapi/linkedin-company) for each company and reads the employee count and follower count. The headcount is stored under your watchKey, so the next run with the same key reports the change since last time.
The rubric
Eight lines feed the score and they add up to exactly 100.
| Signal | Points | How it scores |
|---|---|---|
| New share capital | 25 | One SH01 in the window scores 15. Two or more score 25. |
| Board appointments | 20 | One appointment scores 10, two score 15, three or more score 20. |
| Headcount growth | 20 | Against the last snapshot: up 10 percent or more scores 20, up 5 percent scores 14, any rise scores 8. |
| Company age | 10 | Under 3 years scores 10, under 6 scores 6, under 10 scores 3. |
| Filings on time | 10 | Accounts and confirmation statement both not overdue. |
| Registered office moved | 5 | An AD01 in the window. |
| Name changed | 5 | A change-of-name filing in the window. |
| Board stability | 5 | Appointments equal or exceed resignations in the window. More resignations than appointments scores 0 and says who left. |
55 or more is GROWING. 30 to 54 is STEADY. Below 30 is QUIET.
Two things follow from the table. A first run with a new watch key has no previous headcount to compare against, so the headcount line cannot fire and the most any company can score is 80. And a company can be genuinely growing without any of these signals showing on the register, so a QUIET score means the public record is quiet, not that the company is.
What you need
A Companies House API key. It is free and takes about two minutes: register at https://developer.company-information.service.gov.uk/, create an application, add a REST API key. Paste it into apiKey and Apify stores it as a secret. It never reaches the log or the dataset.
Run with no key at all and you get three sample rows in demo mode, one in each band, scored by the same rubric as real ones. Nothing is charged and nothing leaves the container.
How to run it
{"apiKey": "your-companies-house-key","companies": "09446231\nOctopus Energy Limited\nExample Trading Ltd https://www.linkedin.com/company/example-trading","linkedinLookup": true,"watchKey": "saas-targets","lookbackMonths": 6}
A company number is looked up directly. A name is searched and accepted only when the top hit is the same name once case, punctuation and LTD versus LIMITED are ignored; anything else comes back unmatched with the top three candidates attached, so you make the call rather than the Actor guessing. A LinkedIn company URL after the name or number is used as-is for the LinkedIn lookup, which skips LinkedIn's own name search and its chance of picking the wrong company.
Leave companies empty and fill in searchQuery, sicCode or postcodePrefix instead, and every company the register returns for that search is scored, up to maxResults.
Run it monthly with the same watchKey and every run after the first carries the headcount change. Different lists get different keys and never touch each other.
What comes back
One row per company. The Overview table shows the score, the band, the counts and the LinkedIn status so you can sort on the score column and start at the top.
| Field | What it holds |
|---|---|
input, matched | The line you gave and whether a company was found. |
company_name, company_number, status, date_of_creation | As registered. |
growth_score, growth_band | 0 to 100, and GROWING, STEADY or QUIET. |
appointments_in_window, appointed_names | Officers appointed since lookback_from. |
resignations_in_window, resigned_names | Officers who resigned in the window. |
share_allotments_in_window, share_allotment_capital, latest_allotment_date | SH01 count, the nominal capital on the forms, and the newest one. |
office_moved_in_window, name_changed_in_window | With the dates. |
company_age_years | To one decimal. |
accounts_overdue, confirmation_overdue | With the next due dates. |
headcount, headcount_previous, headcount_change, headcount_change_pct | From LinkedIn, and the change since the last snapshot under this watch key. |
followers, linkedin_url, linkedin_name | From LinkedIn. |
linkedin_status, linkedin_error | ok, not_found, off, or unavailable with the reason. |
reasons | Every rubric line that fired, with its numbers and points. |
pitch_angles | Up to three sentences written from this row's own numbers. |
companies_house_url, checked_at, previous_checked_at | Where to verify it, and when. |
candidates, error | For unmatched names, the possible companies; for failed lookups, why. |
A pitch angle looks like this:
DEMO ROBOTICS LIMITED filed 2 share allotments with Companies House since 2026-03-07, recording new shares issued; the filing does not establish how much funding was raised.
DEMO ROBOTICS LIMITED added 8 people on LinkedIn since 2026-06-07, from 38 to 46.
The OUTPUT record in the key-value store carries the summary: how many companies landed in each band, the ten highest scores with their first pitch angle, how many LinkedIn lookups were unavailable, and one line you can drop into Slack.
Honest limits
- The nominal capital on an SH01 is the face value of the shares, not the money paid for them. Three pounds of nominal capital can be a large round at a premium. The count of allotments is the signal; the figure is context.
- The officer list and the filing history are read from the public register, which lags. An appointment made last week may not be on it yet.
- The LinkedIn employee count is what LinkedIn shows, which is people who list the company on their profile, not payroll. When a company only carries a range, the bottom of the range is used and
headcount_is_range_flooris true. - When
linkedinLookupis on and the wrapped Actor cannot run, the row still scores from the register andlinkedin_statussaysunavailablewith the error. The headcount line simply does not fire. - Searching LinkedIn by name can land on the wrong company with a similar name. Give the LinkedIn URL on the input line when you have it, and check
linkedin_nameagainstcompany_namewhen you do not. - None of this is a judgement about the company. It describes what the public record showed on the day it was read.
Use it from an AI agent
Every part of this Actor is reachable from an AI agent, because I also run it as an MCP server. The endpoint is https://fractionalhqforyou--uk-company-growth-signals.apify.actor/mcp and the tool is find_uk_growth_signals, which takes the same input and returns the rows and the summary in one call. Agent runs are charged the same per-event price. When a client cannot take a raw endpoint, load apify/actors-mcp-server with fractionalhqforyou/uk-company-growth-signals in its Actor list.
Help with your first run
Open an issue on this Actor with the run ID and the result you expected. Remove API keys and private records before sharing. Built by Fractional HQ, independent design and automation.