UK company data and live business signals, by API
The Companies API finds and looks up any UK company. The Signals API tells you when one changes: new lending, new directors, new owners, an office move, or the first sign of trouble. Start free with 100 records, no card needed.
Two APIs, one key
Companies API
Search and look up any UK company by sector, postcode, age, type or name, and pull the new companies that match your saved searches.
About the Companies APISignals API
A dated feed of changes at UK companies: new lending, directors, owners, office moves and insolvency, plus company timelines and likely buyers.
About the Signals APIPlans
Free demo
Try every endpoint with 100 records.
100 records, one-off
- Company records and a sample of signals
- One key
- No card needed
Companies API
UK company records, cleaned and ready to use.
2,500 records a month
- Search and look up any UK company
- New incorporations daily
- Shell-company flag on every record
Signals API
Know when a UK business changes, the day it happens.
10,000 records a month
- Everything in Companies API
- Events feed: new loans, directors, owners, office moves, insolvency and more
- Per-company timelines and likely buyers
National and bulk
Higher volumes and bulk delivery.
Custom allowance
- Custom allowance
- Bulk delivery
- Contact us
Prices exclude VAT, which is added at checkout. The Business website plan includes 2,000 API records a month.
Quickstart
Create a key on your account API page, then send it in the Authorization header.
curl -H "Authorization: Bearer nh_your_key_here" \
"https://www.newcohunter.co.uk/api/v1/signals/events?families=scaling&location=M,LS&limit=20"Each event looks like this:
{
"id": 48213377,
"type": "charge_registered",
"label": "New secured lending",
"families": ["scaling"],
"date": "2026-09-29",
"detected_at": "2026-09-30T08:14:02.000Z",
"summary": "New charge registered",
"company": {
"number": "12345678",
"name": "EXAMPLE TRADING LTD",
"status": "active",
"locality": "Manchester",
"postcode": "M1 1AA",
"sic_codes": ["47110"]
}
}Endpoints
| Endpoint | Plan | What it returns |
|---|---|---|
GET /api/v1/companies | Companies | Search UK companies by sector, postcode, age, type, status or name. Up to 100 a page. Age defaults to new (incorporated in the last 30 days); use age=0-3m, 3-12m, 1-2y, 2-5y or 5y+ for older companies. |
GET /api/v1/companies/:number | Companies | One company by its registration number. |
GET /api/v1/matches | Companies | New companies matching your saved searches (days 1 to 90). |
GET /api/v1/signals/events | Signals | The events feed, newest first. Filter by families, types, since (up to 90 days back) and location (postcode areas or districts). Cursor paging. |
GET /api/v1/signals/companies/:number/timeline | Signals | Every signal for one company, newest first. |
GET /api/v1/signals/likely-buyers/:offering | Signals | Companies likely to need what you sell right now. Optional location. |
GET /api/v1/signals/offerings | Free | The offerings likely-buyers accepts. |
GET /api/v1/signals/types | Free | Every signal type with its label and families. |
GET /api/v1/usage | Free | Your plan, records used, remaining and reset date. |
GET/POST /api/v1/signals/webhooks | Signals | List or add signal webhooks (DELETE /:id to remove, POST /:id/test to send a test). See below. |
POST /mcp | Any | The same endpoints as MCP tools for AI assistants. See below. |
Signal webhooks
On the Signals API, add up to 5 webhooks from your account page or with POST /api/v1/signals/webhooks(body: url, optional families, types and location). Every few minutes we POST new signals matching the filter to your HTTPS endpoint as { type: "signals", events: [...] }, in the same shape as the events feed. Each signal delivered uses one record. Answer with any 2xx; failed deliveries are retried with backoff and the webhook is switched off after 20 failures in a row.
Verify each delivery with your webhook secret:
// Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(req, rawBody, secret) {
const ts = req.headers["x-newcohunter-timestamp"];
const sig = req.headers["x-newcohunter-signature"];
const expected = "sha256=" + createHmac("sha256", secret).update(ts + "." + rawBody).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
return fresh && sig.length === expected.length && timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
}Use it from AI assistants (MCP)
Both APIs are also available as an MCP server, so AI assistants such as Claude can search companies, read signal feeds and find likely buyers for you. It uses the same key, the same plan and the same record allowance as the REST API.
Claude Code:
claude mcp add --transport http newcohunter https://www.newcohunter.co.uk/mcp \
--header "Authorization: Bearer nh_your_key_here"Other MCP clients (Streamable HTTP):
{
"mcpServers": {
"newcohunter": {
"type": "http",
"url": "https://www.newcohunter.co.uk/mcp",
"headers": { "Authorization": "Bearer nh_your_key_here" }
}
}
}Tools: search_companies, get_company, get_saved_search_matches, get_signal_events, get_company_timeline, find_likely_buyers, list_signal_types, list_offerings and get_usage. Up to 50 records per tool call.
Signal families and types
New families=new
Companies that have just been formed.
incorporatedJust incorporatedfirst_accounts_filedFirst accounts filed
Scaling families=scaling
Signs a business is investing or growing: new lending, new shares, new directors, rising net assets.
net_assets_upNet assets upcharge_registeredNew secured lendingshares_allottedIssued new sharesdirector_appointedNew director
Shrinking families=shrinking
Signs a business is pulling back: falling net assets, directors leaving, going dormant.
net_assets_downNet assets downdirector_resignedDirector leftdormancy_startedWent dormant
Failing families=failing
Insolvency and closure: administration, liquidation, strike-off.
entered_administrationIn administrationentered_liquidationIn liquidationentered_arrangementVoluntary arrangemententered_receivershipIn receivershipaccounts_overdueAccounts overduestrike_off_proposedProposal to strike offdissolvedDissolved
Changing families=changing
A new owner, name, office, activity, or a solvent wind-down.
solvent_wind_downSolvent wind-downowner_addedNew ownerowner_ceasedOwner leftoffice_movedMoved registered officename_changedChanged namesic_changedChanged what it doescharge_satisfiedLoan paid offstrike_off_appliedApplied to close (voluntary strike-off)dormancy_endedReactivated
Combine families and types freely, for example families=failing&types=director_resigned.
Records, limits and headers
- Plans are measured in records: each company or event returned. The same record again in the same month is free.
- Every response carries
X-Records-Limit,X-Records-Used,X-Records-Remaining,X-Records-ChargedandX-Records-Reset. - Rate limits: 60 requests a minute and 1,000 a day per key, reported in the standard
RateLimit-*headers. - Up to 100 records per call. The events feed reaches back 90 days; page through it with
next_cursor. - Errors are JSON with an
errorcode:unauthorized(401),plan_required(403),records_exhaustedorrate_limited(429).
Frequently asked questions
What counts as a record?
One company or one signal event returned in a response. Asking for the same record again in the same month is free, so paging back and forth or re-checking a company costs nothing extra. Calls that return nothing cost nothing.
What happens when I run out?
A page is cut short at your remaining allowance and marked truncated. When nothing is left the API answers 429 with a link to upgrade. Monthly allowances reset on the 1st.
Where does the data come from?
Companies House and other official public records. Signals are dated by when they happened and when they appeared on the register.
Can I resell the data or build my own database with it?
No. API output is licensed for use inside your organisation. See the API terms for the full licence.
Is there a Business plan option?
Yes. The Business website plan includes 2,000 API records a month across both APIs, on top of everything else in that plan.
Use of the API is covered by the API terms. Looking for alerts instead of code? See email alerts.