JobsPipe
API Reference

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 shapeExampleNotes
Domainstripe.comThe common case.
Careers URLhttps://careers.walmart.com/us/jobsScheme, path, query and port are stripped.
Emailandrew@stripe.comEverything before the @ is discarded.
Company nameZscalerMatched 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 None
const 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"
}
FieldTypeDescription
namestringThe company's resolved name.
domainstring | nullIts primary domain.
urlstring | nullIts website.
logostring | nullLogo URL.
employee_countnumber | nullHeadcount. Falls back to our firmographic source when the profile has none.
employee_count_minnumber | nullLower bound of a headcount range. Not available on this endpoint; always null.
linkedin_urlstring | nullLinkedIn company page.
descriptionstring | nullCompany description.
locationobject | nullHeadquarters: street, city, region, postal_code, country.
foundedstring | nullFounding year.

Errors

StatusMeaning
401Missing or invalid API key.
402Monthly request quota exceeded. See rate limits.
404No company matched, or the match was not confident enough to return.
429Per-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.

On this page