Recruitee Jobs Scraper
Pricing
from $0.02 / 1,000 item extracteds
Recruitee Jobs Scraper
🏢 Export public jobs from one or many Recruitee career sites with locations, descriptions, salary, timestamps, and application links.
Pricing
from $0.02 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Collect public job openings from any company career site hosted on Recruitee.
Provide company slugs or full career URLs and receive clean, structured job records ready for export, monitoring, analysis, or automation.
The Actor uses Recruitee's public career-site data surface directly. It does not require a login, browser, cookie, or company API key.
What does Recruitee Jobs Scraper do?
Recruitee Jobs Scraper extracts live vacancies from one or many company.recruitee.com sites.
For each opening, it returns:
- company and source identifiers
- stable offer ID and GUID
- title and department
- employment and experience level
- primary and nested locations
- remote, hybrid, and on-site flags
- salary and weekly hours when published
- clean description and requirements text
- optional original HTML
- creation, publication, update, and closing timestamps
- career and direct application URLs
Results from repeated or duplicate inputs are deduplicated by company and offer ID.
Who is it for?
Job-board operators
Feed current employer openings into niche job boards without manually checking every career page.
Recruiters and talent teams
Track hiring activity across target companies and discover newly opened roles.
Sales and market-intelligence teams
Use job creation, department, location, and seniority as company-growth signals.
Labor-market analysts
Build recurring datasets for location, role, salary, and employer trend analysis.
Data engineers
Export normalized Recruitee data into warehouses, spreadsheets, webhooks, and scheduled workflows.
Why use this Actor?
- ⚡ Fast HTTP extraction — no browser startup overhead.
- 🔓 No Recruitee credentials — reads public career-site records only.
- 🏢 Multi-company input — synchronize several employers in one run.
- 🧹 Normalized output — consistent names and clean description text.
- 🔗 Traceable records — every result includes its source URL.
- 🛡️ Partial-failure handling — one invalid company does not erase successful results.
- 💾 Export ready — use JSON, CSV, Excel, XML, RSS, or API access from the Apify dataset.
How to scrape Recruitee jobs
- Open the Actor input page.
- Add one or more company slugs, such as
skygeo. - Alternatively, paste full URLs such as
https://skygeo.recruitee.com/. - Set the maximum number of job records.
- Choose whether to retain original description HTML.
- Click Start.
- Open the dataset to preview or download results.
The default input is deliberately small so a first run finishes quickly.
Input
| Field | Type | Default | Description |
|---|---|---|---|
companySlugs | string[] | ['skygeo'] | Recruitee subdomains without .recruitee.com |
careerUrls | string[] | [] | Full Recruitee career-site URLs |
maxItems | integer | 100 | Maximum records across all companies |
includeDescriptionHtml | boolean | true | Retain source HTML alongside clean text |
You may combine slugs and URLs in the same run.
Duplicate company sources are requested only once.
The maximum supported limit is 10,000 records per run.
Small input example
{"companySlugs": ["skygeo"],"maxItems": 10,"includeDescriptionHtml": true}
Multi-company example
{"careerUrls": ["https://skygeo.recruitee.com/","https://recruitee.recruitee.com/"],"maxItems": 500,"includeDescriptionHtml": false}
Output data
Each dataset row represents one public Recruitee offer.
| Field | Description |
|---|---|
companySlug | Recruitee subdomain used as source identifier |
companyName | Employer name published with the offer |
offerId | Stable Recruitee offer ID |
guid | Recruitee short offer identifier |
slug | URL-safe job slug |
title | Job title |
department | Hiring department |
employmentType | Employment type code |
experienceLevel | Experience-level code |
educationLevel | Education-level code |
location | Primary display location |
locations | Structured list of all published locations |
remote | Whether the offer is marked remote |
hybrid | Whether the offer is marked hybrid |
onSite | Whether the offer is marked on-site |
salary | Published minimum, maximum, period, and currency |
descriptionText | HTML-free job description |
descriptionHtml | Original description HTML when enabled |
requirementsText | HTML-free requirements |
tags | Published offer tags |
createdAt | Offer creation time |
updatedAt | Last update time |
publishedAt | Publication time |
closesAt | Closing time when supplied |
careerUrl | Public job page |
applyUrl | Direct application page |
sourceUrl | Recruitee API source |
scrapedAt | Extraction timestamp |
Output example
{"companySlug": "skygeo","companyName": "SkyGeo","offerId": 123456,"title": "Senior Demand Generation Manager","department": "Marketing","location": "Delft, Netherlands","remote": false,"hybrid": false,"countryCode": "NL","careerUrl": "https://skygeo.recruitee.com/o/senior-demand-generation-manager","sourceUrl": "https://skygeo.recruitee.com/api/offers/"}
Fields that an employer does not publish are omitted rather than filled with misleading values.
How much does it cost to scrape Recruitee jobs?
This Actor uses pay-per-event pricing:
- a small one-time run start charge
- a per-job result charge
- automatic volume discounts for higher Apify plans
You pay for records produced, not for empty or invalid offers.
The exact current tier prices are shown on the Actor's Store page before each run.
Use a low maxItems value to estimate a workflow before scheduling large synchronizations.
Deduplication and item limits
A job's unique key combines companySlug and offerId.
This prevents duplicate output when a company is supplied as both a slug and URL.
maxItems applies globally across all sources in their input order.
If the limit is reached during one company, later companies are not requested.
Error handling
Malformed URLs are skipped with a warning.
A missing or unavailable company site is logged as a source error.
Other valid companies continue processing.
The Actor fails clearly when no valid source remains.
Requests have bounded timeouts to avoid runs hanging indefinitely.
Scheduling a jobs monitor
Use an Apify schedule to run the Actor hourly, daily, or weekly.
For incremental workflows:
- schedule the same stable company list
- store
companySlug + offerIdin your destination - compare
createdAtandupdatedAt - alert on unseen IDs or changed timestamps
- mark IDs absent from later runs according to your own closure policy
Apify webhooks can notify another service after every successful run.
Integrations
Google Sheets
Use the Google Sheets integration to maintain a hiring tracker for recruiters or sales teams.
Webhooks
Send finished-run events to Make, Zapier, n8n, or an internal API.
Data warehouses
Read dataset records through the API and load them into BigQuery, Snowflake, or PostgreSQL.
Job boards
Map stable IDs and application URLs into a recurring job-feed import.
Slack alerts
Trigger a message when a monitored employer posts a new role in a target department.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/recruitee-jobs-scraper').call({companySlugs: ['skygeo'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/recruitee-jobs-scraper').call(run_input={'companySlugs': ['skygeo'],'maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~recruitee-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companySlugs":["skygeo"],"maxItems":100}'
Fetch results from the run's defaultDatasetId after it succeeds.
Use with Apify MCP
Connect the Actor to AI assistants through Apify MCP. In Claude Code, run:
claude mcp add --transport http apify \"https://mcp.apify.com/?tools=automation-lab/recruitee-jobs-scraper"
For Claude Desktop, Cursor, or VS Code, add this HTTP server to the client's MCP JSON configuration:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/recruitee-jobs-scraper"}}}
Restart the client after saving the configuration. The first Actor call may ask you to sign in to Apify and authorize access.
Useful prompts include:
- “Export all current SkyGeo jobs into a table.”
- “Which monitored companies are hiring marketing roles?”
- “Compare remote openings across these Recruitee employers.”
- “Find newly published engineering jobs and summarize requirements.”
Tips for reliable results
- Copy the hostname directly from the employer's public career page.
- Use only the subdomain as
companySlugs. - Prefer full URLs when users paste sources from spreadsheets.
- Keep HTML enabled when preserving formatting matters.
- Disable HTML to reduce output size for analytics.
- Schedule at a reasonable cadence; public vacancies rarely need minute-level polling.
- Use timestamps and stable IDs rather than job titles for change detection.
Limitations
The Actor extracts only public offers exposed by a Recruitee-hosted career site.
It cannot access draft, archived, private, or account-only vacancies.
Employers control which fields they publish, so salary and hours may be absent.
Recruitee can change its public response structure; the Actor normalizes currently observed fields.
The Actor does not submit applications or collect applicant information.
Legality
This Actor reads publicly available career-site information without authentication.
You are responsible for your purpose, storage, redistribution, and compliance with applicable terms and laws.
Avoid using job data for unlawful discrimination, spam, or decisions that require additional legal safeguards.
Do not collect or infer applicant personal data with this Actor.
When in doubt, consult qualified legal counsel for your jurisdiction and use case.
Troubleshooting
Why did one company return no records?
Check that the hostname ends in .recruitee.com and that its public career site currently lists vacancies.
Why are salary fields missing?
Salary appears only when the employer publishes it in the offer.
Why is the run successful after a source error?
Multi-company runs intentionally preserve successful sources. Review logs to identify skipped companies.
Why did output stop before every company?
The global maxItems limit was reached. Increase it or split sources across runs.
How do I remove HTML?
Set includeDescriptionHtml to false; clean text remains available.
FAQ
Does it require a Recruitee account?
No. It reads anonymous public career-site data.
Does it use a browser or proxy?
No browser is required for the standard public endpoint, keeping runs fast and lightweight.
Can I monitor hundreds of companies?
Yes, within the 10,000-item run limit. For large portfolios, batch sources and schedule runs sensibly.
Can I export CSV or Excel?
Yes. Open the Apify dataset and select the desired export format.
Are results deduplicated across runs?
Deduplication occurs within each run. Use the stable company and offer ID pair in your destination for cross-run history.
Related scrapers
Build a broader ATS monitoring workflow with other Automation Lab actors:
Each source-specific actor preserves the fields and identifiers exposed by that ATS.
Support
If a valid public Recruitee company returns unexpected data, open an issue from the Actor page.
Include the public career URL, input, run ID, and a short description of the expected result.
Do not include applicant data, credentials, or private company information.