API reference
15 GET endpoints over 17 million UK companies. Every response
is { status, credits_used, data }, every cost is
published, and every failure is free.
The key can travel three ways — an X-API-Key header, an Authorization: Bearer header, or a ?key= query parameter. Use a header wherever you can: a key
in a URL ends up in logs and browser history.
Company record #
/company 1, plus the layers you include (1 each; financials counts 2)The base record everything else hangs off: legal name, status, incorporation and cessation dates, company type, jurisdiction, SIC codes, the geocoded registered office, and the accounts and confirmation-statement calendar. Pass ?include= to attach officers, ownership, financials, filings, charges or the business profile in the same round trip.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| include | Optional | Comma-separated extra sections: officers, controls, shareholders, financials, filings, charges, intelligence. You pay the sum of the layers and never more than fetching them separately; the x-ct-credits-charged response header shows the arithmetic. |
Response fields
| Field | Type | Description |
|---|---|---|
| company_id | string | Stable internal ID, e.g. UK-00000042. Safe to use as a foreign key. |
| company_number | string | Companies House number. |
| company_name | string | Current registered legal name. |
| company_status | string | active, dissolved, liquidation, administration, receivership, voluntary-arrangement or converted-closed. |
| company_status_detail | string | null | Extra detail where the registry gives one, e.g. active-proposal-to-strike-off. |
| company_type | string | Registered type: ltd, plc, llp and so on. |
| date_of_creation | date | Incorporation date (YYYY-MM-DD). |
| date_of_cessation | date | null | Dissolution date. Null while the company is live. |
| sic_codes | string[] | Registered SIC 2007 codes. |
| jurisdiction | string | england-wales, scotland or northern-ireland. |
| region | string | UK region derived from the registered office. |
| registered_office_address | object | address_string plus lat and lon, geocoded and de-duplicated by address hash. |
| accounts_summary | object | last_accounts_made_up_to, last_accounts_type, next_due, next_made_up_to and overdue. |
| company_size | object | Estimated Companies Act size band (micro, small, medium, large or null) with the basis it was judged on: period_end, turnover, balance_sheet_total, num_employees. |
| has_charges | boolean | null | Whether any charge is registered. Null on older records where the flag was never captured. |
| has_insolvency_history | boolean | null | Whether an insolvency case has ever been filed. |
| company_previous_names | object[] | Former registered names with the dates they applied. |
| certifications | string[] | Third-party registrations: fca_authorised, fca_appointed_representative, bcorp. |
Example
https://api.companytrack.com/v1/company?key=YOUR_API_KEY&company_number=00000042&include=financials,officers
{
"status": "success",
"credits_used": 4,
"data": {
"company_id": "UK-00000042",
"company_number": "00000042",
"company_name": "NORTHGATE ANALYTICS LTD",
"company_status": "active",
"company_type": "ltd",
"date_of_creation": "2016-05-11",
"date_of_cessation": null,
"sic_codes": ["62012"],
"jurisdiction": "england-wales",
"region": "South West",
"registered_office_address": {
"address_string": "6 Northgate Street, Bristol, BS1 2AW",
"lat": 51.4545,
"lon": -2.5879
},
"accounts_summary": {
"last_accounts_made_up_to": "2025-03-31",
"last_accounts_type": "full",
"next_due": "2026-12-31",
"overdue": false
},
"company_size": { "category": "small", "num_employees": 42 },
"has_charges": true,
"has_insolvency_history": false,
"certifications": []
}
} Notes
- company_size is an estimate against the current Companies Act thresholds, applying the meets-two-of-three rule to the latest filed accounts. It is null when fewer than two of the three criteria are disclosed — it is never guessed.
- Company 00000042 (and 00000041, 00000043) are fictional fixtures served free to every key, so every example on this page runs without spending a credit.
Filing history #
/company-filings 1Accounts, confirmation statements, officer changes, charge registrations, share allotments and mortgage filings, each with a link to the source document on the Companies House service. This is how you detect material change without re-fetching the whole record: diff the newest filing date against the one you stored.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| category | Optional | Restrict to one category: accounts, confirmation-statement, officers, capital, mortgage, insolvency, address, resolution, incorporation, annual-return, change-of-name, gazette. |
| limit | Optional | Filings per page. Default 25, maximum 100. |
| cursor | Optional | Pagination cursor, returned as next_cursor by the previous call. |
Response fields
| Field | Type | Description |
|---|---|---|
| filings[].category | string | Filing category, e.g. accounts. |
| filings[].type | string | Companies House form type: AA, CS01, AP01… |
| filings[].description | string | Machine-readable identifier as published by Companies House. Build logic against this. |
| filings[].description_text | string | null | Plain-English rendering for display, e.g. "Full accounts made up to 2025-03-31". |
| filings[].date | date | Date the filing was recorded. |
| filings[].made_up_to | date | null | Period end the filing covers, where applicable. |
| filings[].document_url | string | null | Direct link to the filed PDF, where a transaction ID exists. |
| next_cursor | string | null | Pass back as cursor for the next page. Null on the last page. |
Example
https://api.companytrack.com/v1/company-filings?key=YOUR_API_KEY&company_number=00000042&category=accounts&limit=5
{
"status": "success",
"credits_used": 1,
"data": {
"company_number": "00000042",
"filings": [
{
"category": "accounts",
"type": "AA",
"description": "accounts-with-accounts-type-full",
"description_text": "Full accounts made up to 2025-03-31",
"date": "2025-09-18",
"made_up_to": "2025-03-31",
"pages": 24,
"document_available": true,
"document_url": "https://find-and-update.company-information.service.gov.uk/company/00000042/filing-history/SANDBOX0001/document?format=pdf"
}
],
"next_cursor": null
}
} Notes
- description is the stable identifier; description_text is a convenience rendering whose wording may be refined over time. Key your logic off the former.
Accounts & ratios #
/financials 2 per accounting period returnedCompanies House publishes accounts as iXBRL documents in three different disclosure regimes. This endpoint normalises all three into one response: turnover, gross profit, operating profit, EBITDA, balance-sheet totals, cash and headcount, plus a ratio block and growth rates, each tagged with the accounting period and the accounts type it came from.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| period | Optional | latest (default) returns the most recent filed period. all returns every filed period, newest first, and costs 2 credits per period. |
Response fields
| Field | Type | Description |
|---|---|---|
| period_end | date | Accounting period end the figures cover. |
| accounts_type | string | micro-entity, abridged, small, full or group. |
| currency | string | Reporting currency, usually GBP. |
| turnover | number | null | Revenue for the period. Null when not disclosed — most small companies never have to publish one. |
| gross_profit | number | null | Gross profit where a P&L was filed. |
| op_profit_loss | number | null | Operating profit or loss. |
| ebitda | number | null | Derived from the filed figures where the inputs exist. |
| total_assets | number | null | Balance-sheet total. |
| net_curr_assets | number | null | Net current assets — filed even by micro-entities. |
| cash_eq | number | null | Cash and cash equivalents. |
| shareholder_funds | number | null | Equity. Disclosed far more widely than turnover. |
| num_employees | number | null | Average headcount for the period. |
| ratios | object | Seventeen computed ratios: margins, liquidity, gearing, returns and efficiency, each null when its inputs were not disclosed. |
| growth | object | turnover_cagr_1y and turnover_cagr_3y where enough periods have been filed. |
| source_filing | object | The filing these figures were parsed from, with its document_url. |
Example
https://api.companytrack.com/v1/financials?key=YOUR_API_KEY&company_number=00000042&period=latest
{
"status": "success",
"credits_used": 2,
"data": {
"period_end": "2025-03-31",
"accounts_type": "full",
"currency": "GBP",
"turnover": 4120000,
"gross_profit": 2884000,
"op_profit_loss": 412500,
"ebitda": 596300,
"total_assets": 3204800,
"net_curr_assets": 1442900,
"cash_eq": 1880400,
"shareholder_funds": 2108300,
"num_employees": 42,
"ratios": {
"gross_margin": 0.7,
"operating_margin": 0.1,
"current_ratio": 2.31,
"gearing": 0.18
},
"growth": {
"turnover_cagr_1y": 0.312,
"turnover_cagr_3y": 0.268
}
}
} Notes
- A figure that was not disclosed is null, never zero. A micro-entity with no P&L requirement returns a null turnover and a real balance sheet — treating that null as a zero is the single most common way to get UK accounts analysis wrong.
- A company that has never filed accounts returns status "no_data" and costs nothing.
Officers #
/officers 1Every appointment on the register for one company, with role, appointment and resignation dates, nationality, occupation and month-precision date of birth. Each officer carries a person_id that resolves the same human across companies, so you can pivot from a director here straight into their other directorships.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| status | Optional | active (default), resigned, or all. |
Response fields
| Field | Type | Description |
|---|---|---|
| officers[].person_id | string | Stable person ID — pass to /person for every other appointment they hold. |
| officers[].name | string | Name as filed. |
| officers[].officer_role | string | director, secretary, llp-member and so on. |
| officers[].appointed_on | date | Appointment date. |
| officers[].resigned_on | date | null | Resignation date. Null while serving. |
| officers[].date_of_birth | object | null | month and year only — the register never publishes the day. |
| officers[].nationality | string | null | As filed. |
| officers[].occupation | string | null | As filed. |
Example
https://api.companytrack.com/v1/officers?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 1,
"data": {
"company_number": "00000042",
"officers": [
{
"person_id": "900000123",
"name": "Priya Raman",
"officer_role": "director",
"appointed_on": "2016-05-11",
"resigned_on": null,
"date_of_birth": { "month": 4, "year": 1982 },
"nationality": "British",
"occupation": "Company Director"
}
],
"total_officers": 3
}
} Ownership & control #
/ownership 2Two things the register keeps in different places, returned together: the PSC statements filed under the control regime, and the actual shareholdings reconstructed from filed share allotments and confirmation statements. Corporate PSCs carry the company ID of the parent, so you can walk straight up the chain with /group-structure.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
Response fields
| Field | Type | Description |
|---|---|---|
| controls[].name | string | PSC name as filed. |
| controls[].kind | string | individual-person-with-significant-control, corporate-entity-…, legal-person-… . |
| controls[].natures_of_control | string[] | The registry codes, e.g. ownership-of-shares-75-to-100-percent. |
| controls[].parent_company_id | string | null | Set on a corporate PSC that resolves to a company on the register. |
| controls[].ceased_on | date | null | Null while the control is live. |
| shareholders[].name | string | Shareholder name. |
| shareholders[].shares_perc | number | Percentage of issued share capital held. |
| shareholders[].is_company | boolean | Whether the holder is a corporate entity. |
| psc_exemption | object | null | Any PSC exemption statement on file, with its reason. |
Example
https://api.companytrack.com/v1/ownership?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 2,
"data": {
"controls": [
{
"name": "NORTHGATE GROUP HOLDINGS LTD",
"kind": "corporate-entity-person-with-significant-control",
"natures_of_control": ["ownership-of-shares-75-to-100-percent"],
"parent_company_id": "UK-00000041",
"ceased_on": null
}
],
"shareholders": [
{ "name": "NORTHGATE GROUP HOLDINGS LTD", "shares_perc": 82.5, "is_company": true },
{ "name": "Priya Raman", "shares_perc": 17.5, "is_company": false }
],
"total_shareholders": 2,
"psc_exemption": null
}
} Notes
- PSC statements and shareholdings answer different questions and can legitimately disagree: control is not the same as ownership. Both are returned so you can decide which one your use case needs.
Group structure #
/group-structure 2Walks the corporate chain in either direction from one company, de-duplicated across the register, and returns it flat or nested. Ask for ancestors to find the ultimate parent behind a trading subsidiary; ask for descendants to enumerate everything a holding company sits on top of.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| direction | Optional | ancestors, descendants or both (default). |
| shape | Optional | flat (default) or tree. |
| depth | Optional | How many levels to walk. Default 5, maximum 10. |
Response fields
| Field | Type | Description |
|---|---|---|
| ancestors[] | object[] | Companies above this one, nearest first, each with company_id, company_name, level and the control basis. |
| descendants[] | object[] | Companies below this one, same shape. |
| ultimate_parent | object | null | The topmost company reached before the chain leaves the UK register or ends. |
Example
https://api.companytrack.com/v1/group-structure?key=YOUR_API_KEY&company_number=00000042&direction=ancestors
{
"status": "success",
"credits_used": 2,
"data": {
"company_number": "00000042",
"ancestors": [
{
"company_id": "UK-00000041",
"company_name": "NORTHGATE GROUP HOLDINGS LTD",
"level": 1,
"basis": "ownership-of-shares-75-to-100-percent"
}
],
"ultimate_parent": {
"company_id": "UK-00000041",
"company_name": "NORTHGATE GROUP HOLDINGS LTD"
}
}
} Notes
- Chains that leave the UK register (an overseas parent, say) stop there and say so, rather than reporting the last UK company as the ultimate owner.
Person & appointments #
/person 1The other side of /officers. Given a person_id, returns the individual and their full appointment history across the register — the endpoint behind "what else does this director run?" and behind any check for a disqualified or serially-dissolving director.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| person_id | Required | Stable person ID, as returned by /officers. |
Response fields
| Field | Type | Description |
|---|---|---|
| person_id | string | The stable ID. |
| name | string | Name as most recently filed. |
| date_of_birth | object | null | Month and year. |
| appointments[] | object[] | Every appointment: company_id, company_name, company_status, officer_role, appointed_on, resigned_on. |
| total_appointments | number | Count across the register. |
Example
https://api.companytrack.com/v1/person?key=YOUR_API_KEY&person_id=900000123
{
"status": "success",
"credits_used": 1,
"data": {
"person_id": "900000123",
"name": "Priya Raman",
"date_of_birth": { "month": 4, "year": 1982 },
"appointments": [
{
"company_id": "UK-00000042",
"company_name": "NORTHGATE ANALYTICS LTD",
"company_status": "active",
"officer_role": "director",
"appointed_on": "2016-05-11",
"resigned_on": null
}
],
"total_appointments": 3
}
} Notes
- Dates of birth are month-precision on the register, so two people sharing a name and birth month cannot always be separated. Matches are graded by confidence and only high-confidence resolutions are merged into one person_id.
Company search #
/search 1 per search, whatever the result countTwo searches behind one endpoint. Give it a name or a number and it resolves that company across the active register. Give it a description and it matches on meaning across the business description, offerings and target customers — so "cold-chain logistics for pharma" finds a company whose own site says "temperature-controlled distribution for life sciences", with no shared keyword. Layer structured filters on top to screen by turnover, headcount, region or sector.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| q | One required | A company name, a company number, or a description of what the company does. |
| filter | One required | Structured filter expression, e.g. org_kind:=product_vendor && locality:=Bristol. Filterable fields: org_kind, sector, customer_segments, delivery, locality, region, turnover, employees, founded, status, company_type, sic, charge_status. |
| mode | Optional | auto (default) matches by name first and falls back to meaning. name never substitutes a topically similar company — use it when you are resolving a company you already know. semantic searches by description only. |
| turnover_min / turnover_max | Optional | Latest filed turnover bounds, in GBP. |
| employees_min / employees_max | Optional | Latest filed headcount bounds. Companies that filed no headcount are excluded, not counted as zero. |
| sh_funds_min / sh_funds_max | Optional | Latest filed shareholder funds bounds, in GBP. |
| incorporated_after | Optional | Only companies incorporated on or after this date. |
| sort | Optional | relevance (default), turnover_desc, employees_desc, sh_funds_desc, incorporated_desc or turnover_cagr_3y_desc. |
| limit / page | Optional | Results per page (default 20, maximum 100) and 1-based page number. |
Response fields
| Field | Type | Description |
|---|---|---|
| results[].company_id | string | Pass straight to /company. |
| results[].match | string | Why this company is here: exact, strong, partial, semantic, keyword or filter. Read it before trusting the row. |
| results[].matched_previous_name | string | null | Set when the query matched a former name and the company has since been renamed. |
| results[].short_desc | string | One-line description of what the company does. |
| results[].turnover / employees / shareholder_funds | number | null | Latest filed figures, where disclosed. |
| found | number | null | Total matches across every page. Null on the semantic route only, where there is no total short of scanning the whole filtered set. Never read null as zero. |
| name_match | boolean | True when at least one result matched the name exactly or strongly. False means no company of that name is indexed and the rows are topical suggestions. |
| undisclosed_excluded | number | How many matching companies were dropped from a financial ranking because they never filed that figure. |
| scope | object | What the result set covers — stated on every response so an empty result is not mistaken for a company that never existed. |
Example
https://api.companytrack.com/v1/search?key=YOUR_API_KEY&q=cold-chain%20logistics&turnover_min=1000000&sort=turnover_cagr_3y_desc&limit=20
{
"status": "success",
"credits_used": 1,
"data": {
"found": 342,
"page": 1,
"mode": "semantic",
"name_match": false,
"undisclosed_excluded": 1180,
"results": [
{
"company_id": "UK-00000042",
"company_number": "00000042",
"company_name": "NORTHGATE ANALYTICS LTD",
"match": "semantic",
"short_desc": "Revenue forecasting platform for subscription businesses.",
"org_kind": "product_vendor",
"sector": "Finance Software",
"locality": "Bristol",
"region": "South West",
"status": "active",
"turnover": 4120000,
"employees": 42,
"incorporated_year": 2016,
"websites": ["northgateanalytics.example"]
}
]
}
} Notes
- Check name_match before trusting a lookup. A semantic search always returns its nearest neighbours, so an unrecognised name comes back as a page of similar-sounding companies rather than an empty result.
- Ranking a niche by turnover returns less than you expect: only about 218,000 active companies disclose one, against 2.6 million disclosing headcount. undisclosed_excluded tells you how much was dropped, and shareholder funds usually rank such a list better.
- Combining a text query with a financial sort ranks within the most relevant companies, not across the whole register — otherwise you would get the biggest companies loosely related to the query instead of the biggest relevant ones.
Business profile #
/intelligence 1The layer a SIC code cannot give you. A verified domain is matched to the legal entity and the site is read into structured facets: a plain-English description, the offerings sold, the customer segments served, and the delivery model. It is what separates a careers-software vendor from a university that happens to mention careers.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
Response fields
| Field | Type | Description |
|---|---|---|
| domain | string | null | The verified primary domain. |
| short_desc | string | One-line plain-English description of the business. |
| org_kind | string | product_vendor, services_provider, education_institution, charity_nonprofit, recruiter_staffing, marketplace_aggregator and eight more. |
| sector | string | Normalised sector label. |
| offerings | string[] | What it sells. |
| customer_segments | string[] | Who it sells to. |
| delivery | string[] | How it delivers: saas_platform, services_consultancy, physical_products, api_data… |
| market | string[] | b2b, b2c or both. |
Example
https://api.companytrack.com/v1/intelligence?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 1,
"data": {
"company_name": "NORTHGATE ANALYTICS LTD",
"domain": "northgateanalytics.example",
"short_desc": "Revenue forecasting platform for subscription businesses.",
"org_kind": "product_vendor",
"sector": "Finance Software",
"offerings": ["revenue forecasting", "churn analytics", "board reporting"],
"customer_segments": ["smb", "enterprise"],
"delivery": ["saas_platform", "api_data"],
"market": ["b2b"]
}
} Notes
- Coverage is the 1.15 million active companies with a verified website. A company without one is still findable by name and still has a full registry record — it just has no business profile.
- A company with no verified website returns status "no_data" and costs nothing.
Charges #
/charges 1Mortgages, debentures and fixed or floating charges as registered, with the persons entitled, the created and delivered dates, the satisfied status and the short particulars. The fastest read on whether a company has borrowed against its assets and who has first claim on them.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| status | Optional | outstanding (default), satisfied, or all. |
Response fields
| Field | Type | Description |
|---|---|---|
| charges[].status | string | outstanding, satisfied or part-satisfied. |
| charges[].created_on | date | Date the charge was created. |
| charges[].delivered_on | date | Date it was delivered to Companies House. |
| charges[].satisfied_on | date | null | Null while outstanding. |
| charges[].persons_entitled | string[] | Who holds the charge — usually the lender. |
| charges[].particulars | string | null | Short particulars as filed. |
| total_outstanding | number | Count of outstanding charges. |
Example
https://api.companytrack.com/v1/charges?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 1,
"data": {
"company_number": "00000042",
"charges": [
{
"status": "outstanding",
"created_on": "2023-11-02",
"delivered_on": "2023-11-09",
"satisfied_on": null,
"persons_entitled": ["NORTHGATE BANK PLC"],
"particulars": "Fixed and floating charge over all assets"
}
],
"total_outstanding": 1
}
} Property holdings #
/properties 1Freehold and leasehold titles registered to the company, matched to the legal entity rather than to a similar name, with tenure, the address and the price paid where the Land Registry publishes it. Property is the asset base that never appears in a set of micro-entity accounts.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
Response fields
| Field | Type | Description |
|---|---|---|
| properties[].title_number | string | Land Registry title number. |
| properties[].address | string | Property address as registered. |
| properties[].tenure | string | freehold or leasehold. |
| properties[].price_paid | number | null | Price paid, where published. |
| properties[].date_of_transfer | date | null | Transfer date, where published. |
| total_properties | number | Count of matched titles. |
Example
https://api.companytrack.com/v1/properties?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 1,
"data": {
"company_number": "00000042",
"properties": [
{
"title_number": "BL123456",
"address": "6 Northgate Street, Bristol, BS1 2AW",
"tenure": "freehold",
"price_paid": 1250000,
"date_of_transfer": "2019-08-14"
}
],
"total_properties": 1
}
} Grant awards #
/grants 1Innovate UK, research council and other public awards, matched to the company number rather than to a name that merely looks similar. 329,000 awards across 78,000 UK companies — a strong signal of R&D activity in businesses too small to file a meaningful P&L.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| limit | Optional | Awards per page. Default 25, maximum 100. |
Response fields
| Field | Type | Description |
|---|---|---|
| grants[].funder | string | Awarding body. |
| grants[].programme | string | null | Funding programme, where published. |
| grants[].title | string | Project title. |
| grants[].amount | number | null | Award value in GBP. |
| grants[].start_date / end_date | date | null | Project window. |
| total_awarded | number | Sum of matched awards. |
Example
https://api.companytrack.com/v1/grants?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 1,
"data": {
"company_number": "00000042",
"grants": [
{
"funder": "Innovate UK",
"programme": "Smart Grants",
"title": "Forecasting models for subscription revenue",
"amount": 348000,
"start_date": "2023-01-01",
"end_date": "2024-06-30"
}
],
"total_awarded": 348000
}
} Notes
- A company with no matched award returns status "no_data" and costs nothing.
Fundraisings #
/fundraisings 2UK private companies do not announce their rounds, but they do have to file an SH01 when they allot shares. This endpoint reconstructs those allotments into fundraising events — amount raised, price per share, date and the resulting share capital — so you can see a raise from the register rather than waiting for a press release.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
Response fields
| Field | Type | Description |
|---|---|---|
| fundraisings[].date | date | Allotment date as filed. |
| fundraisings[].amount_raised | number | null | Reconstructed amount in GBP. |
| fundraisings[].price_per_share | number | null | Implied price per share. |
| fundraisings[].share_class | string | null | Class allotted, e.g. Ordinary, Preferred A. |
| fundraisings[].shares_allotted | number | null | Number of shares issued. |
| total_raised | number | null | Sum across reconstructed events. |
Example
https://api.companytrack.com/v1/fundraisings?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 2,
"data": {
"company_number": "00000042",
"fundraisings": [
{
"date": "2024-02-19",
"amount_raised": 2400000,
"price_per_share": 12.5,
"share_class": "Preferred A",
"shares_allotted": 192000
}
],
"total_raised": 2400000
}
} Notes
- These are reconstructions from filings, not announcements. An allotment with no consideration disclosed returns a null amount rather than an estimate.
- A company with no recorded allotments returns status "no_data" and costs nothing.
News #
/news 3 (1 for a cached read)Press coverage resolved against the legal entity, with the publication, date, URL and a short summary, plus topic tags so you can filter to funding, hiring or distress signals. Results are cached, so a repeat lookup of the same company is far cheaper than the first.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
| company_number | Required | Companies House number, with or without the UK- prefix, and zero-padding optional: 42, 00000042 and UK-00000042 all resolve to the same company. Scottish and Northern Irish numbers keep their letter prefix (SC000042, NI000042). |
| limit | Optional | Items to return. Default and maximum 5. |
Response fields
| Field | Type | Description |
|---|---|---|
| items[].title | string | Headline. |
| items[].url | string | Link to the article. |
| items[].publisher | string | null | Publication name. |
| items[].published_at | date | null | Publication date. |
| items[].summary | string | null | Short summary of the piece. |
| items[].topics | string[] | Tags such as funding, acquisition, hiring, product, distress. |
Example
https://api.companytrack.com/v1/news?key=YOUR_API_KEY&company_number=00000042
{
"status": "success",
"credits_used": 3,
"data": {
"company_number": "00000042",
"items": [
{
"title": "Northgate Analytics raises £2.4m to expand forecasting platform",
"url": "https://example.com/northgate-raise",
"publisher": "Business Insider UK",
"published_at": "2024-02-21",
"summary": "Bristol-based Northgate Analytics has closed a £2.4m round…",
"topics": ["funding"]
}
]
}
} Notes
- A live lookup that finds nothing is charged, because the search ran either way. Every later "nothing found" for that company is answered from cache and is free.
Credit balance #
/account/credits FreeA free call that never consumes credits. Poll it to drive your own usage dashboard, or check it before firing a large batch so you fail fast rather than half way through.
Parameters
| Name | Required | Description |
|---|---|---|
| key | Required | Your API key. Send it as ?key=, an Authorization: Bearer header, or an X-API-Key header — whichever suits your client. |
Response fields
| Field | Type | Description |
|---|---|---|
| credits_remaining | number | Credits left in the current period. |
| credits_allowance | number | Total credits for the period. |
| period_end | date | When the allowance resets. |
| plan | string | The plan the key is on: free, starter, growth or scale. |
Example
https://api.companytrack.com/v1/account/credits?key=YOUR_API_KEY
{
"status": "success",
"credits_used": 0,
"data": {
"plan": "growth",
"credits_remaining": 46812,
"credits_allowance": 50000,
"period_end": "2026-09-01"
}
} Status codes #
Only a successful lookup is charged. Every other outcome — a bad parameter, an unknown company, an exhausted allowance, a server fault — costs nothing, so retrying a failed batch never compounds the bill.
| Code | Meaning |
|---|---|
| 200 | Success. status is "success" and credits_used says what it cost. |
| 200 | No data. status is "no_data" — the company exists but this layer does not. Never charged. |
| 400 | Missing or malformed parameter. Not charged. |
| 401 | Missing, invalid or revoked API key. Not charged. |
| 402 | Allowance exhausted for the period. Not charged. |
| 404 | The company number or person ID does not exist on the register. Not charged. |
| 429 | Rate limited. Back off and retry. Not charged. |
| 500 | Server error. Not charged — please retry. |
Get a key and run these examples
The sandbox companies used throughout this reference are served free to every key, so you can verify every shape above before spending a credit.