Recruitee Jobs & Careers Scraper avatar

Recruitee Jobs & Careers Scraper

Pricing

from $6.15 / 1,000 results

Go to Apify Store
Recruitee Jobs & Careers Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Share

Recruitee Jobs & Careers Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
companiesstring[]yes["vacancies", "jobs"]Recruitee careers handles (the subdomain in the careers URL) or full careers URLs. One entry per company.
maxJobsintegerno10Maximum number of jobs to collect across all companies.
withDetailsbooleannotrueInclude full HTML and text description, requirements, highlight and application questions. Turn off for core listing fields only.
searchQuerystringno(empty)Keyword filter applied after fetch. Matches title, department, location, category and description (case-insensitive).
employmentTypeenumno(any)Keep only jobs of this type: fulltime_permanent, fulltime_fixed_term, parttime_permanent, parttime_fixed_term, contract, internship, freelance, temporary.
experienceLevelenumno(any)Keep only jobs at this level: student_school, student_college, entry_level, mid_level, experienced, manager, director, executive.
remoteOnlybooleannofalseKeep only jobs flagged as remote.
departmentstringno(any)Keep only jobs whose department contains this text, for example engineering, sales.
locationstringno(any)Keep only jobs whose location, city, state or country contains this text, for example Berlin, Remote, US.
enrichContactsbooleannofalsePaid 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.
enrichContactsMaxintegerno50Cap 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.

FieldTypeDescription
imageUrlstringJob cover image URL, or null.
titlestringJob title.
statusstringJob status, for example published.
urlstringPublic job posting URL.
applyUrlstringDirect application URL.
mailboxEmailstringRecruitee mailbox email for the job.
idstringRecruitee job ID (unique per job).
guidstringRecruitee job GUID.
positionintegerOrdering position on the careers site.
slugstringURL slug of the job.
companystringCompany display name.
companyHandlestringRecruitee handle the job was scraped from.
departmentstringDepartment name.
categorystringJob category.
locationstringPrimary location label.
citystringCity.
statestringState or region.
countrystringCountry.
countryCodestringTwo-letter country code.
postalCodestringPostal code, or null.
locationsobject[]All structured locations (name, city, state, country, countryCode, postalCode, street).
remotebooleanWhether remote work is allowed.
hybridbooleanWhether hybrid work is allowed.
onSitebooleanWhether on-site work is allowed.
employmentTypestringEmployment type code.
experienceLevelstringExperience level code.
educationstringRequired education level, or null.
minHoursPerWeekintegerMinimum weekly hours, or null.
maxHoursPerWeekintegerMaximum weekly hours, or null.
salaryMinintegerMinimum salary, or null.
salaryMaxintegerMaximum salary, or null.
salaryCurrencystringSalary currency, or null.
salaryPeriodstringSalary period, for example month, year.
tagsstring[]Job tags. Empty array when none.
languagesstring[]Posting languages.
publishedAtstringPublish timestamp.
createdAtstringCreation timestamp.
updatedAtstringLast update timestamp.
closeAtstringScheduled close date, or null.
highlightstringShort highlight summary, or null.
descriptionstringFull HTML description (when withDetails is on).
descriptionTextstringPlain-text description (when withDetails is on).
requirementsstringFull HTML requirements (when withDetails is on).
requirementsTextstringPlain-text requirements (when withDetails is on).
openQuestionsobject[]Application questions (when withDetails is on). Empty array when none.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.
enrichedEmailstringAdd-on: found public business email, or null. Present only when enrichContacts is on.
enrichedContactNamestringAdd-on: found contact person's name, or null.
enrichedJobTitlestringAdd-on: found contact job title, or null.
enrichedEmailStatusstringAdd-on: verification status of the found email.
enrichedSourcestringAdd-on: source the email was found on.
enrichedConfidencenumberAdd-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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). See the pricing tab for the current per-result price.
  • Contact enrichment add-on. When enrichContacts is 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.