Job Postings API: 1M+ Fresh Jobs (Greenhouse, Lever, Workday) avatar

Job Postings API: 1M+ Fresh Jobs (Greenhouse, Lever, Workday)

Pricing

from $1.00 / 1,000 job results

Go to Apify Store
Job Postings API: 1M+ Fresh Jobs (Greenhouse, Lever, Workday)

Job Postings API: 1M+ Fresh Jobs (Greenhouse, Lever, Workday)

Search 1.17M open jobs from 17,000+ company career sites on Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee, Personio & Rippling. Refreshed hourly (Workday daily). Jobs posted in the last hour, 24h or 7d, plus closed jobs. Results in seconds. A LinkedIn jobs alternative.

Pricing

from $1.00 / 1,000 job results

Rating

0.0

(0)

Developer

Clean Row Data

Clean Row Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Security

Limited permissions

Share

Job Postings API: 1,180,000+ fresh jobs from Greenhouse, Lever, Ashby, Workday & 5 more ATS

Search 1,180,000+ open jobs from 17,000+ companies' own career sites, refreshed hourly (Workday daily), and get results in seconds. This Actor is a jobs API on top of a ready-made index: we continuously collect job postings straight from the applicant tracking systems (ATS) that companies use for their careers pages: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee, Personio and Rippling. You ask for, say, "software engineer jobs in the US or remote, posted in the last 7 days" and get clean, deduplicated rows with the direct apply link. No scraping happens during your run, so a typical run finishes in 5-15 seconds and costs only for the jobs it returns.

Looking for a LinkedIn jobs or Indeed scraper alternative without logins, proxies, reposts or rate limits? This is it: every job comes from the employer's own ATS board.

Price: from $1.00 per 1,000 jobs: $2.50 on Apify's free plan, $2.00 / $1.50 / $1.00 on the Starter / Scale / Business plans, platform usage included. You pay only for rows returned; the prefilled run (50 jobs, about 5 seconds) costs at most $0.13. No subscription, no proxies, no login.

New (Oct 22, 2026), built from the most common requests on job-scraper Issues tabs:

  • Only new jobs since last run: turn on Only new jobs since last run for a scheduled search and each run returns (and charges for) only the jobs an earlier run of the same search didn't return. No more de-duplicating across runs yourself.
  • Seniority / experience level on every row (seniority: intern, entry, mid, senior, lead, staff_principal, manager, executive) and a Seniority filter.
  • Salary for many more jobs: when the ATS has no salary field (e.g. every Greenhouse and Workday job in the index), the pay range is read from the job description (US pay-transparency ranges like "$105,480—$198,144 USD"), and salary_source says where it came from. In a test search for US software engineer jobs on Greenhouse, 40 of 50 rows got a salary this way. Plus salary_annual_min / salary_annual_max (hourly and monthly pay annualized) and a Minimum annual salary (USD) filter.
  • Remote / hybrid / on-site for more jobs: workplace_type is now also filled from the job title, location and description when the ATS doesn't state it, and the Workplace type filter uses the title and location too.

Also new (Oct 22, 2026, second batch), all optional and off by default:

  • Visa sponsorship: every row gets visa_sponsorship (yes, no, or empty when the posting doesn't say), read from the job description, plus a Visa sponsorship filter (only jobs that say they sponsor, or drop jobs that say they don't).
  • Only jobs with salary now also counts pay ranges parsed from the job description, not just the ATS salary field.
  • Which search term matched: matched_title_terms and matched_location_terms echo the Job title / Location terms each row matched, so one run with many terms is easy to split.
  • Exclude staffing agencies: skip jobs posted by staffing and recruitment agencies; every row gets is_staffing_agency.
  • Company open-job count: company_open_jobs = how many open jobs that company currently has in the index (all its boards).

If this saved you time, a quick review on the Store helps a lot, and feature requests go in the Issues tab; we usually ship them within days.

Rows also include the full job description (description, plain text, up to 10,000 characters) straight from the company's ATS, at no extra cost. Turn Include description off if you only need the structured fields.

What you get (real rows from the prefilled run, Oct 21, 2026, times UTC)

