Company Jobs Scraper · Greenhouse, Lever, Ashby & 6 More avatar

Company Jobs Scraper · Greenhouse, Lever, Ashby & 6 More

Pricing

from $0.54 / 1,000 jobs

Go to Apify Store
Company Jobs Scraper · Greenhouse, Lever, Ashby & 6 More

Company Jobs Scraper · Greenhouse, Lever, Ashby & 6 More

Every open job on a company's careers page from its domain: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR and Breezy boards in one schema with salary, remote, department, dates, links. Filters, since-last-run monitoring, free hiring summary. $0.90 per 1,000.

Pricing

from $0.54 / 1,000 jobs

Rating

0.0

(0)

Developer

AgentsGearbox

AgentsGearbox

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Company Jobs Scraper

Every open job on a company's careers page, as rows. Give the actor company domains, careers URLs or job board URLs and it finds the board behind the page (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR or Breezy), reads it through the board's own public API and returns every job in one schema: title, department, location and country, remote or hybrid, employment type, salary when the posting states one, full description, posting date, job and apply links. Filter by title keywords, location, department, remote and posting date; monitor for new postings with a since-last-run checkpoint. $0.90 per 1,000 jobs. A free company record per input reports the board, the number of open jobs and the hiring mix even when you take no jobs. The first 25 jobs each month are free for every account.

Why this one

This actor
Any company, not a list of boardsGive it stripe.com and it finds the board: links on the site, then the careers page, then a guess from the brand name verified against each board API. Board URLs and greenhouse:airbnb shorthands work too.
Nine systems, one schemaGreenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR and Breezy, normalized to the same fields, with each system's quirks handled (Greenhouse's escaped HTML, Lever's split description, SmartRecruiters' paged list and per-job detail, Personio's XML).
Salary and remote, where the data allowsStructured salary from Lever, Ashby, Recruitee and Breezy, parsed from the text elsewhere ($120,000 - $150,000, €60k–80k); remote and hybrid from the board's own flags, then from the location.
Filters at the sourceTitle keywords, locations, departments, remote only and postedAfter are applied before anything is charged.
Hiring signals for freeOne company record per input: the board, how many jobs are open, the top departments and locations, how many are remote, the newest posting date. With maxJobsPerCompany: 1 that is a cheap "is this company hiring, and for what" check across thousands of domains.
MonitoringonlyNewSinceLastRun remembers the job IDs already delivered per board and returns only new postings next time.
Price$0.0009 per job, Apify's default $0.00005 start fee. No platform usage charged on top.

What people use it for

  • Sales and partnerships: which of your target accounts are hiring, in which teams, and since when. A new "Head of Data" posting is a buying signal.
  • Recruiting and sourcing: every open role at the companies you place candidates with, with salaries where the postings state them, refreshed daily.
  • Job boards and aggregators: structured postings with apply links from companies that use any of the nine systems, deduplicated by job ID.
  • Market and compensation research: titles, locations, remote share and stated salary ranges across an industry.
  • AI agents: "what is this company hiring for" as structured data through the Apify MCP server.

Example tasks

Ready-made configurations you can open, copy and run as they are:

Input

