Recruitee Jobs Scraper avatar

Recruitee Jobs Scraper

Pricing

from $0.02 / 1,000 item extracteds

Go to Apify Store
Recruitee Jobs Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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

  1. Open the Actor input page.
  2. Add one or more company slugs, such as skygeo.
  3. Alternatively, paste full URLs such as https://skygeo.recruitee.com/.
  4. Set the maximum number of job records.
  5. Choose whether to retain original description HTML.
  6. Click Start.
  7. Open the dataset to preview or download results.

The default input is deliberately small so a first run finishes quickly.

Input

FieldTypeDefaultDescription
companySlugsstring[]['skygeo']Recruitee subdomains without .recruitee.com
careerUrlsstring[][]Full Recruitee career-site URLs
maxItemsinteger100Maximum records across all companies
includeDescriptionHtmlbooleantrueRetain 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.

FieldDescription
companySlugRecruitee subdomain used as source identifier
companyNameEmployer name published with the offer
offerIdStable Recruitee offer ID
guidRecruitee short offer identifier
slugURL-safe job slug
titleJob title
departmentHiring department
employmentTypeEmployment type code
experienceLevelExperience-level code
educationLevelEducation-level code
locationPrimary display location
locationsStructured list of all published locations
remoteWhether the offer is marked remote
hybridWhether the offer is marked hybrid
onSiteWhether the offer is marked on-site
salaryPublished minimum, maximum, period, and currency
descriptionTextHTML-free job description
descriptionHtmlOriginal description HTML when enabled
requirementsTextHTML-free requirements
tagsPublished offer tags
createdAtOffer creation time
updatedAtLast update time
publishedAtPublication time
closesAtClosing time when supplied
careerUrlPublic job page
applyUrlDirect application page
sourceUrlRecruitee API source
scrapedAtExtraction 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:

  1. schedule the same stable company list
  2. store companySlug + offerId in your destination
  3. compare createdAt and updatedAt
  4. alert on unseen IDs or changed timestamps
  5. 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 ApifyClient
client = 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().items
print(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.

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.