Recruitee Jobs Scraper & API: Jobs + Salary to CSV
Pricing
from $0.80 / 1,000 jobs
Recruitee Jobs Scraper & API: Jobs + Salary to CSV
Scrape open roles from any company's Recruitee careers site: department, locations, remote/hybrid/on-site, salary range, experience level and description.
Pricing
from $0.80 / 1,000 jobs
Rating
0.0
(0)
Developer
MRSLM Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
Open roles from any company's Recruitee careers site: department, locations, remote/hybrid/on-site, salary range, experience level and description. $1.00 per 1,000 jobs.
Recruitee (part of Tellent) is an applicant tracking system used by thousands of small and mid-sized companies, especially in the Netherlands, Belgium, Germany and the rest of Europe. Many of them publish salary ranges, experience level, education and remote/hybrid status in the job data, and this Actor keeps all of it. Paste board names or careers URLs and get every open role as a clean row for a spreadsheet, CRM or job board.
What the Recruitee Jobs Scraper does
You give it a list of companies that use Recruitee for hiring: board names such as channable or full careers URLs on <name>.recruitee.com. For each company the Actor reads the public job feed that powers the company's own careers page, maps every open role to the same clean row format, applies your filters, and saves the result. One row per job.
There is no login, no browser and no proxy needed, because the feed is the same public list anyone sees on the careers site. That keeps runs fast (a few seconds for a handful of companies) and cheap.
The row format is shared with our other job-board Actors (Greenhouse, Lever, Workable, Personio, Rippling and the multi-platform ATS Jobs Scraper), so you can merge Recruitee jobs with jobs from other platforms into one table without remapping columns.
Who it is for
- Recruiters and staffing agencies who want to know the day a target company opens a role they can fill.
- B2B sales teams who use hiring as a buying signal: a company adding support or engineering staff is likely buying tools for them.
- Investors and market analysts who track hiring by team, city and seniority across a portfolio or a competitor set.
- Job boards and newsletters that need a clean, deduplicated feed from the companies they cover.
- Job seekers who want one sheet with every open role at their shortlist of employers.
- HR and compensation teams who benchmark published salary ranges for similar roles at peer companies.
Quick start
- Press Start. The form is already filled with this example input, so the first run returns real rows in under a minute:
{"companies": ["bunq","https://channable.recruitee.com"],"maxJobsPerCompany": 10}
- Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
- Download the results as JSON, CSV or Excel from the Output tab, or schedule the run to repeat.
Real example: every open role at bunq and Channable
Run on 2 November 2026 with this input (no filters, all open jobs):
{"companies": ["bunq","https://channable.recruitee.com"]}
Result: 40 open jobs in 5 seconds (bunq: 27, Channable: 13), charged as 40 job events, so the run cost about $0.040 plus the $0.00005 start fee.
- Top departments: Support & Operations (10), Risk, Legal & Compliance (4), Growth (4), Engineering (4).
- Workplace type: hybrid 39, remote 1.
- Countries: NL (27), TR (4), BG (2), US (2).
- Newest posting in the run: 2026-11-02.
The six newest rows:
| Company | Title | Location | Workplace | Posted |
|---|---|---|---|---|
| bunq | Chief Executive Officer, UK | London, England, United Kingdom | hybrid | 2026-11-02 |
| bunq | AML Manager, Austria | Vienna, Wien, Austria | hybrid | 2026-10-30 |
| bunq | Branch Manager, Belgium & Ireland | Brussels, Brussels, Belgium | hybrid | 2026-10-30 |
| bunq | KYC Analyst (User Verification) | İstanbul, İstanbul, Türkiye | hybrid | 2026-10-30 |
| bunq | Head of People | Amsterdam, Noord-Holland, Netherlands | hybrid | 2026-10-29 |
| bunq | Data Scientist Marketing | Amsterdam, Noord-Holland, Netherlands | hybrid | 2026-10-28 |
To turn this into a weekly hiring report, keep the same input, add "postedWithinDays": 7 and schedule it for Monday mornings: each run then returns only roles posted in the last week.
Sample row (real run, trimmed)
{"platform": "Recruitee","companyName": "Channable","title": "Senior Engineering Manager - Core","department": "Engineering","location": "Utrecht, Utrecht, Netherlands","country": "NL","workplaceType": "hybrid","employmentType": "fulltime-permanent","seniority": "senior_manager","salary": {"min": 100000,"max": 120000,"currency": "EUR","period": "year","text": null},"postedAt": "2026-10-22T12:11:23.000Z","url": "https://jobs.channable.com/o/senior-engineering-manager-core"}
Every row also has: job ID, team, all locations, remote flag, update date, apply link, board link and scrape time, plus the full description when you turn it on. Platform extras: salary range and period, remote/hybrid/on-site flags, experience and education level, category, tags and the closing date.
Output fields
| Field | What it holds |
|---|---|
platform | Always the platform name, so merged tables stay traceable. |
company | Board name (slug) you entered. |
companyName | Company name shown on the board. |
jobId | The platform job ID; stable across runs, use it to detect new and closed roles. |
title | Job title. |
department | Department, when the company sets one. |
team | Team or role group, when set. |
location | Primary location text. |
locations | All locations listed for the job. |
country | Country (code or name, as the platform gives it). |
workplaceType | remote, hybrid or on-site when the company states it. |
isRemote | True when the job is marked remote. |
employmentType | Full-time, part-time, contract and similar, when set. |
seniority | Experience level, when set. |
salary | Salary range object (min, max, currency, period) when the company publishes it, else null. |
postedAt | When the job was published (ISO 8601, UTC). |
updatedAt | Last update time, when the platform gives it. |
url | Public job ad URL. |
applyUrl | Direct application URL, when different from the ad. |
category | Recruitee job category, e.g. banking, engineering. |
education | Required education level, when set. |
tags | Tags the company added to the job. |
closesAt | Application deadline, when set. |
boardUrl | The careers board that was read. |
scrapedAt | When this run read the job. |
With includeDescription on, each row also has description: the job ad as plain text, up to 5,000 characters, with e-mail addresses and phone numbers removed.
Filters
titleKeywords/excludeTitleKeywords: keep or drop jobs by words in the title (case-insensitive), e.g. keepengineer, developer, dropintern, working student.locationKeywords: match city, country or the location text, e.g.Amsterdam,Germany,remote.departmentKeywords: match the department or team, e.g.engineering,sales.remoteOnly: keep jobs marked remote, or whose location says remote.postedWithinDays: only jobs posted in the last N days.maxJobsPerCompanyandmaxResults: caps per company and per run. WithnewestFirston (default), the cap keeps the newest jobs.
Export to CSV, Excel, JSON or Google Sheets
Every run saves its rows to an Apify dataset. Open the Output tab and pick a format:
- CSV or Excel for spreadsheets and CRM imports. Nested fields (arrays and objects) are flattened into columns such as
locations/0. - JSON or JSONL to keep the nested structure for code and databases.
- Google Sheets: add the Apify "Google Sheets export" integration to the Actor or schedule, and every finished run is appended to a sheet.
You can also copy the dataset link from the Storage tab. It is a stable API URL your own scripts can download at any time.
Use it from Make, Zapier or n8n
The Actor has official Apify modules in all three tools:
- Make: add the Apify → Run an Actor module, choose
mrslm_data/recruitee-jobs, paste the JSON input, then add Apify → Get Dataset Items and map the fields into Google Sheets, HubSpot, Airtable or Slack. - Zapier: use the Apify app with the trigger Finished Actor Run (set up a schedule in Apify) or the action Run Actor, then Fetch Dataset Items.
- n8n: use the Apify node (Run Actor + Get dataset items), or a plain HTTP Request node calling the run-sync endpoint shown below.
Schedule it
In Apify Console open Schedules → Create new, choose this Actor and a cron such as 0 7 * * 1-5 (07:00 every working day). With postedWithinDays: 1 each daily run returns only the roles posted since the day before. Pair the schedule with an integration (e-mail, Slack, Google Sheets or a webhook) so new rows reach you without opening Apify.
Call it from the API (Python, JavaScript or curl)
The input below is the same JSON you would paste into the form.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("mrslm_data/recruitee-jobs").call(run_input={"companies": ["bunq","https://channable.recruitee.com"],"titleKeywords": ["engineer"],"postedWithinDays": 30})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
JavaScript / Node.js (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('mrslm_data/recruitee-jobs').call({"companies": ["bunq", "https://channable.recruitee.com"], "titleKeywords": ["engineer"], "postedWithinDays": 30});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, 'jobs');
curl (runs the Actor and returns the rows in one call, for runs under 5 minutes):
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~recruitee-jobs/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>&format=csv" \-H "Content-Type: application/json" \-d '{"companies": ["bunq", "https://channable.recruitee.com"], "titleKeywords": ["engineer"], "postedWithinDays": 30}'
Use it from AI agents and chat assistants (MCP)
Apify's MCP server (https://mcp.apify.com) exposes Store Actors as tools for Claude, ChatGPT, Cursor and other MCP clients. Add the server with your Apify token, enable mrslm_data/recruitee-jobs, and ask in plain language, for example: "List every open engineering job at bunq and Channable posted in the last 30 days." The assistant fills the input, runs the Actor and reads the rows back. You pay the same per-job price as a normal run.
What it costs
- Job: $1.00 per 1,000 saved (Silver $0.90, Gold $0.80)
- Plus $0.00005 per run. You pay only for jobs saved after your filters. Companies that are not found, and jobs your filters drop, are free.
Worked example: 200 companies with an average of 15 open roles each is 3,000 jobs, or about $3.00 per full run on the free tier price. With postedWithinDays: 7 the same weekly run usually saves a few hundred jobs, well under $1. Apify's free plan includes monthly platform credit, which covers small runs like the example above.
Tips
- Find the board name fast. Open the company's careers page and look at the address bar or the "Apply" link. The part before the platform domain is the board name.
- Keep runs cheap. Use
titleKeywords,locationKeywordsorpostedWithinDaysso only the jobs you need are saved and charged. Jobs your filters drop are free. - Watch many companies at once. Paste dozens or hundreds of boards in one run. Boards that do not exist are logged and skipped at no charge.
- Track changes. Schedule a daily run and compare
jobIdvalues with yesterday's dataset to see which roles opened and closed. - Descriptions only when needed.
includeDescriptionadds up to 5,000 characters per job. Leave it off for lead lists and dashboards; turn it on for keyword or skills analysis.
Limits
- Only public job ads are returned: the roles the company itself lists on its Recruitee careers site. Internal-only postings and closed jobs are not in the feed.
- Salary, seniority and employment type appear only when the company fills them in; otherwise they are
null. - Recruitee is strongest in the Netherlands and the rest of Europe; US coverage is thinner than on Greenhouse or Lever.
- A company that moves to another applicant tracking system disappears from Recruitee. Use our ATS Jobs Scraper to auto-detect the platform for a list of companies.
FAQ
Where does the data come from? From the company's public Recruitee job board feed: the same list of open roles the company shows on its careers page.
Does it include recruiter or applicant data? No. Only the public job ad. Email addresses and phone numbers in descriptions are removed.
How fresh is it? Live. Each run reads the board at that moment, so closed jobs disappear and new ones appear.
Does it include salary? Yes, when the company publishes it in Recruitee: salary holds min, max, currency and period. Some companies fill it in; many leave it empty, and then it is null.
My company's careers page is on its own domain. Will it work? Usually yes. Recruitee custom domains still answer on <name>.recruitee.com; paste that name or the original Recruitee URL.
Can I scrape all Recruitee companies at once? No. Recruitee does not publish a directory of customers, so you supply the companies. Most users start from a target-account list or a list of companies in a sector.
What happens if a board name is wrong? The Actor logs it, skips it and charges nothing for it. The rest of the run continues.
Data source and freshness
Each run reads the company's public Recruitee job feed at that moment, so new roles appear and closed roles disappear on the next run. Nothing is cached between runs.
Is it legal?
This Actor only reads pages and feeds that the website itself publishes to every visitor without a login. It obeys each site's robots.txt, keeps a polite request rate, and never tries to get past logins, paywalls, captchas or bot checks. It does not collect personal data such as emails, phone numbers or names of private individuals. You are responsible for how you use the data: follow the source site's terms, copyright and the privacy laws that apply to you (GDPR, CCPA, etc.). This tool is independent and not affiliated with or endorsed by the platforms it reads.