Personio, Recruitee & Teamtailor Jobs API avatar

Personio, Recruitee & Teamtailor Jobs API

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Personio, Recruitee & Teamtailor Jobs API

Personio, Recruitee & Teamtailor Jobs API

Open jobs from company career sites on Personio, Recruitee and Teamtailor in one clean table: title, company, department, city, country, remote, contract, salary, skills and a link to the full ad. Filter by keyword, country, city and date, discover employers, or track new and removed jobs daily.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Belgair Data

Belgair Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Pay only for what changed. Schedule this Actor daily in tracking mode and each run returns only the jobs that are new, changed or removed since the last run, so you never pay for a job that did not change (see the example calculation under Pricing). It reads company career sites on Personio, Recruitee and Teamtailor and gives one clean table: title, company, department, city, country, remote or not, contract, salary (when published), skills, language, date and the link to the full job ad. Paste a list of companies or discover employers, and filter by keyword, country, city, department, remote and date. No API key, no login, no code.

The table does not contain the job text itself: read the full ad at its url. Job ads belong to the employers. Not affiliated with or endorsed by Personio, Recruitee (Tellent) or Teamtailor.

What can you use it for?

  • Job boards and newsletters. Fill a niche board ("Python jobs in Germany", "remote roles at Dutch scale-ups") with fresh postings straight from the employers' own career sites, in one schema for all three systems, each linking to the original ad.
  • Recruiting and staffing agencies. Watch the career sites of your target accounts and see every new opening the day it is published, with department, location and the skills it asks for.
  • Sales and hiring signals. A company that opens five roles asking for Kubernetes and AWS is growing its platform team. Track your prospect list and act on hiring signals before your competitors do.
  • Labour-market research. Count open roles by country, city, department, contract type or skill across European companies, with salaries where employers publish them.

Example output

One row per job, the same columns for Personio, Recruitee and Teamtailor (real rows from test runs):

[
{
"jobKey": "personio:bitcap:2825575",
"ats": "personio",
"jobId": "2825575",
"title": "(Senior) Accountant / Buchhalter (m/w/d)",
"company": "BIT Capital GmbH",
"companySlug": "bitcap",
"department": "Finance",
"location": "Berlin HQ",
"city": "Berlin",
"country": "Germany",
"countryCode": "DE",
"remote": null,
"contractType": "permanent, full-or-part-time",
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryPeriod": null,
"skills": "DATEV, Excel, HGB",
"language": "de",
"publishedAt": "2026-10-02T16:03:20.000Z",
"url": "https://bitcap.jobs.personio.de/job/2825575",
"careersUrl": "https://bitcap.jobs.personio.de",
"retrievedAt": "2026-10-17T12:12:39.317Z"
},
{
"jobKey": "recruitee:attendi:2703191",
"ats": "recruitee",
"jobId": "2703191",
"title": "Machine Learning Engineer",
"company": "Attendi",
"companySlug": "attendi",
"department": "Product",
"location": "Amsterdam, Netherlands",
"city": "Amsterdam",
"country": "Netherlands",
"countryCode": "NL",
"remote": "hybrid",
"contractType": "full-time, fixed-term",
"salaryMin": 6000,
"salaryMax": 7000,
"salaryCurrency": "EUR",
"salaryPeriod": "month",
"skills": "Python, Machine Learning, LLM, AWS, Azure, Google Cloud",
"language": "en",
"publishedAt": "2026-08-07T08:18:51.000Z",
"url": "https://attendi.recruitee.com/o/machine-learning-engineer",
"careersUrl": "https://attendi.recruitee.com",
"retrievedAt": "2026-10-17T12:12:01.125Z"
}
]
FieldWhat it is
jobKeyStable unique key: system, company and job ID
atspersonio, recruitee or teamtailor
title, departmentAs the career site shows them
companyAs the career site shows it; when a career site shows no company name, a readable form of its address (peter-park becomes "Peter Park")
location, city, country, countryCodeAll locations as written by the employer, plus the first city and the country (ISO code). For Personio, where the feed names only the office ("Berlin HQ"), city and country come from the public job page
remoteremote, hybrid or onsite as the employer states it; empty when the feed does not say
contractTypeContract and schedule, e.g. permanent, full-time
salaryMin, salaryMax, salaryCurrency, salaryPeriodOnly when the employer publishes a salary; the period only when the employer states it
skillsSkills from a fixed list of more than 110 (programming languages, frameworks, data and AI, databases, cloud and DevOps, methods, tools such as SAP, DATEV, Salesforce or Excel) found in the job title and text, comma-separated. Ambiguous names (Go, R, Swift, Excel, React) count only in a clear context, so "react quickly" or "excel in" never become a skill
languageLanguage of the job text (de, en, nl, fr, ...); empty when it is unclear
publishedAtPublication date
urlThe job ad on the career site: read the full text there
careersUrlThe company's career site

Why no job text? Employers sometimes name colleagues in their ads ("you report to …"), and this Actor never stores names of people. We read the text only to apply your keyword filter and to find skills and language, then drop it. The full ad is one click away at url.

What each system publishes differs: salaries come from Recruitee, contract types from Personio and Recruitee. A Personio feed carries each job's text only in the language it was published in, so for jobs published in another language we also read the English or German feed (for your keyword filter and the skills). A field the system does not publish stays empty (null); we never guess.

You also get two records in the run's storage: COMPANIES (one row per line you entered: jobs found, no matching jobs, not found on any of the three systems, not checked because the run stopped early, an unreadable line, a duplicate line, or an error) and RUN_SUMMARY (counts, jobs left out by each filter, errors by cause).

Discover companies

