UK New Companies & Officers Feed (unofficial Companies House) avatar

UK New Companies & Officers Feed (unofficial Companies House)

Pricing

from $3.00 / 1,000 company results

Go to Apify Store
UK New Companies & Officers Feed (unofficial Companies House)

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

Olalekan Johnson

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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:

  1. Create a key at https://developer.company-information.service.gov.uk/. It is free and limited to 600 requests in each 5 minute period.
  2. As the Actor owner, open the Actor in Apify Console → Settings → Environment variables.
  3. Add COMPANIES_HOUSE_API_KEY with 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

FieldDefaultWhat it does
apiKeyemptySecret. Your Companies House key. Blank uses COMPANIES_HOUSE_API_KEY.
incorporatedFrom / incorporatedToyesterdayYYYY-MM-DD, or a relative date such as 1 day or 2 weeks.
fallbackLookbackDays7If both dates are empty and yesterday has no companies, search this many days ending yesterday.
maxCompanies20Stop after this many matching companies.
sicCodesemptyAny of these SIC 2007 codes, for example 62012.
companyTypesemptyAPI codes such as ltd, plc, llp.
companyStatusemptyFor example active. Empty means every status.
postcodeemptyRegistered-office prefix, such as SW1A or EH.
regionemptyMatches locality, county, country, or address lines. Example: Manchester.
includeOfficersfalseOne extra API call per company.
activeOfficersOnlytrueDrop officers who have a resignation date.
onlyNewSinceLastRunfalseSkip company numbers already stored for stateKey.
stateKeydefaultSeparate seen-lists for separate schedules.
sourceapibulk reads the free monthly snapshot instead.
bulkSnapshotDatelatestFile 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.

EventSuggested priceCharged when
apify-actor-start$0.005Once 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.003A company is written to the dataset
officer-result$0.0015An 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 location parameter 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 .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
export COMPANIES_HOUSE_API_KEY=your-key
python3 -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.