CompanyTitleLocationATSPosted on the career siteIn this indexSalaryDescription (first words of the full text)
OpenAIPrincipal Software Engineer, Full Stack — CodexSan FranciscoAshby17:3217:37$441K - $515KAbout the Role We’re hiring a Principal Software Engineer to help…
CleraProduct Engineer (Software Engineer)San FranciscoAshby17:2317:38ABOUT THE ROLE Join a consumer fintech product engineering team…
CleraSenior Android Software EngineerSan FranciscoAshby17:1917:38ABOUT THE ROLE Join a product-focused team at a consumer fintech…
CleraFull-Stack Software Engineer, DesignSan FranciscoAshby17:0417:38ABOUT THE ROLE Join a growing team building AI infrastructure for…
RobloxSenior Software Engineer, Engine HarmonySan Mateo, CA, United StatesGreenhouse17:0117:37Every day, tens of millions of people come to Roblox to explore,…

Every row also has the full description (description, plain text), the department, team, all locations, country, remote flag, workplace and employment type, first_seen / last_seen, structured salary when published, and the direct job and apply links. More sample rows and the JSON format below.

Freshness: measured side by side

We ran the same search, software engineer jobs in the US posted in the past week, through a popular LinkedIn jobs scraper and a popular Indeed jobs scraper on Apify Store (100 results each), then looked up every result on the employer's own career page in our index.

Measured Oct 21, 2026Job Postings API (this Actor)LinkedIn jobs scraperIndeed jobs scraper
Where rows come fromEmployer's own ATS boardLinkedIn listingsIndeed listings
Old jobs shown as "new"0: re-posted old jobs are excluded by default (42 of 870 matches, 4.8%)24 of the 52 results we could match (46%) had been open on the employer's board for 14+ days2 of 15 matched (13%)
Same company + title repeated0 (deduplicated)24 of 100 rows0 of 100
Already closed on the employer's board0 (every row was live at the last hourly check)2 of 52 matched0 of 15
Time from posting to rowmedian 1.1 h (Greenhouse, Ashby, Lever; 75% within 2 h)depends on when you scrapedepends on when you scrape
Matching jobs, past 7 days828 (138 in the last 24 h, 11 in the last hour)100 (requested)100 (requested)

Why people use it

  • ⚡ Fast and fresh: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and Rippling are re-checked every hour; Workday once a day. Filter to jobs posted in the last hour, 24 hours, 7 days or 30 days.
  • 🏢 Straight from the source: 20,000+ verified company job boards. Every row links to the original job page and apply page.
  • 🧹 One clean schema for 9 ATS platforms: title, company, department, team, seniority, locations, country, remote flag, workplace type, employment type, posted date, first/last seen, salary (from the ATS or the description, plus annualized), job URL, apply URL.
  • 🎯 Filters that matter: job title (with wildcards), keywords, exclusions, location, remote only, workplace type, seniority, minimum salary, ATS, company or domain, employment type, "salary published", and only new jobs since last run for schedules.
  • ♻️ Deduplicated, no re-posts: one row per company + title + location by default, and jobs that were only re-listed (ATS posted date more than 7 days before they reappeared) are left out of the time windows unless you turn off Exclude re-posted jobs.
  • 🧹 No aggregator spam: reposting marketplaces such as Jobgether are skipped by default, and Workday tenant codes are shown as real company names (e.g. ghr → Bank of America, globalhr → RTX), so you can also filter by the name you know.
  • 🗑️ Expired jobs: get the jobs that closed in the last 7 days to clean up your own job board or CRM.
  • 📝 Full job descriptions included (plain text), for LLM enrichment, skills extraction or matching.
  • 💸 From $1.00 per 1,000 jobs ($2.50 on the free plan), pay only for rows returned. Set Max results and the run stops exactly there.

Quick start (first run in under a minute)

  1. Click Start. The prefilled input returns 50 software engineer jobs in the US or remote, posted in the last 7 days (about $0.13).
  2. Change Job title contains to your role (data engineer, account executive, nurse, product designer...), and Location contains to your market.
  3. Export to CSV, Excel, JSON or Google Sheets, or call it from the API, Make, Zapier, n8n or an AI agent.

Use cases and ready-to-paste inputs

1. Recruiting and staffing agencies: new roles to fill, every week

