VOOZH about

URL: https://apify.com/alwaysprimedev/multi-ats-jobs-scraper

โ‡ฑ Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby) ยท Apify


๐Ÿ‘ Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby) avatar

Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby)

Pricing

from $3.00 / 1,000 jobs

Go to Apify Store

Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby)

Scrape job postings from Greenhouse, Lever, and Ashby into one unified, structured dataset. No login. Salary, location, department, employment type โ€” normalized across all three ATS. Per-company change-detection between runs.

Pricing

from $3.00 / 1,000 jobs

Rating

0.0

(0)

Developer

๐Ÿ‘ Always Prime

Always Prime

Maintained by Community

Actor stats

0

Bookmarked

23

Total users

11

Monthly active users

a month ago

Last modified

Share

๐Ÿค– Multi-ATS Jobs Scraper โ€” Greenhouse ยท Lever ยท Ashby

๐Ÿ‘ Python
๐Ÿ‘ Apify
๐Ÿ‘ Output

One actor, three ATS, one unified schema. Scrape job postings from Greenhouse, Lever, and Ashby in a single run โ€” every record is the same shape, no matter which ATS hosted it. Salary, location, department, employment type โ€” all normalized.

โšก๏ธ Fast (no browser, pure HTTP) ยท ๐Ÿš€ Cheap (256 MB image) ยท ๐Ÿ“ฆ Three output formats ยท ๐Ÿ†• Built-in change-detection between runs.


๐ŸŽฏ Why this scraper

  • Unified schema across three ATS. Filter, dedupe, and join on the same fields whether the job came from Greenhouse, Lever, or Ashby. No more ATS-specific glue code.
  • Salary normalization. salary_min, salary_max, salary_currency, salary_period populated from the cleanest source each ATS exposes (JSON-LD on Ashby, regex-best-effort on Greenhouse and Lever).
  • Change-detection. Toggle onlyNewSinceLastRun and each subsequent run pushes only new jobs (is_new: true) and closed jobs (is_closed: true). Perfect for nightly diffs.
  • Incremental mode. Filter by since to skip jobs older than your last sync.
  • Stable IDs. Every record has a global ID {ats}:{company_slug}:{job_id} โ€” diff, join, and dedupe across runs without ambiguity.
  • Multi-company in one run. Drop a list of slugs per ATS and the actor fans out concurrently.

๐Ÿš€ Quick start

  1. Try for free โ€” click the green Try for free button on this page.
  2. Pick your companies โ€” paste each company's slug into Greenhouse / Lever / Ashby fields. (See FAQ for how to find a slug.)
  3. Start โ€” click Start and watch the live log.
  4. Download โ€” once the run finishes, grab the dataset as JSON, CSV, or Excel (or open it in the Apify Console).

โš™๏ธ Input fields

FieldTypeDefaultDescription
greenhouseCompanieslist of strings[]Greenhouse slugs (e.g. airbnb, stripe, discord). Find at boards.greenhouse.io/<slug>.
leverCompanieslist of strings[]Lever slugs (e.g. palantir, mixpanel, netflix). Find at jobs.lever.co/<slug>.
ashbyCompanieslist of strings[]Ashby slugs (e.g. ramp, linear, vercel). Find at jobs.ashbyhq.com/<slug>.
maxItemsinteger0 (unlimited)Stop after this many records across all companies. Useful for testing or daily caps.
includeDescriptionHtmlbooleantrueDrop full HTML descriptions to shrink dataset by ~70-90%.
includeDescriptionTextbooleantrueDrop plaintext descriptions.
sincedatetimeโ€”Skip jobs published/updated before this date. ISO format.
onlyNewSinceLastRunbooleanfalseDiff mode โ€” emit only new and closed jobs vs the previous run.
concurrencyinteger5In-flight HTTP requests cap. Hard cap 25.

๐Ÿ“ฆ Sample output

