BambooHR Jobs Scraper icon

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 rotationcurl-cffi rotates 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-After honoured — 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 fetchFullDescription on 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.

FieldTypeRequiredWhat 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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0015Per 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.com subdomains — a company that fronts its BambooHR careers page with a custom domain isn't resolvable; point this Actor at the underlying {subdomain}.bamboohr.com address 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 fetchfetchFullDescription adds 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

Teams that run this also run