Company Careers Page Scraper - Jobs from Any Career Site
Pricing
from $0.90 / 1,000 job listings
Company Careers Page Scraper - Jobs from Any Career Site
Company careers page scraper: paste company websites or job-board links, get every open job with full description, salary, skills and apply link. Detects the ATS behind each site: 39 systems (Greenhouse, Lever, Ashby, Workday, Oracle, Recruitee...). $1.50 per 1,000 jobs, first 3 per run free.
Pricing
from $0.90 / 1,000 job listings
Rating
0.0
(0)
Developer
Khandji Omar
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
8
Monthly active users
6 days ago
Last modified
Categories
Share
You paste
stripe.com. You get all 545 open roles. Paste 50 domains and one run answers for all 50.One input: company websites. The Actor works out which applicant tracking system sits behind each careers page and reads that system's own public endpoint. No tokens to look up, no provider to choose, no proxies. 3 job listings free on every run.
Measured, on real companies
| You paste | It finds | You get |
|---|---|---|
stripe.com | Greenhouse | 545 roles |
anthropic.com | Greenhouse | 399 roles |
figma.com | Greenhouse | 177 roles |
ramp.com | Ashby | 123 roles |
notion.so | Ashby | 110 roles |
vercel.com | Greenhouse | 81 roles |
monzo.com | Greenhouse | 75 roles |
(2026-08-03 — 1,550 live roles from eight bare domains, nothing else supplied.)
How it finds the ATS
Two passes. It reads the company's careers page and looks at where it links —
boards.greenhouse.io/stripe, jobs.lever.co/figma — and if nothing is linked
it derives the likely handle from the domain and asks the providers directly.
Thirty-nine systems are supported: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Rippling, Breezy HR, Personio, BambooHR, Recruitee, Teamtailor, Pinpoint, Gem, Oracle Recruiting Cloud, Avature, Zoho Recruit, Manatal, Dover, Homerun, HireHive, JOIN, PageUp, Workable, Jobvite, Eightfold, JazzHR, Comeet, iCIMS, Trakstar Hire, UKG UltiPro, Paylocity, ApplicantPro, iSolved Hire, Hireology, HiBob, HiringThing, Cornerstone, softgarden, Factorial.
You can also paste the job board itself instead of the company website —
https://acme.recruitee.com, a Workday or Oracle careers link, https://jobs.lever.co/acme —
and the Actor reads it directly.
A company running its own careers page with no hosted ATS behind it comes back
with "ats": null and no rows — an answer, not an error.
Why not scrape a job board
Job aggregators mean cookies, proxies, rate limits, and roles that are stale or reposted by three agencies. This reads the employer's own feed.
| Aggregator scraper | This Actor | |
|---|---|---|
| What breaks it | anti-bot, layout changes, expired cookies | nothing — these are the companies' own public endpoints |
| Freshness | an aggregator's copy | the role as the employer published it |
| Duplicates | the same role three times | one row per role |
| Proxy bill | yes | none |
Filter before you pay
Filters run before billing, so you are never charged for a job you excluded.
| Input | Effect |
|---|---|
keywords | Keep jobs whose title, department, company or location contains one of these |
excludeKeywords | Drop jobs matching any of these — intern, senior, sales |
descriptionKeywords | Keep jobs whose title or description contains one of these — Kubernetes, visa sponsorship |
locations | Keep jobs whose location contains one of these |
remoteOnly | Keep only roles whose location says remote, anywhere or distributed |
postedAfter | Keep jobs posted on or after YYYY-MM-DD |
includeDescription | On by default: adds the full job description, salary, contract type and apply link (see Output). Same price |
Keywords match whole words and do not stem. engineer returns "Backend
Engineer" but not "Engineering Intern" — pass both if you want both. A substring
filter for ai would match "maintainer", which on a real board kept 40% of
unrelated roles.
Output
{"domain": "stripe.com","source_url": "https://boards.greenhouse.io/stripe/jobs/6789","title": "Account Executive, AI Sales","company": "stripe","location": "New York","department": "Sales","posted_at": "2026-07-20T09:12:00Z","source": "greenhouse","function": "Sales","seniority": "Mid","is_remote": false,"job_id": "6789","description": "Who we areStripe is a financial infrastructure platform for businesses...","employment_type": "Full-time","salary": "$211.4K – $290.6K • Offers Equity","workplace_type": "remote","apply_url": "https://boards.greenhouse.io/stripe/jobs/6789"}
The full job description comes with every role on Greenhouse, Lever,
Ashby, Recruitee, Teamtailor, Pinpoint, Gem, Manatal, Zoho Recruit, Homerun,
HireHive and PageUp boards (a short description on Oracle) — plain text, ready for an LLM or a search index — together with
the apply link and the job id. salary, employment_type and workplace_type
are filled when the company publishes them (measured 2026-10-05 on five
companies, 804 roles: description 100%, salary 96% on Ashby, contract type 99%
on Lever and Ashby). Workday, SmartRecruiters, Rippling, Breezy, Personio, BambooHR,
Dover, JOIN, Workable, Jobvite, Eightfold and Avature return the core fields only. Eightfold sites are read up to their 2,000 newest roles. Oracle sites are read up to their
1,000 newest roles, Avature up to the roles its feed lists (about 20).
Facts read from the description, on every job
No AI and no extra cost: plain rules read what the description states.
| Field | What it holds |
|---|---|
experience_years | The lowest number of years of experience the text asks for |
skills | Tools and skills named in the text, from a list of about 90 (Python, Kubernetes, Salesforce, Figma...) |
visa_sponsorship | yes or no when the text says so next to a visa or work-permit word; otherwise empty |
education | Bachelor, Master or PhD when a degree is asked |
salary_min, salary_max, salary_currency | The pay band as numbers, from the salary field or from a range written in the text |
Measured 2026-10-06 on 501 live roles of five companies: experience found on 51%, at least one skill on 78%, the pay band as numbers on 66%. A field stays empty when the text does not say; nothing is guessed.
Use descriptionKeywords to keep only the jobs whose description mentions a word or phrase — a tool, a benefit, a visa policy — not only what the title says.
is_remote is set on every row (not only when you filter with Remote only), the same check that input runs, so you can see per-row which postings are remote without needing to turn the filter on.
Roles are deduplicated by URL, so two domains resolving to the same board never bill you twice. Seniority and job function are inferred and attached.
What a run costs
Standard price: $1.50 per 1,000 job listings (base FREE-tier price). You pay only for listings actually delivered to you, and a company with no open roles costs nothing. From 2026-10-29, each run also has a small start fee of $0.005 ($0.003–$0.004 on paid plans), so ask for many companies in one run. Paid Apify Store plans (Bronze through Diamond) receive a variable discount on this price — the exact current discount for your plan is shown on this Actor's Pricing tab in the Store, not repeated here since Apify's tier discounts change independently of this README.
Ask for many companies at once
Measured on this Actor at ~35 open roles per company:
| Companies in one run | Jobs returned | You pay | Per job |
|---|---|---|---|
| 1 | 35 | $0.05 | $0.0014 |
| 10 | 350 | $0.52 | $0.0015 |
| 50 | 1,750 | $2.62 | $0.0015 |
Batching does not change the price per job — it changes your wall clock. Fifty companies asked together take one run instead of fifty, and the free allowance below is the only thing that makes a small run cheaper per row.
Free tier — 3 job listings on every run
The first 3 job listings of every run are free, on every run you ever make, not just the first. Wire it into a pipeline and evaluate it on your own target companies before a cent is billed.
The free allowance never covers more than half of a run, so a run returning 20 listings gets 3 free rather than 10 — that is what stops it becoming an unlimited free plan for anyone willing to split one job into many tiny runs.
Pricing
Standard rate: $0.0015 per job listing — $1.50 per 1,000 (base FREE-tier price), after the free 3, plus a $0.005 start fee per run from 2026-10-29. Paid Apify Store plans (Bronze through Diamond) receive a variable discount on this price — see this Actor's Pricing tab in the Store for the exact current discount on your plan.
Same price as the ATS Jobs API - Greenhouse, Lever, Ashby, Workday Jobs, which reads the same endpoints and returns the same rows with more control over providers and deltas.
Limits
- 100 companies per run, 15 per request in HTTP mode, so a request finishes inside Apify's five-minute ceiling.
- Workday pages 20 roles at a time and is capped at 200 roles per tenant.
Use it from an AI agent (MCP and x402)
Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server
at https://mcp.apify.com and add this Actor, om_kh/careers-page-scraper, as a tool — the
agent passes the same JSON as the run input and gets the dataset back.
AI agents that pay with x402 can run it too, without an Apify account: the Actor charges only per result delivered, so an agent pays exactly for what it gets.
Related tools
- Want one call across multiple ATS providers instead of one company at a time? → ATS Jobs API - Greenhouse, Lever, Ashby, Workday Jobs
- Want to know when hiring activity changes, not just current listings? → Hiring Signals API - Companies Hiring Now by Role
All input fields
Every field the Start form accepts, so nothing in the schema is undocumented. Most runs only need the fields already covered above — these are the rest, including advanced/bring-your-own-data options.
descriptionKeywords(Words in the job description) — Keeps jobs whose title or description contains one of these words or phrases. Whole words, filtered before billing.includeDescription(Include job description) — Adds the full description, salary, contract type, workplace type and apply link when the ATS publishes them. On by default; same price.companyDomains(Company websites) — The company websites you want jobs from. Just the domain - stripe.com, figma.com - or the job board itself (https://acme.recruitee.com, a Workday or Oracle careers link). The Actor works out which of 39 applicant tracking systems each one uses. Max 100 per run.
How to use it in 3 steps
- Click Try for free and list company websites in companyDomains — just the domain, e.g.
stripe.com. - Optional: keep only the roles you want with keywords, locations, remote only or posted after.
- Click Start. The Actor finds each company's ATS, reads its board and returns every matching job.
Use cases
- Enrich a list of companies with every open job, without knowing which ATS they use.
- Account-based sales — spot which target accounts are hiring, and for what.
- Recruiting agencies — monitor client and prospect career pages daily.
- Job boards — ingest roles straight from employer career sites, not from aggregators.
Use it from code (API)
Every Apify Actor is an API. Start a run and read the results with one call.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("om_kh/careers-page-scraper").call(run_input={"companyDomains": ["stripe.com", "figma.com", "notion.so"], "keywords": ["engineer"], "remoteOnly": False})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('om_kh/careers-page-scraper').call({"companyDomains": ["stripe.com","figma.com","notion.so"],"keywords": ["engineer"],"remoteOnly": false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
One HTTP call (cURL) — runs the Actor and returns the dataset in the same response:
curl -X POST "https://api.apify.com/v2/acts/om_kh~careers-page-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"companyDomains": ["stripe.com", "figma.com", "notion.so"], "keywords": ["engineer"], "remoteOnly": false}'
Integrations: n8n, Make, Zapier, Google Sheets
- n8n — the official Apify node, operation Run Actor and get dataset, Actor
om_kh/careers-page-scraper. - Make — Apify › Run an Actor, then Apify › Get Dataset Items.
- Zapier — Apify › Run Actor; map the dataset items into your next step.
- Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
- Schedules — run it every hour or day from Schedules in Apify Console.
FAQ
Which career sites does it support? Company career pages powered by Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Rippling, Breezy, Personio, BambooHR, Recruitee, Teamtailor, Pinpoint, Gem, Oracle Recruiting Cloud, Avature, Zoho Recruit, Manatal, Dover, Homerun, HireHive, JOIN, PageUp, Workable, Jobvite, Eightfold, JazzHR, Comeet, iCIMS, Trakstar Hire, UKG UltiPro, Paylocity, ApplicantPro, iSolved Hire, Hireology, HiBob, HiringThing, Cornerstone, softgarden, Factorial. It detects the provider from the domain, or from a job-board link you paste.
What if a company is not detected?
It is listed in RUN_SUMMARY.json with the reason and costs nothing. If you know its ATS handle, pass it to the ATS Jobs API directly.
Is it legal to scrape job listings? It reads the public job-board endpoints that each ATS provider publishes for exactly this purpose — the same data shown on the company's careers page. No login, no personal data. Check your local law for your use case.
How fresh is the data? Live. Every run reads the company's board at that moment; nothing comes from a cache or an aggregator.
Am I charged for duplicates or failed boards?
No. Each job is charged once per run, and a board that fails or does not exist is reported in RUN_SUMMARY.json and costs nothing.
Can I get only new jobs every day? Yes — schedule the Actor and keep the filters; compare runs, or use the ATS Jobs API's monitoring mode to receive only new and changed roles.
Can I export to CSV, Excel or Google Sheets? Yes: download any run as CSV, Excel, JSON or HTML, or add the Google Sheets integration from the Integrations tab.
More Actors from the same author
- ATS Jobs API - Greenhouse, Lever, Ashby, Workday Jobs — one Actor for 9 ATS providers
- Greenhouse Job Listings API - Title, Location, Salary
- Lever.co Jobs API - Title, Location, Department, Salary
- Ashby Jobs API - Title, Location, Department Data
- Workday Jobs API - Title, Location, Department Data
- Hiring Signals API - Companies Hiring Now by Role — hiring velocity per company, as a buying trigger
Support
Found a bug or have a feature request? Use the Issues tab on this Actor's Apify Store page, or message the author (om_kh) directly through Apify — every report gets a reply.