Recruitee Jobs & Careers Scraper
Pricing
from $6.15 / 1,000 results
Recruitee Jobs & Careers Scraper
Scrape open jobs from any company careers site on Recruitee. Extract job title, location, city, country, department, employment type, experience level, remote status, salary range, apply URL and full description. Export JSON, CSV or Excel. No login or API key.
Pricing
from $6.15 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Recruitee Jobs & Careers Scraper
Here is one real result, with every field the actor returns (the description, descriptionText, requirements and requirementsText fields are trimmed here for readability; the live record contains the full text):
{"imageUrl": null,"title": "International Channel Sales Lead","status": "published","url": "https://vacancies.recruitee.com/o/international-channel-sales-lead","applyUrl": "https://vacancies.recruitee.com/o/international-channel-sales-lead/c/new","mailboxEmail": "job.ks4lh@vacancies.recruitee.com","id": "2652950","guid": "ks4lh","position": 77,"slug": "international-channel-sales-lead","company": "Arc","companyHandle": "vacancies","department": "Sales","category": "sales","location": "Remote job","city": "Groningen","state": "Groningen","country": "Netherlands","countryCode": "NL","postalCode": null,"locations": [{"name": "Remote","city": "Groningen","state": "Groningen","country": "Netherlands","countryCode": "NL","postalCode": null,"street": null}],"remote": true,"hybrid": true,"onSite": true,"employmentType": "fulltime_fixed_term","experienceLevel": "experienced","education": "bachelor_degree","minHoursPerWeek": 40,"maxHoursPerWeek": null,"salaryMin": 4000,"salaryMax": 5500,"salaryCurrency": "EUR","salaryPeriod": "month","tags": [],"languages": ["en"],"publishedAt": "2026-06-24 14:05:43 UTC","createdAt": "2026-06-24 13:44:29 UTC","updatedAt": "2026-08-05 06:44:12 UTC","closeAt": null,"highlight": "Global channel IC with the mandate to build and lead the team. Open every region, own the number, set the strategy.","description": "<p><strong><u>Arc</u></strong></p><p>Arc is a rapidly growing luxury tech brand specialising in minimalist phone cases, most notably the Arc Pulse...</p>","descriptionText": "Arc\nArc is a rapidly growing luxury tech brand specialising in minimalist phone cases, most notably the Arc Pulse...","requirements": "<p><strong><u>Essential Expertise</u></strong></p><p>• 5+ years selling premium consumer hardware...</p>","requirementsText": "Essential Expertise\n• 5+ years selling premium consumer hardware...","openQuestions": [],"observedAt": "2026-08-10T14:19:21.302Z","error": null}
The most complete Recruitee scraper available. It returns every job field a Recruitee careers site exposes, including structured location, salary range, employment type, experience level, hours, tags, the mailbox email, and the full HTML and plain-text description and requirements, plus an optional paid add-on that finds a public business contact email for leads.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor reads the public careers site of each Recruitee company you name, collects every open job, applies the optional keyword, employment type, experience level, remote, department and location filters, and writes one normalized record per job to the run's dataset. When withDetails is on (the default), each job includes the full HTML and plain-text description, requirements, highlight summary and application questions. Salary ranges, hours, structured locations and the direct apply URL are captured for every job.
Point it at any company by its Recruitee handle (the subdomain in yourcompany.recruitee.com) or the full careers URL. An optional paid add-on (enrichContacts) can find a public business contact email and name for each result.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 open jobs across the two named companies with full details.
{"maxJobs": 10,"withDetails": true,"companies": ["vacancies", "jobs"]}
Replace the entries in companies with the handles of the companies you want. Add searchQuery, employmentType, experienceLevel, remoteOnly, department or location to narrow the results. Only companies is required.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
companies | string[] | yes | ["vacancies", "jobs"] | Recruitee careers handles (the subdomain in the careers URL) or full careers URLs. One entry per company. |
maxJobs | integer | no | 10 | Maximum number of jobs to collect across all companies. |
withDetails | boolean | no | true | Include full HTML and text description, requirements, highlight and application questions. Turn off for core listing fields only. |
searchQuery | string | no | (empty) | Keyword filter applied after fetch. Matches title, department, location, category and description (case-insensitive). |
employmentType | enum | no | (any) | Keep only jobs of this type: fulltime_permanent, fulltime_fixed_term, parttime_permanent, parttime_fixed_term, contract, internship, freelance, temporary. |
experienceLevel | enum | no | (any) | Keep only jobs at this level: student_school, student_college, entry_level, mid_level, experienced, manager, director, executive. |
remoteOnly | boolean | no | false | Keep only jobs flagged as remote. |
department | string | no | (any) | Keep only jobs whose department contains this text, for example engineering, sales. |
location | string | no | (any) | Keep only jobs whose location, city, state or country contains this text, for example Berlin, Remote, US. |
enrichContacts | boolean | no | false | Paid add-on. For each result without an email, attempt to find a public business contact email and name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3. |
Filters combine with logical AND and are applied client-side after jobs are fetched.
Output reference
One dataset item per job. Types: string, integer, boolean, string[], object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Job cover image URL, or null. |
title | string | Job title. |
status | string | Job status, for example published. |
url | string | Public job posting URL. |
applyUrl | string | Direct application URL. |
mailboxEmail | string | Recruitee mailbox email for the job. |
id | string | Recruitee job ID (unique per job). |
guid | string | Recruitee job GUID. |
position | integer | Ordering position on the careers site. |
slug | string | URL slug of the job. |
company | string | Company display name. |
companyHandle | string | Recruitee handle the job was scraped from. |
department | string | Department name. |
category | string | Job category. |
location | string | Primary location label. |
city | string | City. |
state | string | State or region. |
country | string | Country. |
countryCode | string | Two-letter country code. |
postalCode | string | Postal code, or null. |
locations | object[] | All structured locations (name, city, state, country, countryCode, postalCode, street). |
remote | boolean | Whether remote work is allowed. |
hybrid | boolean | Whether hybrid work is allowed. |
onSite | boolean | Whether on-site work is allowed. |
employmentType | string | Employment type code. |
experienceLevel | string | Experience level code. |
education | string | Required education level, or null. |
minHoursPerWeek | integer | Minimum weekly hours, or null. |
maxHoursPerWeek | integer | Maximum weekly hours, or null. |
salaryMin | integer | Minimum salary, or null. |
salaryMax | integer | Maximum salary, or null. |
salaryCurrency | string | Salary currency, or null. |
salaryPeriod | string | Salary period, for example month, year. |
tags | string[] | Job tags. Empty array when none. |
languages | string[] | Posting languages. |
publishedAt | string | Publish timestamp. |
createdAt | string | Creation timestamp. |
updatedAt | string | Last update timestamp. |
closeAt | string | Scheduled close date, or null. |
highlight | string | Short highlight summary, or null. |
description | string | Full HTML description (when withDetails is on). |
descriptionText | string | Plain-text description (when withDetails is on). |
requirements | string | Full HTML requirements (when withDetails is on). |
requirementsText | string | Plain-text requirements (when withDetails is on). |
openQuestions | object[] | Application questions (when withDetails is on). Empty array when none. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
enrichedEmail | string | Add-on: found public business email, or null. Present only when enrichContacts is on. |
enrichedContactName | string | Add-on: found contact person's name, or null. |
enrichedJobTitle | string | Add-on: found contact job title, or null. |
enrichedEmailStatus | string | Add-on: verification status of the found email. |
enrichedSource | string | Add-on: source the email was found on. |
enrichedConfidence | number | Add-on: confidence score for the found email. |
Example output record
Real record from a live run (input {"maxJobs": 10, "withDetails": true, "companies": ["vacancies", "jobs"]}). Long text fields are trimmed for readability; the live record contains the full text:
{"title": "International Channel Sales Lead","status": "published","url": "https://vacancies.recruitee.com/o/international-channel-sales-lead","applyUrl": "https://vacancies.recruitee.com/o/international-channel-sales-lead/c/new","mailboxEmail": "job.ks4lh@vacancies.recruitee.com","id": "2652950","guid": "ks4lh","company": "Arc","companyHandle": "vacancies","department": "Sales","location": "Remote job","city": "Groningen","country": "Netherlands","countryCode": "NL","remote": true,"hybrid": true,"onSite": true,"employmentType": "fulltime_fixed_term","experienceLevel": "experienced","education": "bachelor_degree","minHoursPerWeek": 40,"salaryMin": 4000,"salaryMax": 5500,"salaryCurrency": "EUR","salaryPeriod": "month","languages": ["en"],"publishedAt": "2026-06-24 14:05:43 UTC","updatedAt": "2026-08-05 06:44:12 UTC","highlight": "Global channel IC with the mandate to build and lead the team. Open every region, own the number, set the strategy.","observedAt": "2026-08-10T14:19:21.302Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~recruitee-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["vacancies"],"maxJobs":25,"withDetails":true}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~recruitee-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"companies":["vacancies","jobs"],"remoteOnly":true,"department":"engineering"}'
Apify CLI:
apify call scrapers_lat/recruitee-jobs-scraper \--input '{"companies":["vacancies"],"searchQuery":"sales","experienceLevel":"experienced"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=500&limit=500"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per job record returned (
resultevent). See the pricing tab for the current per-result price. - Contact enrichment add-on. When
enrichContactsis on, the add-on is billed per attempt, plus an extra charge only when an email is found. It is off by default. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 jobs per run, and the enrichment add-on is capped at 3 attempts. Upgrade for higher limits.
FAQ and troubleshooting
What do I put in companies?
The Recruitee handle, which is the subdomain of the careers site. A page at yourcompany.recruitee.com has the handle yourcompany. You can also paste the full careers URL.
A run returned 0 records. Why? The handle may be wrong, the company may have no open jobs, or the filters were too tight. Check the handle and loosen the filters. Zero-result runs are not charged.
How do I get only remote or only engineering jobs?
Set remoteOnly: true for remote jobs, and department: "engineering" (or a location / searchQuery keyword) to narrow further.
Why are some salary or hours fields null?
Not every company publishes a salary range or weekly hours. Missing source values are returned as null, never invented.
What does the contact enrichment add-on do?
For results without an email, it attempts to find a public business contact email and name. Turn it on with enrichContacts and cap it with enrichContactsMax. You are billed per attempt, plus an extra charge only when an email is found.
Is this an official Recruitee tool? No. This actor is independent and has no affiliation with Recruitee. It reads only data that companies publish on their public Recruitee careers sites.
Related scrapers
- LinkedIn Jobs Scraper: Job postings from LinkedIn.
- Reddit Posts Scraper: Posts from any subreddit.
- Website Contacts Scraper: Emails and phones from company websites.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Recruitee. Accesses only publicly available careers-site data.
