Career Page Job Postings Scraper avatar

Career Page Job Postings Scraper

Pricing

from $0.30 / 1,000 job record saveds

Go to Apify Store
Career Page Job Postings Scraper

Career Page Job Postings Scraper

Scrape public company career pages and linked ATS job listings into normalized job posting datasets.

Pricing

from $0.30 / 1,000 job record saveds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract public job postings from company career pages and linked applicant tracking system (ATS) job pages. Use it to monitor hiring signals, build recruiting lead lists, enrich company data, or track labor-market changes without manually checking every careers page.

Value proposition

Career Page Job Postings Scraper turns messy public careers pages into a clean job-posting dataset you can plug into recruiting, sales, market-intelligence, and alerting workflows.

What does it do?

  • Starts from one or more public company careers URLs.
  • Detects job posting links on the page.
  • Optionally follows linked public job detail pages.
  • Normalizes every saved job into one dataset with consistent fields.
  • Keeps going when one URL is blocked or returns no jobs, so you can process mixed lists safely.

Example input

{
"startUrls": [
{ "url": "https://stripe.com/jobs/search" },
{ "url": "https://www.notion.com/careers" }
],
"maxItems": 50,
"maxPagesPerSite": 25,
"includeDetails": true,
"sameDomainOnly": true,
"keywords": ["engineer", "sales"],
"excludeKeywords": ["intern"]
}

Example output

{
"companyName": "Notion",
"sourceUrl": "https://www.notion.com/careers",
"jobUrl": "https://jobs.ashbyhq.com/notion/05e14247-17c4-4e98-9a13-53828a4e2f13",
"title": "Outbound Business Development Representative, AMER",
"department": null,
"team": null,
"location": "New York, New York",
"workplaceType": null,
"employmentType": null,
"postedAt": null,
"descriptionText": null,
"applyUrl": "https://jobs.ashbyhq.com/notion/05e14247-17c4-4e98-9a13-53828a4e2f13",
"salaryText": null,
"atsVendor": "ashbyhq",
"extractionMethod": "job-link",
"scrapedAt": "2026-07-12T14:02:42.961Z"
}

Input settings

FieldTypeDescription
startUrlsarrayPublic career page URLs to scan.
maxItemsintegerMaximum saved job records across all URLs.
maxPagesPerSiteintegerMaximum pages fetched per start URL, including linked job detail pages.
includeDetailsbooleanFollow detected public job pages to enrich records when possible.
keywordsarraySave only jobs matching at least one keyword in title, URL, location, or description.
excludeKeywordsarraySkip jobs matching any excluded keyword.
sameDomainOnlybooleanFollow same-domain links plus recognized public ATS job hosts linked from the career page.

Output fields

  • companyName - inferred company name when available.
  • sourceUrl - original career page URL.
  • jobUrl - canonical job posting URL.
  • title - job title.
  • department, team - department/team when detected.
  • location - job location text when detected.
  • workplaceType - remote/hybrid/on-site signal when detected.
  • employmentType - full-time, part-time, contract, or internship signal when detected.
  • postedAt - posted date when available.
  • descriptionText - plain-text job description when detail extraction is available.
  • applyUrl - application or job detail URL.
  • salaryText - salary/pay range text when present.
  • atsVendor - detected ATS vendor such as Ashby, Greenhouse, Lever, or Workable.
  • extractionMethod - how the record was found.
  • scrapedAt - ISO timestamp for the scrape.

Pricing

This actor uses pay-per-event pricing:

  • Run start: $0.005 per run.
  • Saved job record: about $0.50 per 1,000 saved jobs before volume discounts.
TierPrice per saved jobApprox. per 1,000 jobs
Free$0.0005750.575 USD
Bronze$0.0005000.500 USD
Silver$0.0003900.390 USD
Gold$0.0003000.300 USD
Platinum$0.0002000.200 USD
Diamond$0.0001400.140 USD

Who is it for

  • Recruiting teams tracking hiring demand across target companies.
  • Sales and lead generation teams looking for expansion or budget signals.
  • Labor-market analysts monitoring role, department, and location trends.
  • Data teams that need repeatable career-page data in a normalized format.

Use cases

  • Monitor target accounts for new hiring signals.
  • Build recruiter sourcing lists from public company websites.
  • Track competitor hiring by department, location, or role family.
  • Feed data warehouses with normalized public job posting records.
  • Trigger alerts when target companies add matching roles.

Tips for best results

  • Use public careers or jobs pages, not login-only applicant portals.
  • Keep sameDomainOnly enabled unless you intentionally want broader crawling.
  • Use keywords to focus large career sites on specific teams or roles.
  • Increase maxPagesPerSite for companies with many paginated job listings.

Limits and responsible use

The actor only works with publicly reachable pages. It does not use user cookies, private accounts, or paid credentials, and it does not guarantee access to pages protected by CAPTCHA, login walls, strict rate limits, or hard anti-bot systems.

Legality

This actor is intended for public job-posting data. Always respect website terms, robots and access rules where applicable, privacy requirements, and employment-data regulations in your jurisdiction. Do not use it to collect private applicant data or access information behind authentication.

API usage

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('<ANNA_APIFY_USERNAME>/career-page-job-postings-scraper').call({
startUrls: [{ url: 'https://stripe.com/jobs/search' }],
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('<ANNA_APIFY_USERNAME>/career-page-job-postings-scraper').call(run_input={
'startUrls': [{'url': 'https://stripe.com/jobs/search'}],
'maxItems': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/<ANNA_APIFY_USERNAME>~career-page-job-postings-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://stripe.com/jobs/search"}],"maxItems":50}'

MCP and agent usage

Use this actor from Apify MCP to let AI agents monitor career pages and retrieve structured job postings. Connect compatible AI clients through https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/career-page-job-postings-scraper.

CLI setup:

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/career-page-job-postings-scraper"

JSON config example:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/career-page-job-postings-scraper"
}
}
}

Example prompts:

  • "Find public sales and engineering jobs from these company career pages."
  • "Monitor this list of career URLs and return new remote roles."
  • "Extract normalized job postings and include job URLs and locations."

FAQ

Can it scrape every career site?
No. Career pages vary widely. The actor is designed to return partial results and skip blocked pages instead of failing the whole run.

Does it need proxies or cookies?
No cookies are required. The first version is HTTP-first and targets public pages.

Can I filter by role or location?
Yes. Use keywords and excludeKeywords; filtering checks title, URL, location, and description when available.

Will it follow ATS links?
Yes. With includeDetails enabled it can follow public ATS job URLs linked from the career page, subject to maxPagesPerSite.

Support

Questions or missing fields? Open an issue on the actor page and include:

  • The run ID or run URL.
  • The input JSON you used.
  • The public career page URL you expected to scrape.
  • The expected output and actual output you received.
  • Any reproducible public URL that demonstrates the missing or incorrect job data.