UK Companies House Scraper: Company Search & Profiles API avatar

UK Companies House Scraper: Company Search & Profiles API

Pricing

from $2.00 / 1,000 companies

Go to Apify Store
UK Companies House Scraper: Company Search & Profiles API

UK Companies House Scraper: Company Search & Profiles API

UK companies from the official Companies House API with your free key: search by name, status, type, SIC code, date or location, or look up company numbers. Profile, registered office, accounts dates, SIC codes, filings, charges and optional directors (no birth dates or addresses). Pay per company.

Pricing

from $2.00 / 1,000 companies

Rating

0.0

(0)

Developer

Rowcraft

Rowcraft

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Get UK companies from Companies House, the official register of every company in England, Wales, Scotland and Northern Ireland. This Companies House scraper reads the register's public data API with your own free API key, so it is fast, complete and does not break when a web page changes. Each company comes back as one flat row: name, number, status, type, incorporation date, SIC codes, registered office, accounts and confirmation statement deadlines, previous names, and optionally the latest filings, charges, insolvency cases and the company's officers (directors and secretaries in their business role), as JSON, CSV or Excel.

Look up company numbers, search by name, or run the advanced search: name contains or excludes, status, company type, SIC codes, incorporation and dissolution dates, registered office location. Schedule it with Only new rows to get a daily feed of newly registered companies in your sector and region for the price of the new rows.

Results of UK Companies House Scraper: Company Search & Profiles API in the Apify dataset view

What you get

Price: $3.00 per 1,000 companies on the Free plan, $2.00 on the Business plan, paid per row delivered; the $5 monthly credit of a free Apify account covers about 1,600 companies. Details in Pricing below.

One row per company, the same columns whatever way the company was found:

  • Company: number, name, status and status detail, type and subtype, jurisdiction, incorporation and dissolution dates, link to the company page; codes come with their official labels
  • Activity: SIC codes with the official descriptions
  • Registered office: one-line address plus premises, lines, town, county, postcode, country, PO box, and the in-dispute and undeliverable flags; the care-of line is dropped
  • Accounts: accounting reference date, next accounts due and made up to, overdue flag, last accounts type and period
  • Confirmation statement: next due, last made up to, overdue flag
  • History: previous names with the dates they changed, last full members list, charges and insolvency flags, community interest company flag
  • Overseas and branch companies: registry country and name, registration number, legal form, governing law, business activity, parent company of a UK establishment
  • Optional, when switched on: the latest filings (date, category, type, official description, pages), charges (totals plus a list with status, dates, description and particulars), insolvency cases (type and dates) and officers (counts of active and resigned officers plus a list with name, role, appointment and resignation dates, nationality, country of residence and occupation)
  • Run data: how the company was selected, the search it came from, and whether the full profile was read

Why this actor

  • Official API, your own key: the free Companies House API key goes into a secret field, Apify stores it encrypted, and the actor sends it only to api.company-information.service.gov.uk. No scraping of web pages, no proxies, no CAPTCHAs.
  • Three ways in: company numbers or links, name searches, and the advanced search with every filter the register offers, including SIC prefixes (62 covers all computer programming and consultancy codes) and dates such as 30 days.
  • Nearly 80 flat fields with stable names, labels next to every code, booleans as booleans, dates in ISO format.
  • Count before you pay: Count only shows how many companies match and what they would cost; nothing is delivered.
  • Directors in their business role, nothing private: switch on officers and each row lists the board and the company secretary as the register shows them, without date of birth or addresses. Persons with significant control, disqualifications, practitioners and persons entitled under a charge are never requested.
  • Officers at no extra price: they ride inside the company row, so you still pay per delivered company, with a charge cap.
  • Protects your key: 600 requests per five minutes is the register's limit; the default pace stays under it, and the first 429 ends the run instead of hammering the API.

How to use it

  1. Open the Actor and fill in Companies House API key (the other fields are optional filters).
  2. Set Maximum companies to a small number for a first try (the default is a safe start).
  3. Optional: tick Count only and start once. You get the number of matching rows and the estimated cost, for free (only the start event is charged). Untick it to get the data.
  4. Click Start. The status line shows progress; the run stops cleanly at your limit or at the charge limit you set in the run options.
  5. Open the Dataset tab and download JSON, CSV, Excel, XML or HTML, or send the rows to Google Sheets, Slack, Make, n8n or Zapier with the Integrations tab.
  6. To run it on a schedule, use Schedules in Apify Console and turn on Only new rows since the last run below: every run then costs only the new rows, and a webhook URL tells you when something new came in.

Input

Quick start. This input is ready to run (it is also the example in the API tab):

{
"apiKey": "YOUR_COMPANIES_HOUSE_API_KEY",
"statuses": [
"active"
],
"sicCodes": [
"62012"
],
"location": "London",
"incorporatedFrom": "30 days",
"maxItems": 100
}

