Recruitee Jobs Scraper
Pricing
Pay per event
Recruitee Jobs Scraper
Scrape every job posting from any Recruitee-hosted employer career site via Recruitee's own public, unauthenticated JSON API, no login or browser required. One request per company returns titles, locations, salary, and full HTML descriptions.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎯 What this scrapes
Every employer whose career site lives at {company}.recruitee.com is served by the same public, unauthenticated JSON endpoint. This Actor talks to it directly: hand it one or more company identifiers — the subdomain in that employer's board URL, e.g. auditdata — and it fetches the entire current job board in a single request per company, normalizing every posting into one clean row schema. One scraper, every Recruitee employer.
🔥 Features
- 🔑 Keyless public API — no OAuth, no token, no per-company setup; the same endpoint the careers page itself calls.
- ⚡ One request per company — Recruitee's list endpoint already inlines the full HTML description, so there's no second per-posting fetch to orchestrate.
- 🏢 Multi-company in one run — pass many company identifiers; rows come back identically shaped, tagged with
company_id/company_name. - 💵 Salary when published — numeric-string
salary.min/salary.maxvalues are parsed into clean floats, currency and period included. - 📝 Optional full descriptions — flip
includeDescriptionon for the complete HTML posting body at no extra request cost, or off for a leaner payload. - 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable IDs. Export JSON / CSV / Excel straight from the Apify Console.
💡 Use cases
- Recruiting & talent intelligence — track what a target employer is hiring for, where, and in which departments.
- Job-board aggregation — add Recruitee coverage next to Workday / SmartRecruiters / Greenhouse / Lever / Ashby in one pipeline.
- Labor-market research — sample hiring demand across an industry by role, category, or location.
- Competitive hiring intel — watch a competitor's open reqs, including salary bands where published, to infer team growth and direction.
- ATS data pipelines — wire structured job rows into your CRM, dashboard, or n8n / Make workflow on a schedule.
⚙️ How to use it
- Click Try for free at the top of the Store listing.
- Add one or more Company IDs — the subdomain from a
{company}.recruitee.comcareers URL (e.g.auditdata). - Optionally set Max results per company and toggle Include description.
- Click Start. Rows stream into the dataset as each company's board is fetched.
- Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
companyIds | array | ✅ | — | Recruitee company subdomains (the {company} in {company}.recruitee.com, e.g. auditdata), or full board URLs. |
maxResultsPerCompany | integer | no | 100 | Client-side cap on rows emitted per company. |
includeDescription | boolean | no | false | Emit each posting's full HTML description (already fetched in the same request either way). |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration. |
Example input
{"companyIds": ["auditdata"],"maxResultsPerCompany": 25,"includeDescription": true,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
One dataset item per job posting. description_html is populated only when includeDescription is on.
| Field | Type | Notes |
|---|---|---|
job_id | integer | Stable numeric Recruitee offer id. |
guid | string | Additional stable identifier. |
slug | string | URL path segment. |
title | string | Job title. |
company_id | string | Company identifier you supplied. |
company_name | string | Employer display name. |
department | string | null | Department, when published. |
category_code | string | null | Recruitee category code. |
employment_type_code | string | null | e.g. fulltime_permanent. |
experience_code | string | null | e.g. experienced. |
education_code | string | null | e.g. bachelor_degree. |
city | string | null | Posting city. |
country | string | null | Posting country. |
country_code | string | null | ISO country code. |
remote / hybrid / on_site | boolean | Work-arrangement flags. |
salary_min / salary_max | float | null | Parsed from Recruitee's numeric-string salary fields. |
salary_period | string | null | e.g. "year" or "hour". |
salary_currency | string | null | e.g. "USD". |
description_html | string | null | Full posting body (when includeDescription is on). |
careers_url | string | Canonical posting URL. |
careers_apply_url | string | Apply URL. |
published_at | string | null | ISO-8601 publish timestamp. |
updated_at | string | ISO-8601 last-updated timestamp. |
scraped_at | string | UTC ISO-8601 fetch timestamp. |
Example output
{"job_id": 2680730,"guid": "dl9ua","slug": "data-architect","title": "Data Architect","company_id": "auditdata","company_name": "Auditdata","department": "R&D","category_code": "information_technology","employment_type_code": "fulltime_permanent","experience_code": "experienced","education_code": "bachelor_degree","city": "remote","country": "Poland","country_code": "PL","remote": true,"hybrid": false,"on_site": false,"salary_min": null,"salary_max": null,"salary_period": null,"salary_currency": null,"description_html": "<h4>...</h4><p>... HTML string ...</p>","careers_url": "https://auditdata.recruitee.com/o/data-architect","careers_apply_url": "https://auditdata.recruitee.com/o/data-architect/c/new","published_at": "2026-07-21T07:48:42+00:00","updated_at": "2026-07-21T07:48:42+00:00","scraped_at": "2026-07-26T15:00:00+00:00"}
💰 Pricing
Pay-Per-Event — you're charged only when these fire:
| Event | USD | What it covers |
|---|---|---|
actor-start | $0.05 | One-off warm-up per run |
result | $0.0015 | Per job posting written to the dataset |
Example: 1 000 postings ≈ $1.51. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- Public postings only — the openly published careers boards, not authenticated internal/employee views.
- Company IDs, not company names — you supply the Recruitee subdomain from the careers URL; a display name like "Auditdata" may differ from its actual identifier.
- No board-side pagination observed — every sampled company returns its full board in one response; an unusually large board is fetched as-is, whatever the single response contains.
- Point-in-time snapshot — returns the board as it stands now; schedule recurring runs to track changes.
❓ FAQ
Do I need a Recruitee account or API key?
No — every field comes from Recruitee's own public offers API, the same one the careers page calls.
How do I find a company's ID?
It's the subdomain in the careers URL: https://{company}.recruitee.com. Paste that {company} (e.g. auditdata).
Can one run cover several employers?
Yes — put multiple identifiers in companyIds and every row comes back identically shaped, tagged with company_id / company_name.
Is this legal?
We fetch public, unauthenticated job-posting data that employers publish for candidates. No login, no private endpoints.
💬 Your feedback
Spotted a bug, hit a company that behaves differently, or need an extra field? Open an issue on the Actor's Issues tab in Apify Console — we ship fixes weekly and read every report.