Find companies that just opened roles you can fill, with the direct link to each job. Switch to "Last 24 hours" for a daily run.

{
"timeRange": "7d",
"titleSearch": ["data engineer", "analytics engineer"],
"locationSearch": ["United States", "Remote"],
"titleExclusionSearch": ["intern"],
"limit": 500
}

2. Sales teams: hiring signals for outbound

A company hiring its first RevOps person, or five security engineers at once, is a buying signal. Pull new roles by function and push them into your CRM or Clay.

{
"timeRange": "7d",
"titleSearch": ["revops", "revenue operations", "sales operations"],
"locationSearch": ["United States"],
"dedupe": true,
"limit": 1000
}

Tip: match rows to accounts in your CRM on company (and company_domain when the ATS provides it); board + ats identify the careers page.

3. Job boards and newsletters: fill a niche board automatically

Fill the board once with "Last 7 days" (below), then schedule the Actor hourly with "Last hour" (or daily with "Last 24 hours") to get only new jobs each time. Run it once a day with Job status = Recently closed to expire jobs that are gone.

{
"timeRange": "7d",
"titleSearch": ["designer*"],
"remoteOnly": true,
"limit": 200
}

4. HR, labor-market and compensation analysts

Track hiring by company, function, location or ATS over time; pull jobs with published salary ranges.

{
"timeRange": "30d",
"titleSearch": ["machine learning", "ml engineer", "ai engineer", "data scientist"],
"hasSalary": true,
"limit": 5000
}

5. Watch specific companies

{
"timeRange": "all",
"companies": ["stripe", "openai.com", "databricks"],
"limit": 1000
}

Sample output

Real rows from the default input (software engineer, US or remote, last 7 days), October 2026 (the full 50-row example dataset: CSV · JSON · Excel):

CompanyTitleLocationRemoteATSPostedSalary
RedditSoftware Engineer, Agent Optimization & EvaluationRemote - United StatesyesGreenhouse2026-10-19
PerplexityMember of Technical Staff (Software Engineer, Enterprise Agent Evals & Efficiency)San FrancisconoAshby2026-10-19$220,000-$405,000
Clear StreetSenior / Staff Software Engineer, MobileRemoteyesGreenhouse2026-10-18
AbnormalSoftware Engineer 1 - Cloud InfrastructureRemote - USAyesGreenhouse2026-10-17
AirbyteSenior Software Engineer, Platform FullstackSan FranciscoyesAshby2026-10-17$196,000-$235,000
TeamSnapStaff Software Engineer (Android)RemoteyesLever2026-10-17
BILLSoftware Engineer II - GrowthUnited StatesnoGreenhouse2026-10-17
AppliedFull-Stack Software Engineer, People IntelligenceSunnyvalenoAshby2026-10-17$138,000-$208,000

Each row as JSON (the Airbyte row above):

{
"id": "34bd86369b0f7f7c",
"title": "Senior Software Engineer, Platform Fullstack",
"company": "Airbyte",
"company_domain": null,
"ats": "ashby",
"board": "airbyte",
"job_id": "735d5deb-ba6e-49b2-88ba-5ebdf8d315a0",
"requisition_id": null,
"department": "Engineering",
"team": "Engineering",
"seniority": "senior",
"location": "San Francisco",
"locations": [
"San Francisco"
],
"country": "United States",
"remote": true,
"workplace_type": "hybrid",
"employment_type": "FULL_TIME",
"posted_at": "2026-10-17T02:12:12Z",
"first_seen": "2026-10-18T02:22:18Z",
"last_seen": "2026-10-19T01:50:06Z",
"status": "active",
"closed_at": null,
"salary_min": 196000,
"salary_max": 235000,
"salary_currency": "USD",
"salary_period": "YEAR",
"salary_text": "$196K - $235K",
"salary_annual_min": 196000,
"salary_annual_max": 235000,
"salary_source": "ats",
"description": "Airbyte is the data and action layer for AI agents. We give agents fast, accurate, authenticated access to business data across hundreds of sources, so they can discover the entities that matter, reason over real-time context, and take action in the systems … (full text, up to 10,000 characters)",
"job_url": "https://jobs.ashbyhq.com/airbyte/735d5deb-ba6e-49b2-88ba-5ebdf8d315a0",
"apply_url": "https://jobs.ashbyhq.com/airbyte/735d5deb-ba6e-49b2-88ba-5ebdf8d315a0/application"
}

