Companies API Reference
UK company data from Companies House. Search, lookup, financials, PSC data, comparison, and industry benchmarks.
Base URL: https://api.govdata.dev/v1
Company Search
/v1/companies/search
Waiting for request...
Search for UK companies by name. Returns paginated results ranked by relevance.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
q |
string | Yes | Search query (min 2 characters) |
status |
string | No | Filter by status: active, dissolved |
page |
integer | No | Page number (default: 1) |
per_page |
integer | No | Results per page (default: 25, max: 100) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/search?q=ACME"
uri = URI("https://api.govdata.dev/v1/companies/search?q=ACME") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/search", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"q": "ACME"} )
const url = new URL("https://api.govdata.dev/v1/companies/search"); url.searchParams.set("q", "ACME"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": [ { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "company_status": "active", "company_type": "ltd", "date_of_creation": "2020-01-15", "registered_office_address": { "postal_code": "EC2R 6EA", "locality": "London" }, "sic_codes": ["62012", "62020"] } ], "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk", "query": "ACME" }, "pagination": { "total": 1, "page": 1, "per_page": 25, "total_pages": 1 } }
Company Lookup
/v1/companies/
Waiting for request...
Retrieve full details for a specific company by its Companies House number.
Parameters
| Parameter | Type | Description |
|---|---|---|
company_number |
string (path) | 8-digit Companies House number (e.g., 12345678) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/companies/12345678
uri = URI("https://api.govdata.dev/v1/companies/12345678") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/12345678", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch("https://api.govdata.dev/v1/companies/12345678", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "company_status": "active", "company_type": "ltd", "date_of_creation": "2020-01-15", "date_of_cessation": null, "registered_office_address": { "address_line_1": "123 Test St", "locality": "London", "postal_code": "EC2R 6EA", "country": "United Kingdom" }, "sic_codes": [ { "code": "62012", "description": "Business and domestic software development" }, { "code": "62020", "description": "Information technology consultancy activities" } ], "accounts": { "next_due": "2027-01-15", "last_made_up_to": null }, "confirmation_statement": { "next_due": "2027-01-15" }, "jurisdiction": "england-wales", "uri": "/company/12345678" }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk" } }
Company Listing
/v1/companies
Waiting for request...
List and filter UK companies by status, SIC code, or postcode area.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | No | Filter by status: active, dissolved |
sic_code |
string | No | Filter by SIC code (e.g., 62012) |
postcode |
string | No | Filter by postcode area (e.g., EC2R) |
page |
integer | No | Page number (default: 1) |
per_page |
integer | No | Results per page (default: 25, max: 100) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies?status=active&sic_code=62012"
uri = URI("https://api.govdata.dev/v1/companies?status=active&sic_code=62012") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"status": "active", "sic_code": "62012"} )
const url = new URL("https://api.govdata.dev/v1/companies"); url.searchParams.set("status", "active"); url.searchParams.set("sic_code", "62012"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": [ { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "company_status": "active", "company_type": "ltd", "date_of_creation": "2020-01-15", "registered_office_address": { "postal_code": "EC2R 6EA", "locality": "London" }, "sic_codes": ["62012", "62020"] } ], "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk" }, "pagination": { "total": 1, "page": 1, "per_page": 25, "total_pages": 1 } }
SIC Codes
/v1/companies/sic-codes
Waiting for request...
List all UK Standard Industrial Classification (SIC) codes. Optionally filter by section letter.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
section |
string | No | Filter by section letter (e.g., J for Information and Communication) |
page |
integer | No | Page number (default: 1) |
per_page |
integer | No | Results per page (default: 25, max: 100) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/sic-codes?section=J"
uri = URI("https://api.govdata.dev/v1/companies/sic-codes?section=J") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/sic-codes", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"section": "J"} )
const url = new URL("https://api.govdata.dev/v1/companies/sic-codes"); url.searchParams.set("section", "J"); const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": [ { "code": "62011", "description": "Ready-made interactive leisure and entertainment software development", "section": "J" }, { "code": "62012", "description": "Business and domestic software development", "section": "J" }, { "code": "62020", "description": "Information technology consultancy activities", "section": "J" } ], "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk" }, "pagination": { "total": 3, "page": 1, "per_page": 25, "total_pages": 1 } }
/v1/companies/sic-codes/
Waiting for request...
Look up a specific SIC code and its description.
Parameters
| Parameter | Type | Description |
|---|---|---|
code |
string (path) | SIC code (e.g., 62012) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/companies/sic-codes/62012
uri = URI("https://api.govdata.dev/v1/companies/sic-codes/62012") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/sic-codes/62012", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch("https://api.govdata.dev/v1/companies/sic-codes/62012", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "code": "62012", "description": "Business and domestic software development", "section": "J", "section_description": "Information and Communication" }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk" } }
Company Statistics
/v1/companies/statistics
No parameters required.
Waiting for request...
Aggregate statistics about UK companies. No parameters required.
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/companies/statistics
uri = URI("https://api.govdata.dev/v1/companies/statistics") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/statistics", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch("https://api.govdata.dev/v1/companies/statistics", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "total_companies": 5200000, "by_status": { "active": 4800000, "dissolved": 350000 }, "by_type": { "ltd": 4200000, "plc": 7500, "llp": 65000 }, "incorporations_this_month": 45000, "incorporations_this_year": 520000, "data_as_of": "2026-02-01" }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House", "source_url": "https://download.companieshouse.gov.uk" } }
Company Financials
/v1/companies/{company_number}/financials
Waiting for request...
Returns financial data extracted from iXBRL/XBRL accounts filings for a company. Includes revenue, profit, assets, liabilities, and more.
Path parameters
| Parameter | Type | Description |
|---|---|---|
company_number |
string | Companies House number (8 characters) |
limit |
integer | Max filings to return (default: 10, max: 50) |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/financials"
uri = URI("https://api.govdata.dev/v1/companies/12345678/financials") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/12345678/financials", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/financials", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "filings_count": 2, "filings": [ { "period_start": "2024-01-01", "period_end": "2024-12-31", "filing_type": "full", "accounting_standard": "FRS 102", "filed_at": "2025-03-15T10:00:00Z", "financials": { "revenue": 1250000.00, "cost_of_sales": 750000.00, "gross_profit": 500000.00, "profit_before_tax": 340000.00, "total_assets": 2000000.00, "net_assets": 1400000.00, "employees_count": 42 } } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Persons with Significant Control (PSC)
/v1/companies/{company_number}/psc
Waiting for request...
Returns Persons with Significant Control records for a company. Includes individual and corporate PSCs with their natures of control.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/psc"
uri = URI("https://api.govdata.dev/v1/companies/12345678/psc") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/companies/12345678/psc", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/psc", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "psc_count": 1, "psc_records": [ { "psc_type": "individual", "kind": "individual-person-with-significant-control", "name": "John Smith", "nationality": "British", "country_of_residence": "United Kingdom", "natures_of_control": ["ownership-of-shares-75-to-100-percent"], "notified_on": "2020-01-15", "ceased_on": null } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Company Comparison
Compare 2–10 companies side by side. Returns profile information and financial data (when available) for each company.
Request body
| Field | Type | Description |
|---|---|---|
company_numbers |
array | Array of 2–10 company numbers |
curl -X POST -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"company_numbers": ["12345678", "87654321"]}' \ "https://api.govdata.dev/v1/companies/compare"
uri = URI("https://api.govdata.dev/v1/companies/compare") req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json") req["Authorization"] = "Bearer YOUR_API_KEY" req.body = { company_numbers: ["12345678", "87654321"] }.to_json res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.post( "https://api.govdata.dev/v1/companies/compare", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={"company_numbers": ["12345678", "87654321"]} )
const response = await fetch("https://api.govdata.dev/v1/companies/compare", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ company_numbers: ["12345678", "87654321"] }) });
Example response
{ "data": { "companies_compared": 2, "companies": [ { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "profile": { "company_status": "active", "company_type": "ltd", "age_years": 6, "sic_codes": [{"code": "62012", "description": "Business and domestic software development"}] }, "financials": { "revenue": 1250000.00, "profit_before_tax": 340000.00, "total_assets": 2000000.00 } } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Industry Benchmarks
By SIC Code
/v1/companies/benchmarks/{sic_code}
Waiting for request...
Returns aggregate financial statistics for all companies in a SIC sector. Includes median, mean, 25th and 75th percentile for key financial metrics.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/benchmarks/62012"
response = requests.get( "https://api.govdata.dev/v1/companies/benchmarks/62012", headers={"Authorization": "Bearer YOUR_API_KEY"} )
Company vs Industry
/v1/companies/{company_number}/benchmark
Waiting for request...
Compare a company’s financials against its industry sector. Returns the company’s latest financials, industry benchmarks, and estimated percentile rankings.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/benchmark"
response = requests.get( "https://api.govdata.dev/v1/companies/12345678/benchmark", headers={"Authorization": "Bearer YOUR_API_KEY"} )
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "sic_code": "62012", "sic_description": "Business and domestic software development", "company_financials": { "revenue": 1250000.00, "profit_before_tax": 340000.00 }, "industry_benchmarks": { "revenue": {"median": 500000.00, "mean": 750000.00, "p25": 200000.00, "p75": 1000000.00}, "profit_before_tax": {"median": 100000.00, "mean": 150000.00, "p25": 30000.00, "p75": 250000.00} }, "percentile_rankings": {"revenue": 78, "profit_before_tax": 82} }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Company data is sourced from the Companies House bulk data product and updated monthly. Financial data is extracted from iXBRL/XBRL accounts filings and updated daily. Contains public sector information licensed under the Open Government Licence v3.0.