Company Lookup
Fetch one company's enriched record with GET /v1/companies/{key}.
GET https://api.jobspipe.dev/v1/companies/{key}Returns one company's record: domain, website, logo, headcount, headquarters, description, LinkedIn page and founding year. It is the same company_object that comes with each job in job search, looked up by company instead of by search. Requires authentication.
To find companies by the technologies they hire for, see company search by technology and company tech stack, both available on every plan.
Only companies that have posted jobs we collected are available. Any other company returns 404.
Request
The key is the only parameter. It accepts four shapes:
| Key shape | Example | Notes |
|---|---|---|
| Domain | stripe.com | The common case. |
| Careers URL | https://careers.walmart.com/us/jobs | Scheme, path, query and port are stripped. |
andrew@stripe.com | Everything before the @ is discarded. | |
| Company name | Zscaler | Matched exactly, ignoring case, punctuation and suffixes such as Inc or Ltd. Returns the record when exactly one company has that name and its domain is confirmed; otherwise a 404 that lists candidates. |
A domain is matched on its registrable form, so careers.walmart.com, walmart.com and https://careers.walmart.com/jobs resolve to the same company. Public-suffix rules apply: nsw.gov.au and jobbol.com.br are not truncated. When several records share a registrable domain, an exact domain match wins, then the registrable root, then an exact name match.
curl https://api.jobspipe.dev/v1/companies/stripe.com \
-H "Authorization: Bearer jp_live_your_key_here"import requests
resp = requests.get(
"https://api.jobspipe.dev/v1/companies/stripe.com",
headers={"Authorization": "Bearer jp_live_your_key_here"},
timeout=30,
)
company = resp.json() if resp.status_code == 200 else Noneconst res = await fetch("https://api.jobspipe.dev/v1/companies/stripe.com", {
headers: { Authorization: "Bearer jp_live_your_key_here" },
});
const company = res.status === 200 ? await res.json() : null;Percent-encode a URL or email key:
curl "https://api.jobspipe.dev/v1/companies/andrew%40stripe.com" \
-H "Authorization: Bearer jp_live_your_key_here"Response
200 returns one company object. Every field except name can be null when unknown.
{
"name": "Stripe",
"domain": "stripe.com",
"url": "https://stripe.com",
"logo": "https://...",
"employee_count": 16983,
"employee_count_min": null,
"linkedin_url": "https://www.linkedin.com/company/stripe",
"description": "Stripe is a financial infrastructure platform for businesses.",
"location": {
"street": "354 Oyster Point Blvd",
"city": "South San Francisco",
"region": "California",
"postal_code": "94080",
"country": "US"
},
"founded": "2010",
"intelligence": null,
"key": "14189461223778919517"
}| Field | Type | Description |
|---|---|---|
name | string | The company's resolved name. |
domain | string | null | Its primary domain. |
url | string | null | Its website. |
logo | string | null | Logo URL. |
employee_count | number | null | Headcount. |
employee_count_min | number | null | Lower bound of a headcount range. Always null on this endpoint. |
linkedin_url | string | null | LinkedIn company page. |
description | string | null | Company description. |
location | object | null | Headquarters: street, city, region, postal_code, country. |
founded | string | null | Founding year. |
intelligence | object | null | Always null on this endpoint, because it depends on the posting's country. Read it from company_object on a job. |
key | string | null | The company's key: it opens the company page and matches company_key_or on job search. null when the record has no postings behind it. |
When a name is not confirmed
A company is returned only when its domain is confirmed, so a wrong employer's logo, size and description are never attached to your key. A name key resolves when exactly one company with open postings has exactly that name and its domain is confirmed and carries the name: GET /v1/companies/Twilio returns the same record as GET /v1/companies/twilio.com, at the same price. A name that several employers share, such as Block, has no confirmed record. The 404 then lists the companies the name may mean, best first, with the identity fields you need to pick one:
{
"error": "company_not_found",
"next_step": "No confirmed record for this key. Pick a candidate: its key opens GET /v1/jobs/companies/{key}, its name works as company_name_or on job search, and a verified candidate's domain resolves here.",
"candidates": [
{ "key": "3837186692681720328", "name": "Anthropic", "domain": "anthropic.com", "jobs": 212, "hq_country": "US", "verified": true }
]
}Each candidate has the same six fields as company suggest: key, name, domain, jobs, hq_country and verified. A verified candidate's domain resolves on this endpoint; its key opens the company page and matches company_key_or on job search. The list is empty when no company with open postings starts with the name. To look names up before calling this endpoint, use company suggest, which costs nothing.
Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid API key. |
402 | Out of credits. See rate limits. |
404 | No confirmed record for the key. The body carries candidates, possibly empty. Costs nothing. |
429 | Per-second rate limit exceeded. |
A 404 is a normal outcome: treat it as "no confirmed record for this key" and read its candidates. A domain key resolves more often than a name, since a name can belong to several employers.
Cost
One credit per call that returns the record, however much of it is filled. A 404 costs nothing, and its candidates are free. See rate limits.