Career Site Job Scraper - Greenhouse, Lever, Ashby + 6 More ATS avatar

Career Site Job Scraper - Greenhouse, Lever, Ashby + 6 More ATS

Pricing

from $4.00 / 1,000 job scrapeds

Go to Apify Store
Career Site Job Scraper - Greenhouse, Lever, Ashby + 6 More ATS

Career Site Job Scraper - Greenhouse, Lever, Ashby + 6 More ATS

Scrape job listings straight from company career pages across 9 applicant tracking systems.

Pricing

from $4.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Boztek LTD

Boztek LTD

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Career Site Job Scraper — Greenhouse, Lever, Ashby + 6 More ATS

Scrape job listings straight from company career pages across nine applicant tracking systems. Give it a domain and it works out which ATS the company uses on its own. Every job comes back in one normalized schema, no matter which platform it came from.

Jobs appear on a company's own career page before they are syndicated to LinkedIn or Indeed — and unlike those sites, every source here is a public API that needs no proxies, no cookies and no login.

Supported ATS platforms

ATSBoard token exampleDescriptionSalaryEmployment typePosted date
Greenhousegreenhouse:vercel✅ included
Leverlever:leverdemo✅ included✅ when set
Ashbyashby:ramp✅ included✅ structured
Workableworkable:blueground✅ included
SmartRecruiterssmartrecruiters:Visa➕ extra request
Recruiteerecruitee:hygraph✅ included✅ structured
Personiopersonio:personio✅ included
Breezy HRbreezy:breezy❌ not public✅ free text
Ripplingrippling:rippling➕ extra request➕ extra request➕ extra request

✅ comes with the listing · ➕ needs one extra request per job (charged separately, and only when you ask for descriptions) · — the platform does not expose it · ❌ not available at all

How you name a company

Put any of these in the companies list — you can mix them freely:

FormExampleCost
Domainstripe.comATS detection charged once
Career page URLhttps://ramp.com/careersATS detection charged once
Job board URLhttps://jobs.ashbyhq.com/rampfree — read directly from the URL
Explicit ats:tokengreenhouse:vercelfree — no detection needed

ATS detection fetches the company's career page and looks for a job board link. It is the convenient path; ats:token is the cheap one.

What does it cost?

Pay-per-event. You are charged for jobs that survive your filters, so narrowing by keyword or location genuinely lowers the bill.

EventPriceWhen
Job scraped$0.004Per job in the dataset
ATS detected$0.01Per company resolved from a bare domain
Description fetched$0.001Only for SmartRecruiters and Rippling, only with descriptions on
Actor start$0.00005Once per run
ScenarioCost
One company, 100 jobs, explicit ats:token~$0.40
50 companies by domain, 2,000 jobs~$8.50
Daily watch on 20 companies, ~30 new jobs/day~$0.12/day

Filters and the incremental mode are the levers: a daily run with onlyNewJobs costs a fraction of a full re-scrape.

Only the new jobs

Turn on onlyNewJobs and the Actor remembers every job ID it has already returned, in a named key-value store. Later runs emit only postings it has never seen.

That turns this into a job alert feed: schedule it hourly, point a webhook at the dataset, and you get new roles within the hour — usually before they reach the big job boards. Use different stateStoreName values to keep separate schedules independent.

Output

One flat item per job — it exports cleanly to CSV and Excel:

{
"jobId": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"ats": "ashby",
"atsBoardToken": "ramp",
"companyName": "Ramp",
"companyDomain": "ramp.com",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"employmentType": "Full-time",
"seniority": "Senior",
"locationRaw": "New York, NY (HQ)",
"city": "New York",
"region": "NY",
"country": null,
"isRemote": true,
"workplaceType": "Hybrid",
"locations": ["New York, NY (HQ)", "San Francisco, CA", "Remote (US)"],
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedAt": "2026-04-07T17:12:35.753Z",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-.../application",
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-...",
"description": "# About Ramp\n\nRamp is building the smart infrastructure...",
"descriptionFormat": "markdown",
"scrapedAt": "2026-08-11T19:36:05.412Z",
"sourceUrl": "https://api.ashbyhq.com/posting-api/job-board/ramp?includeCompensation=true"
}

