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" } }
PSC Changes Timeline
/v1/companies/{company_number}/psc/changes
Waiting for request...
Returns a chronological timeline of PSC (Persons with Significant Control) changes for a company — appointments and cessations ordered by date.
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/psc/changes"
uri = URI("https://api.govdata.dev/v1/companies/12345678/psc/changes") 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/changes", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/psc/changes", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "total_events": 3, "events": [ { "event": "appointed", "date": "2020-01-15", "name": "John Smith", "psc_type": "individual", "natures_of_control": ["ownership-of-shares-75-to-100-percent"] }, { "event": "appointed", "date": "2023-06-01", "name": "Jane Doe", "psc_type": "individual", "natures_of_control": ["ownership-of-shares-25-to-50-percent"] }, { "event": "ceased", "date": "2024-03-15", "name": "John Smith", "psc_type": "individual" } ] }, "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 including directors’ remuneration.
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}, "directors_remuneration": {"median": 120000.00, "mean": 150000.00, "p25": 60000.00, "p75": 220000.00} }, "percentile_rankings": {"revenue": 78, "profit_before_tax": 82, "directors_remuneration": 65} }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Ownership Network
/v1/companies/{company_number}/network
Waiting for request...
Maps the ownership network of a company using PSC (Persons with Significant Control) data. Shows who controls the company and what other companies those same individuals control — useful for due diligence and relationship mapping.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/network"
uri = URI("https://api.govdata.dev/v1/companies/12345678/network") 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/network", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/network", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "psc_count": 1, "controllers": [ { "name": "John Smith", "psc_type": "individual", "nationality": "British", "natures_of_control": ["ownership-of-shares-75-to-100-percent"] } ], "related_companies": [ { "controller_name": "John Smith", "companies": [ { "company_number": "99887766", "company_name": "SMITH HOLDINGS LTD", "company_status": "active" }, { "company_number": "55443322", "company_name": "JS CONSULTING LTD", "company_status": "active" } ] } ], "network_size": 3 }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Filing Status
/v1/companies/{company_number}/filing-status
Waiting for request...
Check a company's filing compliance status. Returns whether accounts are overdue, due soon, or up to date, along with due dates and latest filing details.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/filing-status"
uri = URI("https://api.govdata.dev/v1/companies/12345678/filing-status") 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/filing-status", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/filing-status", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Compliance statuses
| Status | Description |
|---|---|
up_to_date | Accounts filed, next due date is 30+ days away |
due_soon | Next filing due within 30 days |
overdue | Filing is past its due date |
not_applicable | Company is dissolved or inactive |
unknown | No due date available |
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "company_status": "active", "compliance_status": "up_to_date", "accounts_next_due": "2027-01-15", "accounts_last_made_up_to": "2025-01-15", "confirmation_next_due": "2027-01-15", "days_until_due": 312, "days_since_last_filing": 418, "is_overdue": false, "latest_filing": { "period_end": "2025-01-15", "filing_type": "full", "has_financials": true } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Financial Trends
/v1/companies/{company_number}/trends
Waiting for request...
Year-over-year financial trends for a company. Returns time series of revenue, profit, assets, and employees across all filed accounts, with absolute and percentage changes between consecutive periods.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/trends"
uri = URI("https://api.govdata.dev/v1/companies/12345678/trends") 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/trends", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/trends", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "periods_count": 3, "periods": [ { "period_end": "2023-01-15", "filing_type": "full", "metrics": { "revenue": 500000.00, "profit_before_tax": 50000.00, "total_assets": 200000.00 } }, { "period_end": "2024-01-15", "filing_type": "full", "metrics": { "revenue": 600000.00, "profit_before_tax": 72000.00, "total_assets": 250000.00 } }, { "period_end": "2025-01-15", "filing_type": "full", "metrics": { "revenue": 680000.00, "profit_before_tax": 85000.00, "total_assets": 310000.00 } } ], "trends": [ { "from": "2023-01-15", "to": "2024-01-15", "changes": { "revenue": { "absolute": 100000.00, "percentage": 20.0 }, "profit_before_tax": { "absolute": 22000.00, "percentage": 44.0 } } }, { "from": "2024-01-15", "to": "2025-01-15", "changes": { "revenue": { "absolute": 80000.00, "percentage": 13.3 }, "profit_before_tax": { "absolute": 13000.00, "percentage": 18.1 } } } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Financial Health Score
/v1/companies/{company_number}/health
Waiting for request...
Financial health assessment based on the latest filing. Calculates key ratios (current ratio, debt-to-equity, profit margin, ROA, cash ratio) and rates each as green, amber, or red.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/health"
uri = URI("https://api.govdata.dev/v1/companies/12345678/health") 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/health", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/health", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Health signals
| Signal | Description |
|---|---|
green | Healthy — ratio within normal range |
amber | Caution — ratio warrants attention |
red | Concern — ratio outside healthy range |
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "period_end": "2025-01-15", "health": { "current_ratio": { "value": 2.1, "signal": "green", "label": "Current Ratio" }, "debt_to_equity": { "value": 0.4, "signal": "green", "label": "Debt to Equity" }, "profit_margin": { "value": 12.5, "signal": "green", "label": "Profit Margin %" }, "return_on_assets": { "value": 8.3, "signal": "amber", "label": "Return on Assets %" }, "cash_ratio": { "value": 0.6, "signal": "green", "label": "Cash Ratio" } } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Sector Analytics
/v1/companies/sectors/{sic_code}/analytics
Waiting for request...
Sector-level analytics for a given SIC code. Returns company counts, active/inactive breakdown, incorporation trends, and financial benchmarks (when available).
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/sectors/62012/analytics"
uri = URI("https://api.govdata.dev/v1/companies/sectors/62012/analytics") 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/sectors/62012/analytics", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/sectors/62012/analytics", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "sic_code": "62012", "sic_description": "Business and domestic software development", "sic_section": "J", "company_count": 45230, "active_count": 38100, "by_status": { "active": 38100, "dissolved": 6890, "liquidation": 240 }, "incorporations": { "this_year": 1850, "last_year": 4120 }, "financial_benchmarks": { "median_revenue": 285000.00, "median_profit_margin": 15.2, "median_total_assets": 180000.00 }, "filing_count": 12500, "benchmark_calculated_at": "2026-03-01T00:00:00Z" }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Geographic Data
/v1/companies/geography/{postcode_prefix}
Waiting for request...
Company statistics for a UK postcode area. Returns company counts, active/inactive breakdown, top industries, and incorporation trends.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/geography/EC2"
uri = URI("https://api.govdata.dev/v1/companies/geography/EC2") 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/geography/EC2", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/geography/EC2", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": { "postcode_prefix": "EC2", "company_count": 28500, "active_count": 21200, "by_status": { "active": 21200, "dissolved": 7100, "liquidation": 200 }, "top_sic_codes": [ { "code": "64209", "description": "Activities of other holding companies", "count": 3200 }, { "code": "70229", "description": "Management consultancy activities", "count": 2100 }, { "code": "62012", "description": "Business and domestic software development", "count": 1800 } ], "incorporations": { "this_year": 920, "last_year": 2340 } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Company Timeline
/v1/companies/{company_number}/timeline
Waiting for request...
Chronological timeline of key events: incorporation, account filings, PSC changes (notifications and cessations), and company cessation.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/12345678/timeline"
uri = URI("https://api.govdata.dev/v1/companies/12345678/timeline") 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/timeline", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/12345678/timeline", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Event types
| Type | Description |
|---|---|
incorporation | Company was registered |
accounts_filed | Annual accounts submitted |
psc_notified | Person with Significant Control notified |
psc_ceased | Person with Significant Control ceased |
cessation | Company dissolved or struck off |
Example response
{ "data": { "company_number": "12345678", "company_name": "ACME WIDGETS LTD", "event_count": 5, "events": [ { "date": "2025-01-15", "type": "accounts_filed", "description": "Full accounts filed for period ending 2025-01-15", "details": { "filing_type": "full", "has_financials": true } }, { "date": "2024-01-15", "type": "accounts_filed", "description": "Full accounts filed for period ending 2024-01-15", "details": { "filing_type": "full", "has_financials": true } }, { "date": "2020-01-15", "type": "psc_notified", "description": "John Smith notified as individual PSC", "details": { "name": "John Smith", "psc_type": "individual" } }, { "date": "2020-01-15", "type": "incorporation", "description": "Company incorporated as LTD" } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Companies House" } }
Recent Filings Feed
/v1/companies/recent-filings
Waiting for request...
Paginated feed of recently filed company accounts. Filter by filing type, industry (SIC code), or date range.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/companies/recent-filings?filing_type=full"
uri = URI("https://api.govdata.dev/v1/companies/recent-filings?filing_type=full") 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/recent-filings", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"filing_type": "full"} )
const response = await fetch( "https://api.govdata.dev/v1/companies/recent-filings?filing_type=full", { headers: { "Authorization": "Bearer YOUR_API_KEY" } } );
Example response
{ "data": [ { "company_number": "12345678", "barcode": "ABC123XYZ", "period_end": "2025-12-31", "filing_type": "full", "has_financials": true, "filed_at": "2026-03-05T14:30:00Z" } ], "pagination": { "total": 500000, "page": 1, "per_page": 25, "total_pages": 20000 }, "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.
Data Coverage
| Source | Companies House |
| Date range | All active and recently dissolved companies |
| Records | ~5.7M companies |
| Updated | Monthly full snapshot, daily accounts filings |
| Limitations | Financial data covers last 5 years of filings. Very old dissolved companies may be absent. |