Jobs
BambooHR Jobs Scraper
Scrape open job postings from any BambooHR-powered company career page via BambooHR's own keyless public JSON endpoints — titles, locations, departments, full descriptions. One scraper, every BambooHR employer.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
BambooHR is one of the most widely deployed SMB HR platforms, and every company running a public careers page on it shares the same JSON contract: a /careers/list endpoint that returns the current open-postings feed, and a /careers/{id}/detail endpoint that returns the full posting body. This Actor talks to both directly: point it at one or more BambooHR subdomains — bare (adobe) or a full https://adobe.bamboohr.com/careers URL — and it pulls every open job, optionally fetches each posting's full description, and normalizes everything into one row schema across every tenant you throw at it.
What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffirotates real Chrome / Firefox TLS and HTTP/2 handshakes across requests, so every call looks like a browser, never a bare Python client. - 🔁 Retries with exponential backoff on
408 / 429 / 5xx, up to 5 attempts,Retry-Afterhonoured — a company that hiccups mid-run doesn't take the whole job down with it. - 🌐 Proxy session rotation via Apify Proxy — a fresh session and exit IP whenever a request needs one, at no extra step for you.
- 🏢 Per-company failure isolation — an unclaimed subdomain or a company with zero current openings just returns zero rows; one bad entry in a batch never sinks the others.
- 📝 Optional full descriptions — flip
fetchFullDescriptionon for the complete HTML body plus status, country, and posting date; leave it off for a fast titles-and-locations pull. - 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable job IDs. Export JSON / CSV / Excel straight from the Apify Console.
- 💰 Pay only for results that land — a job that a company genuinely has zero of costs nothing beyond the flat per-run warm-up fee.
Use cases
- Recruiting & sourcing — build a pipeline against every employer running BambooHR, in one normalized schema.
- Hiring-intent signal for sales & BD — open reqs surface headcount growth, new-market entry, and tech-stack shifts before they hit the news.
- Job-board aggregation — add BambooHR coverage alongside Workday, SmartRecruiters, Greenhouse, Lever, Ashby, Workable, and Teamtailor in one pipeline.
- Labor-market & HR-tech research — sample hiring demand across an industry, region, or company size band.
- Competitive-intel tracking — watch a competitor's live openings to infer team growth and roadmap direction.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
companies | array | yes | Bare BambooHR subdomain, e.g. "adobe" (the employer identifier in https://{subdomain}.bamboohr.com/careers), or a full https://{subdomain}.bamboohr.com URL (with or without a trailing /careers path) — the subdomain is… |
maxJobsPerCompany | integer | no | Cap job postings emitted per companies entry, applied after parsing. |
fetchFullDescription | boolean | no | When enabled, fetches /careers/{id}/detail per job to populate job_status, location_country, date_posted, description_html, and description_text. When disabled, those five fields stay null and the detail call is never… |
{
"companies": [
"adobe",
"nycballet"
],
"maxJobsPerCompany": 10,
"fetchFullDescription": true,
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
companyjob_idjob_titlejob_urldepartmentemployment_typejob_statuslocation_citylocation_statelocation_countryis_remotedate_posteddescription_htmldescription_text
{
"company": "adobe",
"job_id": 15,
"job_title": "IT Security Engineer",
"job_url": "https://adobe.bamboohr.com/careers/15",
"department": "IT",
"employment_type": "Full-Time",
"job_status": "Open",
"location_city": "Mayfair",
"location_state": "London, City of",
"location_country": "United Kingdom",
"is_remote": null,
"date_posted": "2025-11-29",
"description_html": "<p><strong>About Us</strong></p>...",
"description_text": "About Us Our mission is simple...",
"scraped_at": "2026-07-26T12:00:00Z"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0015 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- Only
bamboohr.comsubdomains — a company that fronts its BambooHR careers page with a custom domain isn't resolvable; point this Actor at the underlying{subdomain}.bamboohr.comaddress instead. - No compensation field — BambooHR's public feed doesn't expose structured salary data on any company we've checked, so we don't invent it.
- Descriptions cost an extra fetch —
fetchFullDescriptionadds one detail request per posting (it changes runtime, not the per-result price). Leave it off for the fastest pull. - No discovery mode — you supply the subdomains; this Actor doesn't crawl a directory of BambooHR customers.
- Point-in-time snapshot — returns each company's board as it stands right now; schedule recurring runs to track changes over time.
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors