company_scrape_careers_page — Orange Slice capability
Outcome-priced capability. One price for the answer, whichever providers it took. Everything we expose, with prices: https://orangeslice.ai/llms.txt
Reads the open roles off an ATS board (Greenhouse, Lever, Ashby, Workday and eight more) and emits one job per line. Free, and no browser — it uses each provider's own API where there is one. A board outside the supported set returns no jobs with a status explaining why.
Price
free
Billed on every call, including one that returns nothing.
The price is a property of the outcome, not of the work behind it. Whichever vendor serves this call, and whatever it costs us, the number above is the number quoted before the run and charged after it.
Measured reliability
- Hit rate: 84% of runs resolve an answer.
- Sample: 203 runs, measured 2026-09-01.
Use these to choose between entries that both fit. Do not use them to rule one out — a low hit rate is a fact about the world's data, not about whether the call is worth making, and under this pricing a miss is free.
Call it
CLI
orangeslice search company_scrape_careers_page \ --careers-page-url https://job-boards.greenhouse.io/anthropic # the whole pipeline, from a column of company websites: cat companies.ndjson | orangeslice enrich company_find_careers_page \ | orangeslice search company_scrape_careers_page \ | orangeslice sheets push "Open roles"
HTTP
curl -X POST 'https://orangeslice.ai/api/v1/run' \ -H 'Authorization: Bearer $ORANGESLICE_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"capability":"company_scrape_careers_page","input":{"careersPageUrl":"<string>","url":"<string>"}}'
SDK
await services.company.scrapeCareersPage({ careersPageUrl: "…", url: "…" });
Inputs
| Field | Type | Required | Description |
|---|---|---|---|
careersPageUrl | string | No | ATS board URL, or an ATS job URL that normalizes back to one, e.g. 'https://job-boards.greenhouse.io/anthropic' |
url | string | No | Alias for careersPageUrl. Provide careersPageUrl or url, not neither |
Inputs may also be piped as NDJSON, one JSON object per line.
Output
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "jobs": { "default": [], "type": "array", "items": { "type": "object", "properties": { "title": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "applyUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "locations": { "default": [], "type": "array", "items": { "type": "string" } }, "department": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "team": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "employmentType": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "workplaceType": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "postedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "company": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "atsProvider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "requisitionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "title", "url", "applyUrl", "location", "locations", "department", "team", "employmentType", "workplaceType", "postedAt", "company", "atsProvider", "requisitionId", "id" ], "additionalProperties": false } }, "company": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "atsProvider": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "careersPageUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "anyOf": [ { "type": "string", "enum": [ "success", "unsupported_url", "unsupported_provider" ] }, { "type": "null" } ] }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalJobs": { "type": "number" } }, "required": [ "jobs", "company", "atsProvider", "careersPageUrl", "status", "message", "totalJobs" ], "additionalProperties": false }
The field that carries the answer is jobs. It is
null — or empty — when nothing was found, which is how a miss is told from a
hit without knowing anything else about this entry.
Before you run
- Price it first.
orangeslice search company_scrape_careers_page --dry-runreturns the exact dollar cost and spends nothing. - Large runs need approval. Above the spend-gate threshold a run exits 7 until it carries a plan token, and only a dry run mints one.
- Scopes: enrich
- Permitted uses: research, export
Exit codes
0 ok · 2 bad input · 3 auth · 4 not found · 5 provider ·
6 rate limited · 7 spend gate, nothing billed · 8 timeout ·
9 a third-party account needs connecting