How to use it: 3 steps
- 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.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
polestarin Teamtailor company slugs. Each start is one run. - 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 for | Price | When |
|---|---|---|
| Company feed checked | $0.018 | One 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.00045 | One 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
- Open this Actor's Input tab.
- Switch to JSON input and paste the input below. No company is supplied by default.
- Leave descriptions on. Set the output cap to 10 for your first check.
- Click Start. Your Apify account must have access to the Actor.
- Open the run's Dataset. Check
company,jobId,title,locationandurl. - Open the run's Key-value store and check
RUN_SUMMARY.outcome. Usecompanies[].errorCodesif the result is partial or empty.
Use cases
| Task | Input choice | Key fields | Next step |
|---|---|---|---|
| Review an employer's current openings | Snapshot, one known slug | title, location, descriptionText, url | Export JSON or read the public job page. |
| Track new matching job IDs | Monitor, stable namespace and filters | company, jobId, postedAt, _scrapedAt | Add returned rows to your own database; deduplicate by company and ID. |
| Watch a location or role | locations and/or titleKeywords | allLocations, title, remoteStatus | Review the filtered rows and source links. |
| Check why a board is incomplete | Keep the run summary | Company status, errors, counts | Fix 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.comhost. URLs, custom domains,.na.teamtailor.comand.au.teamtailor.comare 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 withjson_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,commitmentandupdatedAtremain null
Troubleshooting
| Symptom | Likely reason / error codes | Check and safe action |
|---|---|---|
| Input rejected | invalid_input; URL, duplicate slug, unsupported field, null or invalid date | Use the nine documented keys and a known bare slug. Check cap and date format. |
| No rows, normal outcome | Empty feed, filters or saved IDs | Check validJobCount, filters and emittedJobCount. For a fresh baseline use a new namespace. |
| Board not found | feed_not_found | Confirm the global public slug. A branded URL is not a substitute. |
| Feed cannot be read | timeout, network_error, rate_limited, http_5xx, http_4xx | Check the source later. Transient errors get at most one retry; do not create overlapping monitors. |
| Feed blocked or too large | redirect_blocked, response_too_large | Use a supported slug. The Actor will not follow an arbitrary host or raise the limit for this run. |
| Bad feed data | invalid_json_feed, invalid_json_feed_shape, invalid_job_items, rss_source_error | Read the source and summary; do not turn a parsing error into an empty-board claim. |
| Missing enrichment | RSS-prefixed request errors, rss_unmatched_items or rss_cancelled | JSON rows can still be useful. Check null values before filtering or importing. |
| Feed advertises more pages | json_feed_paginated | Treat 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.
{
"_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.
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 -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}'# 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)
| Field | Type | Meaning |
|---|---|---|
_type | string | Always job. |
_schemaVersion | string | Job contract version, currently 1.0. |
_source | string | Always teamtailor. |
company | string | Normalized requested company slug. |
jobId | string | Stable source posting identifier, kept as text. |
title | string | Source title with repeated whitespace collapsed. |
_scrapedAt | string | UTC row collection time, not the publication date. |
department | string | Direct RSS value, or null when unavailable. |
location | string | First unique JSON address; RSS name fallback when JSON addresses are unavailable. |
country | string | Uppercase first JSON address country code, or null. |
url | string | Validated HTTPS URL on the selected global Teamtailor host, or null. |
applyUrl | string | Currently the same validated public job URL; not a separate application endpoint. |
postedAt | string | Source publication time normalized to UTC, or null. |
remoteStatus | string | Direct RSS label; hybrid is excluded by the remote-only filter. |
descriptionText | string | Readable feed text; null if absent or descriptions are disabled. |
team | null | Always null; not inferred from department. |
workplaceType | null | Always null; not inferred from remote status. |
commitment | null | Always null; no contract type inference. |
updatedAt | null | Always null; changed-job timestamps are not extracted. |
allLocations | array | Unique 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.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Teamtailor company slugs required | companies | array | ["polestar"] |
| Include job descriptions | includeDescription | boolean | true |
| Job limit per company | maxJobsPerCompany | integer | 2 |
| Words in job titles | titleKeywords | array | [] |
| Locations to match | locations | array | [] |
| Only explicit remote jobs | remoteOnly | boolean | false |
| Earliest publication date | postedAfter | string | |
| Only IDs not saved before | onlyNewSinceLastRun | boolean | false |
| Separate monitor name | monitorNamespace | string | "default" |
