UK New Companies & Officers Feed (unofficial Companies House)
Pricing
from $3.00 / 1,000 company results
UK New Companies & Officers Feed (unofficial Companies House)
Daily feed of newly incorporated UK companies from the official Companies House API, with SIC, type and postcode filters and optional officers. Unofficial; not affiliated with Companies House.
Pricing
from $3.00 / 1,000 company results
Rating
0.0
(0)
Developer
Olalekan Johnson
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Daily list of companies newly incorporated at Companies House, with optional officers. This Actor calls the official Companies House REST API. It can also read the free monthly basic-data snapshot when you need a historical month without spending API calls.
This Actor is unofficial. It is not affiliated with, endorsed by, or connected to Companies House or the UK government.
Set a key before the first run
Companies House requires a free API key on every REST call. The default input does not contain a key, so the Apify daily test and any run that leaves apiKey blank depend on an environment variable:
- Create a key at https://developer.company-information.service.gov.uk/. It is free and limited to 600 requests in each 5 minute period.
- As the Actor owner, open the Actor in Apify Console → Settings → Environment variables.
- Add
COMPANIES_HOUSE_API_KEYwith that key and mark the variable secret.
A user can still pass their own key in the apiKey input. That value overrides the environment variable for that run. If neither is set, the run stops with an error that names COMPANIES_HOUSE_API_KEY. It does not guess, scrape the website, or call the API anonymously.
The default input is yesterday in the Europe/London calendar, at most 20 companies, officers off, and "only new since last run" off. That is one search request and returns a non-empty dataset whenever yesterday (or the previous week, if yesterday is empty) has incorporations.
What it returns
Each dataset row is one company:
- company number, name, status, type, incorporation date, SIC codes
- registered office postcode, locality, region, country, and the address object
- a link to the public register page
- officers, only when you turn them on
Officers stay on the company row. The Officers view unwinds them. Date of birth is month and year only, which is all the public register publishes.
Input
| Field | Default | What it does |
|---|---|---|
apiKey | empty | Secret. Your Companies House key. Blank uses COMPANIES_HOUSE_API_KEY. |
incorporatedFrom / incorporatedTo | yesterday | YYYY-MM-DD, or a relative date such as 1 day or 2 weeks. |
fallbackLookbackDays | 7 | If both dates are empty and yesterday has no companies, search this many days ending yesterday. |
maxCompanies | 20 | Stop after this many matching companies. |
sicCodes | empty | Any of these SIC 2007 codes, for example 62012. |
companyTypes | empty | API codes such as ltd, plc, llp. |
companyStatus | empty | For example active. Empty means every status. |
postcode | empty | Registered-office prefix, such as SW1A or EH. |
region | empty | Matches locality, county, country, or address lines. Example: Manchester. |
includeOfficers | false | One extra API call per company. |
activeOfficersOnly | true | Drop officers who have a resignation date. |
onlyNewSinceLastRun | false | Skip company numbers already stored for stateKey. |
stateKey | default | Separate seen-lists for separate schedules. |
source | api | bulk reads the free monthly snapshot instead. |
bulkSnapshotDate | latest | File date such as 2026-10-01. |
Leave Only new since last run off for the daily test. The seen-list lives in the default key-value store and would make a second run the same day empty.
Output example
Illustration of the shape, not a live register extract:
{"companyNumber": "12345678","companyName": "NORTH WHARF DIGITAL LTD","companyStatus": "active","companyType": "ltd","dateOfCreation": "2026-10-22","sicCodes": ["62012"],"postalCode": "SW1A 1AA","locality": "London","region": "Greater London","country": "United Kingdom","registeredOfficeAddress": {"addressLine1": "1 Wharf Lane","locality": "London","postalCode": "SW1A 1AA","country": "United Kingdom"},"companyProfileUrl": "https://find-and-update.company-information.service.gov.uk/company/12345678","source": "api","retrievedAt": "2026-10-23T06:15:00+00:00","officerCount": 1,"officers": [{"name": "DOE, Jane","officerRole": "director","appointedOn": "2026-10-22","nationality": "British","occupation": "Director","countryOfResidence": "England","dateOfBirth": "1985-04","officerLocality": "London","officerPostalCode": "E1 6AN"}]}
officerCount and officers are omitted when officers are not requested.
Pricing
Pay per event. There is a $0.005 start event and no dataset-item event. When you publish the Actor, add only these events and do not put a price on dataset items, or a company would be billed twice.
| Event | Suggested price | Charged when |
|---|---|---|
apify-actor-start | $0.005 | Once per run, by the platform (once per GB of memory, so once at the 512 MB default). The Actor does not call Actor.charge for it. |
company-result | $0.003 | A company is written to the dataset |
officer-result | $0.0015 | An officer is included on a saved company |
A default run of 20 companies and no officers is about $0.065 ($0.005 start + 20 × $0.003). Twenty companies with two officers each is about $0.125. The run stops when Actor.charge reports that the user's max charge is used up, and it does not fetch further companies after that. Set the minimum run budget to at least $0.01 so one company can be returned.
Platform compute is not billed to you; the events above are the whole price.
Only new since last run
Turn this on for a daily schedule. The Actor stores company numbers in its default key-value store under a key derived from stateKey. The next run of the same window skips them. Use a different stateKey for each saved search so a London filter and a Scotland filter do not hide each other's companies.
The record keeps the newest 30,000 numbers once it passes 40,000. That is about two weeks of every UK incorporation, and much longer when you filter. The Actor uses only its own default dataset and key-value store, which is within Apify limited permissions. Leave the Actor on Limited permissions so it stays visible to MCP clients.
Rate limit and the 10,000-row cap
Companies House allows 600 requests in any 5 minute period per key, and says applications that try to get around that can be blocked. This Actor stays at or under 540 requests per 300 seconds, with at least 0.55 seconds between calls. HTTP 429 and 5xx responses are retried with backoff. The key is sent as HTTP Basic username with an empty password, which is the documented method, and it is never written into the dataset.
Advanced search will not return more than 10,000 rows for one date range (start_index + size must stay at or under 10,000). If you ask for more than 10,000 companies and the range is longer than a day, the Actor splits the range by date and continues. A single day with more than 10,000 hits is truncated and the run says so. A normal day is a few thousand incorporations, so a one-day window fits.
Schedule a daily run after 07:00 Europe/London. The search index can lag the moment of incorporation.
Free bulk snapshot
source: "bulk" streams BasicCompanyDataAsOneFile-YYYY-MM-DD.zip from https://download.companieshouse.gov.uk/en_output.html. Companies House compiles that file to the end of the previous month and publishes it within a few working days. The file dated 1 October 2026 holds incorporations through 30 September 2026. It is about 500 MB. It is the wrong tool for yesterday's companies; use the API for that. The Actor refuses a bulk run whose whole date window is after the snapshot's coverage.
Officers are not in the snapshot. Asking for them on a bulk run still calls the REST API and still needs a key.
Give a bulk run 1024 MB of memory and a long timeout. The reader scans the CSV until it has enough matches, which can mean reading most of the file when the date you want is uncommon.
Attribution and licence
Company and officer data is Crown copyright, published by Companies House. Reuse is allowed with attribution. See Companies House public task, copyright and Crown copyright.
Contains public sector information licensed under the Open Government Licence v3.0.
API behaviour and the rate limit are described in the Companies House developer guidelines and the rate limiting guide.
Limits
- No key is shipped with this Actor. The owner must set
COMPANIES_HOUSE_API_KEY, or every default run fails. - The 600 / 5 minute cap is per key. A key shared with another application exhausts the budget sooner. A 429 pauses and retries.
- Results are public register data, not a certificate of incorporation.
- Officer records can include a correspondence address and a month and year of birth. Those fields are already public. This Actor does not add anything Companies House does not return.
- Postcode and region filters are applied again locally because the API
locationparameter is a free-text address search. - Bulk categories are mapped onto API company-type codes where the names match. Unusual categories keep a slug of the original text.
Run locally
python3 -m venv .venvsource .venv/bin/activatepip install -r requirements-dev.txtexport COMPANIES_HOUSE_API_KEY=your-keypython3 -m uk_companies_house_feed
On your own machine the SDK reads INPUT.json from the working directory when the key-value store has no input. An empty object uses the defaults above.
$pytest
Tests mock Companies House HTTP. They do not need a key. A live call of the default input needs COMPANIES_HOUSE_API_KEY.