Job Feed Scraper: Greenhouse, Lever & Ashby avatar

Job Feed Scraper: Greenhouse, Lever & Ashby

Pricing

from $2.00 / 1,000 jobs

Go to Apify Store
Job Feed Scraper: Greenhouse, Lever & Ashby

Job Feed Scraper: Greenhouse, Lever & Ashby

Scrape live job listings from any company's careers page: Greenhouse, Lever, Ashby, SmartRecruiters, Workable. Give it a list of companies and get clean normalized JSON: title, location, department, apply URL. Proxyless, on-demand, one record per job. From $2/1,000 jobs.

Pricing

from $2.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Cartpie

Cartpie

Maintained by Community

Actor stats

1

Bookmarked

6

Total users

0

Monthly active users

13 hours ago

Last modified

Features

Limited permissions

Share

ATS Job Feed Scraper — live jobs from any company's career page

Pull live job listings straight from company career pages — the ones powered by Greenhouse, Lever, Ashby, and SmartRecruiters. Give it a company (Stripe, Airbnb, Spotify, Ramp…) and get back every open role as one clean, structured record: title, department, location, remote/hybrid/onsite, salary when the company publishes it, employment type, full description, and a direct apply URL.

No login. No proxies. No fragile HTML scraping — this reads each company's official ATS feed, so the data is complete and stays fresh.

Benchmark — 8 companies: ✅ 1,186 jobs in one run · 🧩 100% field completeness (title, URL, location, description, published date) · ⚡ ~0.2–1 s per board · 🧼 clean plain-text + original HTML descriptions

Perfect for job boards & aggregators, recruiting & sourcing tools, talent-market research, competitive hiring intelligence, and "who's hiring" newsletters.


✨ Why this scraper

  • Straight from the source. Reads each company's official ATS API (Greenhouse, Lever, Ashby, SmartRecruiters) — not a rendered page. Complete listings, no missed jobs.
  • One unified record shape across every ATS. You don't care whether a company uses Greenhouse or Lever — the output columns are identical.
  • Auto-detect. Pass a bare company slug and it checks all four ATSs, keeping every board that returns jobs. Companies moving between ATSs can have two live boards at once: bare tavily returned 18 Ashby and 13 Greenhouse jobs, and you get both.
  • Paste the careers URL. https://jobs.lever.co/spotify/… or boards.greenhouse.io/stripe works as input, and so do Lever and Greenhouse EU boards.
  • Salary columns. salaryMin, salaryMax, salaryCurrency and salaryInterval as separate fields, plus the company's own pay line in salaryText. Every LiveKit job on Ashby carries one, like the $135K–$300K a year in the example below.
  • Remote vs hybrid vs onsite. workplaceType comes from the ATS's own field where one exists. We don't trust Ashby's remote flag on its own because it's also set on hybrid roles: 64 of Mistral's 77 "remote" jobs were hybrid when we checked.
  • Clean descriptions. Both the original descriptionHtml and a tidy plain-text descriptionText — ready for search indexing, embeddings, or display.
  • Fast & proxyless. Public JSON endpoints, fetched in parallel. No proxy cost, no captcha, no rate-limit pain.
  • Fair billing. You're billed per job returned. Boards that don't exist or return nothing are never billed — guaranteed in code.

📥 Input

