Teamtailor logo

Job boards & ATS · Live on Apify

Teamtailor Jobs Scraper and Job Monitor

Get public Teamtailor jobs from the company feeds you choose. Filter the rows. In monitor mode, the tool returns only job IDs that it has not saved before.

About $18.00 for 1,000 company feed checks$0.018 per company feed check + $0 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

_typejob
_schemaVersion1.0
_sourceteamtailor

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: polestar in Teamtailor company slugs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Get public Teamtailor jobs from the company feeds you choose. Filter the rows and keep only job IDs that your monitor has not saved before.

Who uses it

Recruiters

Watch the jobs that a rival company posts.

Job board builders

Collect jobs from known employers into one table.

Job seekers and analysts

See new jobs by title, place or date.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Company feed checked$0.018One verified company feed check per run: first acknowledged job, or a complete successful zero-match check. No charge for errors, not-found, cancellation or partial zero-row checks.
Job delivered$0.00045One acknowledged unique company/jobId row in the run Dataset. No charge for duplicate, rejected or unseen filtered rows, error rows or summary records.

Examples

  • One company feed check: about $0.02.
  • 1,000 company feed checks: about $18.00.
  • Every day 100 company feed checks, for 30 days: about $54.00 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 270 company feed checks.

Prices checked on 8 November 2026. See the current price on Apify.

Questions

Do I need a Teamtailor API key?

No. The tool reads public career feeds. You need an Apify account.

Can I use my own career page URL?

No. Add known Teamtailor slugs. The tool does not find employers for you and does not read own domains.

Does the first monitor run return zero jobs?

No. It returns current matching jobs up to your cap. Later runs return unseen matches.

Why can a monitor check cost money when no new jobs are returned?

A healthy check still reads the feeds and compares current IDs with saved IDs. In pay-per-event mode, the feed-check event covers this useful check. A duplicate or already-seen job is not charged as a new job row. Errors and partial checks with zero rows have no useful billable event; they can still use platform resources.

Can I pass a custom career URL or find all Teamtailor employers?

No. Add known global Teamtailor slugs. The Actor does not discover all employers or resolve custom domains.

Why does an old job appear as new?

New means not previously emitted by that monitor. postedAt is the source publication date; _scrapedAt is collection time. Add postedAfter if you need a publication-date boundary.

Does hybrid count as remote?

No. remoteOnly requires an explicit accepted RSS value. Missing remote status and prose about flexible work are not enough.

Can I get changed, removed or every historical job?

No. State stores emitted IDs, not content snapshots or deletion events. Feed pagination, retention and employer changes can limit what you see.

Will a low cap or descriptions off cut the run cost by the same ratio?

No such cost reduction is promised. The feeds are still read. Check the shown price and the run's real usage; storage and exports can add resource use.

Details

Step by step on Apify
  1. Open this Actor's Input tab.
  2. Switch to JSON input and paste the input below. No company is supplied by default.
  3. Leave descriptions on. Set the output cap to 10 for your first check.
  4. Click Start. Your Apify account must have access to the Actor.
  5. Open the run's Dataset. Check company, jobId, title, location and url.
  6. Open the run's Key-value store and check RUN_SUMMARY.outcome. Use companies[].errorCodes if the result is partial or empty.
Use cases
TaskInput choiceKey fieldsNext step
Review an employer's current openingsSnapshot, one known slugtitle, location, descriptionText, urlExport JSON or read the public job page.
Track new matching job IDsMonitor, stable namespace and filterscompany, jobId, postedAt, _scrapedAtAdd returned rows to your own database; deduplicate by company and ID.
Watch a location or rolelocations and/or titleKeywordsallLocations, title, remoteStatusReview the filtered rows and source links.
Check why a board is incompleteKeep the run summaryCompany status, errors, countsFix input or source access before relying on the result.
Tips for better results
  • Add 1 to 5 company slugs, the name before .teamtailor.com, such as polestar.
  • Turn on onlyNewSinceLastRun and run on a schedule. Later runs return unseen jobs only.
  • Use a new monitorNamespace when you change the filters.
Limits and good to know

Use public feeds with care. Public job data can change or disappear. Source availability and permissions are the employer's responsibility; you are responsible for your use and retention of the exports. No candidate data or private recruitment account access is part of this tool.

  • Use 1–5 unique public slugs on the global .teamtailor.com host. URLs, custom domains, .na.teamtailor.com and .au.teamtailor.com are outside the input contract
  • The output cap is 1–55 per company. Only the first JSON page is fetched. If it contains next_url, results remain usable but the company is partial with json_feed_paginated; the Actor does not follow that URL
  • Historical checks on build 0.3.1 emitted 10 snapshot rows and parsed a 55-job board for a three-row cap. Build 0.4.2 was checked with four small Cloud runs that emitted 2, 1, 1 and 1 rows. Ten-row comparisons and larger capacity evidence were reused from earlier checks. These are not proof of 275 live output rows or complete coverage of every employer
  • Each request has a 12-second timeout, at most one retry and a 5 MB response limit. Redirects are blocked. The Actor has a five-minute processing deadline; a shorter platform timeout or charge limit can stop it earlier
  • RSS may be absent, smaller than JSON or invalid. JSON jobs stay usable, but RSS fields can be null and the company is partial. An RSS-only location name or a remote filter can then exclude matches
  • The Actor does not infer salary, separate team, employment type, changed timestamps or remote status from prose. team, workplaceType, commitment and updatedAt remain null

