Company Career Page Jobs Scraper avatar

Company Career Page Jobs Scraper

Pricing

from $2.00 / 1,000 jobs

Go to Apify Store
Company Career Page Jobs Scraper

Company Career Page Jobs Scraper

Give it company domains or names (stripe.com, notion.so, Scale AI) and get their live job openings, normalized into one schema. It resolves each company's real job board on its own: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee and Rippling.

Pricing

from $2.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Fabrizio Zaffarana

Fabrizio Zaffarana

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

6 days ago

Last modified

Share

Give it a list of company domains or names and get back their live job openings, normalized into one schema.

You don't need to know where a company hosts its careers page. Paste stripe.com, notion.so, ramp.com, and the Actor figures out each company's real job board on its own, then pulls the openings. Supported boards: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Rippling.

Why this one is different

Almost every jobs scraper asks you for a board you already had to find yourself (greenhouse.io/stripe, jobs.lever.co/acme). That's fine for one company and useless for three hundred.

Here the input is the company. Give it a domain or a name; the resolution is the product.

It also isn't a job-aggregator scrape: the data comes from each company's own careers board, so you get roles as the employer publishes them, including the ones that never reach the big job sites.

Supported job boards

Greenhouse · Lever · Ashby · Workable · SmartRecruiters · Recruitee · Rippling

Roughly 670 well-known companies resolve instantly from a built-in registry; everything else is resolved live. Every company your run resolves is remembered, so repeat runs get faster.

How many companies actually resolve (measured, not promised)

Read this before you buy. Coverage depends heavily on who is in your list, because it depends on which ATS the company runs. Measured on a 50-company sample (2026-08-10):

Your list looks likeReturned openingsBoard found but emptyNo supported board
Tech / dev-tools (Vercel, Linear, Supabase, Sentry…)72%6%22%
Scale-ups & SaaS (Monzo, Wise, Miro, Personio…)75%0%25%
Large / non-tech (Nestlé, Siemens, IKEA, banks…)6%13%81%
Mixed sample overall52%6%42%

Large enterprises mostly won't work, and it isn't a bug: they run Workday, Taleo, iCIMS or SuccessFactors, which aren't supported here. If your list is Fortune-500 domains, this Actor is the wrong tool. If it's startups and scale-ups, expect roughly 3 in 4.

Every company that doesn't return openings tells you which of the three cases it is, so you always know whether to retry, use another source, or accept that the company simply isn't hiring.

Input

{
"companies": ["stripe.com", "notion.so", "Scale AI"],
"maxJobsPerCompany": 100,
"remoteOnly": false,
"titleFilter": "engineer"
}
FieldTypeDefaultWhat it does
companiesarrayDomains (stripe.com), URLs (https://acme.com/careers) or names (Scale AI). Up to 500.
maxJobsPerCompanyinteger100Cap per company. Lower it to control cost on large boards.
remoteOnlybooleanfalseKeep only roles the board flags remote or hybrid.
titleFilterstringCase-insensitive substring on the job title.
departmentFilterstringCase-insensitive substring on the department.
locationFilterstringCase-insensitive substring on the location text.
includeDescriptionbooleanfalseAdds the full plain-text description. Much larger output.
maxConcurrencyinteger5Companies processed at once.

Shortcut: if you already know the board, force it with ats:slug, e.g. greenhouse:stripe.

Output

One row per job. Unknown fields are null, never missing, so the shape is safe to load straight into a table.

{
"id": "greenhouse_8023928",
"title": "Account Executive, Bridge",
"department": null,
"team": null,
"location": {
"raw": "London",
"city": "London",
"region": null,
"country": null,
"is_remote": false,
"workplace_type": null
},
"employment_type": null,
"posted_at": "2026-07-30T10:59:38.000Z",
"updated_at": "2026-08-06T16:10:12.000Z",
"compensation": null,
"apply_url": "https://stripe.com/jobs/search?gh_jid=8023928",
"job_url": "https://stripe.com/jobs/search?gh_jid=8023928",
"description_text": null,
"source": "greenhouse",
"company_input": "stripe.com",
"company_name": "Stripe",
"company_ats": "greenhouse",
"company_slug": "stripe",
"company_careers_url": "https://job-boards.greenhouse.io/stripe",
"resolve_confidence": "registry",
"scraped_at": "2026-08-09T19:27:31.590Z"
}

resolve_confidence tells you how sure the match is: registry and exact are solid, variant is corroborated by the board's own company name, fuzzy is a loose match worth eyeballing, provided means you passed the board yourself.

Locations are parsed where the board gives enough to parse. When a board lists several sites at once ("SF, NYC, SEA"), you get the first site and null for region/country rather than an invented one.

What it costs you

Billing is per job returned. Companies that resolve to nothing produce no rows and cost nothing. A bad domain in your list is free.

The run's maximum charge is respected. If you cap what a run may spend, the Actor stops as soon as that cap is reached instead of pushing against it: the companies it never got to are listed as skipped_charge_limit in the run summary, so you know exactly where to resume.

Run summary

Diagnostics never land in your billed dataset. After each run, the run-summary record in the key-value store has a per-company breakdown: what resolved, to which board, how many roles the board actually has, and why anything failed.

{
"companies_requested": 3,
"companies_resolved": 1,
"companies_board_empty": 1,
"companies_not_resolved": 1,
"companies_board_error": 0,
"total_jobs": 2,
"outcomes": [
{ "input": "stripe.com", "status": "ok", "ats": "greenhouse", "slug": "stripe",
"confidence": "registry", "jobs_returned": 2, "total_on_board": 412, "truncated": false },
{ "input": "deel.com", "status": "board_empty", "ats": "ashby", "slug": "deel",
"jobs_returned": 0,
"error": "A board named \"deel\" exists on Ashby but publishes no openings…" }
]
}

Each company lands in exactly one state, and the difference is the point:

statusWhat it meansWorth retrying?
okOpenings returned.
board_emptyA board with that slug exists but publishes nothing: hiring freeze, listings turned off, or an unrelated board with the same name.No
not_resolvedNo supported board found. Almost always an ATS outside the seven above.No
board_errorThe board answered with an error or timed out.Yes
skipped_charge_limitThe run hit the maximum charge you set for it before reaching this company, so it was never fetched.Yes, with a higher cap

Good to know

  • A result is never silently empty. A company that returns no openings always tells you which of the three cases above it is, with the boards that were tried.
  • board_empty is not proof of identity. With zero openings there is no company name on the board to check against, so we report that a board with that slug exists, not that it is definitely that company's.
  • Filters are applied after fetching, because the boards don't expose them. Setting one pulls the whole board, which is slower but complete.
  • departmentFilter is the expensive one on Greenhouse boards, so only set it when you need it.
  • Boards with more than 1000 open roles are capped; truncated: true tells you when that happened.
  • Location is parsed conservatively: an uncertain field is null, never a guess. A role listed for a continent or a bloc ("North America", "EMEA") reports that as the region and leaves country empty, because a multi-country scope is not one country. A token we can't confirm is a country becomes the region instead, so "Bengaluru, Karnataka" gives you the region, not a fictional country. Where a job lists several sites in one comma-separated string, the first is used as the primary; location.raw always carries the board's original text.

Typical uses

Recruiting and sourcing pipelines · sales and market intelligence (who's hiring for what) · tracking hiring at a portfolio or a competitor set · building a niche job board from real employer boards.