Teamtailor Jobs Scraper
Pricing
Pay per event
Teamtailor Jobs Scraper
Scrape every open job posting from any Teamtailor-powered company career site via Teamtailor's own public JSON Feed, no login or browser required. Get job titles, locations, publish dates, and full descriptions instantly, ready for recruiter pipelines or as a hiring-intent signal for BD teams.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Teamtailor Jobs Scraper
💰 $1.70 / 1 000 job postings · pay only for results · no credit card to try
We do the dirty work so your dataset stays clean. 😈
Scrape every open job posting from any Teamtailor-powered company career site and get it back as clean, structured rows — titles, locations, publish dates, expiry dates and full descriptions — ready for a recruiter pipeline or a hiring-intent signal.
🎯 What this scrapes
Point it at one or more Teamtailor company handles and it returns every live vacancy each one is advertising: job title, direct apply URL, publish and expiry dates, split locality/region/country, the hiring organisation, and the full description as plain text (with optional raw HTML).
Teamtailor powers career sites for thousands of employers, mostly across the Nordics, DACH and the UK — companies whose openings never reach the big aggregators, or reach them days late.
🔥 What we handle for you
- Feed shape drift. Teamtailor's public job feed is not a documented, versioned API. We normalise what comes back into one stable row shape so a change on their side doesn't change your columns.
- Per-company fault isolation. One company handle that 404s, rate-limits or returns malformed JSON is logged and skipped — it never takes down the rest of your run. Ask for forty employers, get the thirty-nine that resolve.
- Blocks, retries and backoff. Requests go through Apify Proxy with retry and backoff already wired in. You don't tune it; we do.
- Dates you can sort on.
date_publishedandvalid_throughcome back as ISO strings, not the mixed formats the feed emits. - Descriptions both ways. Plain text by default so it lands cleanly in a spreadsheet or an embedding; raw HTML on request when you need the markup.
💡 Use cases
- Recruiters — watch a target-company list and see every new opening the day it goes live.
- Sales / BD teams — hiring is the loudest public budget signal there is. A company opening five engineering roles is a company that just funded a team.
- Market and comp research — track which roles, locations and seniorities a segment is hiring for over time.
- Job boards and aggregators — backfill Teamtailor employers that your existing sources miss.
⚙️ How to use it
- Add the Teamtailor company handles you care about to
companies— the handle is the subdomain of the career site (oatly.teamtailor.com→oatly). - Optionally cap
maxJobsPerCompany. - Run it, then export to JSON, CSV or Excel — or pull the dataset straight from the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
companies | array<string> | yes | — | Teamtailor company handles, e.g. ["oatly", "storytel"]. |
maxJobsPerCompany | integer | no | 100 | Cap on rows returned per company. |
includeHtml | boolean | no | false | Also return the raw HTML description in description_html. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration. |
Example input
{"companies": ["oatly", "storytel"],"maxJobsPerCompany": 100,"includeHtml": false,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
One row per open job posting.
| Field | Type | Notes |
|---|---|---|
company | string | The handle you asked for. |
company_name | string | null | Display name, when the feed publishes one. |
job_id | integer | Teamtailor's internal posting ID. |
job_title | string | Job title as advertised. |
job_url | string | Direct link to the posting. |
date_published | string | ISO publish date. |
valid_through | string | null | ISO expiry date, when published. |
location_locality | string | null | City / town. |
location_region | string | null | State / region. |
location_country | string | null | Country. |
hiring_organization_name | string | null | Hiring entity, when it differs from the company. |
description_text | string | Full description as plain text. |
description_html | string | null | Raw HTML description — only when includeHtml is true. |
scraped_at | string | ISO timestamp of the run that produced the row. |
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result | $0.0015 | Per job posting written to the dataset |
Example: 1 000 job postings = $1.70 per 1,000 ($0.20 start + 1000 x $0.0015). No subscription, no minimum, no card required to try it.
🚧 Limitations
- Company handles, not free-text search. There is no "all Teamtailor jobs everywhere" mode — you supply the employers you care about.
- Open postings only. Closed or expired vacancies drop out of the feed; this is a live snapshot, not an archive. Schedule a daily run if you need history.
- Only what the employer publishes. Salary, seniority and remote flags appear in the row only when that employer filled them in. Most don't.
- Teamtailor-hosted sites only. A company that has migrated off Teamtailor will return nothing.
❓ FAQ
Do I need a Teamtailor account or API key? No. This reads the public career-site feed each employer already publishes.
How do I find a company's handle?
It's the subdomain of the career site. careers.example.com that redirects to
example.teamtailor.com means the handle is example.
What happens if one of my companies is wrong or has moved off Teamtailor? That single handle is logged and skipped, and the run continues with the others. You are not charged a result event for a company that returns nothing.
Can I run this on a schedule? Yes — use Apify Schedules and diff each day's dataset against the last to get new-opening alerts.
💬 Your feedback
Found a bug, or need a field we don't return yet? Open an issue on the Actor's Issues tab — we read every one.