Job Scraper - Workday, iCIMS, Greenhouse & Ashby Jobs API avatar

Job Scraper - Workday, iCIMS, Greenhouse & Ashby Jobs API

Pricing

from $1.68 / 1,000 job postings

Go to Apify Store
Job Scraper - Workday, iCIMS, Greenhouse & Ashby Jobs API

Job Scraper - Workday, iCIMS, Greenhouse & Ashby Jobs API

Reads job postings live from company career sites on Workday, iCIMS, Cornerstone, Dayforce, Greenhouse, Ashby, Lever, Comeet and 11 more ATS, plus 14 job feeds and any RSS URL. Geocoded location, salary, skills, and an incremental mode that returns only what changed.

Pricing

from $1.68 / 1,000 job postings

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

ParseForge

Job Scraper - Workday, iCIMS, Greenhouse & Ashby Jobs API

Read open roles straight off a company's own career site, live, across twenty-one applicant tracking systems, fourteen cross-company job feeds, 305 built-in company boards and an index of 168,000 postings. Every row carries the title, employer, location, work arrangement, employment type, seniority, posting date and apply link. No login, no API key, no vendor database in the middle. Export to CSV, JSON, Excel, or XML.

Most job APIs resell a pre-indexed copy of the web and hand you what their crawler saw hours ago. This one calls Greenhouse, Lever, Ashby, Workday, iCIMS, Cornerstone, Dayforce, UKG Pro, Comeet, Pinpoint, JOIN, Oracle Cloud, Eightfold, SmartRecruiters, Recruitee, Workable, Rippling, Teamtailor, Breezy, Personio and BambooHR at the moment you run it, so a role posted five minutes ago is in your dataset and a role filled this morning is not.

Who uses itWhat they scrape job postings for
Recruiters and sourcersLive openings at a named list of target companies, refreshed on a schedule
Sales and lead gen teamsHiring signals: who is opening roles, in which team, in which city
Job board operatorsA clean, deduplicated feed with salary, skills and full descriptions
Market and talent analystsPay bands, skill demand and headcount direction by company and function
Founders and investorsWhat a portfolio or a competitor is building next, read off their own board

What it does

