Career Site Jobs Scraper — Greenhouse, Lever, Ashby & Workday
Pricing
from $1.50 / 1,000 job scrapeds
Career Site Jobs Scraper — Greenhouse, Lever, Ashby & Workday
Scrape live job listings straight from company career pages. Auto-detects Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters and Recruitee, with a JSON-LD fallback for other sites. Returns title, location, salary, remote flag, department and apply URL.
Pricing
from $1.50 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
What is Career Site Jobs Scraper?
Paste a company careers URL and get every open job. Career Site Jobs Scraper is an Apify Actor for recruiters, sourcers, market researchers, and AI agents that need live job listings from company career pages. It accepts one or more career page URLs, detects the ATS behind each page, and returns one record per open job listing with fields such as job title, company, department, team, location, remote status, employment type, salary text, description, apply URL, job URL, job ID, posted date, updated date, ATS name, source URL, and scrape timestamp.
The actor reads company-owned career pages and ATS public JSON APIs, with a JSON-LD fallback for pages that publish structured JobPosting data. It is usable through Apify API and through Apify MCP.
Best fit and connected workflows
This actor fits workflows that start with a company career page and end with structured hiring data.
Use it when you want to:
- Build a live list of openings from a target company or a watchlist of companies.
- Feed current job data into outbound sales, recruiting, or competitive-intelligence research.
- Power AI assistants that answer questions like "What roles is this company hiring for right now?"
- Collect first-party job postings for internal dashboards, research notes, or enrichment pipelines.
It connects naturally with downstream workflows such as:
- lead qualification around hiring signals,
- talent-market monitoring by company and department,
- AI prompts that compare openings across multiple company career pages,
- and follow-up processing of the returned dataset in your own code.
Related Actors:
- Use Greenhouse Jobs Scraper when every company on your list is on Greenhouse and you want Greenhouse-specific fields.
- Use Ashby Jobs Scraper when the target source is a specific Ashby jobs board.
- Use Jobs Scraper — Indeed, LinkedIn & Glassdoor instead when you search job boards by keyword rather than company career pages.
Practical scenario
Mira is building a hiring watchlist for a handful of software companies. She starts with a career page URL from a company she tracks and sets the maximum results per site to capture the full board. The actor returns records with jobTitle, department, location, isRemote, employmentType, salaryText, applyUrl, and postedAt. Mira filters the dataset for engineering roles in Europe, then shares the applyUrl list with her recruiting team and uses postedAt to focus on newly added openings.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array of strings | required | One or more company career page URLs to scrape. The actor auto-detects Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Workable, or JSON-LD on the page. |
maxResultsPerSite | integer | 200 | Upper bound on jobs returned from each career page. Applied per URL. |
enrichDescriptions | boolean | true | Fetches full descriptions for ATS platforms that provide them through an extra detail request. |
descriptionFormat | string | text | Controls how the job description is returned: text, html, both, or none. |
titleKeywords | array of strings | [] | Keep only jobs whose title contains one of these words. |
excludeTitleKeywords | array of strings | [] | Drop jobs whose title contains any of these words. |
locationKeywords | array of strings | [] | Keep only jobs whose location contains one of these words. |
remoteOnly | boolean | false | Keep only jobs marked remote. |
proxyConfiguration | object | direct connection | Optional proxy routing for rate limits or geo-specific boards. |
The four filters run before a job is saved, so filtered-out jobs are never charged. They apply to the jobs fetched from each page, so raise maxResultsPerSite when you filter a large board.
Focused input example
{"startUrls": ["https://boards.greenhouse.io/stripe","https://jobs.lever.co/highspot"],"maxResultsPerSite": 100,"enrichDescriptions": true,"descriptionFormat": "text","titleKeywords": ["engineer"],"excludeTitleKeywords": ["intern"],"proxyConfiguration": {"useApifyProxy": false}}
Output
One record is written per open job listing found across the submitted career pages.
| Field | Type | Description |
|---|---|---|
jobTitle | string | Job title. |
company | string or null | Employer name when provided by the source. |
department | string or null | Department or job family. |
team | string or null | Team or sub-team, when available. |
location | string or null | Primary location string. |
additionalLocations | array of strings | Other eligible locations. |
isRemote | boolean or null | Remote indicator when available. |
employmentType | string or null | Employment type such as full-time or contract. |
salaryText | string or null | Published compensation text, when present. |
description | string or null | Job description in the selected format. |
descriptionHtml | string or null | HTML description when requested. |
applyUrl | string or null | Direct application URL. |
jobUrl | string or null | Canonical job posting URL. |
jobId | string or null | ATS job identifier. |
postedAt | string or null | First published date. |
updatedAt | string or null | Last updated date. |
ats | string | Detected ATS platform. |
atsToken | string or null | Company token or slug used against the ATS. |
sourceUrl | string | Submitted career page URL. |
scrapedAt | string | Timestamp for when the record was scraped. |
Example output record (a real Greenhouse job, description trimmed)
{"jobTitle": "Abuse Investigator","company": "Stripe","department": "8611 Security Analytics","team": null,"location": "Dublin","additionalLocations": ["Ireland Locations"],"isRemote": null,"employmentType": null,"salaryText": null,"description": "Who we are\n\nAbout Stripe\n\nStripe is a financial infrastructure platform for businesses. Millions of companies - from the world’s largest enterprises to the most…","applyUrl": "https://stripe.com/jobs/search?gh_jid=8172508","jobUrl": "https://stripe.com/jobs/search?gh_jid=8172508","jobId": "8172508","postedAt": "2026-09-03T17:32:53.000Z","updatedAt": "2026-09-25T20:45:00.000Z","ats": "greenhouse","atsToken": "stripe","sourceUrl": "https://boards.greenhouse.io/stripe","scrapedAt": "2026-10-04T15:16:22.610Z"}
How it works
The actor starts from the URLs you provide and identifies the ATS behind each company career page. It works with public ATS JSON APIs for Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, and Workable, and it also uses a JSON-LD fallback when a page publishes JobPosting structured data.
The implementation is HTTP-based, with no login, cookies, or browser automation. The input schema lets you set a per-site result cap, decide how descriptions are formatted, and optionally route traffic through Apify Proxy when a board benefits from it.
The output dataset contains one row per returned job listing. A run summary is written to the default key-value store under the OUTPUT key and includes per-site outcomes, detected ATS platforms, and billing counts.
Pricing
This actor uses Pay per event pricing with Apify platform usage included. Billing is event-based, so total cost depends on the number of actor starts, job listings returned, and any extra description enrichment requests.
Events in this actor:
- Actor start
- Job scraped
- Description enriched
Filtered-out jobs are never charged. For current event prices, open the Pricing tab on the actor page. If you want a simple way to estimate volume, think in terms of events: for example, a run that returns two hundred jobs will generate one start event and two hundred job-scraped events, plus any description-enrichment events for jobs that need an extra detail request.
Use with AI agents (MCP)
This actor is available as an Apify Actor usable through Apify MCP. It is designed for a precise tool call: provide career page URLs, receive structured job records, and read the summary for ATS detection and billing context.
Actor identity: khadinakbar/career-site-job-scraper
Tool description: Fetch live job listings from company-owned career pages and ATS public APIs, returning one structured record per open role.
Find the current engineering jobs on this company's career page. Return title, location, remote status, department, apply URL, and posted date. Use plain-text descriptions if they are available.
Output interpretation:
jobspoints to the dataset containing one record per listing.summaryexplains which ATS was detected per site and records billing counts for the run.sourceUrlpreserves the original career page that was submitted.applyUrlis the direct handoff point for next-step workflows.
Provenance and scope:
- Records come from company-owned career pages and ATS public APIs.
- The actor also supports a JSON-LD fallback for pages that publish structured JobPosting data.
- The dataset is organized as flat job listings, which works well for tool-driven retrieval.
Pagination and cost guidance:
- Use
maxResultsPerSiteto cap each career page independently. - Larger result caps increase the number of returned
job scrapedevents. - Keep
enrichDescriptionsenabled when your workflow needs full descriptions for platforms that fetch them in an extra step.
Use via Apify API
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/career-site-job-scraper').call({startUrls: ['https://boards.greenhouse.io/stripe'],maxResultsPerSite: 50,descriptionFormat: 'text',});const dataset = await client.dataset(run.defaultDatasetId).listItems();console.log(dataset.items);
Best results and outcome guidance
Start with the company career page that you would use manually in a browser. That keeps the input aligned with the actor's ATS detection logic and with the JSON-LD fallback.
A few useful patterns:
- Use one URL per company career page when you want a clean one-company result set.
- Increase
maxResultsPerSitewhen a board has many roles and you want the full listing. - Keep
descriptionFormatset totextwhen you plan to pass results into AI workflows. - Switch to
bothwhen you need plain text for analysis and HTML for rendering. - Leave proxy routing direct for ordinary public ATS endpoints, and use Apify Proxy when a board benefits from it.
Continue the workflow
- Then use Dice.com Jobs Scraper — US Tech Jobs, Salary & Skills to extend Career Site Jobs Scraper with a neighboring job-market research source when the brief calls for Dice data.
- Then use Bundesagentur Job Scraper — German Vacancies to extend Career Site Jobs Scraper with a neighboring job-market research source when the brief calls for Bundesagentur data.
Design note
I found that many companies send applicants to their own domain even when the board runs on an ATS, as in the Stripe example above (a Greenhouse board with stripe.com job links). Records keep both jobUrl and applyUrl so the posting page and the application handoff stay separate.
FAQ
Which career pages work well with this actor?
Company-owned career pages powered by Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Workable, or pages that expose JobPosting structured data.
How is this different from a job-board scraper?
This actor starts from a single company's career page and reads that company's own ATS feed, which makes it useful for first-party hiring research.
Which field should I use for the hiring action link?
Use applyUrl when you want the direct application step. Use jobUrl when you want the canonical posting page.
How should I route AI workflows?
Use the dataset records directly, then read summary to see the detected ATS platform and run-level billing context.
Can I combine this with other job sources?
Yes. The verified related actors section includes other source-specific scrapers that can fit adjacent workflows when your research brief uses a different board or region.
Responsible use
This actor collects publicly available job-posting data from company career pages and ATS public APIs. Use the returned information in line with the source site's terms and applicable law, including data-protection rules where relevant.