Career Page Job Postings Scraper
Pricing
from $0.30 / 1,000 job record saveds
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
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
26
Total users
9
Monthly active users
0.11 hours
Issues response
3 hours ago
Last modified
Categories
Share
Collect public job postings from company careers pages and linked public applicant tracking system (ATS) pages. Export normalized job records for recruiting research, hiring analysis or your own reporting workflow.
Quick start
- Add a public company careers URL such as the Stripe or Notion pages below.
- Set your saved-job and page limits. Enable details if you need fields from linked job pages.
- Click Start and open the dataset when the run finishes.
{"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"]}
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
What you get
- Starts from one or more public company careers URLs.
- Detects job posting links on the page and explicitly embedded public Trac vacancy boards.
- Optionally follows linked public job detail pages.
- Normalizes every saved job into one dataset with consistent fields.
- Preserves useful saved jobs when individual sources are unavailable. Essential storage, billing and configuration failures remain fatal.
Public job pages with JobPosting structured data can also supply descriptions, employment types, dates, salaries and application URLs when present, including when a job page is the supplied starting URL. With includeDetails enabled, matching linked structured details are read before keyword filtering and saving. Navigation links are discovery hints, not job records. Genuine listings remain available when optional detail extraction fails or reaches the page limit, except when description exclusions are requested (see below); inspect RUN_SUMMARY for source errors and truncation.
Cancer Research public Workday vacancies
Use the official-advertised Cancer Research English board below. The finite Workday adapter supports this exact tenant/site/locale plus the separately observed Bupa board described below; arbitrary Workday boards and direct job starts are not supported. Older unavailable careers URLs are not silently replaced.
{"startUrls": [{ "url": "https://cancerresearchuk.wd3.myworkdayjobs.com/en-US/External_Careers" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
The public search collects only the first five matches and warns when more exist. Bootstrap, read-only search and each optional detail share the page budget. Unsupported URL queries/fragments, other sites/locales and direct-job starts skip with a warning before requests; use Actor keyword filters. Matching role descriptions are read before filtering and saving, with salary, contract/time type, location, posting date and work arrangements when supported. Contact/application-instruction and recruitment-process sections are excluded. Employers come from the matching public hiring organization, not the board name: a Cancer Research Horizons role may name Cancer Research Technology rather than Cancer Research UK. Listing-only employers/descriptions remain unknown when details are disabled, unavailable or capped. The source's date-only posting end date is labelled separately in the description if present; it may differ from the role prose's closing date, and no timezone is inferred. Account, application, authentication, file and state endpoints are never visited; public buyer links are output-only. This corrected recipe does not establish complete inventory coverage.
Bupa public Workday vacancies
The separately observed public board accepts this unprefixed starting URL (not /en-US/EXT_CAREER):
{"startUrls": [{ "url": "https://bupa.wd3.myworkdayjobs.com/EXT_CAREER" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
The same first-five coverage and shared bootstrap/search/detail budget apply. Matching role details supply the actual hiring organization, supported salary, time type, location and posting date before keyword filtering and saving. The observed Sales Advisor role names Bupa Insurance Services Limited; do not assume every board vacancy has this employer or is in the UK. Listing-only employer/description fields remain unknown. Unsupported query/fragment filters, locale-prefixed paths, other sites and direct-job starts warn and skip before requests; use Actor keyword filters. Applications, sign-in and account/state resources are not visited. The exact legacy https://www.bupa.co.uk/careers starting URL also uses this verified board, with a routing warning and the original sourceUrl retained. The official current careers directory links its public vacancies to this Workday tenant/site. This finite continuation avoids retrying an inaccessible legacy page; it does not apply to arbitrary Bupa paths or discard URL filters. Query/fragment filters on the legacy route warn and skip before requests. The first-five/page-budget limitation remains explicit, not proof of full inventory extraction.
Lambeth Council public vacancies
Use Lambeth's advertised English board below, or its direct /job/<Id> posting. This is a separately verified tenant: Croydon URLs, employers and posting identities are never reused for Lambeth. Older unavailable council URLs are not silently replaced.
{"startUrls": [{ "url": "https://effe.fa.em3.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
Only the first five public matches are collected, with an explicit warning when more exist. Bootstrap, listing and each optional detail share the page budget; direct posting starts need bootstrap and detail requests. Unsupported URL queries/fragments, other sites and other languages skip with a warning before requests; use Actor keyword filters. Matching details supply meaningful role descriptions before filtering, plus supported salary, contract, location, posting date and hybrid-work information. Employers require explicit role evidence or a supplied legal employer; listing-only fields remain unknown. Application instructions and contact sections are excluded from Lambeth role descriptions; candidate, sign-in, favourite, PDF and application resources are never visited. This corrected recipe does not claim full directory coverage.
Croydon Council public vacancies
Use the council-advertised English Oracle CandidateExperience board below, or its direct /job/<Id> vacancy URL. Only the separately verified Croydon and Lambeth tenants and sites are supported, not arbitrary Oracle boards. Older unavailable council URLs are not silently replaced.
{"startUrls": [{ "url": "https://egpa.fa.em3.oraclecloud.com/hcmUI/CandidateExperience/en/sites/CX_1001" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
Coverage is limited to the first five public matches, with an explicit warning when more exist. Bootstrap, listing and each optional detail share the page budget. Direct vacancy starts read the bootstrap and matching public detail. URL query/fragment filters, other sites and other languages are unsupported and skipped with a warning before requests; use Actor keyword filters instead. With details enabled, matching public role descriptions, salary, location, contract and posting date are extracted before filtering and saving. Employers remain unknown unless explicitly evidenced; tenant names and internal organization IDs are not employer proof. Listing-only rows have no description and may lack other fields. Candidate, sign-in, favourite and application endpoints are never visited. Buyer links point to the public vacancy, not the API. This corrected recipe does not establish complete directory coverage.
NHS Blood and Transplant vacancies
Use https://jobs.nhsbt.nhs.uk/Home/Job or an official /Job/JobDetail?JobId=<ID> URL. The listing route reads the advertised public search and collects at most the first twelve cards; it warns when more matches exist. The hidden initial no-results placeholder is not treated as an empty search. Initial page, search and details all consume the shared page budget. URL search filters/fragments are currently unsupported and skipped with an explicit warning before requests; use the unfiltered URL and Actor keyword filters instead.
{"startUrls": [{ "url": "https://jobs.nhsbt.nhs.uk/Home/Job" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
Enable details for meaningful descriptions and actual employer, salary, location, contract and date fields when supplied by matching structured vacancies. JobId query values remain distinct; the visible reference number can differ from JobId. Listing-only employer and missing fields remain unknown, including when details fail or reach the limit. Favourite, alert, account and application links are never visited. This corrected recipe does not replace older URLs or prove exhaustive coverage.
Southwark Council vacancies
Use https://jobs.southwark.gov.uk/job-search/ or a direct official /jobs/<slug>-scNNNNN vacancy URL. The search route reads the site's advertised read-only search with tracking disabled; it collects only the first ten cards and warns when more vacancies exist. The initial page, search request and each optional detail consume the shared page budget. Search URL queries/fragments are unsupported and skipped with an explicit warning rather than silently dropping filters; use Actor keyword filters instead.
{"startUrls": [{ "url": "https://jobs.southwark.gov.uk/job-search/" }],"maxItems": 1,"maxPagesPerSite": 4,"includeDetails": true,"sameDomainOnly": true}
Matching details supply role descriptions, salary, contract, location and closing dates (in descriptionText) before keyword filtering. Employer names require explicit role evidence; listing-only employers remain unknown. Application and PDF links are never visited or saved as separate jobs. This corrected recipe does not replace older unavailable URLs or prove full directory coverage.
London City Hall vacancies
Use the official current-vacancies URL below, or a direct vacancy beneath that path. The parser reads independently marked Job cards and, with details enabled, their matching reference, salary, contract and role description before filtering. Closing dates are retained in descriptionText. Application URLs are returned when available but never visited.
{"startUrls": [{ "url": "https://www.london.gov.uk/take-part/working-city-hall/current-vacancies" }],"maxItems": 10,"maxPagesPerSite": 12,"includeDetails": true,"sameDomainOnly": true}
The directory contains multiple employing bodies. Listing-only records have companyName: null; details name an employer only with explicit role-level evidence. Job cards outside the supported /take-part/working-city-hall/current-vacancies/<slug> path are skipped with a warning, not fetched or counted as extracted. This is a corrected recipe, not automatic replacement of older unavailable City Hall URLs or a guarantee of complete directory coverage.
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.
Common workflows
Compare hiring across named companies. Supply the Stripe and Notion careers URLs, set a bounded page budget and export the jobs with their source URLs. Group the returned roles by company, department or location in your spreadsheet. This measures the collected sample, not every vacancy on the internet.
Review a focused role family. Use keywords such as engineer or sales and exclude intern if that suits your research. Inspect matched titles and descriptions before counting them. Keywords are text matches, not dedicated salary or remote-work filters.
Build your own change report. Schedule a saved task, retain successive datasets and compare their stableId or canonical job URLs in your workflow. The Actor retrieves the current public records. Deduplication across runs, new-role alerts and interpretation belong to your downstream process.
Public ATP and CSI boards
Use the unfiltered https://jobs.atpsg.com/ or https://jobs.csicompanies.com/ board and Actor keyword filters. Searches read up to 20 vacancies per page within your page/item limits, preserving descriptions and available location, category, employment type, date and salary information. CSI configuration consumes one page of the shared budget before search pages. Board URL queries/fragments are skipped with a warning rather than silently discarded. Direct CSI vacancy URLs are not covered by this board-search integration. Inaccessible or inconsistent search responses are not proof of no jobs; diagnostics and useful results from other sources are retained.
Input settings
| Field | Type | Description |
|---|---|---|
startUrls | array | Public career page URLs to scan. |
maxItems | integer | Maximum saved job records across all URLs. |
maxPagesPerSite | integer | Maximum pages fetched per start URL, including linked job detail pages. |
includeDetails | boolean | Follow detected public job pages to enrich records when possible. |
keywords | array | Save only jobs matching at least one keyword in title, job URL, department, location or description. |
excludeKeywords | array | Skip jobs matching any excluded keyword. |
sameDomainOnly | boolean | Follow and save links within the same registrable domain, plus recognized public ATS job hosts or an explicitly embedded Trac board. Different NHS trusts or councils are not treated as one domain. |
resumePending | boolean | Opt in to source URLs in matching accessible PENDING_WORK in the current key-value store. It does not locate arbitrary prior-run storage or continue automatically. |
Output data
companyName- inferred company name when available.stableId- stable ATS ID when the public source provides one, otherwise a canonical job URL identifier.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.
An example public job record from the earlier documentation is shown below. Fields vary by source and can be null.
{"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"}
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
This Actor uses pay-per-event pricing: a one-time start event is charged when the run first saves a job, followed by an item event for each saved job record. Runs that save no jobs do not trigger those events. The run checks capacity for the start plus first item before fetching and stops further work when item capacity is exhausted. A rejected or unfulfilled charge remains fatal. Any already-saved row stays accessible. Resurrected executions reuse the SDK's start-charge state rather than charging start again.
See the Pricing tab for current rates and volume discounts.
Tips for best results
- Use public careers pages. Avoid login-only applicant portals.
- Start with a linked public board. Greenhouse, Lever and Ashby listing responses are used when available. Explicitly embedded Trac boards use their public feed, with salary, speciality, working pattern and available details. Other pages use bounded discovery.
- Use the current vacancy link. An old or guessed careers path may return 404 even when the organisation is hiring. Follow the organisation’s current website link. Access errors do not mean there are no vacancies.
- Inspect Trac coverage. Sector lists are discovery, not job records. Feed, sector and detail visits all consume
maxPagesPerSite;RUN_SUMMARY.sourceOutcomes[].pageLimitReachedreports when discovery exceeded that bound. Failed details retain the listing with a source warning unless requested description exclusions cannot be evaluated, not a claim of complete extraction. - Keep crawling focused. Leave
sameDomainOnlyenabled unless you deliberately need broader discovery. - Test your keywords. Inspect a small sample before increasing limits.
- Budget enough pages. Detail-page visits count toward
maxPagesPerSite.
NHS Jobs public search recipe
Supply an NHS Jobs search or advert URL explicitly, for example:
{"startUrls": [{"url": "https://www.jobs.nhs.uk/candidate/search/results?employer=Central%20and%20North%20West%20London"}],"includeDetails": true,"maxItems": 1,"maxPagesPerSite": 2}
Employer searches are fuzzy: inspect each row's actual companyName, not just the query. Public cards provide title, employer, salary, location, contract and posted date when present; matching details add summary, duties and responsibilities before keyword filtering. Advert identity is stable across search/language query parameters. Only advertised result pagination is followed, within the shared page limit; Apply, login and save-job links are not visited. Optional detail failures retain the listing with a warning. A two-page budget is a small sample, not complete employer coverage.
This is an explicit alternative recipe, not an automatic replacement for an employer website. Blocked CNWL career URLs and stale or unavailable source URLs are not repaired by supplying this NHS Jobs URL.
Limits and caveats
The actor only works with publicly reachable job listings. It does not use user cookies, private accounts, paid credentials, applicant records, or application endpoints. It rejects private/local network URLs. Valid empty job boards, pages with no usable records, filter-only results and unavailable targets can complete successfully without dataset rows. HTTP access restrictions do not establish whether a target is private or deleted. Unavailable reasons remain unknown unless proven. The confirmed nonexistent www.nhsbtcareers.com hostname is handled as unavailable only when structured DNS lookup evidence matches it; other resolver errors, including transient DNS failures, remain actionable. The confirmed Lambeth /jobs-and-careers missing page is reported as unavailable when it displays an explicit page-not-found heading, even with HTTP 200. Neither means the organisation has no vacancies. Check its current careers link; supplied URLs are not silently replaced. When an individual Ashby vacancy URL is supplied, only that exact publicly listed vacancy is eligible; a missing or unlisted vacancy is not replaced by another board role.
For compatibility, RUN_SUMMARY.failedSources retains its legacy aggregate diagnostic count (including unavailable/skipped inputs and linked-detail warnings); it is not the number of terminal failed runs. Use sourceFailureCount for distinct sources with actionable failures, unavailableSources and skippedSources for expected unavailable/skipped diagnostics, and limitedSources for requested page/discovery limits. These counts can overlap for a mixed source; per-source failureCount, unavailableCount and skippedCount count individual diagnostics. Page-cap exhaustion alone is limited coverage, not failure or proof of complete extraction. Root, listing, feed, search and detail visits share the caller's page cap (default 25). RUN_SUMMARY records per-source outcomes, saved/candidate/filter/duplicate counts and linked-page failures outside the dataset. Challenges and suspected parser defects retain actionable diagnostics. Malformed responses or systemic transport failures with no fetched sources still fail. Configuration, essential storage and billing errors remain fatal, even in mixed batches. Useful records from other sources are preserved. Processing admission is capped at 270 seconds from the original run start (or an earlier platform cutoff with a 30-second reserve), even if the platform timeout is extended or disabled. The cutoff is persisted so resurrection cannot renew it. Deadline-limited work saves PENDING_WORK for an opt-in new follow-up run. This admission cutoff is not a guarantee that a hung SDK/storage/DNS operation terminates at that instant. Empty success is not proof that an extraction route has been restored.
A follow-up run that resumes matching pending work is a new run with its own charges. Respect applicable site terms and access rules, privacy requirements and employment-data regulations. Do not collect private applicant data or content behind authentication.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~career-page-job-postings-scraper/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"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"]}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const 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"]};const run = await client.actor('fetch_cat/career-page-job-postings-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import jsonimport osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run_input = json.loads('''{"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"]}''')run = client.actor('fetch_cat/career-page-job-postings-scraper').call(run_input=run_input)items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
MCP and AI agents
You can ask your AI assistant to collect data with Career Page Job Postings Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Career Page Job Postings Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/career-page-job-postings-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Career Page Job Postings Scraper by Fetch Cat, or give it the identifier fetch_cat/career-page-job-postings-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Collect up to 50 public jobs from these Stripe and Notion careers pages, including available descriptions.”
- “Retrieve up to 20 engineering and sales jobs from https://stripe.com/jobs/search, excluding intern matches.”
- “Collect up to 50 public jobs from https://stripe.com/jobs/search and https://www.notion.com/careers, then group the saved rows by company and location.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
Runtime memory
The default run uses 512 MiB. The parser's JavaScript heap is capped at 256 MiB so repeated page parsing triggers garbage collection before filling the container. Larger run-memory settings do not increase this heap cap. Large individual pages can still exceed it. An actual memory failure remains a failed run, not an empty result.
Public job detail pages with JobPosting structured data also provide descriptions, employment types, dates, salaries and application URLs when present.
FAQ
Can it scrape every career site? No. Public career-page formats and access vary. Useful rows are retained when an individual target is unavailable, while the failure boundaries above still apply.
Does it need cookies? No. It targets public pages and does not use user cookies or private account credentials.
Can I filter by role or location?
Use keywords and excludeKeywords. Matching checks title, job URL, department, location and description when available. When includeDetails is true and excludeKeywords is nonempty, a job with no usable description is not saved or charged as a verified match. RUN_SUMMARY.incompleteFilters and per-source incompleteFilters / incompleteFilterReasons distinguish page-limit, detail-failed and description-unavailable cases from known filtered-out jobs. A warning and filter-evaluation-incomplete (or records-saved-with-incomplete-filters for mixed results) report this limit; it is not proof of no matching jobs or exhaustive filtering. Jobs with observed excluded text can still be rejected conclusively. Listing-only fallback remains available when details are disabled or no exclusions are supplied; these modes do not verify exclusions against missing descriptions. Inclusion text found only in successfully obtained details is still eligible.
Will it follow ATS links?
With includeDetails enabled it can follow public ATS job URLs linked from a careers page, within maxPagesPerSite.
Related Actors
- Google Maps Places Scraper — retrieve business place records, including available address and contact details.
- Dice Jobs Scraper — collect technology job postings from Dice.
- Booking.com Hotels Scraper — retrieve accommodation listings and hotel details for hospitality research.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥
Discovered Ashby vacancies
When a company career page links to an individual Ashby vacancy, the scraper returns only that matching publicly listed role with its available job details. Other roles on the same board are not substituted. Existing keyword filters and page limits still apply.
Bounded Trac keyword discovery
On supported embedded Trac boards, keyword discovery uses the public search form when available. Specific role terms take priority over broad seniority labels; the final include/exclude filters still apply to every complete job description. Other searches and ordinary sector discovery remain subject to the shared page limit, so limited coverage and unfinished description checks are reported in RUN_SUMMARY. The original source URL remains attached to each record. The legacy Guy’s and St Thomas’ /careers URL uses the public board verified on its official current-vacancies page, with a visible routing notice. The original source URL and actual employers (including legitimate partner postings) are preserved; each response is checked against the verified board and each detail against its listed employer. Query or fragment filters on this legacy URL are unsupported and skipped with an explicit warning before requests; use the unfiltered URL and Actor keyword filters.