ATS Job Listings: Personio, Teamtailor, Workable, Recruitee avatar

ATS Job Listings: Personio, Teamtailor, Workable, Recruitee

Pricing

from $1.50 / 1,000 results

Go to Apify Store
ATS Job Listings: Personio, Teamtailor, Workable, Recruitee

ATS Job Listings: Personio, Teamtailor, Workable, Recruitee

Get open jobs from company career sites on Personio, Teamtailor, Workable and Recruitee in one unified, PII-free format. Paste careers URLs or company slugs and filter by keyword, location, department or remote.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

DatLab

DatLab

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

13 hours ago

Last modified

Categories

Features

Limited permissions

Share

ATS Job Listings Scraper: Personio, Teamtailor, Workable, Recruitee

An ATS job scraper for public career pages: get every open job from company sites that run on Personio, Teamtailor, Workable or Recruitee, all in one clean, unified, PII-free format. Paste careers-page URLs or company slugs — no login required. The Actor detects the platform, reads the company's official public job feed (Personio, Teamtailor, Workable and Recruitee career pages / public jobs APIs) and returns structured jobs you can filter by keyword, location, department, remote status and posting date.

  • ✅ 4 ATS platforms, 1 schema: the same fields whichever ATS a company uses
  • ✅ Auto-detection from any careers URL, including custom domains (careers.company.com)
  • ✅ No browser, no proxies needed: lightweight HTTP requests to public feeds, so it's fast and cheap
  • ✅ Privacy-safe output: recruiter / hiring-manager names, emails and phone numbers are removed
  • ✅ Optional full job descriptions (plain text or sanitized HTML)

Use cases

  • Track hiring at target accounts (sales intelligence, "who is hiring engineers in Berlin?")
  • Build niche job boards and job alerts
  • Labour-market and competitor research
  • Feed HR-tech / recruiting tools with fresh postings

Input

FieldDescription
careersUrlsAny careers URL. The platform is auto-detected.
personioCompanies / teamtailorCompanies / workableCompanies / recruiteeCompaniesCompany slugs (or URLs) per platform
keywordsMatch ANY word in the title/department (and description if included)
locations, departmentsSubstring filters (ANY)
remoteOnly, postedWithinDaysRemote-only and recency filters
maxItems, maxItemsPerCompanyResult caps (0 = unlimited)
includeDescription, descriptionFormatAdd the job description as text, html or both

Example:

{
"careersUrls": ["https://checkmk-gmbh.jobs.personio.de/", "https://apply.workable.com/ottimate/"],
"teamtailorCompanies": ["agilelab"],
"recruiteeCompanies": ["trackman"],
"keywords": ["engineer", "developer"],
"remoteOnly": false,
"maxItems": 100,
"includeDescription": true
}

Where do I find the slug?

PlatformCareers URLSlug
Personiohttps://checkmk-gmbh.jobs.personio.decheckmk-gmbh
Teamtailorhttps://agilelab.teamtailor.comagilelab
Workablehttps://apply.workable.com/ottimate/ottimate
Recruiteehttps://trackman.recruitee.comtrackman

Not sure? Just paste the URL into careersUrls.

Output

One dataset item per job:

{
"platform": "personio",
"company": "Checkmk GmbH",
"companySlug": "checkmk-gmbh",
"jobId": "2824650",
"title": "Billing Specialist (m/f/d)",
"department": "Finance & Risk",
"location": "Munich; Remote",
"country": null,
"remote": true,
"workplaceType": "remote",
"employmentType": "full-time, permanent",
"postedAt": "2026-10-02T09:55:41.000Z",
"url": "https://checkmk-gmbh.jobs.personio.de/job/2824650",
"description": "Your mission\n\n * Invoicing: You are responsible for invoicing all of our business lines …",
"scrapedAt": "2026-10-28T23:37:06.732Z"
}
FieldNotes
platformpersonio · teamtailor · workable · recruitee
workplaceTyperemote · hybrid · onsite · null (when the ATS doesn't say)
countryISO-3166 alpha-2 when the ATS provides it (Personio feeds don't)
employmentTypeAs labelled by the ATS (Teamtailor's feed has none, so it's null)
postedAt / scrapedAtISO 8601, UTC
description / descriptionHtmlOnly when includeDescription is on

A RUN_SUMMARY record in the key-value store lists every company with jobs found and saved, plus status (for example "public feed disabled").

Data coverage by platform

PersonioTeamtailorWorkableRecruitee
Department✅✅✅✅
Location / country✅ / –✅ / ✅✅ / ✅✅ / ✅
Remote / hybridremote only (from office names)✅remote only✅
Employment type✅–✅✅
Description✅✅✅✅

Pricing

This Actor uses pay per result: $1.50 per 1,000 jobs ($0.0015 per job in the dataset). You don't pay extra for companies with no open jobs or feeds that fail, because only returned job rows are charged.

  • 100 jobs ≈ $0.15, 1,000 jobs = $1.50, 10,000 jobs = $15
  • Filters (keywords, locations, remoteOnly, postedWithinDays …) are applied before results are saved, so you only pay for jobs that match.
  • Set Maximum cost per run in the run options to cap spending.
  • Apify's free plan includes monthly credit you can use to try it.

The live price list is on the Pricing tab of this page.

FAQ

Which companies does it work for? Any company whose careers site runs on Personio, Teamtailor, Workable or Recruitee, including custom domains like careers.company.com. Paste the careers URL and the platform is detected automatically.

Do I need an account, API key or proxy? No. It reads the public job feeds each ATS publishes for job boards and aggregators.

How fresh is the data? Live: every run reads the current feed, so you get the jobs that are open right now. Schedule it (e.g. daily) to track new postings.

Can I get the full job description? Yes. Turn on includeDescription and choose plain text or sanitized HTML with descriptionFormat.

Why does a company return 0 jobs? It may have no open positions, or it switched its public feed off. RUN_SUMMARY shows the status for each company.

Can I export to CSV, Excel or Google Sheets? Yes. Download the dataset as JSON, CSV, Excel or XML, or use Apify integrations (Make, Zapier, Google Sheets, webhooks, API).

Privacy

This Actor only outputs information about the job, never about people:

  • Structured person fields the ATS exposes are never read (e.g. Recruitee mailbox_email). Neither are office street addresses or postcodes (Teamtailor).
  • Emails and phone numbers inside descriptions are removed. So are mailto:/tel: links, labelled contact lines ("Your contact: …", "Ansprechpartnerin: …") and contact sentences ("please contact Jane Doe at …").
  • Removing free text is heuristic. Plain-text output gets the strictest cleaning; HTML output is best-effort.

Limits & tips

  • A company can disable its public feed (Teamtailor/Personio). It then appears in RUN_SUMMARY with an HTTP 404 or "no open positions".
  • Workable sometimes lists the same job once per location. Results are deduplicated by job ID.
  • Requests are rate-limited politely (default 60/min overall and at most ~2/s per site).
  • The Actor reads only public job feeds that companies publish so their jobs can be listed on job boards. It doesn't log in or bypass access controls, and it rate-limits its requests politely.
  • It's built to return job data, not personal data. Contact details are stripped (see Privacy), but job descriptions are free text written by the employer, so check the output before you reuse it.
  • Job posts remain the content of the employers. You're responsible for using the data in line with applicable law (e.g. GDPR) and the terms of the sites involved.
  • Not affiliated with or endorsed by Personio, Teamtailor, Workable or Recruitee.

Running on Apify

You can run this Actor on the Apify platform from the Console, the API, a schedule, integrations (webhooks, Slack, Google Sheets, Make, Zapier) or MCP.

Other DatLab actors