Don't have a list? Choose one or more systems under Discover companies and the Actor searches its built-in list of 186 companies with open jobs, most of them European (October 2026: 54 on Personio, 39 on Recruitee, 93 on Teamtailor). These are employers with open jobs that we found through job posts on Hacker News, through links on companies' own websites, or by name, each checked against the job feed of its system (test accounts and stale feeds are left out); the company name in the output comes from the employer's career site. The list is refreshed regularly, and in tracking mode a company that joins the list starts with its own baseline, so you are never charged for its existing jobs. It does not contain every company on these systems, and some also hire outside Europe (use the country filter). Combine it with filters, for example keyword Python and country Germany. You can add your own companies in the same run. Reading the whole list across all three systems takes about 5 to 8 minutes (2 to 3 seconds per career site: one feed per second, plus robots.txt and, for Personio, the office address), within the default 10-minute timeout; you can also narrow it to one system or a country.

Schedule it daily: only what is new

Turn on Only new, changed or removed since the last run and the Actor remembers what it has already shown you, per combination of companies and filters:

  • First run: saves a baseline of all matching jobs. Nothing is delivered and nothing is charged.
  • Every next run: returns only jobs that are new, changed (title, department, location, remote, contract, salary, skills or language) or removed (taken offline). Each row has changeType (new, changed or removed) and changeDetectedAt; changed rows also list changedFields and previousValues.
  • No changes: the run finishes with an empty dataset and costs only the small start fee. You pay per delivered change, never for an unchanged job.

How to schedule it in Apify:

  1. Fill in the input, turn on Only new, changed or removed since the last run and click Save as a new task.
  2. Open Schedules, click Create new, pick a time (for example every day at 07:00) and add your task.
  3. Optional: on the task's Integrations tab, send each run's results to email, Slack, Google Sheets or a webhook.

Pricing

Example calculation (tracking mode versus fetching everything): you follow 50 companies with about 500 open jobs between them. Assume about 20 new jobs appear per working day (about 440 a month), about as many close (about 440), and about 200 change (a new salary, location or title).

Results per monthCost at $1.50 per 1,000
Tracking mode (first run saves a free baseline; then only new, closed or changed jobs: about 440 + 440 + 200)about 1,100about $1.65
Fetching all open jobs every day (500 × 30 days)about 15,000about $22.50

Your own numbers depend on how often your companies post and close jobs; the run's start fee comes on top in both cases.

$1.50 per 1,000 jobs ($0.0015 per job), plus the standard Apify start fee. You pay only for jobs saved to your dataset: jobs outside your filters, open applications ("Initiativbewerbung", "Open application", "Spontanansökan", talent pools), companies that are not found and failed requests are free. The same job is never saved twice in one run, even if two of your lines point to the same career site. In tracking mode you pay only for new, changed or removed jobs; a run without changes costs only the start fee. Set a maximum cost per run in Apify and the Actor stops cleanly when it is reached.

Reliability

  • Public job feeds only. Personio's career-page XML feed, Recruitee's Careers Site API and Teamtailor's career-site RSS feed: published by the systems for exactly this use. No login, no browser, no proxy.
  • Polite: one request per second, robots.txt respected for every career site, retries with back-off, and it waits when a feed asks it to slow down.
  • One company failing never stops the others. Every problem is counted by cause (proxy, rate limit, blocked, network, other) in RUN_SUMMARY, and every line you entered gets a status in COMPANIES.
  • No fake results: a page that is not a real job feed (for example a maintenance page) is never saved or charged.
  • How many companies per run: with the default 10-minute timeout, one run reads about 200 to 300 career sites given as careers URLs (2 to 3 seconds each), or about 70 to 100 slugs or domains (each is tried on all three systems). Companies the run did not reach are listed as not checked; for longer lists, raise the run timeout or split the list over several runs.

Privacy

The output contains company job data only: no job text, no recruiters, contact persons or application mailboxes. The job text is read only to filter and to find skills and language, and is never stored.

Input

FieldWhat it does
CompaniesOne per line: a careers URL (https://acme.jobs.personio.de, acme.recruitee.com, acme.teamtailor.com), a company slug (acme) or a domain (acme.com). A slug or domain is tried on all three systems. For a Teamtailor career site on its own domain, write teamtailor:careers.acme.com. A line that cannot be read is skipped and listed in COMPANIES.
Discover companiesAlso search the built-in list for Personio, Recruitee and/or Teamtailor.
KeywordsKeep jobs whose title, department or job text mentions at least one word or phrase (whole words: go does not match good).
Search keywords inTitle, department and job text (default), or the job title only.
CountriesNames (Germany, Deutschland) or codes (DE).
CitiesLocation contains one of these cities.
DepartmentsDepartment contains one of these words.
RemoteAny, remote only, remote or hybrid, hybrid only, on-site only.
Posted sinceA date (2026-09-01) or a period (14 days).
Only new, changed or removed since the last runTracking mode (see above).
Maximum resultsStop after this many jobs (in tracking mode: changes). Default 100.

FAQ

Which companies can I use? Any company whose career site runs on Personio, Recruitee or Teamtailor. If you are not sure which system a company uses, enter its name or domain: the Actor tries all three and the COMPANIES record tells you where it was found.

Can I get the full job description? Not in the table: open the job at its url. The keyword filter still searches the full text, so "Python jobs" finds jobs that mention Python only in the description.

Why does a Personio job have no country? Personio feeds name only the office ("Berlin HQ"). We look up city and country on the public job page, once per office (up to 10 offices per company); if that page has no address, the country stays empty and a country filter leaves the job out.

Can I track more companies than fit in one run? Raise the run timeout, or split the list over several runs or tasks (up to 500 lines per run).