FieldTypeDescription
companiesstring[]One entry per board: provider:slug (e.g. greenhouse:stripe, lever:spotify, ashby:ramp, smartrecruiters:Ubisoft2), a board URL (e.g. https://jobs.lever.co/spotify), or a bare slug (e.g. ramp) to auto-detect.
autoDetectbooleanFor bare slugs, try every ATS and keep every board that returns jobs (default true).
searchQuerystringKeep only jobs whose title contains this text (case-insensitive).
locationstringKeep only jobs whose location contains this text.
remoteOnlybooleanKeep only jobs whose workplace type is remote. Hybrid and onsite are excluded.
workplaceTypesstring[]Keep only these workplace types: any of remote, hybrid, onsite, unknown. Empty = all.
departmentstringKeep only jobs whose department contains this text.
maxItemsintegerStop after N jobs across all boards. 0 = unlimited.
concurrencyintegerBoards fetched in parallel, 1–10 (default 5).

Where do I find a company's slug?

It's the company token in its careers URL:

ATSBoard URLSlug
Greenhouseboards.greenhouse.io/stripestripe
Leverjobs.lever.co/spotifyspotify
Ashbyjobs.ashbyhq.com/rampramp
SmartRecruitersjobs.smartrecruiters.com/Ubisoft2Ubisoft2

You can also paste the URL itself. Anything after the slug (job IDs, ?gh_src=…) is ignored. Lever's EU boards (jobs.eu.lever.co/xtb) are found automatically when the US host says "not found", or you can write lever-eu:xtb to go straight there. Greenhouse EU boards (job-boards.eu.greenhouse.io/…) need nothing special.

Example input

{
"companies": ["greenhouse:airbnb", "lever:spotify", "ashby:ramp", "gitlab"],
"searchQuery": "engineer",
"remoteOnly": true,
"maxItems": 500
}

📤 Output

One record per live job:

{
"source": "ashby",
"companyToken": "livekit",
"jobId": "1757f49e-7e19-4c45-85f7-e4637dff66fb",
"title": "Software Engineer, Agents",
"company": "livekit",
"department": "R&D",
"team": "Engineering",
"location": "North America",
"locations": ["North America", "APJ", "EMEA"],
"workplaceType": "remote",
"remote": true,
"employmentType": "FullTime",
"salaryMin": 135000,
"salaryMax": 300000,
"salaryCurrency": "USD",
"salaryInterval": "year",
"salaryText": "$135K – $300K • Offers Equity",
"url": "https://jobs.ashbyhq.com/livekit/1757f49e-7e19-4c45-85f7-e4637dff66fb",
"applyUrl": "https://jobs.ashbyhq.com/livekit/1757f49e-7e19-4c45-85f7-e4637dff66fb/application",
"descriptionHtml": "<h2><strong>About LiveKit</strong></h2>...",
"descriptionText": "ABOUT LIVEKIT\n\nLiveKit is building the infrastructure layer for the agentic era...",
"publishedAt": "2026-08-11T00:18:10.574+00:00",
"updatedAt": null,
"scrapedAt": "2026-10-16T12:29:36.984Z"
}

A few fields worth knowing:

  • company is the employer name when the ATS gives one (Greenhouse, SmartRecruiters). Lever and Ashby feeds don't include it, so you get the board slug instead.
  • workplaceType is remote, hybrid, onsite, or null when the ATS doesn't say. remote is true only for workplaceType: "remote".
  • Salary fields are null unless the company publishes pay. salaryMin/salaryMax are in major units (135000, not cents) and salaryInterval is year, month, week, day or hour.

Export as JSON, CSV, Excel, or pull via the Apify API. Schedule runs to keep a live mirror of any set of companies' openings.

❓ FAQ

Which ATS platforms are supported? Greenhouse, Lever, Ashby, and SmartRecruiters — four of the most widely used applicant-tracking systems. Thousands of companies publish through them.

How do I scrape many companies at once? Add each to companies. They're fetched in parallel (see concurrency).

A company isn't returning jobs — why? Either the slug is wrong (check the board URL), or the company uses an ATS this actor doesn't cover yet. With autoDetect on, a bare slug is tried against every supported ATS automatically. SmartRecruiters answers any unknown slug with an empty board instead of an error, so explicit boards that come back with 0 jobs are listed in the RESULT_SUMMARY record. Usually that's a typo.

Do I need proxies? No. These are public JSON feeds. It runs proxyless — nothing to configure, no proxy cost.

Are descriptions included? Yes for Greenhouse, Lever, and Ashby (both HTML and plain text). SmartRecruiters' list feed returns metadata without the body.

Are salaries included? Yes, when the company publishes them. Ashby and Lever put pay in the job feed, and Greenhouse does for companies that use its pay-transparency ranges (102 of GitLab's 221 jobs had one when we checked). SmartRecruiters' feed has no pay, so those fields stay null. One gap: Greenhouse range titles like "United States Salary Range" don't say per year or per hour, so salaryInterval is often null there even when the numbers are present. Pay a company hides on Ashby is never returned.

Is this legal? It reads publicly published job listings from companies' own career feeds — no login, no personal data. Review your own use case and local rules as usual.

🔧 Integrations

Works with everything on Apify: Google Sheets, Zapier, Make, n8n, Airbyte, webhooks, or the Apify API. Schedule daily runs to keep your job database in sync.

🔗 More scrapers

Same proxyless, clean-JSON approach, other data sources:

🏷️ Keywords

ats scraper, greenhouse jobs api, lever jobs scraper, ashby jobs, smartrecruiters scraper, job listings api, careers page scraper, hiring data, job board aggregator, recruiting data, jobs feed, company jobs scraper, salary data, remote jobs scraper, hybrid jobs