{
"id":"ashby:ramp:8c004352-f162-4d89-858f-75a649e77ec4",
"ats":"ashby",
"company_slug":"ramp",
"company_name":"Ramp",
"job_id":"8c004352-f162-4d89-858f-75a649e77ec4",
"title":"Account Executive | Commercial",
"url":"https://jobs.ashbyhq.com/ramp/8c004352-f162-4d89-858f-75a649e77ec4",
"apply_url":"https://jobs.ashbyhq.com/ramp/8c004352-f162-4d89-858f-75a649e77ec4",
"description_html":"<h1><strong>About Ramp</strong></h1>...",
"description_text":"About Ramp Ramp is building the smart infrastructure...",
"department":"Sales",
"teams":["Sales","Account Executive"],
"location":"New York, NY (HQ)",
"secondary_locations":["San Francisco, CA"],
"country":"US",
"workplace_type":"hybrid",
"employment_type":"full_time",
"salary_min":144000,
"salary_max":220000,
"salary_currency":"USD",
"salary_period":"year",
"salary_summary":"$144K โ€“ $220K โ€ข Offers Equity โ€ข Offers Commission โ€ข Multiple Ranges",
"published_at":"2025-10-09",
"updated_at":null,
"application_deadline":null,
"is_new":false,
"is_closed":false,
"scraped_at":"2026-05-10T18:00:00Z"
}

๐Ÿ’ผ Use cases

WhoWhat for
๐Ÿค– AI-recruiter SaaSFeed candidates fresh openings across the YC/SaaS company list with a single API.
๐ŸŽฏ Niche job boardsPower vertical job boards (DevOps, FinTech, Climate, etc.) with a curated company list โ€” one ETL, three ATS covered.
๐Ÿ” Executive search firmsTrack movement at competitor companies โ€” new VP-level roles, closed CFO searches โ€” via the diff mode.
๐Ÿ“Š Wage / market researchersBuild salary distributions over time. With onlyNewSinceLastRun, you get an append-only event log of postings and their compensation.
๐Ÿง  ML / NLP teamsTitle-to-skill, JD-to-skill, salary-prediction datasets. Same schema across three ATS = no normalization preprocessing.
๐Ÿ› ๏ธ HR-tech toolingEmbed real openings in your product without each customer having to integrate with three different ATS APIs.

๐Ÿ’ก Tips & tricks

  • Building a company list? Run with maxItems: 1 for each candidate slug to verify the slug is correct before committing to a full scrape.
  • Daily incremental runs: schedule the actor with onlyNewSinceLastRun: true. The first run takes a snapshot; subsequent runs emit only new and closed jobs. Combine with Apify's webhooks for real-time recruiting alerts.
  • Cheap diff scans: set includeDescriptionHtml: false and includeDescriptionText: false to drop ~80% of the bytes when you only care about which roles exist, not the full JD.
  • Cross-ATS dedupe: use the id field ({ats}:{slug}:{job_id}). Same role posted to two ATS โ†’ two records with different IDs, but same title+company_slug lets you cluster them.
  • Large companies: Greenhouse and Lever return all jobs in one request; even a 500-job catalog takes < 5 seconds. Ashby fetches one detail per job, so a 200-job Ashby company is the slowest path (~30-60 seconds).

โ“ FAQ

Q: How do I find a company's slug? A: Visit their public careers page. The URL will be one of:

  • boards.greenhouse.io/<slug> or <slug>.greenhouse.io โ†’ Greenhouse
  • jobs.lever.co/<slug> โ†’ Lever
  • jobs.ashbyhq.com/<slug> โ†’ Ashby

The <slug> part is what you put in the input field.

Q: Why are some salary fields null? A: Salary transparency varies by company and jurisdiction. Ashby exposes structured comp via JSON-LD when the company posts it. Greenhouse and Lever rely on free-text in the description, which we parse on a best-effort basis. When parsing isn't confident, we leave the structured fields null and put the original text in salary_summary.

Q: What does maxItems actually cap? A: Total records pushed to the dataset, across all ATS. If you ask for maxItems: 50 with three ATS configured, the run stops at 50 total โ€” first-come-first-served. For balanced sampling across ATS, run with maxItems: 0 (unlimited) and post-filter.