This Actor collects job postings four ways, alone or together: paste career site URLs and it reads those boards directly, tick a job board (or paste any board's RSS URL) and it pulls that board's whole public feed, tick the built-in directory to sweep 305 verified company boards without naming anyone, or give it search terms and it queries a public index covering every Workable career site. All four paths return the same flat row, with a sourceType column saying whether it came from an applicant tracking system or a job board. Every posting carries:

  • šŸ¢ Core fields: title, company, location, city, region, country, additional locations, apply URL and the source ATS.
  • 🧭 Structure: work arrangement, employment type, department, team, seniority level, education level, requisition ID and language.
  • šŸ—ŗļø Geocoded location: city, region, country, country code, latitude, longitude and timezone, resolved against 34,129 cities built into the Actor. No lookup service, no key, and it costs nothing extra.
  • šŸ“… Dates: posted, updated and application deadline, plus a 300 character description snippet on every row for free.
  • šŸ’° Compensation: salary minimum, maximum, currency and interval, with equity and bonus flags.
  • 🧠 Requirements: skills named in the posting, years of experience, degree, visa sponsorship, security clearance, benefits, a job taxonomy, and the employer's own sentences summarising the responsibilities and the requirements.
  • šŸ›ļø Employer profile: legal name, blurb, logo, headquarters, founding year, headcount and industry, plus the company's own LinkedIn, X and GitHub URLs.
  • šŸ“„ Full description: the complete posting as plain text and as HTML, plus the untouched source record if you want it.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with career site data

šŸŽÆ Track a list of target companies.

Paste the career URLs of 50 companies and run it on a schedule. Every run returns their complete current openings, so a diff against the last run is your new-and-closed report.

šŸ“” Turn hiring into a sales signal.

A company opening three roles in one team is a budget signal. Filter by department, seniority and posting date, and route the matches into your CRM.

šŸ’µ Build a pay benchmark.

Turn on compensation and keep only postings with a figure. Salary is read from the ATS where the employer published it and parsed out of the description where they did not, and every row with a figure says which of the two it was.

🧩 Map skill demand.

Turn on skills and count which technologies and certifications appear across a function, a city or an industry over time.

Why choose this scraper

What you get
Twenty-one ATS platforms, one schemaGreenhouse, Lever, Ashby, Workday, iCIMS, Cornerstone OnDemand, Dayforce, UKG Pro (UltiPro), Comeet, Pinpoint, JOIN, Oracle Cloud HCM, Eightfold, SmartRecruiters, Recruitee, Workable, Rippling, Teamtailor, Breezy, Personio and BambooHR normalise into the same 37 columns. Eighteen of them are read board-wide; UKG Pro is read one posting at a time, because recruiting.ultipro.com/robots.txt allows its posting pages and disallows the only route that lists a board.
305 boards built inTick one box to search across verified company career sites without supplying a single URL.
Fourteen job feeds on tapRemoteOK, Remotive, Arbeitnow, Jobicy, Himalayas, The Muse, Working Nomads, 4 Day Week, Landing.jobs, We Work Remotely, Jobspresso, Cryptocurrency Jobs EU Remote Jobs and SAP SuccessFactors, for breadth across thousands of employers at once. Scanning a board is free; you pay only for the rows you keep.
A feed, not a re-scrapeTurn on the incremental mode and a scheduled run returns only what is new since last time, and optionally one row per job that disappeared.
Any other board, by feedPaste a board's RSS URL and it is read too. Most niche boards run WP Job Manager, whose feed carries the company, location and job type as structured fields, so a board nobody has mapped still comes back complete.
Any company, on demandPaste a career URL and the platform is detected for you. No waiting for a vendor to add the company to their index.
Live, not re-indexedThe board is read when you press start, so what you get is what a candidate would see right now.
Deterministic enrichmentSalary, skills, seniority and sponsorship come from the source field first and a documented parser second, never from a one-shot LLM guess.
Filters that cut noiseTitle, company, description, location, department, arrangement, type, language, date and salary. Filtering runs on the full posting, so you can filter on a block you did not buy.
You pay for what you keepOnly rows that pass your filters are written and billed, and each optional block bills only when it actually returned something.

How it compares

The best known actor in this category, fantastic-jobs/career-site-job-listing-api, sells a pre-indexed database that spans 54 ATS platforms with LinkedIn company data attached. It still covers more platforms than this Actor does, and if you need an untargeted firehose across the whole market it is the better tool. What it cannot do is read a specific company's board on demand, and its own documentation states a one hour delay plus a typical three hour indexing lag. This Actor covers twenty-one platforms, reads them live, and lets you name the company.

On company data the two differ in kind. They attach LinkedIn headcount, industry and follower counts. This Actor reads the employer's own website for the legal name, blurb, logo, headquarters and LinkedIn URL, and Wikidata for headcount and industry, and it accepts a match only when Wikidata's own official website is the same domain the posting resolved to. That is accurate where it fires and absent where it does not: measured on a live board run, 23% of rows carried a headcount. Follower counts are LinkedIn's alone and are not here. If you need a figure on every row, theirs is the one to buy.

On price, read your own plan rather than the headline. Their row is $0.012 on the free and Bronze plans and falls to $0.006 on Silver and $0.004 on Gold and above; the base row here is $0.004 falling to $0.00168, so it is cheaper on every plan, by 67% on the free plan and by 58% on Gold. Their row is all-inclusive, and so is that comparison: with every optional block ticked a row here is $0.0085 on the free plan and $0.0035 on Gold, still under their price on both.

FeatureParseForgefantastic-jobsjobo.worldwebdata_labs
Reads the company's board liveYesNo, pre-indexedYesYes
Target a company by career URLYes, auto-detectedNoPartlyYes
ATS platforms covered1854Several3
Cross-company search includedYes, 14 job feeds + any RSS feed + 305 company boards + 168,000 postingsYes, largerNoNo
Employer LinkedIn URLYes, from the company siteYes, plus headcountNoNo
Salary with stated provenanceYesAI derivedNoNo
Geocoded city, region, lat/lng, timezoneYesYesNoNo
Incremental feed and expired jobsYesYes, plus a paid companion ActorNoNo
Company headcount and industryYes, from WikidataYes, from LinkedInNoNo
Screening questionsYes, RecruiteeNoNoNo
Price per job, free plan$0.004$0.012$0.004$0.001
Price per job, Gold and above$0.00168$0.004$0.004$0.001

What a job posting looks like

One real row from a verified run, unedited, with compensation, skills and screening questions turned on:

{
"jobId": "2699475",
"title": "Customer Success Manager - Benelux",
"company": "Tellent",
"companyWebsite": "https://careers.tellent.com",
"jobUrl": "https://careers.tellent.com/o/customer-success-manager-benelux-3",
"applyUrl": "https://careers.tellent.com/o/customer-success-manager-benelux-3/c/new",
"ats": "recruitee",
"atsBoard": "careers.tellent.com",
"boardUrl": "https://careers.tellent.com",
"location": "Amsterdam, Noord-Holland, Netherlands",
"city": "Amsterdam",
"region": "Noord-Holland",
"country": "NL",
"additionalLocations": [],
"isRemote": "No",
"workArrangement": "Hybrid",
"employmentType": "Full-time",
"department": "1. GTM",
"team": "sales",
"seniorityLevel": "Mid level",
"educationLevel": "Bachelor's degree",
"datePosted": "2026-08-04T12:35:17.000Z",
"dateUpdated": "2026-08-04T18:17:24.000Z",
"applicationDeadline": "Not Disclosed",
"requisitionId": "customer-success-manager-benelux-3",
"language": "Not Disclosed",
"hasSalary": "Yes",
"salarySummary": "EUR 55000 - 65000 per year",
"descriptionSnippet": "As a Customer Success Manager in the Benelux market, you will manage your own portfolio. As part of the Customer Experience team, you are responsible for customer retention and for helping our clients achieve their HR business goals through the use of our products. We act as trusted advisors, stayi…",
"descriptionLength": 4761,
"salaryMin": 55000,
"salaryMax": 65000,
"salaryCurrency": "EUR",
"salaryInterval": "year",
"salarySource": "ats-structured",
"salaryText": "EUR 55000 - 65000 per year",
"equityOffered": "No",
"bonusOffered": "No",
"skills": [
"Roadmap",
"Account Management",
"Business Development",
"English",
"German",
"French",
"Dutch"
],
"skillCount": 7,
"yearsExperienceMin": "Not Disclosed",
"experienceLevel": "Senior",
"educationRequired": "Not Disclosed",
"visaSponsorship": "Not Disclosed",
"securityClearance": "No",
"screeningQuestions": [
{
"question": "Do you have legal right to work in the country where this role is based? (e.g., EU citizenship, HSM, orientation visa, valid permit)?",
"kind": "boolean",
"required": "Yes"
},
{
"question": "Please state your desired annual salary (gross)",
"kind": "string",
"required": "Yes"
},
{
"question": "Are you proficient in both written and spoken Dutch at least at C1 level? (please note: this is a must-have requirement)",
"kind": "boolean",
"required": "Yes"
},
{
"question": "Are you proficient in both written and spoken English at least at B2 level? (please note: this is a must-have requirement)",
"kind": "boolean",
"required": "Yes"
},
{
"question": "Do you currently reside in the Netherlands?",
"kind": "boolean",
"required": "Yes"
},
{
"question": "<p><em>As English is our official company language, we kindly request that all application materials are submitted in <strong>English</strong>. Please note that applications submitted in other languages <strong>cannot be reviewed</strong>. Thank you for your understanding!</em></p>",
"kind": "infobox",
"required": "No"
}
],
"screeningQuestionCount": 6,
"scrapedAt": "2026-08-31T21:19:22.197Z"
}

Fields the source did not publish read Not Disclosed rather than null, so a CSV never has a hole in it.

Configure the run

Two source types, alone or together: careerSiteUrls for named companies and searchTerms for the cross-company index. Filters run as each posting is read, so only matches reach your dataset. The Input tab lists every parameter.

Read named career sites in full, whatever the platform:

{ "careerSiteUrls": ["https://job-boards.greenhouse.io/stripe", "https://jobs.lever.co/spotify", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"], "maxItems": 500 }

Pull three job boards at once, keeping only the roles that pay:

{ "jobBoards": ["remoteok", "himalayas", "weworkremotely"], "jobFeedUrls": ["https://example.com/?feed=job_feed"], "includeCompensation": true, "maxItems": 400 }

Run it hourly and get only what changed, plus the jobs that closed:

{ "jobBoards": ["remoteok", "weworkremotely"], "onlyNewJobs": true, "includeExpiredJobs": true, "incrementalKey": "my-feed", "maxItems": 1000 }

Search across the built-in directory of 305 company boards without naming anyone:

{ "searchTerms": ["staff software engineer"], "scanKnownCompanies": true, "includeCompensation": true, "maxItems": 300 }

Search every Workable career site for remote engineering roles posted this week, with pay:

{ "searchTerms": ["software engineer"], "workArrangement": ["Remote"], "postedWithinDays": 7, "includeCompensation": true, "hasSalaryOnly": true, "maxItems": 300 }

Watch a target list for senior openings and pull the full description and skills:

{ "careerSiteUrls": ["greenhouse:stripe", "lever:spotify", "https://careers.tellent.com"], "titleIncludes": ["senior", "staff", "principal"], "includeDescription": true, "includeSkills": true, "maxItems": 200 }

Pricing

Pay-per-event: $0.004 per job posting, dropping to $0.00168 on Gold and above, plus a run-start fee of $0.002 on the free plan and $0.0002 on any paid one. Optional blocks are billed separately and only when they actually returned data: full description $0.001, compensation $0.001, skills $0.0008, company profile $0.0006, screening questions $0.0006, raw source record $0.0004. Discovery adds $0.004 per career site scanned and $0.002 per page of 20 search results, and neither is billed when nothing was delivered.

Jobs collectedBase row only, free planBase row only, GoldEvery block ticked, Gold ceiling
100$0.41$0.17$0.36
1,000$4.10$1.70$3.55
10,000$41.00$16.82$35.30

The right hand column is the ceiling: it assumes every optional block returned data on every row. Blocks that find nothing are not billed, so a real run with all six ticked lands below it.

For comparison, 1,000 jobs on fantastic-jobs/career-site-job-listing-api cost $12.01 on the free plan, $6.00 on Silver and $4.00 on Gold, against $4.10, $2.48 and $1.68 for the base row here. Even with every optional block ticked, a Gold row here is $0.0035 against their $0.004. New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 jobs as a preview. Upgrade your Apify plan to collect up to 1,000,000 jobs per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Career Site Jobs Scraper.
  3. Paste careerSiteUrls, or type searchTerms, add any filters, tick the optional blocks you want, and click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to company career sites through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/career-site-jobs-scraper"

Then prompt it in plain language:

  • "Pull every open engineering role at Stripe and Spotify and group them by location."
  • "Find remote data analyst jobs posted in the last week that publish a salary, and list the pay bands."
  • "Read these ten career pages and tell me which companies are hiring for sales right now."

Copy this into ChatGPT, Claude, or Cursor to start:

Use the Apify Actor "parseforge/career-site-jobs-scraper" to collect job postings from company career sites. Input: { "careerSiteUrls": ["<career page URL>"], "searchTerms": ["<keyword>"], "maxItems": <n>, "includeDescription": true, "includeCompensation": true }. It returns title, company, location, workArrangement, employmentType, department, seniorityLevel, datePosted, jobUrl, applyUrl, ats and salary fields per job. Call it with the ApifyClient and my APIFY_TOKEN.

Troubleshooting

Why am I getting no results?

The career URL may point at a board with no open roles, or at a platform this Actor does not read. Check that the URL is a Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee or Workable page. If you only used searchTerms, widen the term: the index matches words in the title and description, not fuzzy synonyms.

Why fewer jobs than I asked for?

The boards you named have that many open roles, or your filters removed the rest. A location or postedWithinDays filter cuts hard. Add more career sites or relax the filters.

Why is a field empty?

Not every ATS publishes every field. Greenhouse sends education and requisition ID but no salary; Ashby and Recruitee send structured pay; Lever puts pay in the description text. Not Disclosed means the source withheld it, and turning on compensation will still recover a figure from the description where the employer wrote one there.

Why did the search stop early?

The cross-company index rate limits by IP, and Apify's outbound addresses are shared with other runs. The Actor waits and retries the same page, and if the throttle persists it keeps everything collected so far and stops the search rather than burning your run. Career site URLs are read directly and are not affected.

Why is the run slow?

Search pages hold 20 results, so a large maxItems on searchTerms fetches many pages. Career site URLs are far faster, usually one request per company. The slowest combination is the built-in directory with the company profile turned on, because every new employer costs one extra request to their website: expect several minutes over the full directory. Turn the profile off, or narrow with filters, and the same sweep runs in well under a minute.

FAQ

QuestionAnswer
Do I need an API key for any of these platforms?No. Every endpoint this Actor reads is public and anonymous, so there is nothing to register and no token to manage.
Which ATS platforms are supported?Twenty-one: Greenhouse, Lever, Ashby, Workday, iCIMS, Cornerstone OnDemand, Dayforce, UKG Pro (UltiPro), Comeet, Pinpoint, JOIN, Oracle Cloud HCM, Eightfold, SmartRecruiters, Recruitee, Workable, Rippling, Teamtailor, Breezy, Personio and BambooHR. Paste any board or posting URL from those and the platform is detected automatically. UKG Pro takes a posting URL only: their robots.txt disallows the route that lists a board, so a UKG board URL is refused with that reason instead of being read.
Can I search without naming companies?Yes, three ways. Tick one or more of the 14 jobBoards, or paste any board's RSS into jobFeedUrls, or use searchTerms for the cross-company index of Workable career sites, or scanKnownCompanies to sweep 305 verified company boards.
Do I get LinkedIn company data?You get the company's own LinkedIn URL, plus legal name, logo, HQ and founding year from the employer's website. Headcount, industry and follower counts are LinkedIn's own data and are not included.
Can I scrape a company that is not in any index?Yes. That is the point of careerSiteUrls. If the company runs one of the six platforms, its board is readable the moment it goes live.
How fresh is the data?It is read at run time. There is no cached copy and no indexing lag between the employer posting and you seeing it.
Does it return the full job description?Every row carries a 300 character snippet for free. Tick includeDescription for the complete text and HTML.
Where does the salary come from?From the ATS field when the employer published one, otherwise parsed from the description. salarySource says which of the two it was, on every row that carries a figure.
Are the skills and seniority AI generated?No. They come from the source field when there is one, and from a documented dictionary and regex pass otherwise, so the same posting always yields the same values.
How many jobs per run?Free plan: 10. Paid: up to 1,000,000, bounded by how many open roles your sources actually have.
Does it deduplicate?Yes, by job URL across every source in the run. One Workable board returned the same posting once per country; those collapse into one row with every location kept.
Can I run it as an incremental feed?Yes. onlyNewJobs skips anything an earlier run under the same incrementalKey already delivered, and includeExpiredJobs adds a row per job that disappeared, marked status=expired. The first run seeds the state and returns everything.
Are the locations geocoded?Yes, on every row and at no extra cost. 34,129 cities are built into the Actor, so city, region, country, latitude, longitude and timezone are filled from the location text without any lookup service.
Where do headcount and industry come from?Wikidata, and only when its own record for that company points at the same website domain the posting resolved to. Where that check fails the columns are empty rather than guessed.
Is this an official product of any of these platforms?No. It is unofficial and reads only public job board data.

Browse the full ParseForge collection for more scrapers.

šŸ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

āš ļø Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, or any employer whose postings it reads. It collects only publicly available job board data. You are responsible for using the data in compliance with each platform's terms and applicable laws, including GDPR, CCPA, and PIPL. Do not use it to identify, profile, or target individuals.