Recruitee Jobs Scraper (FreshActors)
Pricing
from $20.00 / 1,000 company jobs fetcheds
Recruitee Jobs Scraper (FreshActors)
Reliable, always-fresh job postings from any Recruitee company board. Public Offers API, no login — full descriptions AND salary in a single call. Monitored daily. By FreshActors.
Pricing
from $20.00 / 1,000 company jobs fetcheds
Rating
0.0
(0)
Developer
Martin Čech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Recruitee Jobs Scraper — Every Company Board as Clean JSON (No API Key)
Scrape Recruitee ATS job postings from any company's public board into clean, structured JSON — title, full description, requirements, location, department, employment type, remote/hybrid flag, salary, and apply URL. No account, no login, no API key. Point it at a list of Recruitee companies and get a normalized jobs feed back.

✅ Last verified working: 2026-06-02. Monitored by an automated daily canary. When Recruitee changes its Offers API, we patch fast and log it in the changelog below — so your hiring-data pipeline doesn't silently break.
Why this Recruitee scraper
Recruitee powers the careers sites of thousands of companies, and every board is backed by a public Offers API — no key, no login, no browser. The nice part: a single request returns every offer with its full description, requirements, and salary — no second detail call, no pagination to manage. The catch is the usual one: the moment the response shape shifts, a naive scraper silently returns nothing. This actor is built to stay working:
- One normalized schema — the same stable job record as our Greenhouse & Lever, Workable, and SmartRecruiters scrapers, so Recruitee companies slot into the exact same pipeline with no special-casing.
- Salary included — Recruitee is one of the few ATS that exposes pay. When a company sets it, you get a structured
salaryobject (min,max,period,currency); when they don't, it'snull(never a missing key). - Full descriptions, in one call — description + requirements come back cleaned to plain text. No extra requests, so it's fast and cheap.
- Per-company isolation + retries — a dead, renamed, or private board is skipped and logged; it never crashes the run. Transient errors retry with backoff. Draft/closed offers are filtered out — only
publishedroles. - Stable, versioned output (
_schemaVersion) + a daily canary — that "last verified working" date is real.
What data you get
Each row is one normalized job posting. Fields Recruitee doesn't provide come back as null, never missing, so your downstream schema stays predictable.
| Field | Type | Description |
|---|---|---|
_type | string | Always job. |
_schemaVersion | string | Output schema version. |
_source | string | Always recruitee. |
company | string | Company identifier (the {name}.recruitee.com subdomain). |
jobId | string | Recruitee offer ID. |
title | string | Job title. |
department | string | null | Department. |
team | null | Recruitee has no team distinct from department. |
location | string | null | Full location string. |
allLocations | string[] | null | Every listed location. |
workplaceType | string | null | remote / hybrid where flagged. |
commitment | string | null | Employment type (Full-time, Part-time, Internship, …). |
country | string | null | 2-letter country code. |
url | string | null | Public posting URL. |
applyUrl | string | null | Direct apply URL. |
postedAt | string | null | Publish date (ISO). |
updatedAt | string | null | Last update (ISO). |
salary | object | null | { min, max, period, currency } when the company sets it. |
descriptionText | string | null | Full description + requirements as clean text (when includeDescription is on). |
_scrapedAt | string | ISO timestamp this record was fetched. |
Use cases
- Sales intelligence / hiring-signal tracking. Which companies are hiring for which roles — a leading indicator of growth and budget. Feed
department,location,postedAt, andsalaryinto a lead-scoring/intent model. - Compensation & salary benchmarking. Recruitee's
salaryfield makes this board one of the few ATS sources you can use to track posted pay ranges by role, country, and time. - Recruiting & talent sourcing. Aggregate live openings across target employers into one table; filter
workplaceType: remoteorcommitmentwith no Recruitee-specific adapter. - Job boards & aggregators. Need to scrape Recruitee jobs into a uniform feed? Point it at your company list and ingest normalized records on a schedule.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
companies | string[] | ✅ | Recruitee identifiers (bunq) or board URLs (https://bunq.recruitee.com). One per row. The identifier is the subdomain in the company's {name}.recruitee.com URL. |
includeDescription | boolean | — | Include the full description + requirements text. Default true. Recruitee returns these in the same request, so turning it off only trims output size (no change to cost or speed). |
maxJobsPerCompany | integer | — | Cap per company (1–5000). Default 1000. |
{"companies": ["bunq", "https://channable.recruitee.com"],"includeDescription": true,"maxJobsPerCompany": 1000}
Output sample
{"_type": "job","_schemaVersion": "1.0","_source": "recruitee","company": "bunq","jobId": "2620732","title": "Senior Backend Engineer","department": "Engineering","team": null,"location": "Amsterdam, Netherlands","allLocations": ["Amsterdam, Netherlands"],"workplaceType": "hybrid","commitment": "Full-time","country": "NL","url": "https://careers.bunq.com/o/senior-backend-engineer","applyUrl": "https://careers.bunq.com/o/senior-backend-engineer/c/new","postedAt": "2026-05-29T09:45:21.000Z","updatedAt": "2026-05-30T11:02:00.000Z","salary": { "min": 65000, "max": 90000, "period": "year", "currency": "EUR" },"descriptionText": "About the role... Requirements...","_scrapedAt": "2026-06-02T18:00:00.000Z"}
Use with AI agents (MCP)
This scraper is callable as a tool by AI agents via the Apify MCP server — so assistants like Claude, Cursor, and VS Code can run it and use the structured results mid-conversation, with no glue code.
Simplest path: in a recent Claude Desktop, add the hosted server https://mcp.apify.com under Settings → Connectors and authorize with OAuth. For any config-file client:
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server"],"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }}}}
Then ask in plain language, e.g. "List the open jobs at bunq from its Recruitee board with titles, locations, salary, and apply links." — the agent calls freshactors/recruitee-jobs-scraper with the right input and reads back the JSON. Full setup: Apify MCP docs.
Pricing
Pay-per-event — no subscription. You pay only for the boards you fetch and the postings you receive:
| Event | Price (USD) | When it fires |
|---|---|---|
| Company jobs fetched | $0.02 | Once per company board successfully fetched (with ≥1 published job). |
| Job posting fetched | $0.0005 | Once per job posting returned. |
Worked example — "how much do 100 results cost?" Scrape 5 companies for 100 postings total:
- Boards: 5 × $0.02 = $0.10
- Postings: 100 × $0.0005 = $0.05
- Total: $0.15 for 100 normalized jobs (with descriptions + salary) across 5 companies.
(Apify platform usage is billed separately per their standard rates.)
FAQ
Is scraping Recruitee jobs legal? This actor reads public, non-personal job-posting data from companies' own public Recruitee boards — the same data their careers pages serve to any visitor. No login, no personal data. Use responsibly and in line with applicable terms and laws.
Do I need an API key? No. There's no Recruitee API key, account, or login — it reads the public Offers API.
How do I find a company's Recruitee identifier?
It's the subdomain in the careers URL — **bunq**.recruitee.com. You can paste either the identifier or the full URL. (Companies on a custom careers domain still have a {name}.recruitee.com address — use that subdomain.)
Does it include salary?
Yes — when the company fills it in. Recruitee is one of the few ATS that exposes pay, so you get a structured salary object where available, and null where not.
Does it include full job descriptions?
Yes — includeDescription defaults to true, returning each offer's description + requirements as clean text. They come in the same request, so turning it off only trims output size; it doesn't change cost or speed.
Can I scrape many companies at once?
Yes — pass as many identifiers/URLs in companies as you need. Each board is fetched in isolation; a dead or private board is skipped, not fatal. Cap volume with maxJobsPerCompany (1–5000).
How often is the data updated? It's live — every run fetches the companies' current public boards. The actor itself is monitored by a daily canary so parsing stays correct as the Offers API evolves.
Other FreshActors tools
| FreshActors actor | What it scrapes |
|---|---|
| Greenhouse & Lever Jobs Scraper | Greenhouse + Lever — normalized job postings |
| Workable Jobs Scraper | Workable — normalized job postings, full descriptions |
| SmartRecruiters Jobs Scraper | SmartRecruiters — normalized job postings, full descriptions |
| App Store Scraper | Apple App Store — app details, search, reviews |
| Google Play Scraper | Google Play — app details + reviews |
| Shopify App Store Scraper | Shopify App Store — app details, reviews, discovery |
| Redfin Scraper | Redfin — US real-estate listings |
Reliability
A scheduled daily canary scrapes a known Recruitee board, validates the normalized schema, and alerts the moment a parse changes. When Recruitee shifts its Offers API, we patch the same day and record it in the changelog below. Every record carries _schemaVersion and _scrapedAt.
Changelog
- 2026-06-02 — v1.0 launch. Single-call public Offers API (full description + requirements + salary per offer), normalized schema, published-only filtering, per-company isolation, daily canary monitoring.
Legal note: Reads public, non-personal job-posting data from companies' own public Recruitee boards (the same data their careers pages serve). No login, no personal data. Use responsibly and in line with applicable terms and laws.
Found a problem? Open an issue on the actor — issues are answered fast.