FieldTypeDefaultDescription
companiesarray–Domains (stripe.com), careers URLs, board URLs (https://jobs.lever.co/palantir) or shorthands (greenhouse:airbnb, ashby:notion, workable:skroutz, smartrecruiters:BoschGroup, recruitee:bunq, personio:demo, bamboohr:zapier, breezy:breezy-hr).
keywordsarray[]Keep jobs whose title contains any of these words.
locationsarray[]Keep jobs whose location, city or country contains any of these (Berlin, United States, Remote, DE).
departmentsarray[]Keep jobs whose department or team contains any of these.
remoteOnlybooleanfalseOnly jobs marked remote.
postedAfterstring–2026-10-01, 7d, 30d, 12w.
maxJobsPerCompanyinteger200Newest first, after the filters.
includeDescriptionbooleantrueDescription as text and HTML. SmartRecruiters and BambooHR need one extra request per job for it, which the actor makes.
onlyNewSinceLastRunbooleanfalseMonitoring mode: only postings not delivered in earlier runs.
checkpointStoreNamestringcompany-jobs-stateKey-value store for the monitoring state.
proxyConfigurationobjectnoneNot needed for the boards. Useful only when a company's own website blocks datacenter IPs and the board has to be found from the domain.
{
"companies": ["airbnb.com", "notion.so", "lever:palantir", "https://careers.smartrecruiters.com/BoschGroup"],
"keywords": ["engineer", "data"],
"locations": ["Remote", "United States", "Germany"],
"postedAfter": "30d",
"maxJobsPerCompany": 100,
"includeDescription": true
}

Output

Three record types share one dataset: job rows (no type field), one free company record per input, and free error records.

Job ($0.0009). A real row, description shortened:

{
"company": "Notion",
"companyDomain": "notion.so",
"ats": "Ashby",
"boardUrl": "https://jobs.ashbyhq.com/notion",
"query": "notion.so",
"title": "Solutions Consultant, Mid-Market, France",
"department": "Sales",
"team": "Solutions Consultant",
"location": "Paris, France",
"locations": ["Paris, France"],
"city": "Paris",
"country": "France",
"countryCode": null,
"remote": false,
"workplaceType": "hybrid",
"employmentType": "Full-Time",
"seniority": null,
"salaryMin": 174000,
"salaryMax": 186000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"salaryText": "€174,000 - €186,000",
"descriptionText": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together…",
"descriptionHtml": "<h1>Who We Are</h1><p>Notion is the collaborative AI workspace…",
"postedAt": "2026-11-02T12:55:06.411Z",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/notion/14c52e6b-b00b-42b5-96fb-195919ef6bab",
"applyUrl": "https://jobs.ashbyhq.com/notion/14c52e6b-b00b-42b5-96fb-195919ef6bab/application",
"language": null,
"requisitionId": null,
"jobId": "14c52e6b-b00b-42b5-96fb-195919ef6bab",
"scrapedAt": "2026-11-02T13:02:11.512Z"
}
FieldTypeNotes
company, companyDomain, ats, boardUrl, querystringThe company as the board names it (its slug when the board publishes no name), the domain you gave, the system, the board's page and your input string.
jobId, requisitionIdstringThe board's job ID (stable; used by the monitoring checkpoint) and the company's own requisition number when published.
title, department, team, seniority, employmentTypestring or nullAs the board publishes them; employmentType is the board's wording (Full-time, Internship, Contract…).
location, locations, city, country, countryCodemiscPrimary location, every location of the posting, and the parts the board states separately. Codes are ISO 3166-1 alpha-2 when the board gives one.
remote, workplaceTypeboolean or null, string or nullworkplaceType is remote, hybrid or onsite from the board's flag, else from the location text; remote is true only for remote.
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryTextmiscStructured from Lever, Ashby, Recruitee and Breezy; parsed from the description elsewhere (salaryText is the matched text). Null when the posting states no salary.
descriptionText, descriptionHtmlstring or nullThe full posting. Null when includeDescription is off; Breezy publishes no descriptions through its API.
postedAt, updatedAtstring or nullISO 8601 UTC. postedAt is the board's first-published, created or released date.
url, applyUrlstringThe job page and the application page.

company (free, one per input): status is COMPLETE, PARTIAL (stopped by your spending limit), EMPTY or ERROR; stoppedBy is maxJobs, endOfBoard, checkpoint, chargeLimit or error; detectedBy tells you how the board was found:

{
"type": "company",
"query": "airbnb.com",
"companyName": "Airbnb",
"companyDomain": "airbnb.com",
"ats": "Greenhouse",
"boardSlug": "airbnb",
"boardUrl": "https://boards.greenhouse.io/airbnb",
"careersUrl": "https://www.airbnb.com/careers",
"detectedBy": "domain guess, verified against the board API",
"jobsOnBoard": 202,
"jobsMatched": 202,
"jobsScraped": 100,
"departments": [{"name": "Engineering", "count": 61}, {"name": "Community Support", "count": 23}],
"locations": [{"name": "United States", "count": 88}, {"name": "Japan", "count": 11}],
"remoteJobs": 156,
"newestPostedAt": "2026-11-02T08:52:24.000Z",
"status": "COMPLETE",
"stoppedBy": "maxJobs",
"note": null
}

error (free): {"type": "error", "query": "acme.com", "error": "acme.com: a careers page was found but no supported job board behind it. Supported: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR, Breezy. You can also pass the board URL directly."}

Pricing and cost examples

Try it free. The first 25 jobs each calendar month are free for every Apify account, with nothing to enter: the actor keeps count in a small key-value store in your account (free-slice-company-jobs-scraper) and charges only from the 26th on. The free results are real results you keep; the counter resets on the first of each month.

JobJobsCost
"Is this company hiring, and for what?" across 2,000 domains (maxJobsPerCompany: 1; the free company records carry the counts)2,000$1.80
Daily monitor of 50 target accounts, only new postings, about 3 a day each150 a day$0.14 a day
Every engineering job at 100 companies, with descriptions5,000$4.50
A full market snapshot: 500 companies, 200 jobs each100,000$90

Platform compute is included, descriptions too. A company whose board cannot be found costs nothing: the error record is free and the start fee is $0.00005.

Discounts for paid Apify plans, applied automatically to the buyer's plan: Bronze 10% off, Silver 25% off, Gold and enterprise tiers 40% off the prices above. Free-plan users pay the listed price.

Monitoring: hiring signals every morning

  1. Create a task from this actor with your target companies, the filters you care about (keywords, departments, locations) and onlyNewSinceLastRun: true.
  2. Add an Apify schedule (daily is plenty; boards change slowly).
  3. Add an integration on the task: Slack, e-mail, Google Sheets, Make, Zapier, n8n or a webhook. Each run delivers only postings you have not seen; the company records tell you per company whether the run was complete.

The checkpoint is kept per board in the key-value store named in checkpointStoreName. To start over, change the name or delete the store.

Run it from your code

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('agentsgearbox/company-jobs-scraper').call({
companies: ['airbnb.com', 'notion.so', 'lever:palantir'], keywords: ['engineer'], remoteOnly: true, maxJobsPerCompany: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.jobId).map((i) => [i.company, i.title, i.location, i.salaryText, i.url]));

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("agentsgearbox/company-jobs-scraper").call(run_input={
"companies": ["bosch.com", "skroutz.gr"], "locations": ["Germany", "Greece"], "postedAfter": "30d", "maxJobsPerCompany": 200})
jobs = [i for i in client.dataset(run["defaultDatasetId"]).iterate_items() if "jobId" in i]

cURL (synchronous, returns the dataset):

curl -X POST "https://api.apify.com/v2/acts/agentsgearbox~company-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["airbnb.com"], "keywords": ["data"], "maxJobsPerCompany": 50, "includeDescription": false}'

For AI agents

Give your agent hands. Careers pages are nine different JavaScript applications; this actor returns their jobs as one JSON schema, priced per job and known in advance. "Is Notion hiring data engineers in Europe, and what do they pay" becomes one tool call.

  • MCP, this actor only: add https://mcp.apify.com?tools=agentsgearbox/company-jobs-scraper to Claude Desktop, Claude Code, Cursor or any MCP client (with your Apify token), then ask for "remote engineering jobs at airbnb.com and notion.so posted in the last 30 days".
  • MCP, all agentsgearbox actors: https://mcp.apify.com?tools=agentsgearbox/telegram-channel-scraper,agentsgearbox/google-play-reviews-scraper,agentsgearbox/substack-scraper,agentsgearbox/google-news-scraper,agentsgearbox/brand-name-generator,agentsgearbox/ai-readiness-audit,agentsgearbox/company-lookup,agentsgearbox/app-intelligence,agentsgearbox/app-store-reviews-scraper,agentsgearbox/company-jobs-scraper,agentsgearbox/apple-podcasts-scraper,agentsgearbox/remote-jobs-scraper
  • No Apify account? This actor is eligible for Apify's agentic payments: an agent can buy a spend-capped token through agi.apify.com (x402, MPP or Skyfire) and call the API directly.
  • Prices are per job and known in advance, so the agent can set a spending limit; a company without a supported board comes back as a free error record, not as a failed run.

Limitations, stated plainly

  • The actor reads nine systems. Companies on Workday, Teamtailor, Jobvite, iCIMS, SuccessFactors, Taleo or Welcome to the Jungle are recognised and reported in the company record, but their jobs are not read: those systems publish no documented public job API, and this actor does not reverse-engineer private ones.
  • Finding a board from a bare domain works when the site links to its careers page or the board slug equals the brand name. When neither holds, pass the careers or board URL and the actor reads it directly.
  • Salary appears only when the posting states one; the text parser catches the common formats and leaves the rest null rather than guessing.
  • Breezy's board API publishes no descriptions, and its job pages sit behind a bot check, so Breezy rows have title, location, type, salary text and links only.
  • SmartRecruiters boards with thousands of jobs are read newest first; with filters on, the actor pages through the whole board (up to 5,000 jobs) to apply them.
  • Postings are written by employers and belong to them. Store and index them freely for your own use, link back to url, and do not republish full descriptions as your own content.

Troubleshooting

SymptomCause and fix
error: no supported job boardThe site runs on a system without a public API, or links to its careers page in a way the actor did not follow. Pass the board URL directly if you know it.
error: no board named "…"The slug in your shorthand or URL is wrong. Open the company's careers page and copy the board URL.
jobsMatched: 0 with jobsOnBoard > 0The filters removed everything; the company record's departments and locations show what the board holds.
0 jobs with the checkpoint onNothing new since the last run; stoppedBy is checkpoint.
status: "PARTIAL"Your spending limit for the run was reached. Raise it or lower maxJobsPerCompany.
descriptionText null on SmartRecruiters or BambooHRThe per-job detail request failed; descriptionStatus on the row says why. Rerun the company.

Track record

  • Published 2 November 2026 and tested every day since by an automated run on the Apify platform. The Store's run statistics on this page reflect those runs with a delay of up to a day.
  • No browser, so a run cannot fail on Chrome crashes or memory limits; the boards' APIs answer in seconds.
  • Every actor from this account is monitored daily, so a change on a board's side is normally fixed the same day.

More from agentsgearbox

  • Telegram Channel Scraper: public Telegram channels as JSON, no API key.
  • Google Play Reviews Scraper: Google Play reviews with replies and versions, any market.
  • Substack Scraper: Substack posts with full text and comments, custom domains too.
  • Google News Scraper: Google News with real publisher URLs and full text.
  • Brand & Business Name Generator: brand names verified live on domains, handles and app stores.
  • AI Readiness Audit: how well AI search engines and agents can read a site: crawler access, llms.txt, structured data, content without JavaScript, scored with fixes.
  • Company Lookup: one row per domain with legal identity and VAT validation, contacts, socials, tech stack, open jobs, apps, news and Wikidata facts.
  • App Intelligence: App Store and Google Play in one run: search, top charts, full app details and each app's twin on the other store.
  • App Store Reviews Scraper · iOS + Google Play, Any Country: Reviews of any iOS or Android app from both stores in one run: stars, text, version, votes, developer replies, since-last-run checkpoint, rating trend per app..
  • Apple Podcasts Scraper: Apple Podcasts search, charts, episodes with audio links and listener reviews, any country.
  • Remote Jobs Scraper: remote jobs from six boards and the Hacker News hiring thread in one schema, deduplicated, only-new mode for alerts.

All of them are pay-per-event, run without a browser, and are compared with their alternatives on agentsgearbox.com.

Support

Open an issue on this actor's Issues tab, usually answered within a day, or email support@agentsgearbox.com. More actors and daily comparisons of scrapers for 200+ websites at agentsgearbox.com.

This actor is an independent tool, not affiliated with Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR or Breezy; their names are used only to say which systems it reads. It uses the job board APIs those systems publish for careers pages, without keys, logins or workarounds, and it stores nothing on your behalf beyond your own Apify datasets. Job postings are public by their employers' intent, so that candidates can find them; keep that intent: link to the posting, do not spam applicants, and do not republish descriptions as your own.