One real row it returns (long texts shortened here):

{
"id": "00445790",
"url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
"companyNumber": "00445790",
"companyName": "TESCO PLC",
"status": "active",
"statusLabel": "Active",
"statusDetail": null,
"statusDetailLabel": null,
"type": "plc",
"typeLabel": "Public limited company",
"subtype": null,
"subtypeLabel": null,
"jurisdiction": "england-wales",
"jurisdictionLabel": "England/Wales",
"incorporatedOn": "1947-11-27",
"dissolvedOn": null,
"sicCodes": [
"47110"
],
"sicDescriptions": [
"Retail sale in non-specialised stores with food, beverages or tobacco predominating"
],
"registeredOffice": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA, United Kingdom",
"registeredOfficePremises": null,
"registeredOfficeLine1": "Tesco House, Shire Park",
"registeredOfficeLine2": "Kestrel Way",
"registeredOfficeLocality": "Welwyn Garden City",
"registeredOfficeRegion": null,
"registeredOfficePostcode": "AL7 1GA",
"registeredOfficeCountry": "United Kingdom",
"registeredOfficePoBox": null,
"registeredOfficeInDispute": false,
"registeredOfficeUndeliverable": false,
"hasCharges": false,
"hasInsolvencyHistory": false,
"hasBeenLiquidated": false,
"isCommunityInterestCompany": null,
"canFile": true,
"accountsReferenceDate": "26-02",
"accountsNextDue": "2027-08-26",
"accountsNextMadeUpTo": "2027-02-26",
"accountsOverdue": false,
"lastAccountsMadeUpTo": "2026-02-28",
"lastAccountsType": "group",
"lastAccountsTypeLabel": "Group",
"lastAccountsPeriodStart": "2025-02-27",
"lastAccountsPeriodEnd": "2026-02-28",
"confirmationStatementNextDue": "2027-07-02",
"confirmationStatementLastMadeUpTo": "2026-06-18",
"confirmationStatementOverdue": false,
"previousNames": [
"TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
"TESCO STORES (HOLDINGS) LIMITED"
],
"previousNamesCount": 2,
"previousNameChanges": [
{
"name": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
"from": "1981-12-14",
"until": "1983-08-25"
},
{
"name": "TESCO STORES (HOLDINGS) LIMITED",
"from": "1947-11-27",
"until": "1981-12-14"
}
],
"lastFullMembersListDate": "2013-06-07",
"externalRegistrationNumber": null,
"foreignRegistryCountry": null,
"foreignRegistryName": null,
"foreignRegistrationNumber": null,
"foreignLegalForm": null,
"foreignGovernedBy": null,
"foreignBusinessActivity": null,
"branchParentCompanyNumber": null,
"branchParentCompanyName": null,
"branchBusinessActivity": null,
"partialDataAvailable": null,
"matchedPreviousName": null,
"source": "number",
"searchQuery": null,
"profileLoaded": true,
"officersActiveCount": 11,
"officersResignedCount": 63,
"officersTotal": 74,
"officers": [
{
"name": "TAYLOR, Christopher Jon",
"role": "Secretary",
"roleCode": "secretary",
"appointedOn": "2025-04-14",
"resignedOn": null,
"nationality": null,
"countryOfResidence": null,
"occupation": null,
"isCorporate": false
},
{
"name": "BETHELL, Melissa",
"role": "Director",
"roleCode": "director",
"appointedOn": "2018-09-24",
"resignedOn": null,
"nationality": "British",
"countryOfResidence": "United Kingdom",
"occupation": null,
"isCorporate": false
},
{
"name": "BODSON, Bertrand Jean Francois",
"role": "Director",
"roleCode": "director",
"appointedOn": "2021-06-01",
"resignedOn": null,
"nationality": "Belgian",
"countryOfResidence": "England",
"occupation": null,
"isCorporate": false
}
],
"scrapedAt": "2026-10-10T06:26:54.596Z",
"filingsCount": 8372,
"filings": [
{
"date": "2026-09-16",
"category": "capital",
"subcategory": null,
"type": "SH03",
"description": "Purchase of own shares.",
"descriptionCode": "capital-return-purchase-own-shares",
"pages": 4,
"paperFiled": true
},
{
"date": "2026-08-26",
"category": "capital",
"subcategory": null,
"type": "SH06",
"description": "Cancellation of shares. Statement of capital on 2026-07-07",
"descriptionCode": "capital-cancellation-shares",
"pages": 4,
"paperFiled": true
},
{
"date": "2026-08-26",
"category": "capital",
"subcategory": null,
"type": "SH06",
"description": "Cancellation of shares. Statement of capital on 2026-06-30",
"descriptionCode": "capital-cancellation-shares",
"pages": 4,
"paperFiled": true
},
"… 2 more"
],
"lastFilingDate": "2026-09-16",
"lastFilingDescription": "Purchase of own shares.",
"chargesTotal": 9,
"chargesSatisfied": 7,
"chargesPartSatisfied": 0,
"chargesOutstanding": 2,
"charges": [
{
"code": null,
"number": 9,
"status": "outstanding",
"createdOn": "2009-11-04",
"deliveredOn": "2009-11-06",
"satisfiedOn": null,
"description": null,
"particulars": null
},
{
"code": null,
"number": 8,
"status": "outstanding",
"createdOn": "2009-11-04",
"deliveredOn": "2009-11-06",
"satisfiedOn": null,
"description": null,
"particulars": null
},
{
"code": null,
"number": 7,
"status": "fully-satisfied",
"createdOn": "2009-03-27",
"deliveredOn": "2009-03-27",
"satisfiedOn": "2009-11-25",
"description": null,
"particulars": null
},
"… 6 more"
],
"insolvencyStatus": [],
"insolvencyCasesCount": 0,
"insolvencyCases": []
}
FieldWhat it does
apiKeyYour free Companies House API key (see FAQ), stored encrypted, used only against the register's API
companyNumbersCompany numbers or links to company pages, one per line (00445790, SC123456, 445790 is padded to 8 characters)
searchNames, maxResultsPerNameFree-text name searches as on the register's search box, with the number of hits to keep per name
nameIncludes, nameExcludesAdvanced search: words the company name must contain or must not contain
statuses, types, subtypesActive, dissolved, liquidation, administration and the other statuses; company types such as ltd, plc, llp, overseas-company; subtypes such as community interest companies
sicCodesSIC codes or prefixes (62012, 6201, 62, 62.01); prefixes expand to every code below them
incorporatedFrom, incorporatedTo, dissolvedFrom, dissolvedToDate ranges: 2026-10-01, yesterday, 30 days, 6 months
locationTown, county or postcode area of the registered office, as on the register's advanced search
maxItems, includeProfileHow many companies to deliver; read the full profile for each company (needed for accounts, confirmation statement, previous names and SIC descriptions when searching)
includeFilingHistory, maxFilings, includeCharges, includeInsolvencyAdd the latest filings, the charges and the insolvency cases to each row (one extra request each, per company)
includeOfficers, officersStatus, maxOfficersPerCompanyAdd the officers to each row: current officers only (default) or the full history with resigned ones, up to 50 per company by default (500 at most); one extra request per 100 officers
countOnly, onlyNew, stateName, notifyUrl, notifyWhenEmptyCount only (deliver nothing); see Automation below
requestIntervalMsPause between requests, 600 ms by default; the register allows 600 requests per five minutes per key

