# Recruitee Jobs Feed | Public Career Offers (`zinin/recruitee-jobs-feed`) Actor

Collect public Recruitee career offers from company subdomains. One structured vacancy per paid result, with contact fields excluded.

- **URL**: https://apify.com/zinin/recruitee-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 $1.26 / 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

## Recruitee Jobs Feed — Public Career Offers to Structured Jobs

Collect public Recruitee career offers for recruiters, B2B job aggregators, and job-market data workflows. One billable result is one vacancy with an ID, title, and career page URL. The actor calls `https://{company}.recruitee.com/api/offers/` sequentially and emits a strict allowlist of job facts.

### What you get

- One structured row per valid public job posting.
- Source identifiers, a direct source URL, and useful facts for analysis.
- Free diagnostics for source rejection, empty results, or buyer limits.
- Run it on Apify schedules, monitor it, call it through the API, and export JSON, CSV, or Excel.

### How to run it

1. Enter the public source value in **Recruitee company subdomains**.
2. Adjust the optional result limit if needed.
3. Start the Actor and open its default dataset for results or free diagnostics.

### Pricing

Pay-per-event price: **$0.0018 per valid vacancy** (`result-found`), $0 per start and $0 for diagnostics. 100 jobs cost $0.18. No Actor-specific free quota; the Apify Free plan listed $5 monthly usage credit on 2026-11-01, subject to other account usage. A live Store API GET found the Recruitee-only [practical_ophthalmologist_iuq/recruitee-jobs-scraper](https://apify.com/practical_ophthalmologist_iuq/recruitee-jobs-scraper) at $0.0018 per dataset job (2 users in 30 days). The cross-ATS [tamatama/ats-jobs](https://apify.com/tamatama/ats-jobs), which includes Recruitee, was $0.001 per job on the Free tier. The more-used `igolaizola/recruitee-companies` charges $0.001 per company, a different unit. The $0.0018/job price follows S0's corrected same-service, same-unit comparator decision.

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

| Useful rows | Actor event charges |
|---:|---:|
| 10 | $0.018 |
| 100 | $0.180 |
| 1,000 | $1.800 |

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 |
|---|---|---|
| `companySubdomains` | Yes | Public Recruitee tenant subdomains; jobs and bunq returned public offers on 2026-11-01. |
| `maxItems` | No | Maximum total number of jobs returned across the supplied tenants. |
| `proxyConfiguration` | No | Accepted for schema compatibility but unused by direct API requests. |

```json
{
  "companySubdomains": [
    "jobs",
    "bunq"
  ]
}
```

### Output

This row comes from a successful Actor run completed 2026-11-01T16:26:25.562Z. Values are copied from its dataset.

```json
{
  "id": "2797235",
  "title": "Customer Success Manager (Tellent HR)",
  "companyName": "Tellent",
  "city": "Amsterdam",
  "country": "Netherlands",
  "careersUrl": "https://careers.tellent.com/o/customer-success-manager-tellent-hr",
  "companySubdomain": "jobs"
}
```

| Field | Meaning |
|---|---|
| `id` | Public source identifier for this result. |
| `title` | Published job title. |
| `companyName` | Employer name supplied by the public source. |
| `city` | Public city label. |
| `country` | Public country label. |
| `careersUrl` | Link to the source job posting. |
| `companySubdomain` | Supplied public tenant subdomain. |

### Other tools we built

#### Related tools

Related tools for adjacent workflows in jobs and hiring.

| Actor | What it does |
|---|---|
| [Lever Jobs Feed | Public Postings API](https://apify.com/zinin/lever-jobs-feed) | Pair it in the jobs and hiring workflow: Collect published Lever jobs from company boards |
| [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 |
| [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 |
| [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 |
| [Teamtailor Jobs Feed | Public Career Sites](https://apify.com/zinin/teamtailor-jobs-feed) | Pair it in the jobs and hiring workflow: Extract job titles, locations, dates and URLs from supplied public Teamtailor career sites |

### FAQ / Limitations

#### Source conditions

- [Official Recruitee help on showing jobs](https://support.recruitee.com/en/articles/1066286-show-jobs-on-your-own-website), checked 2026-11-01, says: “The public API doesn’t require any authentication.” Its [FAQ](https://support.recruitee.com/en/articles/8213076-faq-api) documents `https://{yourcompany}.recruitee.com/api/offers` as the JSON feed. Current [authentication documentation](https://docs.recruitee.com/reference/authentication-1) says a token becomes mandatory on 10 February 2027; this Actor must be reassessed before then.
- [Tellent Recruitee Terms & Conditions](https://recruitee.com/terms), checked 2026-11-01, say: “This Careers Site is intended, among other things, to provide the public with a list of job opportunities”. The terms describe subscriber career sites; they do not independently grant a third-party commercial redistribution licence. Users must respect source and employer conditions.
- The public `https://jobs.recruitee.com/api/offers/` and `https://bunq.recruitee.com/api/offers/` endpoints returned HTTP 200 and 12/25 offers respectively on 2026-11-01 without credentials. The payload also contains recruiter contacts and application-form fields, which this Actor drops through a strict allowlist. Descriptions are never emitted because they can contain personal contacts.

#### Limitations

Only Recruitee tenant subdomains are supported. The two verified prefill tenants had 12 and 25 offers at the snapshot time. Public availability and job counts can change. No applications are submitted or candidate records accessed.

#### Frequently asked questions

**Can I find every Recruitee tenant?** No. Supply known tenant subdomains.

**Are applications or recruiter contacts returned?** No. The allowlist excludes those fields.

**What happens if public API access changes?** The Actor reports a free diagnostic and needs reassessment; Recruitee documentation announces a 2027 authentication change.

# Changelog

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

# Actor input Schema

## `companySubdomains` (type: `array`):

Public Recruitee tenant subdomains; jobs and bunq returned public offers on 2026-11-01.

## `maxItems` (type: `integer`):

Maximum total number of jobs returned across the supplied tenants.

## `proxyConfiguration` (type: `object`):

Accepted for schema compatibility but unused by direct API requests.

## Actor input object example

```json
{
  "companySubdomains": [
    "jobs",
    "bunq"
  ],
  "maxItems": 50
}
```

# 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 = {
    "companySubdomains": [
        "jobs",
        "bunq"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/recruitee-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 = { "companySubdomains": [
        "jobs",
        "bunq",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/recruitee-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 '{
  "companySubdomains": [
    "jobs",
    "bunq"
  ]
}' |
apify call zinin/recruitee-jobs-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zinin/recruitee-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/Cttl23uyxdVi3GQS5/builds/cmLYSiVOpGDqZRbOn/openapi.json
