Jobs API endpoint
Returns one Greenhouse job, identified by the board `token` and job `id`, both required. The response has the title, company, department, team, location and offices, workplace type, employment type, posting and apply URLs, posting date, compensation, and the description as HTML and plain text. An unknown token or id returns `404`.
/jobs/greenhouse/jobQuery parameters:
token (required) — Greenhouse board token.id (required) — Greenhouse job id.Returns a single Job (provider, id, title, company, department, team, location, locations[], remote, workplace_type, employment_type, url, apply_url, req_id, posted_at, posted_age_text, description_html, description_text, compensation). An unknown token/id returns 404.
| Field | In the sample | Value in the sample |
|---|---|---|
| provider | Has a value | “greenhouse” |
| id | Has a value | |
| title | Has a value | “Abuse Investigator” |
| company | Has a value | “Stripe” |
| department | Has a value | “8611 Security Analytics” |
| location | Has a value | “Dublin” |
| locations | Has a value | 1 entry |
| url | Has a value | stripe.com |
| apply_url | Has a value | stripe.com |
| req_id | Has a value | |
| posted_at | Has a value | 2026-09-03 |
| description_html | Has a value | 5,090 characters |
| description_text | Has a value | 4,565 characters |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| token | string | Yes | Greenhouse board token | stripe | |
| id | string | Yes | Greenhouse job id | 8172508 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/jobs/greenhouse/job?token=stripe&id=8172508" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"provider": "greenhouse",
"id": "5501234",
"title": "Account Executive",
"company": "Stripe",
"department": "Sales",
"location": "US Remote",
"url": "https://stripe.com/jobs/listing/5501234",
"description_text": "About the role ..."
}
}Request schema
No body schema
Response schema
#/definitions/jobs.jobResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | jobs.Job | No | ||||
| data.ai_tools_mentioned | array | No | AITools lists canonical AI tool and platform names mentioned in the job title or description, such as "ChatGPT" or "GitHub Copilot". | |||
| data.apply_url | string | No | Link to the application page for the job. | |||
| data.benefits_mentioned | array | No | Benefits, Clearance, and Education contain canonical requirements and offerings mentioned in the job title or description. | |||
| data.company | string | No | Name of the hiring company. | |||
| data.company_logo_url | string | No | URL of the company's logo. | |||
| data.compensation | string | No | Compensation is the raw provider summary; the *Min/*Max/*Currency fields are parsed from it when the summary contains a recognizable pay range/amount. CompensationPeriod is the pay period ("hourly", "daily", "weekly", "monthly", "yearly") when the summary states one explicitly; empty when no period is stated (most single "$150K – $190K"-style ranges are implicitly annual but that is never asserted here). | |||
| data.compensation_currency | string | No | Currency code of the pay range, for example `USD`. | |||
| data.compensation_max | number | No | Upper end of the pay range stated in the posting. | |||
| data.compensation_min | number | No | Lower end of the pay range stated in the posting. | |||
| data.compensation_period | string | No | Pay period the posting states: `hourly`, `daily`, `weekly`, `monthly` or `yearly`. Omitted when the posting names none. | |||
| data.department | string | No | Department the job belongs to. | |||
| data.description_html | string | No | Job description as HTML. | |||
| data.description_text | string | No | Job description as plain text. | |||
| data.education_level_required | array | No | Education levels mentioned in the job title or description. | |||
| data.employment_type | string | No | Employment type the provider lists, such as full-time or contract. | |||
| data.id | string | No | Posting id within the provider. Use it with the provider's job endpoint. | |||
| data.location | string | No | Primary job location as the provider shows it. | |||
| data.location_city | string | No | LocationCity/State/Country are the structured components behind Location when the provider exposes them (or once the geo-enrich worker has resolved them from the free-text Location string) -- present only for the primary/first location, matching Location itself. | |||
| data.location_country | string | No | Country of the primary location. | |||
| data.location_state | string | No | State or region of the primary location. | |||
| data.locations | array | No | All locations listed for the job. | |||
| data.posted_age_text | string | No | Workday relative age ("Posted Today") | |||
| data.posted_at | string | No | RFC3339 / date when the provider gives one | |||
| data.provider | string | No | Applicant tracking system the posting comes from, for example `greenhouse` or `lever`. | |||
| data.remote | boolean | No | True when the posting is marked as remote. | |||
| data.req_id | string | No | Requisition id the company uses for the job. | |||
| data.security_clearance_required | array | No | Security clearances mentioned in the job title or description. | |||
| data.skills_mentioned | array | No | Skills lists canonical ESCO skill labels mentioned in the job title or description. | |||
| data.team | string | No | Team the job belongs to. | |||
| data.title | string | No | Job title as the company posted it. | |||
| data.url | string | No | Link to the job posting page. | |||
| data.workplace_type | string | No | Workplace arrangement the provider lists, such as remote, hybrid or on-site. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/jobs/greenhouse/job?token=stripe&id=8172508" \
-H "x-api-key: $CRAWLORA_API_KEY"