Each run also writes a Run summary (RUN_SUMMARY): how many jobs matched, how many duplicates were removed and when the index was last refreshed.

How it compares

Fresh Jobs API (this Actor)LinkedIn / Indeed job scrapersSingle-ATS scrapers (one per Greenhouse, Lever...)Careers Page Jobs Scraper (our live scraper)
SourceEmployers' own ATS boardsJob board listings (reposts, promoted jobs)One ATSEmployers' own ATS boards
Coverage17,000+ companies, 9 ATS, searchable all at onceWhatever the board's search returnsOnly companies you list, one ATSCompanies you list, 6 ATS
SpeedSeconds (pre-built index)Minutes, proxies, blocksMinutesSeconds to minutes per company
Find companies you don't know yet✅ search by title/location across all companies✅❌❌
Full job descriptions✅ plain text (filling in by source, see FAQ)✅usually ✅✅
New / closed jobs✅ time windows + closed in last 7 dayspartialrarely✅ per-company new/closed feed
Price$1.00-$2.50 / 1,000 jobs (by Apify plan)variesvaries$2 / 1,000 jobs + $0.002 per company

Use this Actor to discover jobs across thousands of companies by title and location, descriptions included. Use the Careers Page Jobs Scraper when you already know the companies and want a live scrape of exactly those boards.

Pricing (pay per event)