The three selection methods can be combined in one run: numbers are fetched first, then name searches, then the advanced search. A company that appears twice is delivered once.

Example: active private limited companies in London that write software and were incorporated in the last month, with full profiles.

{
"apiKey": "YOUR_COMPANIES_HOUSE_API_KEY",
"statuses": ["active"],
"types": ["ltd"],
"sicCodes": ["62012", "62020"],
"location": "London",
"incorporatedFrom": "30 days",
"includeProfile": true,
"maxItems": 500
}

Output

82 fields per row. Empty values are null, never missing, so CSV and Excel columns are stable.

FieldTypeExample
idstring00445790
urlstringhttps://find-and-update.company-information.service.gov.uk/company/…
companyNumberstring00445790
companyNamestringTESCO PLC
statusstringactive
statusLabelstringActive
statusDetailstringactive-proposal-to-strike-off
statusDetailLabelstringActive proposal to strike off
typestringplc
typeLabelstringPublic limited company
subtypestringcommunity-interest-company
subtypeLabelstringCommunity Interest Company (CIC)
jurisdictionstringengland-wales
jurisdictionLabelstringEngland/Wales
incorporatedOnstring1947-11-27
dissolvedOnstringDissolved on
sicCodesarray["47110"]
sicDescriptionsarray["Retail sale in non-specialised stores with food, beverages or tob…
registeredOfficestringTesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA, …
registeredOfficePremisesstringTesco House
registeredOfficeLine1stringShire Park, Kestrel Way
registeredOfficeLine2stringAddress line 2
registeredOfficeLocalitystringWelwyn Garden City
registeredOfficeRegionstringHertfordshire
registeredOfficePostcodestringAL7 1GA
registeredOfficeCountrystringEngland
registeredOfficePoBoxstringPO box
registeredOfficeInDisputebooleanFalse
registeredOfficeUndeliverablebooleanFalse
hasChargesbooleanTrue
hasInsolvencyHistorybooleanFalse
hasBeenLiquidatedbooleanFalse
isCommunityInterestCompanybooleanFalse
canFilebooleanTrue
accountsReferenceDatestring28-02
accountsNextDuestring2026-08-31
accountsNextMadeUpTostring2026-02-28
accountsOverduebooleanFalse
lastAccountsMadeUpTostring2025-02-22
lastAccountsTypestringgroup
lastAccountsTypeLabelstringGroup
lastAccountsPeriodStartstring2024-02-25
lastAccountsPeriodEndstring2025-02-22
confirmationStatementNextDuestring2026-08-01
confirmationStatementLastMadeUpTostring2025-07-18
confirmationStatementOverduebooleanFalse
previousNamesarray["TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY"]
previousNamesCountinteger1
previousNameChangesarrayPrevious names with dates
lastFullMembersListDatestringLast full members list date
externalRegistrationNumberstringExternal registration number
foreignRegistryCountrystringOverseas registry country
foreignRegistryNamestringOverseas registry name
foreignRegistrationNumberstringOverseas registration number
foreignLegalFormstringOverseas legal form
foreignGovernedBystringOverseas governing law
foreignBusinessActivitystringOverseas business activity
branchParentCompanyNumberstringParent company number (branch)
branchParentCompanyNamestringParent company name (branch)
branchBusinessActivitystringBranch business activity
partialDataAvailablestringPartial data note
matchedPreviousNamestringPrevious name that matched the search
sourcestringadvanced-search
searchQuerystringcompany_status=active&sic_codes=62012&location=London
profileLoadedbooleanTrue
filingsCountinteger312
filingsarrayLatest filings (date, category, type, description, pages)
lastFilingDatestring2026-09-30
lastFilingDescriptionstringConfirmation statement made on 2026-09-18 with no updates
chargesTotalinteger3
chargesSatisfiedinteger2
chargesPartSatisfiedinteger0
chargesOutstandinginteger1
chargesarrayCharges (code, status, dates, description)
insolvencyStatusarrayInsolvency status (with insolvency on)
insolvencyCasesCountinteger0
insolvencyCasesarrayInsolvency cases (number, type, dates)
officersActiveCountinteger11
officersResignedCountinteger63
officersTotalinteger74
officersarrayOfficers (name, role, appointed, resigned, nationality, country of residence, occupation)
scrapedAtstringScraped at

Example rows

Two real rows from a run (long texts shortened here, complete in the dataset):

[
{
"id": "00445790",
"url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
"companyNumber": "00445790",
"companyName": "TESCO PLC",
"status": "active",
"statusLabel": "Active",
"statusDetail": null,
"statusDetailLabel": null,
"type": "plc",
"typeLabel": "Public limited company",
"subtype": null,
"subtypeLabel": null,
"jurisdiction": "england-wales",
"jurisdictionLabel": "England/Wales",
"incorporatedOn": "1947-11-27",
"dissolvedOn": null,
"sicCodes": [
"47110"
],
"sicDescriptions": [
"Retail sale in non-specialised stores with food, beverages or tobacco predominating"
],
"registeredOffice": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA, United Kingdom",
"registeredOfficePremises": null,
"registeredOfficeLine1": "Tesco House, Shire Park",
"registeredOfficeLine2": "Kestrel Way",
"registeredOfficeLocality": "Welwyn Garden City",
"registeredOfficeRegion": null,
"registeredOfficePostcode": "AL7 1GA",
"registeredOfficeCountry": "United Kingdom",
"registeredOfficePoBox": null,
"registeredOfficeInDispute": false,
"registeredOfficeUndeliverable": false,
"hasCharges": false,
"hasInsolvencyHistory": false,
"hasBeenLiquidated": false,
"isCommunityInterestCompany": null,
"canFile": true,
"accountsReferenceDate": "26-02",
"accountsNextDue": "2027-08-26",
"accountsNextMadeUpTo": "2027-02-26",
"accountsOverdue": false,
"lastAccountsMadeUpTo": "2026-02-28",
"lastAccountsType": "group",
"lastAccountsTypeLabel": "Group",
"lastAccountsPeriodStart": "2025-02-27",
"lastAccountsPeriodEnd": "2026-02-28",
"confirmationStatementNextDue": "2027-07-02",
"confirmationStatementLastMadeUpTo": "2026-06-18",
"confirmationStatementOverdue": false,
"previousNames": [
"TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
"TESCO STORES (HOLDINGS) LIMITED"
],
"previousNamesCount": 2,
"previousNameChanges": [
{
"name": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
"from": "1981-12-14",
"until": "1983-08-25"
},
{
"name": "TESCO STORES (HOLDINGS) LIMITED",
"from": "1947-11-27",
"until": "1981-12-14"
}
],
"lastFullMembersListDate": "2013-06-07",
"externalRegistrationNumber": null,
"foreignRegistryCountry": null,
"foreignRegistryName": null,
"foreignRegistrationNumber": null,
"foreignLegalForm": null,
"foreignGovernedBy": null,
"foreignBusinessActivity": null,
"branchParentCompanyNumber": null,
"branchParentCompanyName": null,
"branchBusinessActivity": null,
"partialDataAvailable": null,
"matchedPreviousName": null,
"source": "number",
"searchQuery": null,
"profileLoaded": true,
"officersActiveCount": 11,
"officersResignedCount": 63,
"officersTotal": 74,
"officers": [
{
"name": "TAYLOR, Christopher Jon",
"role": "Secretary",
"roleCode": "secretary",
"appointedOn": "2025-04-14",
"resignedOn": null,
"nationality": null,
"countryOfResidence": null,
"occupation": null,
"isCorporate": false
},
{
"name": "BETHELL, Melissa",
"role": "Director",
"roleCode": "director",
"appointedOn": "2018-09-24",
"resignedOn": null,
"nationality": "British",
"countryOfResidence": "United Kingdom",
"occupation": null,
"isCorporate": false
},
{
"name": "BODSON, Bertrand Jean Francois",
"role": "Director",
"roleCode": "director",
"appointedOn": "2021-06-01",
"resignedOn": null,
"nationality": "Belgian",
"countryOfResidence": "England",
"occupation": null,
"isCorporate": false
}
],
"scrapedAt": "2026-10-10T06:26:54.596Z",
"filingsCount": 8372,
"filings": [
{
"date": "2026-09-16",
"category": "capital",
"subcategory": null,
"type": "SH03",
"description": "Purchase of own shares.",
"descriptionCode": "capital-return-purchase-own-shares",
"pages": 4,
"paperFiled": true
},
{
"date": "2026-08-26",
"category": "capital",
"subcategory": null,
"type": "SH06",
"description": "Cancellation of shares. Statement of capital on 2026-07-07",
"descriptionCode": "capital-cancellation-shares",
"pages": 4,
"paperFiled": true
},
{
"date": "2026-08-26",
"category": "capital",
"subcategory": null,
"type": "SH06",
"description": "Cancellation of shares. Statement of capital on 2026-06-30",
"descriptionCode": "capital-cancellation-shares",
"pages": 4,
"paperFiled": true
},
"… 2 more"
],
"lastFilingDate": "2026-09-16",
"lastFilingDescription": "Purchase of own shares.",
"chargesTotal": 9,
"chargesSatisfied": 7,
"chargesPartSatisfied": 0,
"chargesOutstanding": 2,
"charges": [
{
"code": null,
"number": 9,
"status": "outstanding",
"createdOn": "2009-11-04",
"deliveredOn": "2009-11-06",
"satisfiedOn": null,
"description": null,
"particulars": null
},
{
"code": null,
"number": 8,
"status": "outstanding",
"createdOn": "2009-11-04",
"deliveredOn": "2009-11-06",
"satisfiedOn": null,
"description": null,
"particulars": null
},
{
"code": null,
"number": 7,
"status": "fully-satisfied",
"createdOn": "2009-03-27",
"deliveredOn": "2009-03-27",
"satisfiedOn": "2009-11-25",
"description": null,
"particulars": null
},
"… 6 more"
],
"insolvencyStatus": [],
"insolvencyCasesCount": 0,
"insolvencyCases": []
},
{
"id": "00048839",
"url": "https://find-and-update.company-information.service.gov.uk/company/00048839",
"companyNumber": "00048839",
"companyName": "BARCLAYS PLC",
"status": "active",
"statusLabel": "Active",
"statusDetail": null,
"statusDetailLabel": null,
"type": "plc",
"typeLabel": "Public limited company",
"subtype": null,
"subtypeLabel": null,
"jurisdiction": "england-wales",
"jurisdictionLabel": "England/Wales",
"incorporatedOn": "1896-07-20",
"dissolvedOn": null,
"sicCodes": [
"64191"
],
"sicDescriptions": [
"Banks"
],
"registeredOffice": "1 Churchill Place, London, E14 5HP",
"registeredOfficePremises": null,
"registeredOfficeLine1": "1 Churchill Place",
"registeredOfficeLine2": null,
"registeredOfficeLocality": "London",
"registeredOfficeRegion": null,
"registeredOfficePostcode": "E14 5HP",
"registeredOfficeCountry": null,
"registeredOfficePoBox": null,
"registeredOfficeInDispute": false,
"registeredOfficeUndeliverable": false,
"hasCharges": false,
"hasInsolvencyHistory": false,
"hasBeenLiquidated": false,
"isCommunityInterestCompany": null,
"canFile": true,
"accountsReferenceDate": "31-12",
"accountsNextDue": "2027-06-30",
"accountsNextMadeUpTo": "2026-12-31",
"accountsOverdue": false,
"lastAccountsMadeUpTo": "2025-12-31",
"lastAccountsType": "group",
"lastAccountsTypeLabel": "Group",
"lastAccountsPeriodStart": "2025-01-01",
"lastAccountsPeriodEnd": "2025-12-31",
"confirmationStatementNextDue": "2026-11-15",
"confirmationStatementLastMadeUpTo": "2025-11-01",
"confirmationStatementOverdue": false,
"previousNames": [
"BARCLAYS BANK PLC",
"BARCLAYS BANK LIMITED",
"BARCLAY & COMPANY LIMITED"
],
"previousNamesCount": 3,
"previousNameChanges": [
{
"name": "BARCLAYS BANK PLC",
"from": "1982-02-15",
"until": "1985-01-01"
},
{
"name": "BARCLAYS BANK LIMITED",
"from": "1916-02-17",
"until": "1982-02-15"
},
{
"name": "BARCLAY & COMPANY LIMITED",
"from": "1896-07-20",
"until": "1916-02-17"
}
],
"lastFullMembersListDate": "2012-08-31",
"externalRegistrationNumber": null,
"foreignRegistryCountry": null,
"foreignRegistryName": null,
"foreignRegistrationNumber": null,
"foreignLegalForm": null,
"foreignGovernedBy": null,
"foreignBusinessActivity": null,
"branchParentCompanyNumber": null,
"branchParentCompanyName": null,
"branchBusinessActivity": null,
"partialDataAvailable": null,
"matchedPreviousName": null,
"source": "number",
"searchQuery": null,
"profileLoaded": true,
"scrapedAt": "2026-10-10T06:26:31.297Z"
}
]

Results can be downloaded as JSON, CSV, Excel, XML or HTML from the Dataset tab, or read through the Apify API.

Input form of UK Companies House Scraper: Company Search & Profiles API

Pricing

Pay per result. You pay for each company delivered to your dataset, nothing else: no subscription, no minimum, no charge for rows your filters drop or for the requests behind them.

Your Apify planPrice per 1,000 rowsPrice per row
Free plan$3.00$0.003
Starter plan$2.67$0.00267
Scale plan$2.33$0.00233
Business plan and above$2.00$0.002

Example: 1,000 companies cost $3.00 on the Free plan and $2.00 on the Business plan. Platform usage of the run (compute, storage) is included in that price and is not billed to you separately (pay per event: the actor covers it). A start event of $0.00005 is charged once per run (Apify default). Cap your spend: set Maximum total charge in the run options. The actor stops cleanly when the cap is reached and you keep everything delivered until then. The run summary (RUN_SUMMARY in the key-value store) says why a run stopped. Check before you pay: turn on Count only to see how many rows match and what they would cost at your tier. That run delivers nothing and costs only the start event.

Automation: only new rows, notifications, schedules

Only new rows since the last run. Turn on onlyNew and the actor remembers every company it delivered to you (in a key-value store named rowcraft-uk-companies-house-scraper-state in your Apify account). The next run with the same stateName skips what you already have and you pay only for new rows. The first run delivers everything that matches. Use a different stateName for each schedule or search so they keep separate memories.

Notification when the run ends. Put a webhook address in notifyUrl and the actor sends one JSON POST with the number of new rows, links to the dataset (JSON and CSV) and the run. It works out of the box with Slack and Discord incoming webhooks (the message is in text and content), with Make, n8n and Zapier catch hooks, and with your own endpoint. By default it is sent only when there is at least one new row; notifyWhenEmpty sends it every time.

Schedules. Create a schedule in Apify Console (hourly, daily, weekly or cron) with onlyNew on. A daily schedule gives you a feed of new companies for the price of the new rows only.

Integrations. Send the results to Make, n8n, Zapier, Google Sheets, Slack, Google Drive, Airtable or any webhooks from the Integrations tab of the Actor, with no code. Apify also offers native actions for Make, n8n and Zapier.

API, SDKs and AI agents. Every run is available through the Apify API and the official JavaScript and Python clients; the Actor can also be called by AI agents through the Apify MCP server. The example input in the API tab is a working call.

Count only. countOnly returns the number of matching companies and the estimated cost without delivering anything, so you can size a job before paying for it.

Use with AI agents (MCP). Add the Apify MCP server to Claude, Cursor, VS Code or any MCP client and the agent can run this Actor as a tool:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=rowcraft/uk-companies-house-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Call it from a shell or any language. One request runs the Actor with the input below and returns the rows as JSON:

curl -X POST "https://api.apify.com/v2/acts/rowcraft~uk-companies-house-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"apiKey": "YOUR_COMPANIES_HOUSE_API_KEY", "statuses": ["active"], "sicCodes": ["62012"], "location": "London", "incorporatedFrom": "30 days", "maxItems": 100}'

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("rowcraft/uk-companies-house-scraper").call(run_input={'apiKey': 'YOUR_COMPANIES_HOUSE_API_KEY', 'statuses': ['active'], 'sicCodes': ['62012'], 'location': 'London', 'incorporatedFrom': '30 days', 'maxItems': 100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('rowcraft/uk-companies-house-scraper').call({"apiKey": "YOUR_COMPANIES_HOUSE_API_KEY", "statuses": ["active"], "sicCodes": ["62012"], "location": "London", "incorporatedFrom": "30 days", "maxItems": 100});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use cases

  • New-company feeds: every company incorporated this week in your sector (SIC codes) and region, delivered daily to a sheet, a CRM or Slack.
  • Lead lists for B2B services: accountants, insurers, banks, software vendors and agencies that sell to new or growing companies; filter by type, age, activity and location.
  • Supplier and customer checks: status, age, accounts deadlines and overdue flags, charges and insolvency history for a list of company numbers.
  • Know your business (KYB) and due diligence: the current board and the company secretary of each supplier, customer or target, with appointment dates and recent resignations, next to the accounts and charges.
  • Account research for B2B sales: which roles sit on the board of each target company and how recently the board changed; the register gives no contact details, so the rows point you to the company, not to a person's inbox.
  • Portfolio monitoring: re-run on your company numbers with Only new rows switched off and compare status, filings and charges with last week.
  • Research and journalism: companies by SIC code, postcode area and date range, dissolved companies in a period, overseas companies with UK establishments.

What this actor does not do

  • Deliver persons with significant control, disqualifications, insolvency practitioners, persons entitled under a charge, e-mail addresses or phone numbers: these endpoints and fields are never requested.
  • Deliver an officer's date of birth, home or correspondence address, identity verification details, or the list of other companies a person is appointed to.
  • Deliver the documents themselves (accounts PDFs, filed forms); each filing row carries the official description and page count, and the company page is linked.
  • Work without a key: the register's API requires a free API key, which the customer creates in the Companies House Developer Hub (see FAQ). A run started without one ends at once with a single uncharged row that says so.
  • Use the streaming API or the document API; log in to WebFiling; solve CAPTCHAs or use proxies.

Limits and fair use

  • The register allows 600 requests per five minutes per key and answers 429 beyond that. The default pause of 600 ms between requests keeps a run under the limit; the shortest allowed is 500 ms. The first 429 ends the run, the rows delivered so far are kept and the run summary says stoppedByRateLimit.
  • The advanced search returns up to 500 companies per request and the actor pages through it until maxItems or the last result; the run summary reports the total under totalMatching. Very broad filters can mean tens of thousands of companies, and past 10,000 results the register's paging is not documented, so narrow the filters (dates, location, SIC codes) for big lists. Name searches return up to 1,000 hits per name.
  • One request per company for the full profile, plus one each for filings, charges and insolvency when switched on, and one per 100 officers when officers are switched on. 1,000 companies with profiles are about 1,000 requests, roughly ten minutes at the default pace.
  • A company number that does not exist is reported in the run summary under missingNumbers and is not charged. An invalid key stops the run with a clear message and nothing is charged beyond the start event.
  • Dates and times follow the register (Europe/London); the run summary carries the counts, the pages read and the warnings.

Data source

The data comes from the Companies House Public Data API, the official interface of the UK register operated by Companies House, an executive agency of the UK Government. Each row links to the company's page on Find and update company information. The register is public by law (Companies Act 2006): Companies House makes the data available for use and re-use, including commercially, and places no restrictions of its own on how it is used; the customer remains responsible for complying with data protection law. Companies House's own material is Crown copyright under the Open Government Licence. SIC codes follow the UK Standard Industrial Classification 2007. Rowcraft is independent and not affiliated with Companies House or the UK Government; the names belong to their owners.

Privacy: company data, officers only in their business role

With officers switched off, which is the default, a row holds no personal data about directors or owners. With officers switched on:

  • Only the officers list of each company is read, the same list the register publishes by law on the company page. Each officer keeps name, role, appointment and resignation dates, nationality, country of residence and occupation. Date of birth, the correspondence address, identity verification details and links to a person's other appointments are dropped before the row is saved.
  • The persons with significant control, disqualified officers and appointments endpoints are never requested, so no owner and no person-centred list of companies ever reaches the dataset.
  • Inside the other endpoints, fields about people are dropped as before: the care-of line of the registered office, the persons entitled under a charge, the insolvency practitioners, and the names in filing descriptions (an appointment filing reads Appointment of [name removed] as a director).
  • E-mail addresses, phone numbers and mailto: or tel: links that appear inside free text are removed before the row is saved.
  • The actor keeps no copy of the rows: they go only to your own dataset. If you are an officer shown in an example on this page and want it removed, open an issue on the Issues tab and it is removed within 14 days; the register itself is changed only through Companies House.

Officer data is personal data under the UK GDPR. Use it for business purposes such as due diligence, compliance and company research, with a lawful basis of your own, and do not combine it with other sources to profile individuals. You are responsible for using the data in line with the law that applies to you.

Other Rowcraft actors

Related Rowcraft actors. All of them read official or public sources, deliver flat rows without private contact details and support only-new runs and notifications; the full list is on the Rowcraft profile:

FAQ

Where do I get the API key, and is it free? From the Companies House Developer Hub: sign in with a Companies House account, open Your applications, create an application for the live environment, then Create new key with client type API key. The key is free and is shown once; paste it into apiKey. The same key can be reused in every run and every schedule.

Is my key safe in the actor? apiKey is a secret input field: Apify stores it encrypted and hides it in the run's input view. The actor sends it only to api.company-information.service.gov.uk as HTTP basic authentication, which is how the register expects it. Rowcraft never sees it.

Can I get the directors? Yes: switch on includeOfficers. Each row then lists the officers (directors, secretaries, LLP members) with name, role, appointment and resignation dates, nationality, country of residence and occupation, plus the counts of active and resigned officers. Choose officersStatus all for the history with resigned officers. Officers are included in the company price.

Why are there no owners, dates of birth or addresses? The actor delivers officers only in their business role. Persons with significant control (owners) are not requested, and an officer's date of birth and addresses are dropped, because they say more about the person than about the company. The company page linked in every row shows the full public record on the register itself.

Is it legal to use this data? The register is public by law and Companies House allows re-use, including commercially (see Data source). Officer names and roles are still personal data under the UK GDPR: you need a lawful basis of your own, such as a legitimate business interest in due diligence, and the purpose must fit it. How you use the data is your responsibility under the law that applies to you.

Does it collect personal data? Only when includeOfficers is switched on, and then only the officers' business-role fields listed above. Without it a row holds company data only. E-mail addresses and phone numbers are never delivered. See the Privacy section.

What is the difference between a name search and the advanced search? searchNames works like the search box on the register: free text, matches on current and previous names, relevance order, up to 1,000 hits per name. The advanced search uses the filters (nameIncludes, statuses, types, sicCodes, dates, location) and is the right tool for lists such as "active software companies in Manchester incorporated this year".

How do SIC codes work here? A five-digit code is used as is; a shorter prefix expands to every five-digit code that starts with it (62 covers all computer programming, consultancy and related activities, 6201 the two programming codes). Dots are ignored, so 62.01 works too. Each row carries the codes and their official descriptions.

Which date formats are accepted? ISO dates (2026-10-01), today, yesterday, and relative periods such as 7 days, 3 weeks, 6 months, 2 years. The register's own dates come back as YYYY-MM-DD.

What happens when the rate limit is hit? The register allows 600 requests per five minutes per key. The actor paces itself under that limit and, if a 429 still arrives, stops immediately, keeps what it has delivered and marks stoppedByRateLimit in the run summary. Repeatedly ignoring 429 can get a key blocked, which is why the actor does not retry.

Can I get dissolved companies? Yes: put dissolved in statuses and, if you want a period, set dissolvedFrom and dissolvedTo. Dissolved companies come back with whatever the register still shows for them.

What about overseas companies and UK establishments? Company types such as overseas-company and uk-establishment are supported; the rows carry the foreign registry, registration number, legal form, governing law and, for establishments, the parent company. Their numbers start with FC or BR.

What does Count only do? It asks the register how many companies match (numbers, name searches and advanced search combined) and writes the count, with the cost at your plan, into the run summary. Nothing is delivered and only the start event is charged.

Can I pay only for new companies? Yes. Turn on Only new rows since the last run: the actor remembers what it delivered to you and later runs with the same state name deliver (and charge) only the new rows.

How do I get the results into Slack, Google Sheets, Make, n8n or Zapier? Use the Integrations tab of the Actor for the data, and the notifyUrl field for a message when a run ends (Slack and Discord webhooks work directly; catch hooks of Make, n8n and Zapier too).

Can I call it from code or from an AI agent? Yes: through the Apify API, the JavaScript and Python clients, and the Apify MCP server. The API tab shows a working example with the input of this Actor.

The run finished with 0 rows. Did I pay? No: with no rows delivered nothing is charged apart from the start event. Check the run summary (RUN_SUMMARY) for warnings, widen the filters, or run with Only new rows off if everything matching was already delivered to you.

Support and reviews

Problems, missing fields, questions: open an issue on the Issues tab of this Actor. We answer within one working day and fix confirmed bugs in the next release; the changelog lists every change.

If this Actor saved you time, a short review on its page helps other users find it and helps us keep improving it.