Breezy HR Jobs Scraper - Pay Ranges & Apply Links avatar

Breezy HR Jobs Scraper - Pay Ranges & Apply Links

Pricing

from $1.00 / 1,000 job results

Go to Apify Store
Breezy HR Jobs Scraper - Pay Ranges & Apply Links

Breezy HR Jobs Scraper - Pay Ranges & Apply Links

Scrape live job postings from any Breezy HR career site, or search 2,800 known Breezy employers in one run. Titles, locations, employment type, pay ranges and apply links.

Pricing

from $1.00 / 1,000 job results

Rating

0.0

(0)

Developer

Sulle H

Sulle H

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Categories

Share

Breezy HR Jobs Scraper — 2,800 Career Sites, Pay Ranges Included

Point it at a company and get every open role on its Breezy HR board. Or leave the company list empty and search a bundled registry of 2,800 live Breezy career sites (47,301 open postings at last count) in a single run.

{ "companies": ["https://10-4-truck-recruiting.breezy.hr"] }
{ "keywords": ["sales"], "remoteOnly": true, "maxJobs": 300 }

No login, no cookies, no proxies, no API key.

Why most tools cannot find Breezy boards

Every other applicant tracking system in this family puts the company in the pathapply.workable.com/acme, jobs.lever.co/acme. Breezy puts it in the subdomain: acme.breezy.hr. A crawler that harvests board URLs by reading path segments finds Breezy boards nowhere, which is why public lists of Breezy employers are so thin.

This registry was built by harvesting subdomains out of the Wayback Machine index and validating each one against the live API. Boards that answered with real postings went in; the rest did not.

There is a second trap worth knowing if you build your own: Breezy answers 403, not 404, for a subdomain with no board on it. Every other platform here uses 403 to mean "slow down", so a shared retry path treats a dead board as throttling and backs off for tens of seconds on every one. Getting that wrong turned a 36-minute validation pass into a projected 14 hours.

What you get

FieldDescription
providerAlways breezy — the same schema the multi-ATS Actors below emit
company / companySlugEmployer name and its Breezy subdomain
jobIdBreezy posting id — stable, so it works as a dedupe key across runs
titleJob title
locationDisplay location as Breezy renders it, e.g. Exeter, NH
departmentDepartment label
employmentTypeFull-time, part-time or contract
remoteBreezy's own remote flag
postedAtPublication date, ISO 8601
applyUrlDirect application link on the employer's board
salaryPay range as the employer wrote it — see below
scrapedAtWhen this row was read

Breezy publishes pay, and almost nobody else does

Of the seven applicant tracking systems covered by this family of Actors, Breezy is one of only two whose public listing endpoint carries a pay range — as a plain string, exactly as the employer typed it:

"$70,000 – $85,000 / year"
"$28 – $100 / hour"

It stays a string rather than parsed numbers, because employers disagree about period, currency and whether the figure includes equity, and turning that into a number would mean guessing. About half of Breezy postings carry one; the rest come back null because the employer left it blank.

For salary benchmarking or a job board that promises transparent pay, this is the cheapest real source in the set.

What Breezy does not publish

There is no description text on this endpoint. descriptionText is null on every row — the listing API returns title, location, department, type, salary and a link, and nothing more. Any tool claiming full Breezy descriptions from this endpoint is either fetching each posting page separately, at one request per job, or making it up.

If body text is the requirement, Greenhouse, Workable and Ashby do publish it — the Career Site Job Feed covers those in this same output schema.

Who hires on Breezy

Breezy is a small-and-mid-market product. The employers here are agencies, regional operators, startups and specialist firms rather than the Fortune 500 — the sort of roles that never reach a large aggregator because nobody is paying to syndicate them.

That is the point of scraping it directly: for a niche job board or a sourcing list, Breezy is coverage your competitors do not have.

Input

OptionWhat it does
keywordsKeep only titles containing one of these. Case-insensitive.
excludeKeywordsDrop titles containing any of these, e.g. senior, intern.
locationsKeep only locations containing one of these.
remoteOnlyKeep only postings Breezy flags remote.
postedWithinDaysFreshness filter, 90 days by default.
companiesSubdomains or board URLs. Leave empty to search all 2,800.
maxBoardsHow many boards to scan, largest-first.
maxJobsHard cap on rows, so a run costs what you expect.

Finding a company slug

The board lives at <slug>.breezy.hr, so the slug is the subdomain. Paste the whole URL if you prefer — the Actor pulls the subdomain out. Companies that embed Breezy into their own careers page still load it from that host, so it is in the page source.

Or run without companies and read the companySlug column.

Recipes

Cover the long tail. Large aggregators skew towards employers who pay to be listed. A Breezy sweep returns roles from smaller companies that are genuinely hiring and genuinely unindexed.

Benchmark pay across the long tail. Roughly half of Breezy postings carry a pay range, and these are employers no salary survey covers. One run gives you a table of role, location and range.

Watch one company. One slug, run on a schedule, diff jobId between runs. New ids are openings; missing ids are roles that closed.

Use it as an API

Most people who rely on this Actor never open the Apify console after the first run — they call it from their own code and read the rows straight back. One request in, job rows out, no polling and no dataset id to chase:

curl -X POST "https://api.apify.com/v2/acts/starbright_overlap~breezy-hr-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": ["sales"], "remoteOnly": true, "maxJobs": 200}'
import requests
rows = requests.post(
"https://api.apify.com/v2/acts/starbright_overlap~breezy-hr-jobs-scraper/run-sync-get-dataset-items",
params={"token": "YOUR_TOKEN"},
json={"keywords": ["sales"], "remoteOnly": True, "maxJobs": 200},
timeout=300,
).json()
for r in rows:
print(r["company"], "—", r["title"], "—", r["applyUrl"])
const rows = await (await fetch(
'https://api.apify.com/v2/acts/starbright_overlap~breezy-hr-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN',
{ method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({"keywords": ["sales"], "remoteOnly": true, "maxJobs": 200}) },
)).json();

Your token is at Settings → Integrations in the Apify console. Keep maxJobs set to what you actually need — it is the cap that decides what the call costs.

Running it on a schedule instead

If you want the rows to arrive without asking, add a Schedule from the Actor page (Actions → Schedule) and point a webhook at your endpoint. A daily schedule plus the postedWithinDays filter is the usual setup for a job board or an alerting pipeline.

Pricing

Pay per result — you are charged per job row delivered. A board that fails or returns nothing costs you nothing. Platform usage is included rather than billed on top, so the per-result price is the whole price.

Beyond Breezy

Companies move between applicant tracking systems, and most job-data projects need more than one:

  • Career Site Job Feed — the same engine across Workday, Greenhouse, SmartRecruiters, Workable, Lever, Ashby and Breezy: 27,000+ employer boards in one run, identical output schema.
  • New Job Alerts — the same coverage, but each run returns only what appeared since the previous run, so you are not diffing datasets yourself.

Rows from all of them share one schema, so you can union the datasets without a mapping layer.

Notes

  • A dead slug never aborts the run. Failures are collected into a FAILED_BOARDS record in the key-value store, with the reason for each.
  • companySlug:jobId is a stable key. It does not change while a posting is open, which makes it safe for detecting what opened and closed between runs.
  • No login, no proxies, no API key. Breezy publishes this endpoint openly. Private boards are invisible to every scraper, including this one.