Jobs API endpoint
Aggregates a company's ATS board into a hiring snapshot: total open roles, breakdowns by department/location/title, remote share, and how many roles are new in the last 7/30 days — a leading indicator of company growth. Supply provider plus that provider's slug params (token / company / org / tenant+datacenter+site / domain). Breakdowns are computed over the fetched postings.
/jobs/hiring-signalsAggregates a company's ATS board into a hiring snapshot — a leading indicator of company growth that public filings lag. Supply provider plus that provider's slug params. Breakdowns are computed over the fetched postings; total_open_roles uses the provider's authoritative total when available.
Query parameters:
provider (required) — one of greenhouse, lever, ashby, workday, smartrecruiters, workable, recruitee, rippling, personio, teamtailor, oracle, ukg, icims, eightfold, gem, pinpoint.token — required when provider=greenhouse.company — required when provider=lever, provider=smartrecruiters, provider=workable, provider=recruitee, provider=rippling, provider=personio, provider=teamtailor, provider=gem, or provider=pinpoint.org — required when provider=ashby.tenant, datacenter, site — required when provider=workday.host, site — required when provider=oracle (host is an *.oraclecloud.com hostname; site looks like CX_1).tenant, board — required when provider=ukg (board is the job-board UUID).domain — required when provider=icims (the tenant's careers domain, e.g. careers.costco.com).tenant, domain — required when provider=eightfold (tenant is the {tenant}.eightfold.ai subdomain; domain is the hiring organization's own domain).Returns total_open_roles, sampled_roles, by_department[], by_location[], top_titles[] (each {name, count}), remote_count, remote_pct, new_last_7d, new_last_30d, as_of, and source_url. remote_* and freshness counts depend on fields the provider exposes.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| name | 20 | “Account Executives (EMEA)” and 19 other values |
| count | 20 | 8 to 28, median 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| provider | string | Yes | ATS provider Allowed values: greenhouse, lever, ashby, workday, smartrecruiters, workable, recruitee, rippling, personio, teamtailor, oracle, ukg, icims, eightfold, gem, pinpoint. | greenhouse | |
| token | string | No | greenhouse board token | ||
| company | string | No | lever / smartrecruiters / workable / recruitee / rippling / personio / teamtailor / gem / pinpoint company slug | ||
| org | string | No | ashby org slug | ||
| tenant | string | No | workday / eightfold tenant | ||
| datacenter | string | No | workday datacenter shard | ||
| site | string | No | workday / oracle career site | ||
| host | string | No | oracle cloud host (*.oraclecloud.com) | ||
| board | string | No | ukg job-board UUID | ||
| domain | string | No | icims careers domain / eightfold organization domain | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/jobs/hiring-signals?provider=greenhouse" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"provider": "greenhouse",
"company": "stripe",
"total_open_roles": 511,
"sampled_roles": 511,
"by_department": [
{
"name": "Solutions Architecture",
"count": 19
}
],
"by_location": [
{
"name": "Dublin",
"count": 35
}
],
"top_titles": [
{
"name": "Software Engineer",
"count": 4
}
],
"remote_count": 0,
"remote_pct": 0,
"new_last_7d": 40,
"new_last_30d": 138,
"as_of": "2026-07-11T00:00:00Z",
"source_url": "https://boards-api.greenhouse.io/v1/boards/stripe/departments"
}
}Request schema
No body schema
Response schema
#/definitions/jobs.signalsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | jobs.HiringSignals | No | ||||
| data.as_of | string | No | Time the snapshot was taken, in UTC (RFC 3339). | |||
| data.by_department | array | No | Open roles per department, largest first, up to 20 entries. | |||
| data.by_department[].count | integer | No | Number of open roles with that name. | |||
| data.by_department[].name | string | No | Department, location or job title being counted. | |||
| data.by_location | array | No | Open roles per location, largest first, up to 20 entries. | |||
| data.by_location[].count | integer | No | Number of open roles with that name. | |||
| data.by_location[].name | string | No | Department, location or job title being counted. | |||
| data.company | string | No | Company or board identifier that was queried. | |||
| data.new_last_30d | integer | No | Number of sampled roles posted in the last 30 days. Counts only postings with a usable posting date. | |||
| data.new_last_7d | integer | No | Number of sampled roles posted in the last 7 days. Counts only postings with a usable posting date. | |||
| data.provider | string | No | Applicant tracking system the board was read from, for example `greenhouse`. | |||
| data.remote_count | integer | No | Number of sampled roles marked as remote. | |||
| data.remote_pct | number | No | Share of sampled roles marked as remote, as a percentage rounded to one decimal. | |||
| data.sampled_roles | integer | No | Number of postings the breakdowns below were computed from. | |||
| data.source_url | string | No | URL the data was read from. | |||
| data.top_titles | array | No | Most common job titles with their counts, up to 10 entries. | |||
| data.top_titles[].count | integer | No | Number of open roles with that name. | |||
| data.top_titles[].name | string | No | Department, location or job title being counted. | |||
| data.total_open_roles | integer | No | Number of open roles on the board. Uses the provider's own total when it gives one. | |||
| 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/hiring-signals?provider=greenhouse" \
-H "x-api-key: $CRAWLORA_API_KEY"