Fields the Actor derives for you

  • seniority — read from the title (Intern, Junior, Mid, Senior, Staff, Principal, Lead, Director, VP, C-level). Most specific wins, so Senior Staff Engineer resolves to Staff.
  • employmentType — one shared vocabulary. Ashby's FullTime, Recruitee's fulltime_permanent, Rippling's SALARIED_FT and SmartRecruiters' Regular full time salary all become Full-time.
  • isRemote — the ATS flag when there is one, otherwise inferred from the location wording.
  • salaryPeriod — canonical hour / day / week / month / year, so Ashby's 1 YEAR and Recruitee's month line up.
  • city / region / country — split out of the free-text location.
  • description — Markdown by default (best for LLM pipelines), or plain text or the original HTML.

Input options

OptionTypeDefaultDescription
companiesarrayrequiredDomains, career page URLs, job board URLs or ats:token entries
keywordsarray[]Keep jobs whose title contains any of these
excludeKeywordsarray[]Drop jobs whose title contains any of these
locationsarray[]Keep jobs matching any of these locations
departmentsarray[]Keep jobs in these departments or teams
remoteOnlybooleanfalseRemote jobs only
postedWithinDaysinteger0Keep jobs published in the last N days (0 = off)
onlyNewJobsbooleanfalseEmit only jobs not seen in previous runs
includeDescriptionbooleantrueInclude the full job description
descriptionFormatstringmarkdownmarkdown / text / html
maxJobsPerCompanyinteger0Cap per company (0 = no limit)
maxTotalJobsinteger0Cap across all companies (0 = no limit)
stateStoreNamestringcareer-site-job-scraper-stateKey-value store backing onlyNewJobs
maxConcurrencyinteger8Parallel requests against the ATS APIs
proxyConfigurationobjectoffOptional — not needed for any supported ATS

Use cases

  1. Job alert products — schedule with onlyNewJobs and push new roles to Slack, email or a webhook within the hour.
  2. Recruiting and sourcing — track which teams a list of competitors is hiring for, and where.
  3. Sales and VC signals — hiring is a growth signal. Watch a portfolio or an ICP list and see who is scaling which function.
  4. Job boards and aggregators — build a niche board on first-party data instead of re-scraping LinkedIn.
  5. Feeding AI agents — Markdown descriptions drop straight into RAG pipelines and LLM matching.

Why not just scrape LinkedIn or Indeed?

LinkedIn / Indeed scrapersCareer Site Job Scraper
Data sourceAggregator, re-postedEmployer's own board
FreshnessAfter syndicationAt publication
BlockingResidential proxies, cookiesNone — public APIs
ReliabilityBreaks on layout changesVersioned JSON APIs
DescriptionOften truncatedFull text
SalaryRarely presentStructured where published

Limitations

  • Breezy HR descriptions are not available. Its public feed carries metadata only, and the posting page is a JavaScript app with no JSON or JSON-LD to read. Everything else — title, location, department, employment type, salary, dates — is returned.
  • Greenhouse does not expose employment type through its job board API, so that field stays empty for Greenhouse boards.
  • Rippling's listing endpoint is sparse. Posting date and employment type only arrive with the description, so leaving includeDescription off means those fields stay empty for Rippling.
  • postedWithinDays keeps jobs whose date is unknown. SmartRecruiters and Rippling only reveal dates on the detail endpoint; dropping every undated job would be worse than including a few. Dates that arrive during enrichment are re-checked against the filter.
  • ATS detection needs a public link. If a career page renders its job board purely client-side with no ATS URL in the HTML, detection fails — pass an explicit ats:token entry instead.
  • Only public postings. Internal, draft and unlisted roles are excluded, as they are from the ATS APIs themselves.

Which companies can I scrape?

Any company on one of the nine supported platforms — collectively tens of thousands of employers, heavily weighted toward tech, startups and scale-ups. If you are not sure which ATS a company uses, just pass its domain and let the Actor find out.