# Teamtailor Jobs Feed | Public Career Sites (`zinin/teamtailor-jobs-feed`) Actor

Extract job titles, locations, dates and URLs from supplied public Teamtailor career sites. One paid result per valid posting; source terms apply.

- **URL**: https://apify.com/zinin/teamtailor-jobs-feed.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 result founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Teamtailor Jobs Feed

Collect public job postings from a list of Teamtailor career sites. Get one structured record per vacancy with title, company, location, posting date, employment type, and an optional short plain-text description. It is intended for recruiters and job aggregators who already know the employers they want to track.

**Source rights:** Teamtailor's terms restrict commercial use of its intellectual property. The owner authorized this Store publication on 2026-11-01, but that decision does not grant rights to reuse Teamtailor or employer content. Review the terms below before using or redistributing results.

### What you get

- One row per valid job with a stable numeric ID and canonical public URL.
- JSON-LD `JobPosting` fields where available; an HTML fallback is marked `source: "html"`.
- Department and remote/hybrid hints from the jobs list when available.
- A free diagnostic row when a site is empty, unavailable, blocked or invalid; no false job rows.
- On Apify, schedule runs, monitor them, use the API, and export datasets to JSON, CSV or Excel.

### How to run it

1. Enter one or more public Teamtailor career-site roots in **Teamtailor career sites**, such as `https://career.teamtailor.com`.
2. Set **Maximum jobs per site** (default 50) and choose whether to include descriptions.
3. Start the Actor and read the `Jobs` dataset or its `/items` API link. Public `/jobs` and job-card pages are the only requested routes.

### Pricing

Pay per event: **$0.001 per valid job** (`result-found`), **$0 per start** and **$0 per diagnostic**. At this price, 100 valid jobs cost **$0.10**. The result is delivered and charged in one linked dataset write. There is **no actor-specific free quota**. Apify's [Free plan](https://apify.com/pricing) lists $5 monthly usage credit (checked 2026-11-01), which may cover eligible runs subject to the user's other usage; this Actor has not been tested with a Free-plan buyer. See [ECONOMICS.md](ECONOMICS.md) for the cost estimate.

The current `result-found` event price is $0.001 per useful row. The following are Actor event charges:

| Useful rows | Actor event charges |
|---:|---:|
| 10 | $0.010 |
| 100 | $0.100 |
| 1,000 | $1.000 |

These examples assume that many valid, billed rows across one or more runs. Input limits and source availability may require several runs. Apify platform compute usage is separate.

### Input

| Field | Required | Purpose |
|---|---|---|
| `careerSites` | Yes | Public HTTPS career site roots or /jobs pages. The actor only reads /jobs and linked public job pages. |
| `maxItemsPerSite` | No | Cap on job cards fetched and rows returned per career site. |
| `includeDescription` | No | Include up to 2,000 plain-text characters from the public job description. |

```json
{
  "careerSites": [
    "https://career.teamtailor.com",
    "https://root.teamtailor.com"
  ]
}
```

### Output

This row comes from a successful Actor run completed 2026-11-01T15:24:58.716Z. Values are copied from its dataset.

This is a free diagnostic from a completed Actor run; the source response was truncated and no useful job row was available in that run.

```json
{
  "code": "TRUNCATED",
  "url": "https://career.teamtailor.com/jobs",
  "site": "https://career.teamtailor.com/jobs"
}
```

| Field | Meaning |
|---|---|
| `code` | Free diagnostic code; this row is not a paid job. |
| `url` | Direct source page for this result. |
| `site` | Public career-site URL requested by the Actor. |

### Other tools we built

#### Related tools

Related tools for adjacent workflows in jobs and hiring.

| Actor | What it does |
|---|---|
| [Personio Jobs Feed | Public Career Pages](https://apify.com/zinin/personio-jobs-feed) | Pair it in the jobs and hiring workflow: Collect public Personio career feeds from supplied company tenants and return structured vacancies with... |
| [Ashby Jobs Feed | Public Posting API](https://apify.com/zinin/ashby-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published Ashby jobs from supplied board names |
| [Greenhouse Jobs Feed | Public Job Board API](https://apify.com/zinin/greenhouse-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published Greenhouse Job Board vacancies from supplied board tokens |
| [Recruitee Jobs Feed | Public Career Offers](https://apify.com/zinin/recruitee-jobs-feed) | Pair it in the jobs and hiring workflow: Collect public Recruitee career offers from company subdomains |
| [SmartRecruiters Jobs Feed | Public Posting API](https://apify.com/zinin/smartrecruiters-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published SmartRecruiters jobs from company identifiers |

### FAQ / Limitations

**Will it discover every Teamtailor company?** No. Supply the exact career-site URL. The Actor does not search for companies or visit candidate forms, `/connect`, internal jobs, or recruiter profiles.

**What this is not.** It is not an employer discovery tool, a candidate database, or a license to redistribute job descriptions.

**What if a source blocks requests?** It returns a free diagnostic and does not attempt to bypass HTTP 403, rising 429s, or a captcha. One request runs at a time with at least a one-second gap. Jobs beyond the per-site cap are not fetched.

**Source terms and rights.** Teamtailor's [Terms and Conditions, §10](https://www.teamtailor.com/en/terms-and-conditions/) say: “You or your Users may not use the property for commercial purposes other than in connection with the use of the Services”. The clause continues with a prior written consent requirement. Source checked 2026-11-01; the terms address Teamtailor customers and do not resolve rights for commercial reuse of employer-hosted public job pages. The career site's [robots.txt](https://career.teamtailor.com/robots.txt) says “Disallow: /jobs/internal/” (checked 2026-11-01); public `/jobs` access is not a reuse license. The owner authorized Store publication on 2026-11-01. That authorization does not waive source restrictions or establish a license for users to copy descriptions or use logos. Respect each employer's terms.

Job descriptions are employer-published text; this Actor does not seek or output candidate data, recruiter profiles, email addresses or phone numbers. Report source changes or bugs through the Actor's issue page when available.

# Changelog

This Actor's version history is a separate document: https://apify.com/zinin/teamtailor-jobs-feed/changelog.md

# Actor input Schema

## `careerSites` (type: `array`):

Public HTTPS career site roots or /jobs pages. The actor only reads /jobs and linked public job pages.

## `maxItemsPerSite` (type: `integer`):

Cap on job cards fetched and rows returned per career site.

## `includeDescription` (type: `boolean`):

Include up to 2,000 plain-text characters from the public job description.

## Actor input object example

```json
{
  "careerSites": [
    "https://career.teamtailor.com",
    "https://root.teamtailor.com"
  ],
  "maxItemsPerSite": 50,
  "includeDescription": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "careerSites": [
        "https://career.teamtailor.com",
        "https://root.teamtailor.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/teamtailor-jobs-feed").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "careerSites": [
        "https://career.teamtailor.com",
        "https://root.teamtailor.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/teamtailor-jobs-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "careerSites": [
    "https://career.teamtailor.com",
    "https://root.teamtailor.com"
  ]
}' |
apify call zinin/teamtailor-jobs-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zinin/teamtailor-jobs-feed"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MRkrpcPnajmUd9d8k/builds/nehDh1CB2Ia2LTw6B/openapi.json
