Company Career Page Jobs Scraper (Greenhouse, Lever, Ashby)
Pricing
from $1.00 / 1,000 job listing saveds
Company Career Page Jobs Scraper (Greenhouse, Lever, Ashby)
Scrape jobs from company career pages and careers sites: Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and SmartRecruiters. Enter company websites and the ATS job board is detected automatically. Never charges for a failed or empty result.
Pricing
from $1.00 / 1,000 job listing saveds
Rating
0.0
(0)
Developer
Pavel Tashev
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
24 days ago
Last modified
Categories
Share
What does Company Career Page Jobs Scraper do?
Company Career Page Jobs Scraper collects every open job from company career pages. Enter company websites such as stripe.com or notion.so, and it finds each company's job board on Greenhouse, Lever, Ashby, Workable, Recruitee, Personio or SmartRecruiters, then returns clean, structured job data: title, department, team, locations, remote flag, employment type, salary ranges when published, full description, posting date and the job link.
No board names or API keys needed: paste a list of companies and click Start. Because it runs on the Apify platform, you get API access, scheduling, webhooks, integrations (Make, Zapier, n8n, Google Sheets) and run monitoring.
You are never charged for a failed or empty result
Every result says what it is, and only real results cost anything.
status | Meaning | Charged |
|---|---|---|
ok | A real result | Yes |
empty | Worked, but there was nothing to report | No |
failed | Could not be done — the error field says why | No |
truncated / partial | Cut short by a limit you set; what was delivered is kept | Only the delivered part |
skipped | Not attempted, for example after the maximum cost per run was reached | No |
If every input fails, the run itself fails with an explanation instead of reporting success with no data.
Why use Company Career Page Jobs Scraper?
- Automatic job board detection. It reads the company homepage and careers pages to find the job board link, and can also try the company name on each supported job board. In our tests it found the board for 15 of 15 companies that use a supported system.
- Straight from the source. Jobs come from the public job board APIs that these systems publish for career sites, so data is fresh, complete and reliable.
- One schema for six job boards. Salaries, locations and dates are normalized, so you can mix companies in one dataset.
- Pay only for jobs you keep. Filter by keywords, locations, departments, remote, posting date, exclude words, salary floor, seniority and employment type; filtered-out jobs are never charged, and companies without a supported job board cost nothing.
- Watch for new openings, not all openings. Turn on Only jobs not seen in an earlier run and a scheduled run returns — and bills — only what was posted since last time. A day when nobody posted costs nothing.
Typical uses: sales prospecting from hiring signals, recruiting and talent market maps, competitor hiring analysis, job boards and newsletters, salary benchmarking and giving AI agents a live view of who is hiring.
How to scrape jobs from company career pages
- Click Try for free.
- In Companies, add company websites (for example
ramp.com), careers page links, or job board links (for examplehttps://jobs.lever.co/palantir). - Optionally add Keywords, Locations or Departments, or turn on Remote jobs only.
- Click Start. Most runs finish within a minute.
- Open the Output tab. Overview shows company, title, location, salary and job link; Details shows everything else. The COMPANIES_REPORT record shows which job board was found for each company.
Input
| Field | Description | Default |
|---|---|---|
| Companies | Websites, careers page links or job board links. Up to 500 per run; extra entries are skipped and reported in the run status. | – |
| Keywords | Comma-separated. A job matches if its title, department or description contains all words of at least one keyword. | all jobs |
| Locations | Keep jobs whose location contains any of these texts (for example London, Germany, Remote). Up to 50. | any |
| Departments | Keep jobs whose department or team contains any of these texts. Up to 50. | any |
| Remote jobs only | Keep only jobs marked remote. | off |
| Posted within (days) | Only jobs posted in the last N days. | any date |
| Maximum jobs per company | 1–5,000 | 500 |
| Include job descriptions | Turn off for a smaller dataset. | on |
| Exclude keywords | Drop jobs whose title, department, team or location contains any of these. A multi-word term matches only when every word appears. | – |
| Minimum salary | Keep jobs whose stated salary reaches this figure. | – |
| Only jobs that state a salary | Off by default — most ATS boards publish no salary, so turning this on hides most real openings. | off |
| Seniority | Intern, junior, mid, senior or lead. Read from the job title, since an ATS rarely states a seniority of its own. | any |
| Employment type | Full-time, part-time, contract, internship or temporary. | any |
| Only jobs not seen in an earlier run | Deliver only jobs no earlier run delivered. | off |
| Memory name | Separate memories for separate searches. | default |
| Guess job boards from the company name | Try ramp on each job board when the website has no job board link. A guessed board is used only if it mentions the company's own domain, and at most 10 names are tried per company. | on |
Example input:
{"companies": ["stripe.com", "notion.so", "https://jobs.lever.co/palantir"],"keywords": "data engineer, machine learning","locations": ["Remote", "London"],"postedWithinDays": 30}
Output
Each job is one item in the dataset. A real example from a run on 15 September 2026 (description shortened):
{"id": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245","ats": "Ashby","companyInput": "https://jobs.ashbyhq.com/ramp","company": "Ramp","boardToken": "ramp","jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","department": "Engineering","team": "Backend","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"remote": true,"employmentType": "Full-time","salaryMin": 211400,"salaryMax": 290600,"salaryCurrency": "USD","salaryPeriod": "year","salary": "USD 211,400–290,600 / year","description": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams...","postedAt": "2026-04-07T17:12:35.753000+00:00","updatedAt": null,"scrapedAt": "2026-09-15T09:41:58.052097+00:00"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Output fields
| Field | Meaning |
|---|---|
ats, boardToken | Job board system and the company's board name on it. SmartRecruiters board names are case-sensitive (BoschGroup). |
companyInput, company | What you entered and the company name |
jobUrl | Job posting / apply link |
title, department, team | Role and where it sits |
location, locations, remote | Main location, all locations, and whether the job is remote |
employmentType | Full-time, part-time, contract… as provided |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salary | Salary range when the company publishes it (common on Greenhouse, Ashby and Recruitee) |
description | Plain-text description with email addresses removed |
postedAt, updatedAt, scrapedAt | Dates in ISO 8601, UTC |
Watching for new jobs only
Turn on Only jobs not seen in an earlier run, schedule the Actor daily, and each run returns only what was posted since the last one. The Actor remembers the jobs it delivered in a key-value store in your own Apify account, named after Memory name, so two different searches can each keep their own memory.
Three details worth knowing, because they are the ones that decide whether this is trustworthy:
- Only delivered jobs are remembered. A job dropped by your salary or seniority filter is never recorded, so if you loosen that filter next week the job still reaches you.
- It looks at more jobs than it delivers. A newly posted job can sit behind hundreds that you have already received, so in this mode the Actor reads up to 1,000 openings per company regardless of Maximum jobs per company, which continues to cap what is delivered and charged.
- A board with nothing new says so. A company whose openings were all delivered before returns one free row saying exactly that — not "no openings matching your filters", which would not be true.
How much does it cost to scrape company jobs?
This Actor uses pay-per-event pricing: you pay a small fee per job saved to your dataset. Jobs removed by your filters, duplicates and companies without a supported job board are never charged. See the Pricing tab for the current price per 1,000 jobs; platform compute is included. You can set a maximum cost per run, and the Actor stops cleanly when it is reached.
Tips
- Use filters to pay only for relevant jobs. Large companies list hundreds of roles; keywords, locations and departments are applied before anything is saved.
- Schedule a daily run with Posted within (days) set to
1to track new openings. - Company not found? Check COMPANIES_REPORT. Paste the careers page or job board link instead of the homepage; some sites load jobs with JavaScript or block automated visits.
- Hiring signals for sales: run your prospect list weekly and compare job counts by department.
Supported job boards and limitations
- Supported: Greenhouse, Lever (including EU), Ashby, Workable, Recruitee, Personio, SmartRecruiters.
- SmartRecruiters notes: board names are case-sensitive (
BoschGroup, notbosch), so pass the board link when auto-detection misses it. Descriptions come from a second request per job, so keyword filters match the title, department and location rather than the description text. - Some companies keep their board on a careers subdomain that their robots.txt disallows (for example
jobs.bosch.com). The Actor honours robots.txt and skips those pages; pass the job board link directly instead. - Not supported yet: Workday, BambooHR, iCIMS, Taleo, SuccessFactors and custom in-house career sites. Tell us in the Issues tab which system you need.
- If a company's site won't let us read its
/robots.txt(403, a timeout, or a server error), the address you entered is still read, but we don't go looking for careers pages, careers subdomains or sitemap entries on that site. Pass the job board link directly instead. A site with no robots.txt at all is treated as allowing everything. - The Actor only reads public job postings. It visits at most 6 pages per company website, follows each site's robots.txt and spaces out requests.
Related tools
Enrich company and hiring data:
- Remote Jobs Aggregator: collect remote jobs from Himalayas, Remote OK and Jobicy in one dataset.
- European Company Registry Lookup: look up official company records in 8 European registries and the LEI database.
- Website Tech Stack Detector: detect the CMS, frameworks, analytics and hosting of any website.
FAQ and support
Is it legal to collect job postings? The Actor reads public job postings through the job board APIs that Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and SmartRecruiters document for career sites. Job descriptions belong to the employers; keep the job link when you republish them and follow applicable laws.
Does it collect personal data? No. It saves job postings only, drops recruiter contact fields and removes email addresses from descriptions.
Missing a field or a job board? Open an issue in the Issues tab. Custom hiring-data pipelines are available on request.