Company Lookup
Fetch one company's enriched record with GET /v1/companies/{key}.
GET https://api.jobspipe.dev/v1/companies/{key}Returns the enriched record for a single company: domain, website, logo, headcount, headquarters, description, LinkedIn page and founding year. This is the same company_object that rides on every job in job search - the difference is that here you start from a company instead of a search. Requires authentication.
A company appears here only once we have resolved it from a job posting. A company that has never posted a job we collected is absent, not empty.
Request
The key is the only parameter, and 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 case-insensitively against the resolved company name. |
A domain is matched on its registrable form, so careers.walmart.com, walmart.com and https://careers.walmart.com/jobs all resolve to the same company. Public-suffix rules are respected: nsw.gov.au and jobbol.com.br are registrable domains in their own right and 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;Pass a URL or an email as the key and it must be percent-encoded:
curl "https://api.jobspipe.dev/v1/companies/andrew%40stripe.com" \
-H "Authorization: Bearer jp_live_your_key_here"Response
200 returns a single company object. Every field except name is independently optional, and a field we do not know is null rather than absent.
{
"name": "Stripe",
"domain": "stripe.com",
"url": "https://stripe.com",
"logo": "https://media.licdn.com/dms/image/...",
"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"
}| 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. Falls back to our firmographic source when the profile has none. |
employee_count_min | number | null | Lower bound of a headcount range. Not available on this endpoint; always null. |
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. |
Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid API key. |
402 | Monthly request quota exceeded. See rate limits. |
404 | No company matched, or the match was not confident enough to return. |
429 | Per-second rate limit exceeded. |
A 404 is a normal outcome, not a fault - treat it as "we have no record for this company" and fall through to your next source.
Only confidently resolved companies are returned. A record we could not corroborate is withheld rather than guessed, because a wrong domain would bind the wrong employer.
Cost
One credit per call, regardless of how much of the record is populated. See rate limits.