Remotive Jobs Scraper: Remote Job Listings from the Website
Pricing
from $0.70 / 1,000 job listings
Remotive Jobs Scraper: Remote Job Listings from the Website
Scrape remote job listings from the Remotive website by title words, category, location, job type and date. One row per job with company, salary, listing type (curated or aggregated), expiry date, canonical URL and description with links kept. Export to JSON, CSV or Excel.
Pricing
from $0.70 / 1,000 job listings
Rating
0.0
(0)
Developer
MrBridge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Remotive Jobs Scraper
Remotive Jobs Scraper collects remote job listings from the public website https://remotive.com. It reads the job sitemaps and one page per offer, so you get one clean row per job, ready for JSON, CSV or Excel. Filter by words of the title, category, location, job type and age.
What is Remotive Jobs Scraper?
Remotive is a remote job board. This Actor reads the public pages of the site (the sitemaps that list the offers, then the page of each offer), not the Remotive API, which now serves only a fixed sample of 10 offers. No API key and no login are needed.
Each run reads the sitemaps, keeps the newest offers that pass the filters on their URL, then opens the page of each offer, newest first, until maxItems jobs are returned. The pages are fetched slowly (about one request per second), so a large run takes time: expect roughly 50 minutes for 3,000 jobs.
What data can I extract with it?
One row per job: source, job id, title, company, company logo, candidate location, job type, category, salary when the page publishes one (amounts, currency and period), publication time, canonical Remotive URL, description as text and as HTML, scrape time. Four fields come from the site itself:
listingType:curatedfor an offer that Remotive publishes,aggregatedfor an offer that Remotive takes from a third party.expiresAt: the date the offer expires (validThrough). The site keeps serving some offers after that date, and such an offer is still returned. ThepastValidThroughcounter of theOUTPUTrecord tells how many.applicantCountries: the ISO country codes the offer accepts applicants from.companyWebsite: the website of the hiring company when the page gives it.
Good to know:
- The pages carry no application link and no tags, so
tagsis always empty. There is no seniority level either, solevelis empty. - Offers that no longer exist (the site answers 404 or 410) are skipped. They are counted in
expired, never returned and never billed. - Descriptions are included by default. E-mail addresses and phone numbers are masked, links are kept. A link that carries an e-mail address is masked too, and
mailto:andtel:links are replaced by their text. SetincludeDescriptiontofalseto leave the descriptions out.
Input
| Field | Meaning | Default |
|---|---|---|
searchTerms | Up to 10 terms, 50 bytes at most. A job is kept when one term appears in its title | empty (all) |
categories | Remotive categories to keep (30 categories), compared with the category of the offer URL | empty (all) |
locations | Keep jobs whose location contains one of these texts, or whose applicant countries include one of these ISO codes. Aggregated offers only list codes, so type de, not germany | empty (all) |
tags | The site publishes no tags, so any entry keeps no job | empty |
jobTypes | Keep jobs with one of these types, for example full-time (case does not matter) | empty (all) |
postedWithinDays | Keep jobs published in the last N days (1 to 365) | empty |
maxItems | Hard cap on jobs returned and billed, 1 to 3000 | 100 |
includeDescription | Add the description as text and HTML | true |
The Console starts with one category and 10 items so that a first run is short.
Example input:
{"categories": ["software-development"],"maxItems": 10}
Invalid input (an empty or too long term, too many terms, an unknown category) ends the run successfully with one BAD_INPUT row in the errors dataset and no job.
Output
Jobs go to the default dataset. Problems go to a separate errors dataset and are never billed. The OUTPUT record of the key-value store summarizes the run: requests, sitemaps read, candidates, jobs returned and billed, errors by kind, why the run stopped, a coverage note and the attribution to give to Remotive.
Partial runs
A run can end before it has seen everything. Read these fields of OUTPUT:
stoppedBytells why a run stopped with work left. It isnullwhen the run covered its input. Other values:maxItems,chargeLimit,deadline,circuitOpen(three blocked answers in a row),badInputandfetchFailed.fetchFailedmeans that no sitemap could be read because the fetch failed, so the run found no offer. A sitemap that failed while others were read does not set it.walksFailedcounts the sitemaps (the sitemap index included) that could not be fetched, andfailedWalkslists the first 20 as{ walk, kind, httpStatus }, wherewalkis the URL of the sitemap andhttpStatusis present only for an unexpected answer. The run goes on with the next sitemap, and thecoverageNotesays how many planned sitemaps could not be read.- A job page that fails to load gives one row in the
errorsdataset and the run goes on. It is not a failed walk. - A non-empty
errorsByKinddoes not always mean that the run stopped. ALISTING_INVALIDrow skips one page without a readable offer and stops nothing. - The run keeps the newest
maxItems x 2 + 50offer URLs that pass the URL filters. When they are all used beforemaxItemsis reached, thecoverageNotewarns that older matching offers may exist.
A request that gets a 429 answer is not repeated, and the run waits for the Retry-After before the next request. A network error, a timeout, a truncated answer or a server error (5xx) is retried once.
Billing
One event is billed per delivered job, plus a start event per run. Errors and expired offers are never billed. The Pricing tab of the Actor shows the current prices.
When the platform moves a run to another server or restarts it while it works, the run picks up where it was: a job already returned is neither returned nor billed again, and the OUTPUT counters cover the whole run. The run checks the rows already in its dataset when it starts again, so this also holds after a restart without warning.
Data source and terms
The data comes from Remotive (https://remotive.com), read from its public website: the sitemaps and the offer pages, not the API. Each row keeps the canonical Remotive URL of the job. Link back to that page and name Remotive as the source when you republish the data.
Please read this before you rely on the output:
- Some offers are
aggregated: Remotive took them from third parties. The content belongs to the original publishers. - Remotive has terms of use. They ask not to submit Remotive jobs to third party job sites and not to use the jobs to collect sign-ups or e-mail addresses. They also point to a paid API for full access. The Actor reads the public website, which is not what that paid offer provides.
- Remotive has not given its authorization for this Actor. We did not obtain it.
- You remain responsible for how you use the results and for complying with the source's terms and with the laws that apply to you, in particular for commercial use.
Frequently asked questions
Can I use Remotive Jobs Scraper via MCP?
Yes. Any Apify Actor can be called from an MCP client through the Apify MCP server. See the Apify MCP documentation for the setup. For a ready-made MCP server over several remote job boards, see mrbridge/remote-jobs-mcp.
Your feedback
We're always working on improving the performance of our Actors. So if you've got any technical feedback for Remotive Jobs Scraper or simply found a bug, please create an issue on the Actor's Issues tab.
More free tools, scrapers, MCP servers and data studies from the same team: mr-bridge.com.
OUTPUT has a field pagesRereadAfterResume: the job pages fetched a second time because the run was moved or restarted while it was applying them, usually 0 and a few pages at most per restart. These pages are also counted in pagesFetched.
Changes in 0.1.5: OUTPUT has the new field pagesRereadAfterResume. Input and rows are unchanged.
Changes in 0.1.2: the source is now the public website instead of the job feed. OUTPUT has the new fields walksFailed and failedWalks and the new stoppedBy value fetchFailed. The dataset has the four fields listingType, expiresAt, applicantCountries and companyWebsite. Links in descriptions are no longer masked.