DEV Community

Devil Scrapes
Devil Scrapes

Posted on

Breezy HR Jobs Scraper: Pull Every Posting From Any Breezy HR Career Board

Breezy HR shows up more than you'd expect

Breezy HR is a lighter-weight ATS that a lot of SMB and mid-market employers reach for — I've seen it running healthcare networks with 600+ open reqs and three-person equipment dealers with a single listing, on the exact same {company}.breezy.hr URL pattern. Every one of those boards is served from one JSON endpoint (https://{company}.breezy.hr/json), no pagination, the whole board in one response.

That simplicity on Breezy's end doesn't mean scraping it at scale is simple on yours — which is why I built a dedicated Breezy HR jobs scraper under Devil Scrapes, tested end to end against boards ranging from a handful of postings to several hundred, so the same code path holds regardless of company size.

What the data looks like

A real row from the dataset:

{
  "posting_id": "5a3b663b95ce",
  "company_slug": "rhynocare",
  "company_name": "RhynoCare",
  "title": "Cook",
  "apply_url": "https://rhynocare.breezy.hr/p/5a3b663b95ce-cook",
  "published_date": "2026-07-25T00:00:00.673Z",
  "job_type": "Full-Time",
  "department": null,
  "salary": "$25 – $27 / hour",
  "location_city": "St. Catharines",
  "location_state": "ON",
  "location_country": "CA",
  "is_remote": false,
  "scraped_at": "2026-07-26T15:00:00Z"
}
Enter fullscreen mode Exit fullscreen mode

salary is deliberately kept as freeform text exactly as published ("$25 – $27 / hour") rather than force-parsed into numeric fields — Breezy employers write pay ranges in enough different formats that guessing at parsing would introduce more noise than it removes.

The naive approach and why it's trickier than it looks

Breezy's /json endpoint is genuinely convenient on paper — no auth, whole board in one call. The gotcha that trips up a quick script is what happens when a company slug is wrong or unused: Breezy doesn't return a clean 404. It redirects to its own marketing site instead, which means a naive scraper will either choke trying to parse marketing-site HTML as job data, or — worse — silently report zero postings for a company that's actually fine, because it never noticed the redirect at all.

Add to that the usual scale problems — a client that doesn't look like a browser at the TLS layer, no backoff when a board briefly rate-limits, one bad slug taking down an entire multi-company batch — and "quick script" turns into an afternoon of edge-case chasing pretty fast.

There's also a proxy wrinkle worth being honest about: Breezy's feed didn't show any blocking in our own testing from a typical residential-style exit IP, but a run through a plain datacenter IP got a flat 403 in our own cloud validation. We ship this Actor defaulting to a residential proxy through Apify Proxy for exactly that reason — we'd rather absorb that cost up front than have your run intermittently fail depending on which exit IP you happened to draw that day.

The Actor

Breezy HR Jobs Scraper detects that marketing-site redirect precisely and skips the company instead of choking on it, rotates Chrome/Firefox/Safari TLS fingerprints via curl-cffi on every request, retries transient 429/5xx responses with backoff up to 5 attempts, and routes every request through a rotating residential proxy session — the same infrastructure we lean on harder the day this target tightens up further.

from apify_client import ApifyClient

client = ApifyClient("APIFY_TOKEN")
run = client.actor("DevilScrapes/breezy-hr-jobs-scraper").call(run_input={
    "companySlugs": ["rhynocare", "barloworldequipment"],
    "maxResultsPerCompany": 200,
    "proxyConfiguration": {"useApifyProxy": True},
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["salary"], item["location_city"])
Enter fullscreen mode Exit fullscreen mode

Or paste the same JSON straight into the Apify Console input form for a one-off pull.

What you'd actually use this for

  • Recruiting & talent intelligence — track what a Breezy-hosted employer is hiring for, where, and at what pay band, when published.
  • Hiring-intent signals for BD/SDR teams — a sudden spike in open reqs at a target account is a decent lead qualifier.
  • Job-board aggregation — Breezy coverage slots next to our SmartRecruiters, Workday, Workable, and Teamtailor scrapers in one pipeline.
  • Labor-market research — sample hiring demand by industry or region using structured, machine-readable data.
  • HR-tech pipelines — wire rows straight into a CRM, dashboard, or n8n/Make workflow on a schedule.

Pricing, honestly

$0.005 per run flat, plus $0.0015 per posting written. A 1,000-posting pull costs $1.51 total. A company with an invalid slug or zero open reqs is never billed for rows it didn't produce. Apify's $5 free credit for new accounts covers roughly 3,300 postings before you'd spend anything yourself.

Why this is more interesting than it looks

The redirect-based bad-slug detection is the single most important piece of engineering in this Actor, and it's invisible if you've never hit it: get it wrong and you either crash on marketing-site HTML or — worse — report a false "zero postings" for a company that's actually fine. Getting that distinction right, plus routing consistently through a residential exit IP so a future tightening on Breezy's side doesn't turn into an intermittently-broken run, is where the real reliability work went.

Honest limitations

This covers public postings only, not authenticated internal views. Breezy's list endpoint doesn't publish the full job-description body — only the apply_url, which links to the full text on the HTML page that this Actor never fetches. You supply company slugs, not display names, since a brand like "RhynoCare" may not match its actual subdomain. And it's a point-in-time snapshot — schedule recurring runs to track how a board changes.

Try it

Breezy HR Jobs Scraper is live on the Apify Store at $1.50 per 1,000 results, with Apify's standard $5 free trial credit and no card required to start. It's part of a growing ATS-coverage fleet under Devil Scrapes — BambooHR, Recruitee, Ashby, and Personio are all covered too.

Have you hit a Breezy board that behaves differently from what's described here? Tell me in the comments — that's how the redirect-detection logic in this Actor got as solid as it is.

Top comments (0)