getregdata
Free agent skillcompanies-house-uk

Companies House API

The Companies House API is the official UK government REST API for company data. It is free, needs only a registered API key, and returns company profile, officers, PSC beneficial owners and filing history as JSON. The UK is the outlier here: most European registers publish no equivalent free API.

Free. No per-call charge. Crown copyright under the Open Government Licence - free reuse with attribution. Read-only. Official docs: Companies House Public Data API.

Install the skill
npx skills add Nolpak14/getregdata -g -y

Teaches your agent the endpoints, the auth pattern and the failure modes below - so it runs the check correctly rather than guessing. Read SKILL.md

What the API returns

What you get, for free

Company profile
Number, status (active / dissolved / liquidation), incorporation date, registered office, SIC codes, and the accounts and confirmation-statement due dates.
Officers
Directors and secretaries with roles, appointment dates, nationality, occupation and a partial date of birth.
PSC - beneficial owners
Persons or entities with significant control, and the nature of that control: share ownership bands, voting rights, or the right to appoint the board.
Filing history
The statutory filing sequence - accounts, confirmation statements, officer changes and charges.
Authentication

Getting an API key

  1. Register a free account at developer.company-information.service.gov.uk and create an application.
  2. Under Manage applications, create an API key (a "REST API" / Live key).
  3. Authenticate with HTTP Basic, using the API key as the username and a blank password. In curl that is the trailing colon in -u "KEY:".
export CH_KEY=your_companies_house_api_key

# trailing colon = empty password
curl -u "$CH_KEY:" \
  "https://api.company-information.service.gov.uk/company/00445790"

Rate limit is 600 requests per 5-minute window across all endpoints. There is no burst allowance - exceeding it returns 429 until the window resets.

Reference

Endpoints

Purpose Call
Search companies by name GET /search/companies?q={name}&items_per_page=20
Company profile GET /company/{number}
Officers and directors GET /company/{number}/officers
PSC - beneficial owners GET /company/{number}/persons-with-significant-control
Filing history GET /company/{number}/filing-history
An officer's other appointments GET /officers/{officer_id}/appointments
Workflow

Running a KYB check end to end

  1. 1
    Resolve identity

    Search by name and take the canonical company_number from the result. Names are not unique; numbers are. Skip if you already hold a number.

  2. 2
    Confirm it is real and current

    Pull the profile and check company_status. Record incorporation date, registered office and SIC codes.

  3. 3
    Who runs it

    Pull officers and list the active directors - officer_role of director with no resigned_on date.

  4. 4
    Who controls it

    Pull the PSC list and read natures_of_control on each entry to establish the basis of control.

  5. 5
    Recent signals

    Scan filing history. Recent officer changes, registered charges or overdue accounts warrant a closer look.

Failure modes

What bites people

Not every company names an owner - and that is not a pass

The PSC endpoint can return statement objects instead of people: psc-exists-but-not-identified, super-secure-persons-with-significant-control, or a PSC exemption. Treat any of these as beneficial owner UNRESOLVED and record the gap. Reading them as "no owner, therefore low risk" is the single most common mistake made against this API.

Keep the leading zeros

Company numbers are strings, not integers. 00445790 is not 445790. Take the company_number from search verbatim and pass it through unchanged.

company_status has more than two values

active is the pass condition. liquidation, administration, receivership and dissolved are all adverse - a dissolved company cannot trade. Do not test for "not dissolved".

Officer DOB and addresses are privacy-trimmed

Date of birth is month and year only. The address shown is often a service address rather than a residential one - do not treat it as the person’s home.

The 5-minute window has no burst allowance

Hit 600 requests in 5 minutes and every further call fails until the window resets. For batch KYB, throttle below the cap and retry after the reset rather than immediately.

Documents live on a different host

Filing endpoints return metadata plus a links.document_metadata pointer. The actual PDF sits on document-api.company-information.service.gov.uk and is a second call. Most KYB checks never need it.

Where the free API stops

The jurisdictions with no free equivalent

The UK is the outlier. Most European registers publish through portals built for people, not a general-purpose API - so the next jurisdiction you need probably has no free option. These read the official source live and return the same shape of structured record.

Germany · Company, officers and capitalPoland · Beneficial owners (UBO)Spain · Company directory, NIF and officersFrance · Directors, financials, shareholdersItaly · Full profile, P.IVA and certified PECSlovakia · Verified beneficial owners with PEP flags
FAQ

Is the Companies House API free?

Yes. There is no per-call charge and no paid tier for the Public Data API. You need a free API key, and the data is Crown copyright under the Open Government Licence, which permits reuse with attribution. The only hard limit is 600 requests per 5-minute window.

How do I get a Companies House API key?

Register a free account at developer.company-information.service.gov.uk, create an application, then create a REST API (Live) key under Manage applications. Authenticate with HTTP Basic using the key as the username and an empty password - in curl, -u "KEY:" with the trailing colon.

Can I get UK beneficial owners from the API?

Yes, through the persons-with-significant-control endpoint. Read natures_of_control for the basis of control - share bands, voting rights, or the right to appoint directors. Be careful: the endpoint may return a statement rather than a person, which means ownership is unresolved rather than absent.

Is there an equivalent free API for other countries?

For most of Europe, no. The UK is genuinely the outlier. Germany, Spain, Italy and Poland publish their registers through interactive portals designed for humans rather than general-purpose APIs, which is the gap the paid regdata actors fill.

What is the difference between this skill and the API?

The API is the UK government’s. The skill is ours: an installable agent skill that teaches an AI agent the endpoints, the auth pattern, the PSC interpretation rules and the failure modes above, so it runs a UK KYB check correctly instead of guessing.

All agent skills Paid registry coverage