Recruitee Jobs Scraper & API - Every Opening From Any Site
Pricing
from $1.10 / 1,000 job openings
Recruitee Jobs Scraper & API - Every Opening From Any Site
Scrape Recruitee careers sites: every live opening as JSON, CSV or Excel. Or schedule it and get only what changed since the last run - new and closed roles flagged. Paste company subdomains. Official public API - no proxy, no API key.
Pricing
from $1.10 / 1,000 job openings
Rating
0.0
(0)
Developer
Scrappeer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Recruitee Jobs Scraper - Every Opening From Any Recruitee Site

A company that is hiring is a company that is spending. Pull every live opening from any Recruitee careers site via the official public API, with department and location. Paste a company domain - no subdomain to look up.
What it does
Give it a list of Recruitee board tokens. It calls the official public Recruitee board API for each one and returns every live opening in a flat, spreadsheet-ready schema.
This reads the API Recruitee already publishes for its customers' own careers pages. That means no proxy, no headless browser, no anti-bot arms race — and nothing that silently breaks when a page layout changes.
Recruitee exposes department and a structured employment type code, so department and employmentType are usually populated.
Input
{"boards": ["ibexa.co", "https://enseradesign.recruitee.com"],"titleKeywords": ["engineer"],"locations": ["Remote"],"postedWithinDays": 7}
The board token is the subdomain in — but you rarely need to look it up.
Paste the company domain (acme.com, www.acme.com) or the full careers URL
and the Actor pulls the company name out for you.
| Field | Default | Notes |
|---|---|---|
boards | — | Required. Tokens or full careers URLs. |
titleKeywords | — | Keep only titles containing any of these. |
excludeKeywords | — | Drop titles or departments matching any of these. |
locations | — | Keep only matching locations. |
departments | — | Matches department or team. |
remoteOnly | false | Remote positions only. |
postedWithinDays | 0 | 0 = no limit. Set 1 for a daily new-jobs feed. |
includeDescription | false | Adds full description text. Much larger results. |
onlyNewSinceLastRun | false | Return only what opened or closed since the last run. |
maxJobsPerBoard | 0 | 0 = no limit. The console starts at 10 so a first trial run stays cheap. |
concurrency | 5 | Boards fetched in parallel. |
Output
One row per opening:
| Field | Description |
|---|---|
companyName, boardToken, ats | Who, and where it was read from |
jobId | Stable ID on Recruitee |
title | Job title |
department, team | Org placement |
employmentType | Full-time, contract, intern… |
location, isRemote, workplaceType | Where the work happens |
salary | Compensation range, when published |
publishedAt, updatedAt | ISO 8601 timestamps |
jobUrl, applyUrl | Public posting and application links |
globalId | {ats}:{token}:{jobId} — stable key for joining and deduping |
description | Full text, only when requested |
Export as Excel, CSV, JSON or XML, or pull it through the API.
A board that cannot be found returns one row with an error and a hint, so a bad
token never silently vanishes from your results.
Monitoring: only what changed
Set onlyNewSinceLastRun: true and schedule it. The first run records a
baseline and returns everything. Every run after that returns only:
- jobs that opened since your last run —
isNew: true - jobs that have since closed —
isClosed: true
A morning with no hiring activity returns nothing at all and costs only the start fee. You are never billed for re-reading a job you already saw.
Two things worth knowing:
- Changing the boards or filters starts a fresh baseline. Otherwise every job you stopped asking about would be reported as newly closed, which is a wrong answer rather than a noisy one.
- A closed row carries what was recorded when the job was last seen — company, title and link. Once a posting is gone there is nothing left to re-read, so the remaining fields are omitted rather than shown stale.
Without monitoring
postedWithinDays: 1 also gives you a daily feed, based on each board's own
posted date. It is simpler, but it cannot tell you when a role closed, and it
depends on the company having set a date at all. Use onlyNewSinceLastRun if
you care about either.
Quality notes
- Timestamps are normalised to ISO 8601, so date filters behave predictably.
- Postings that cannot be read are skipped and reported in the log rather than quietly dropped — and you are not billed for them.
- One malformed posting never takes down the rest of the board.
Limits
- Recruitee boards only. For a company on a different platform, see the multi-platform version of this Actor.
- Boards set to private or password-protected are not accessible.
departmentandteamare only as good as what the company fills in.
The endpoint this reads
https://<company>.recruitee.com/api/offers/
That is Recruitee's own public board API - the one that fills its customers' careers pages. It needs no key, no login and no proxy, which is why this Actor does not use any.
FAQ
Does Recruitee have a public jobs API? Yes, for job boards. The endpoint above returns the live postings for one company as JSON. It is public because the careers page itself is public.
Do I need an API key, a login, or a proxy? No. None of the three.
Where do I find the board token?
You do not have to. Paste the company's domain, the URL of any job posting, or
the identifier itself - ibexa.co is a working example - and this Actor
resolves it. If you already know the token - the subdomain in
Why would I use this instead of calling the endpoint myself?
For one company, you probably should not - it is one HTTP request, and this
README just told you the URL. This Actor earns its keep at the point where that
stops being true: dozens of companies at once, tokens you would otherwise have
to look up by hand, a flat schema shared across six ATS platforms, a
globalId you can join on, and a mode that returns only what changed since the
last run instead of the whole board every morning.
Can I get only the jobs that opened or closed since last time?
Yes. Set onlyNewSinceLastRun to true and each run returns the new postings,
plus a row for every posting that disappeared. See the monitoring section above.
What does a run cost?
You pay per row returned - about a tenth of a cent each - plus a fraction of a
cent to start the run. A company with 40 openings lands around five cents. With
onlyNewSinceLastRun on, a scheduled daily run usually returns a handful of
rows rather than the whole board.
A company is not found. Why? Either it is not on Recruitee - most large enterprises use Workday, Taleo, iCIMS or SuccessFactors - or its board is private. The run tells you which, per company, in a row you can read rather than a silent gap.
How this works, in full
Recruitee's endpoint above is public and documented, and so are the other five. If you would rather build it yourself than pay for it, the whole method is written up here — every endpoint, and the four traps that cost the most time:
Six ATS platforms publish their job boards as open JSON. Here are the endpoints.
Support
A board that will not resolve? Open an issue on the Issues tab with the careers URL.