Company Career Site Jobs Scraper (Europe)

Search open jobs on 8,600 company career sites: Personio, Recruitee, Teamtailor, Greenhouse, Lever, Ashby, SmartRecruiters, Workable.

Search open jobs on 8,600 company career sites: Personio, Recruitee, Teamtailor, Greenhouse, Lever, Ashby, SmartRecruiters, Workable. Daily refresh, job alerts, no recruiter data.

$3.00 / 1,000 · 100.0% success over 29 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
keywords array A job matches when its title contains one of these at the start of a word, ignoring case and accents: maler finds "Maler/in" and "Malermeister". Write them in the language the jobs are posted in. ["data engineer"]
locations array Keep jobs whose posted location contains one of these (München, Remote). A country name (Germany, Deutschland) also matches jobs whose system publishes that country. ["Berlin"]
countries array Two-letter codes, e.g. DE, NL. Personio and Greenhouse publish no country, so their jobs are left out by this filter; use Locations to reach them. -
systems array Only these systems. Empty means all of them. -
postedWithinDays integer Uses the posting date, or when the job first appeared on its board for systems without one. -
onlyNewJobs boolean Deliver only jobs that were not there on this search's previous run. Schedule it daily for a job alert; the first run delivers everything that matches. False
resetState boolean With Only new jobs: start over and deliver everything that matches. False
companies array One entry per company as system:token: greenhouse:stripe, lever:spotify, personio:acme, recruitee:acme, teamtailor:acme, ashby:acme, smartrecruiters:acme, workable:acme. A bare token like stripe is tried on Greenhouse and Lever. The token is the company's name in its careers URL, e.g. acme.jobs.personio.de or jobs.lever.co/acme. -
scrapeDetails boolean Include the full posting text. When searching, it is fetched live for the jobs delivered, so a large search takes longer with it on. True
maxItems integer Stop after this many jobs. A search delivers the newest first. 1000
reportFailures boolean When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. True

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

A real result row from a recent run:

{
  "commitment": "Full-time",
  "companyName": "ABOUT YOU SE & Co. KG",
  "companyToken": "aboutyougmbh",
  "country": "DE",
  "department": "Product & Tech",
  "firstSeenAt": "2026-10-17T03:00:27.302Z",
  "jobId": "744000156033409",
  "lastSeenAt": "2026-10-17T03:00:27.302Z",
  "location": "Berlin, , Germany",
  "office": "Engineering",
  "postedAt": "2026-10-16T15:31:04.999Z",
  "salary": null,
  "source": "smartrecruiters",
  "title": "Senior Data Engineer - Shop Analytics (all genders)",
  "updatedAt": null,
  "url": "https://jobs.smartrecruiters.com/ABOUTYOUGmbH/744000156033409",
  "workplaceType": "hybrid"
}
FieldTypeMeaning
jobId string The ATS's own job id.
source string Which ATS it came from.
companyToken string The company's board token.
companyName string Employer name.
title string Job title.
url string Public job posting URL.
location ['string', 'null'] Location as posted.
department ['string', 'null'] Department / function.
office ['string', 'null'] Office or team grouping.
postedAt ['string', 'null'] First published (ISO).
updatedAt ['string', 'null'] Last updated (Greenhouse; ISO).
workplaceType ['string', 'null'] onsite/hybrid/remote (Lever).
commitment ['string', 'null'] Employment commitment (Lever).
country ['string', 'null'] Two-letter country code, where the system publishes one (not Personio or Greenhouse).
salary ['string', 'null'] Salary as the company published it.
firstSeenAt ['string', 'null'] When the job first appeared in the daily snapshot (ISO); null when read live from companies.
lastSeenAt string The snapshot the row comes from, or the run time for companies read live (ISO).
description ['string', 'null'] Full posting text, markup stripped (scrapeDetails).

Health

100.0% success over 29 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.

The history behind this tool

This tool answers what a source shows today. Its output also feeds a series recorded every day and kept: Hiring history from company career sites. A run gives you the current market; the series is the part that cannot be reconstructed afterwards, because the source overwrites it.