Troubleshooting

SymptomLikely reason / error codesCheck and safe action
Input rejectedinvalid_input; URL, duplicate slug, unsupported field, null or invalid dateUse the nine documented keys and a known bare slug. Check cap and date format.
No rows, normal outcomeEmpty feed, filters or saved IDsCheck validJobCount, filters and emittedJobCount. For a fresh baseline use a new namespace.
Board not foundfeed_not_foundConfirm the global public slug. A branded URL is not a substitute.
Feed cannot be readtimeout, network_error, rate_limited, http_5xx, http_4xxCheck the source later. Transient errors get at most one retry; do not create overlapping monitors.
Feed blocked or too largeredirect_blocked, response_too_largeUse a supported slug. The Actor will not follow an arbitrary host or raise the limit for this run.
Bad feed datainvalid_json_feed, invalid_json_feed_shape, invalid_job_items, rss_source_errorRead the source and summary; do not turn a parsing error into an empty-board claim.
Missing enrichmentRSS-prefixed request errors, rss_unmatched_items or rss_cancelledJSON rows can still be useful. Check null values before filtering or importing.
Feed advertises more pagesjson_feed_paginatedTreat the page as partial. Full pagination is not provided.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "_type": "job",
  "_schemaVersion": "1.0",
  "_source": "teamtailor",
  "company": "polestar",
  "jobId": "3528756",
  "department": "Global Sales",
  "team": null,
  "title": "Internship | Retail Network",
  "location": "Cologne, Central Europe, DE",
  "allLocations": [
    "Cologne, Central Europe, DE"
  ],
  "workplaceType": null,
  "commitment": null,
  "country": "DE",
  "url": "https://polestar.teamtailor.com/jobs/3528756-internship-retail-network",
  "applyUrl": "https://polestar.teamtailor.com/jobs/3528756-internship-retail-network",
  "postedAt": "2024-01-17T14:42:18.000Z",
  "remoteStatus": "none",
  "updatedAt": null,
  "descriptionText": "The opportunity\nWe're currently looking for an Intern - ideally starting as soon as",
  "_scrapedAt": "2026-10-01T22:28:47.168Z"
}

Use it from code

Actor ID: cliqtomedia/teamtailor-jobs-monitor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/teamtailor-jobs-monitor-scraper").call(run_input={
    "companies": [
        "polestar"
    ],
    "includeDescription": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~teamtailor-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["polestar"], "includeDescription": true}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/teamtailor-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"companies": ["polestar"], "includeDescription": True}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (20)
FieldTypeMeaning
_typestringAlways job.
_schemaVersionstringJob contract version, currently 1.0.
_sourcestringAlways teamtailor.
companystringNormalized requested company slug.
jobIdstringStable source posting identifier, kept as text.
titlestringSource title with repeated whitespace collapsed.
_scrapedAtstringUTC row collection time, not the publication date.
departmentstringDirect RSS value, or null when unavailable.
locationstringFirst unique JSON address; RSS name fallback when JSON addresses are unavailable.
countrystringUppercase first JSON address country code, or null.
urlstringValidated HTTPS URL on the selected global Teamtailor host, or null.
applyUrlstringCurrently the same validated public job URL; not a separate application endpoint.
postedAtstringSource publication time normalized to UTC, or null.
remoteStatusstringDirect RSS label; hybrid is excluded by the remote-only filter.
descriptionTextstringReadable feed text; null if absent or descriptions are disabled.
teamnullAlways null; not inferred from department.
workplaceTypenullAlways null; not inferred from remote status.
commitmentnullAlways null; no contract type inference.
updatedAtnullAlways null; changed-job timestamps are not extracted.
allLocationsarrayUnique source locations in order; an empty array if unavailable.
Input settings (9)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Teamtailor company slugs requiredcompaniesarray["polestar"]
Include job descriptionsincludeDescriptionbooleantrue
Job limit per companymaxJobsPerCompanyinteger2
Words in job titlestitleKeywordsarray[]
Locations to matchlocationsarray[]
Only explicit remote jobsremoteOnlybooleanfalse
Earliest publication datepostedAfterstring
Only IDs not saved beforeonlyNewSinceLastRunbooleanfalse
Separate monitor namemonitorNamespacestring"default"

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure