Company Suggest
Ranked candidate companies for the start of a name with GET /v1/companies/suggest. Free.
GET https://api.jobspipe.dev/v1/companies/suggest?q={text}Turns the start of a company name into ranked candidates: companies with open postings whose name starts with the text. It never picks a winner; it gives you the identity of each company the text may mean, so you can choose one and carry on with its key, name or domain. Requires authentication and costs nothing.
Use it for typeahead, to disambiguate a name before a company lookup, or after a lookup by name answered 404.
Request
| Parameter | Type | Description |
|---|---|---|
q | string | Required. The start of a company name, 2 to 100 characters. |
limit | integer | How many candidates to return, 1 to 10. Default 10. |
The text is matched case-insensitively, punctuation is ignored, and a trailing legal suffix (Inc, GmbH, Ltd and the like) is dropped, so Anthropic, Inc. and anthropic match the same companies.
curl "https://api.jobspipe.dev/v1/companies/suggest?q=vanta&limit=3" \
-H "Authorization: Bearer jp_live_your_key_here"import requests
resp = requests.get(
"https://api.jobspipe.dev/v1/companies/suggest",
params={"q": "vanta", "limit": 3},
headers={"Authorization": "Bearer jp_live_your_key_here"},
timeout=30,
)
candidates = resp.json()["candidates"]const res = await fetch("https://api.jobspipe.dev/v1/companies/suggest?q=vanta&limit=3", {
headers: { Authorization: "Bearer jp_live_your_key_here" },
});
const { candidates } = await res.json();Response
{
"query": "vanta",
"candidates": [
{ "key": "1109385274236711038", "name": "Vanta", "domain": "vanta.com", "jobs": 58, "hq_country": "US", "verified": false },
{ "key": "7721560914385020117", "name": "Vanta Staffing", "domain": "vantastaffing.co.uk", "jobs": 31, "hq_country": "GB", "verified": true },
{ "key": "9031118745227703846", "name": "Vanta Diagnostics", "domain": null, "jobs": 4, "hq_country": null, "verified": false }
]
}| Field | Type | Description |
|---|---|---|
query | string | The text that was matched, normalised. |
candidates | array | Matching companies, best first. Empty when nothing matches. |
Each candidate carries six identity fields and nothing else:
| Field | Type | Description |
|---|---|---|
key | string | The company's id. Opens the company page and matches company_key_or on job search. |
name | string | The company's name as its postings state it. |
domain | string | null | Confirmed when verified is true; otherwise the best-known domain, or null. |
jobs | integer | Open postings currently shown for this company. |
hq_country | string | null | Headquarters country as an ISO 3166-1 alpha-2 code, or null. |
verified | boolean | true when two independent sources agree on the domain, so GET /v1/companies/{domain} resolves it. |
Ranking
- An exact name match comes first, verified or not, so
vantaputs Vanta above a verified staffing firm with a longer name. - Then companies whose domain is verified.
- Then by open postings, most first; ties fall to the name.
Only companies with at least one open posting are candidates. A company that has never posted a job we collected is absent, and a company we added recently may take time to appear in suggestions.
What to do with a candidate
- Its jobs:
POST /v1/jobs/searchwithcompany_key_or: [key]for exactly that company, orcompany_name_or: [name]. - Its profile and hiring numbers:
GET /v1/jobs/companies/{key}, the company page. - Its record:
GET /v1/companies/{domain}whenverifiedistrue. An unverified domain is a hint, not a confirmed identity, and may not resolve there.
Cost and limits
Free: no credits, and no slot in your plan's search rate limit. The endpoint has its own limit of 5 requests a second per account; over it, 429 with Retry-After: 1.
Errors
| Status | Meaning |
|---|---|
400 | q is shorter than two letters or digits, or limit is outside 1 to 10. |
401 | Missing or invalid API key. |
429 | More than 5 suggest requests in one second. Wait a second and retry. |
502 | Suggest is temporarily unavailable. Retry shortly. |
504 | The suggest query timed out. Retry shortly. |