Career page and ATS jobs scraper for 41 systems: Workday, SuccessFactors, Greenhouse, Lever, Phenom, iCIMS, Taleo, Oracle Recruiting, Eightfold, SmartRecruiters, Refline, Prospective and more. Returns title, company, location, department, apply URL and description. HTTP-only, pay per result.
Company career page URLs to scrape. Supports 36 platforms: Lever, Greenhouse, Workable, Ashby, Teamtailor, Personio, SmartRecruiters, BambooHR, Workday, iCIMS, Recruitee, JOIN, Pinpoint, Rippling, JazzHR, Comeet, Phenom, Eightfold, Oracle Recruiting, TalentBrew, ADP, Taleo, Avature, Brassring, SuccessFactors, iCIMS Jibe, Refline (apply.refline.ch/{id}), Prospective (ohws.prospective.ch careercenter id or URL; vanity portals that list their own postings, such as stellen.tg.ch, work too; vanity portals such as jobs.admin.ch need {"platform":"prospective","company":"https://jobs.admin.ch"}), Abacus Job Portal (app.jobportal.abaservices.ch/job-overview/{portal-id} or a slug URL such as https://jobs.cseb.ch/job-overview/CSEB; an employer on its own domain works with {"platform":"abacus","company":"https://jobs.shkb.ch"}; not the same as Abacus Umantis), Abacus Umantis (recruitingapp-{id}.umantis.com/Jobs/All; a customer host or career page that serves Umantis needs {"platform":"umantis","company":"https://jobs.swisstph.ch/"}), Jobalino (company slug or my.jobalino.ch list URL; an employer page that embeds the list works with {"platform":"jobalino","company":"https://www.risch.ch/jobs"}), Dualoo (jobs.dualoo.com/portal/{code}; an employer page that links the portal works with {"platform":"dualoo","company":"https://iob.ch/education-careers/open-positions/"}), B-ITE (tenant URL such as recruiting.fz-juelich.de; an employer page that links its postings works with {"platform":"bite","company":"https://www.helmholtz-munich.de/karriere/stellenangebote"}), d.vinci (tenant host such as jobs.dkfz.de, jobs.dzne.de or jobs.pse.kit.edu; an employer page that embeds the job widget works with {"platform":"dvinci","company":"https://www.kit.edu/karriere/stellenangebote.php"}), Solique (live.solique.ch/{tenant}/ such as https://live.solique.ch/ksw/, or a tenant name with platform solique; an employer page that links or embeds Solique works with {"platform":"solique","company":"https://www.rieter.com/careers/open-positions"}), and ETH Zurich (jobs.ethz.ch). Pass URLs as strings, or {"platform":"phenom","company":"https://careers-url"} for vanity domains (also needed for iCIMS Jibe sites: {"platform":"icims_jibe","company":"https://careers.costco.com"}). A company-page result can also be passed as {"url":"https://...","ats":"greenhouse"} (keys ats_system and ats_url work too); the names successfactors (= successfactors_rmk) and radancy (= talentbrew) are accepted. An entry may carry an optional "country" (ISO 3166-1 alpha-2, for example {"platform":"umantis","company":"https://recruitingapp-2782.umantis.com\",\"country\":\"CH\"}): rows of that board whose country cannot be resolved get it (country_source "query-default") so a country location filter keeps them; rows with a known other country are still dropped. Leave it out for global boards. An entry may also carry an optional "employer" for a shared board that serves the postings of several employers (the VITREA onlyfy tenant: {"platform":"onlyfy","company":"vitrea-gesundheit","employer":"Rehaklinik Seewis"}): only rows whose company matches (case, accent and punctuation insensitive, legal forms such as AG ignored, every word of the filter must occur in the company) are pushed and charged. The key ats_employer of a website-job-extractor summary row works too. Lever EU boards (https://jobs.eu.lever.co/optotune) and Teamtailor career sites on the employer's own domain ({"platform":"teamtailor","company":"https://jobs.liip.ch\"}) are accepted. An unsupported name ends with reason unsupported_platform and is never charged.
Type:array
Max Jobs Per Company
maxJobsPerCompany
Optional
Maximum number of jobs returned per company, counted AFTER the filters below (filtered-out jobs are never returned or charged). Set to 0 for all jobs: the actor then pages the company's whole list, up to a hard limit of 5000 jobs per company (the run logs a warning and the summary row reports hit_fetch_limit when it is reached).
Type:integer
Minimum:0
Maximum:10000
Default:500
Keywords
keywords
Optional
Optional. Return only jobs whose TITLE matches at least one of these words or phrases (OR). Case and accents are ignored; the description is not searched. Keyword rule: a keyword of 4 or more characters (after case and accent folding) matches anywhere inside the title; a keyword of 3 or fewer characters (for example TA, QA, PM) must match as a whole word, meaning the characters before and after it in the title are not letters or digits. So TA matches 'Lab TA (m/w/d)' and 'Biologielaborant/TA' but not 'Universitat' or 'Sanitar'. Where the career site has its own search (Workday, Oracle, Eightfold, Phenom, SmartRecruiters, Taleo) the keywords are sent to it so only matching jobs are paged; a local title check always runs afterwards. Example: ["nurse", "midwife"].
Type:array
Location
location
Optional
Optional. Return only jobs in this city, region or country, e.g. "London", "Germany" or "DE". Country names and ISO codes match in both directions. A remote job matches when it names no country or names the requested one; jobs without any location text are dropped when a location is set. Where the site offers a location filter it is used to page only matching jobs.
Type:string
Posted Within Days
postedWithinDays
Optional
Optional. Drop jobs posted more than this many days ago. Jobs with no posting date are KEPT (many career sites do not publish one). Workday only publishes relative dates such as "Posted 30+ Days Ago", which are read at day resolution.
Type:number
Minimum:0
Sort By
sortBy
Optional
Optional. "newest" puts the newest jobs first when the jobs carry a posting date. When any filter or sortBy is set and sortBy is omitted, "newest" is used. Sites with a server-side newest sort (Eightfold, Phenom, Oracle) are asked for it; for other sites the order is the site's own order whenever paging stops early because the cap is filled. "relevance" keeps the site's order. With none of keywords, location, postedWithinDays or sortBy set, the order is the site's order, exactly as in earlier versions.
Type:string
Options:
newestrelevance
Include Job Description
includeDescription
Optional
Include the full job description HTML in the output. Disable to reduce payload size. For Workday, enabling this fetches individual job details (slower but more data).
Type:boolean
Default:true
Detail Pages Only For Countries
detailCountries
Optional
Optional list of ISO 3166-1 alpha-2 country codes (for example CH, DE). Only used when Include Job Description is on and a board needs one extra request per posting for its description. Detail pages are then fetched only for rows whose country is in the list; rows of another country are still returned and charged as usual, just without the detail page (no description from it). A row whose country is not known yet is still fetched on a query that has a country or a location filter. Leave empty to fetch the detail page of every row (default). The number of skipped detail fetches is logged and shown in each summary row as detail_fetches_skipped.
Type:string[]
Include Summary Rows
includeSummaryRows
Optional
Add one summary row per company to the dataset (_type "job_extraction_done") with jobs_seen, jobs_after_filters, jobs_pushed, jobs_total_reported_by_site, filter_mode, pages_fetched and the reason a company returned nothing. Summary rows are never charged. Default: on when any of keywords, location, postedWithinDays, sortBy is set or maxJobsPerCompany is 0, otherwise off.
Type:boolean
Residential Proxy Fallback
residentialFallback
Optional
How the actor reaches career sites that block its normal connection. The actor goes direct first. When a site refuses it (timeout, reset, HTTP 403 or 429) it retries through an Apify datacenter proxy (not pinned to a country), and only when that fails too through an Apify residential proxy, which is the costly tier. A host stays on the tier that worked for the rest of that company, and a residential session is replaced by a new one only when it gets blocked. auto: use the ladder (default). off: never use residential proxies; a company that needs them ends as blocked with a clear reason in its summary row. Each company's summary row shows the tier it needed in proxy_tier.
Type:string
Default:auto
Options:
autooff
Max Residential Hosts
maxResidentialHosts
Optional
Upper limit of different career-site hosts that may use residential proxies in one run. A further host that would need residential ends as blocked. Default: 2 (residential costs more than the per-job price, so a run reads at most 2 residential hosts unless you raise this). Set a high number such as 1000 for no practical limit. A host beyond the limit ends as blocked with reason blocked_residential_cap in its summary row. Ignored when Residential Proxy Fallback is off.