EventPrice
Job returned (row in the dataset), Apify Free plan$0.0025 (= $2.50 per 1,000 jobs)
Job returned, Starter plan$0.0020 (= $2.00 per 1,000)
Job returned, Scale plan$0.0015 (= $1.50 per 1,000)
Job returned, Business plan and above$0.0010 (= $1.00 per 1,000)
Actor start$0.00005 (Apify's standard start event)

Descriptions are included at no extra cost. Examples on the free plan: the default input (50 jobs) = $0.13. 100 new jobs a day for a month = 3,000 jobs = $7.50/month ($3.00 on Business). A one-off pull of 5,000 jobs = $12.50 ($5.00 on Business). Platform usage is tiny because no scraping happens during your run.

Coverage and freshness

ATSVerified boardsOpen jobs
Workday2,213730,419
Greenhouse6,556200,113
Lever2,15274,495
Ashby3,69260,039
Workable2,91459,607
SmartRecruiters3121,685
Recruitee1,03217,809
Personio8479,310
Rippling8448,272
Total20,2811,181,749
  • Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and Rippling are refreshed every 1 hour; Workday is refreshed once a day. A new job reaches the index at the next refresh, and first_seen records when we first saw it. The RUN_SUMMARY record of every run shows the exact time of the last refresh.
  • When the ATS publishes an exact posting time (Greenhouse, Lever, Ashby, SmartRecruiters and others), Posted within uses it.
  • When a company is first added to the index, its existing jobs are not counted as "new": for those, time filters use the date the company posted them.
  • Closed jobs stay in the index for 7 days with status: "closed" and closed_at.
  • Company boards are discovered from public sources (the Common Crawl URL index, public ATS directories, startup directories and public job lists) and each one is verified against the ATS's public job-board API. New boards are added over time. Missing a company? Use the Careers Page Jobs Scraper with its careers URL, or tell us in the Issues tab.

FAQ

How fresh is the data? All ATS platforms except Workday are re-checked every hour; Workday once a day. Each run's RUN_SUMMARY shows when the index was last refreshed, so you never have to guess.

How do I get only new jobs since my last run? Turn on Only new jobs since last run and schedule the Actor (for example daily with "Last 7 days"). Each run skips the jobs an earlier run of the same search already returned, so you only get, and pay for, new ones. The memory is a key-value store named cleanrowdata-fresh-jobs-index-seen in your own Apify account (job ids only, kept 90 days); each different search has its own memory, or give it a Saved-search name to keep the memory while you tweak filters. Changing only Max results or Include description keeps the same memory.

Does the apply link go to the employer or to a job board? To the employer. Every row has apply_url (and job_url) on the company's own ATS: Greenhouse, Lever, Workday and so on. Never a LinkedIn or Indeed redirect.

Can I filter by experience level? Yes: Seniority (intern, entry, mid, senior, lead, staff/principal, manager, director/VP/C-level), read from the job title. Titles without a level word ("Software Engineer") count as mid.

Does the job sponsor visas? visa_sponsorship is yes when the description says the company sponsors (e.g. "Visa sponsorship is available"), no when it says it doesn't or requires work authorization without sponsorship, and empty when the posting doesn't say (most don't). The Visa sponsorship filter keeps only yes, or drops no.

Remote, hybrid or on-site? workplace_type is remote, hybrid, onsite or null. We use what the ATS states, then the title and location ("Hybrid - Austin, TX"), then clear statements in the description ("this role is hybrid", "3 days a week in the office"). Many Workday and Greenhouse jobs state it nowhere, so null means "not stated", not "on-site". The Workplace type filter uses the ATS value, title and location.

How do you get the salary? From the ATS when it publishes one (salary_source = ats), otherwise from the pay range written in the job description (salary_source = description), which most US postings include because of pay-transparency laws. salary_annual_min / salary_annual_max annualize hourly and monthly pay. Minimum annual salary (USD) filters on both sources; it is slower on very broad searches because it has to read descriptions.

Will my run fail, get blocked or stop at a cap? No scraping happens in your run: it searches our ready-made index, so there are no blocks, CAPTCHAs or login walls, and it returns up to 5,000 jobs in seconds. If the index itself is ever stale, the run tells you how old it is.

How do I remove jobs that were filled or taken down? Run with Job status = Recently closed jobs and a time window; you get every job that disappeared from its company's board, with closed_at.

Is this a LinkedIn jobs alternative? For most hiring at tech, startup and mid-to-large companies, yes: those companies publish their jobs on their own ATS first, and the apply link goes straight to the employer. It does not include jobs that exist only on LinkedIn or Indeed, or companies on ATS platforms we don't cover yet (for example iCIMS, Taleo or SuccessFactors).

Do you have job descriptions? Yes. Each row has description: the full posting as plain text (up to 10,000 characters), fetched from the company's ATS by a separate background worker. Brand-new jobs usually get it within 1-2 hours (until then description is null); Greenhouse, Lever, Ashby, Workable and SmartRecruiters jobs are covered first and Workday is being filled in, newest jobs first. Turn Include description off for smaller output. Keywords still match the title, department, team and company name, not the description text.

Are there agency or reposted jobs? Rows come from companies' own ATS boards, not from job boards. A few recruiting firms and job aggregators also run ATS boards. The best-known ones (Jobgether, AO Garcia Agency, Bjakcareer, Pavago...) are skipped by default (Exclude job aggregators); turn on Exclude staffing agencies to also skip staffing and recruitment agencies (every row has is_staffing_agency), and drop any others with Exclude companies.

Is it legal? The index only contains job postings that companies publish through their ATS's public job-board endpoints, the same data their careers pages show to everyone. No logins, no personal data about applicants or recruiters.

Can I use it from code, Make, Zapier, n8n, Clay or an AI agent? Yes. Every Apify Actor has an API, client libraries for JavaScript and Python, integrations, and works through the Apify MCP server.

How many jobs can I get per run? Up to 5,000. For more, split by time window, title, location or ATS.

Limitations

  • Descriptions: a job's description can be null for its first 1-2 hours, and Workday descriptions are still being filled in (newest first). Recruitee, Personio and Rippling jobs don't have descriptions yet.
  • Up to 5,000 jobs per run.
  • Location matching is text matching on what the company wrote (US, USA, United States and city names vary), so add the variants you care about. Remote also matches jobs the ATS flags as remote.
  • Salary is present when the ATS publishes it or the description states a pay range (common in US postings, rare elsewhere).
  • Rippling boards don't publish a posting date, so their jobs that were already open when we added the company only show up with Posted within = Any time; jobs they post later are dated by when we first see them.

Data attribution: part of the board discovery uses the LastRound AI ATS Company Directory (CC BY 4.0).

If this saved you time, a quick review on the Store helps a lot, and feature requests go in the Issues tab; we usually ship them within days.