Q: How does change-detection work? A: With onlyNewSinceLastRun: true, the actor stores a snapshot of seen IDs in its key-value store (SEEN_JOBS). On the next run:

  • IDs not in the snapshot โ†’ pushed with is_new: true.
  • IDs in the snapshot but missing this run โ†’ pushed as stub records with is_closed: true.
  • IDs present in both โ†’ skipped entirely (already had them).

The first run is always a "full scan" because there's no prior snapshot.

Q: Can I scrape Workable too? A: Workable is on the v0.2 roadmap. Their public job-board API needs a different infrastructure setup than the other three ATS. Coming soon.

Q: What's the rate limit? A: We respect each ATS's published guidance โ€” Lever's Crawl-delay: 1 from robots.txt is honored automatically. Greenhouse and Ashby have no published limits. We default to 5 concurrent in-flight requests; you can lower it if you're scraping hundreds of companies.


๐Ÿ’ฐ Pricing

This actor is pay-per-result: you're charged once per successfully scraped job posting (job-scraped event). No charge for failed companies, deduplicated records, or is_closed stubs. Try-for-free credits cover ~3,000 jobs.


๐Ÿ”— Roadmap

  • v0.2 โ€” Workable support (residential infrastructure)
  • v0.2 โ€” auto-detect ATS from a careers URL (paste careers.acme.com, we figure out the rest)
  • v0.3 โ€” curated company registry as a separate actor (1,000+ pre-tagged companies grouped by industry)
  • v0.3 โ€” webhook-friendly diff mode (push only changes to a URL of your choice)

Built on the Apify platform.

You might also like

ATS Jobs Scraper โ€” Greenhouse, Lever & Ashby

mukeshrana90/ats-jobs-scraper

Pull open job postings straight from companies' public ATS boards (Greenhouse, Lever, Ashby). Full descriptions, skills, normalized salary, cross-run dedupe and webhook delivery. No browser, no proxy.

Google Jobs Scraper

automation-lab/google-jobs-scraper

Search Google Jobs and extract fast job-card listings by default, with optional full detail fetching for descriptions, apply URLs, and highlights via includeDetails.

๐Ÿ‘ User avatar

Stas Persiianenko

95

LinkedIn Company Posts Scraper [NO COOKIES] โœ…

unseenuser/Company-Posts

Scrape a LinkedIn company's all recent posts in one run. Get full post text, engagement, and posting cadence. No login, no cookies. Built for ABM, competitive intel, and content strategy teams.

20

5.0

Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby)

devilscrapes/multi-ats-jobs-scraper

Scrape job postings from Greenhouse, Lever, and Ashby in one run. Pass a list of company slugs and get a normalised dataset โ€” title, location, department, URL, and description โ€” across all three ATS platforms.

Hiring Intent Lead Scraper โ€” Job Posting Buying Signals

samstorm/hiring-intent-lead-scraper

Find companies actively hiring and get decision-maker emails. Scrapes job postings as B2B buying signals, then enriches with verified contact data.

42

Greenhouse, Lever & Ashby Job Scraper API | $1.50/1K

bovi/greenhouse-lever-ashby-job-scraper

Scrape job postings across 6 ATS โ€” Greenhouse, Lever, Ashby, Recruitee, SmartRecruiters & Personio โ€” into one unified schema. Descriptions, salary, seniority and remote-type included. Change-detection between runs, ATS auto-detect, curated company presets. No login, no browser, pure API.

๐Ÿ‘ User avatar

Vitalii Bondarev

44

Multi-ATS Jobs Scraper (Greenhouse, Lever, Ashby)

dami_studio/multi-ats-jobs-scraper

Scrape open job listings from the three big ATS job boards โ€” Greenhouse, Lever and Ashby โ€” straight from their public JSON APIs. No key, no login. Pass companies as "ats:token" (e.g. greenhouse:stripe) and get every posting normalized to one clean schema.

3

5.0

LinkedIn Recruiter Scraper ๐Ÿ”Ž Find Recruiters & Hiring Managers

apt_marble/linkedIn-recruiter-scraper

Find recruiters, hiring managers, and talent acquisition specialists from public LinkedIn profiles by keyword, industry, and location ๐Ÿš€ Extract recruiter names, companies, locations, hiring niches, and profile URLs with clean structured data- no LinkedIn login or cookies required.