Remote Jobs Scraper — 6 Boards, One Feed
Pricing
from $12.00 / 1,000 results
Remote Jobs Scraper — 6 Boards, One Feed
Collect remote jobs from Arbeitnow, Jobicy, Himalayas, RemoteOK, Remotive, and Working Nomads in one normalized dataset. Deduped title/company, only-new monitor, export JSON/CSV. No API key.
Pricing
from $12.00 / 1,000 results
Rating
5.0
(1)
Developer
Ben
Maintained by CommunityActor stats
0
Bookmarked
774
Total users
92
Monthly active users
3 days ago
Last modified
Categories
Share
Collect remote jobs from Arbeitnow, Jobicy, Himalayas, RemoteOK, Remotive, and Working Nomads in one run. The Actor normalizes each source into the same fields, removes duplicate title/company pairs, and can remember what it has already returned.
Use it for a one-off export or switch on onlyNew for a scheduled hiring feed. Export JSON, CSV, or Excel; call it through the API; send rows to Google Sheets; or connect the dataset to n8n, Make, Zapier, Slack, and email.
Try it: Remote Python jobs daily
n8n templates: email alerts and Google Sheets + Slack workflows
Pricing: $0.015 per returned job on the Free tier. Salary fields are included without an extra enrichment charge in the current build. A 20-row dataset at 512 MB costs $0.30005 before plan discounts. The start event costs $0.00005 per GB of allocated memory, with a minimum of one event. No output means no result charge, but the start event still applies. Older pinned builds can still call the legacy $0.01 salary event; use latest for the updated behavior.
What does this remote jobs scraper do?
Job APIs rarely agree on names. One calls the employer company_name; another nests it inside a company object. Dates, employment types, locations, and salary fields differ too. This Actor handles those differences and returns one dataset.
The selected boards run concurrently. If one is unavailable, the working sources can still return data and the log identifies the failed board. If every selected source fails, the run fails instead of reporting a successful empty update. No source login or API key is required.
Fields in each job row
- title, company, location, and work type
- salary when published by the source
- normalized job type, plus inferred seniority
- the full description supplied by the source, normalized to plain text, and tags
- source board, application URL, and posting date
job_id, a stable fingerprint for downstream deduplicationscraped_at,is_new,monitor_id, andfirst_seen_at
Search and exclusion filters inspect the complete description returned by each source, without a 1,000-character cutoff. HTML formatting is removed and entities are decoded. If a source supplies only an excerpt or no description, the Actor preserves that limitation.
A missing salary or date stays null. Salary currency and period are included when the feed supplies them; amounts without units must not be assumed to be annual USD. Feed salaries are not independently verified offers. Location restrictions still apply to remote roles.
Input
| Field | What it controls |
|---|---|
searchKeywords | Terms that must appear in the job record. Leave empty for all available jobs. |
platforms | Any combination of arbeitnow, jobicy, himalayas, remoteok, remotive, and workingnomads. |
maxJobsPerPlatform | Up to 50 matches per board; Himalayas exposes at most 20 in its current feed response. |
maxTotalJobs | Positive final cap from 1 to 200. Setting 0 removes this final cap, not the per-source limits. |
excludeKeywords | Drop rows containing any supplied term. |
companyKeywords | Keep employers whose name contains at least one term. |
locationKeywords | Keep locations containing terms such as Europe, Germany, or Worldwide. |
jobTypes | Filter normalized full-time, part-time, contract, freelance, or internship roles. |
seniorityLevels | Filter inferred entry, senior, lead, manager, executive, or unspecified roles. |
salaryOnly | Keep only rows with source-provided salary data. |
postedWithinDays | Keep recent postings; 0 disables the date filter. |
onlyNew | Save a baseline and return only unseen jobs on later runs. |
monitorId | Stable name for one saved search, for example daily-python-europe. |
firstRunMode | emitAll returns the bounded baseline; seedOnly stores it without rows. |
resetState | Clear only the selected monitor before this run. Turn it off afterward. |
debugMode | Print source and row details for troubleshooting. |
One-off search example
{"searchKeywords": "python developer","platforms": ["arbeitnow","jobicy","himalayas","remoteok","remotive","workingnomads"],"locationKeywords": ["Europe", "Worldwide"],"excludeKeywords": ["unpaid"],"maxJobsPerPlatform": 20,"maxTotalJobs": 50}
Scheduled only-new monitor
{"searchKeywords": "python developer","platforms": ["arbeitnow","jobicy","himalayas","remoteok","remotive","workingnomads"],"seniorityLevels": ["senior", "lead"],"postedWithinDays": 14,"onlyNew": true,"monitorId": "daily-senior-python","firstRunMode": "seedOnly","maxJobsPerPlatform": 20,"maxTotalJobs": 30}
Run the second input once to seed today's matches. Later runs return only jobs the monitor hasn't emitted before.
Output
Selected fields from a real Remotive row checked on September 5, 2026:
{"title": "Senior Independent Software Developer","company": "A.Team","location": "Americas, Europe, Israel","salary": "$90 - $150 /hour","platform": "remotive","work_type": "Remote","job_type": "Contract","seniority": "senior","url": "https://remotive.com/remote-jobs/software-development/senior-independent-software-developer-1919265","posted_date": "2026-08-16T10:09:34","scraped_at": "2026-09-05T12:31:54.674449","job_id": "26a0ba3158eb37351b76d822","is_new": false,"monitor_id": null,"first_seen_at": null,"index": 4}
This is a dated example, not confirmation that the vacancy remains open.
job_id stays stable when a source adds tracking parameters to its URL. A repost with a different published date can appear as a fresh opening.
How only-new monitoring works
The Actor stores monitor fingerprints in a named key-value store inside the run user's Apify account. It doesn't mix state between different Apify users.
Give each saved search a stable monitorId. If you leave it empty, the Actor derives one from the query, selected boards, and filters. Changing that configuration creates a new automatic scope.
On the first run:
emitAllreturns up tomaxTotalJobscurrent matches and records the full fetched baseline.seedOnlyrecords the baseline and returns an empty dataset.
Later runs remove fingerprints already stored for that monitor. Rows beyond maxTotalJobs remain eligible for the next run rather than disappearing. State keeps up to 5,000 fingerprints from the previous 90 days.
If the run reaches its maximum charge, the Actor reports the number of jobs actually saved and remembers only those exported jobs. Unexported matches remain eligible for the next monitor run, including when the spending limit interrupts the first baseline export. Increasing a result limit does not increase the run's maximum charge.
Don't overlap runs using the same monitorId; schedule the next run after the previous one can finish. To start over, run once with resetState: true, then switch it back off.
Daily alert workflow
The checked-in n8n template follows a weekday schedule, calls the synchronous dataset endpoint, and builds a digest from only-new rows. Keep the Apify token in an n8n Header Auth credential rather than pasting it into exported workflow JSON.
A practical setup looks like this:
- Import the n8n workflow.
- Attach an Apify Header Auth credential to the Actor request node.
- Choose one stable
monitorIdand test withfirstRunMode: seedOnly. - Connect the output to email, Slack, a Google Sheet, or your own webhook.
- Activate the schedule only after the first manual run succeeds.
Apify Tasks and Schedules work too. Save the input as a Task, run it once, inspect the dataset, then add a weekday schedule and a dataset/webhook integration.
Use cases
- Recruiters can watch several remote boards without rereading the same jobs each morning.
- Hiring-signal teams can track companies, regions, role levels, and salary-bearing openings.
- Job-board operators can import normalized records while keeping source URLs and attribution.
- Analysts can measure remote hiring volume and skill demand over time.
- Career tools can feed current openings into matching, alerting, or research systems.
Source notes
RemoteOK asks API users to credit and link to remoteok.com. Remotive asks for the same credit and says its jobs must not be republished onto Jooble, Neuvoo, Google Jobs, or LinkedIn Jobs. Check each source's current terms before building a public redistribution product.
RemoteOK's free feed may trail current postings by roughly 24 hours. Jobicy can enforce a low request rate. These are bounded current-feed requests, not full-board or historical crawls; a matching job outside the fetched window will not appear. Arbeitnow rows must have the source's remote flag. A failed board produces a warning, while failure of every selected board stops the run.
The September 5 update repairs RemoteOK dates and Himalayas company, salary and application fields. Previously missing or incorrectly fingerprinted jobs can appear once as new after that correction; existing monitor state is not reset.
FAQ
Do I need API keys for the six boards? No. The Actor uses their public endpoints.
Can I filter by location now? Yes. Add one or more locationKeywords. Matching uses the normalized location text supplied by each source.
How is seniority determined? The Actor checks the title and tags for terms such as junior, senior, staff, lead, manager, director, and VP. Roles without a clear signal receive unspecified.
Why did an only-new run return zero rows? No unseen job passed the same query and filters. That empty update is expected and doesn't create per-result charges.
Will changing my search reuse old state? An explicit monitorId keeps its own scope. Automatic IDs change when the search or filters change.
Can I monitor several searches? Yes. Give each saved Task a different monitorId.
What if I accidentally reset a monitor? The next run treats it as new. Use seedOnly if you want to rebuild the baseline without sending the current jobs downstream.
Why is salary empty on many rows? Arbeitnow doesn't expose salary in its API, and many employers leave pay blank elsewhere. Use salaryOnly when missing salaries aren't useful.
Can I call it through Python, JavaScript, Make, or Zapier? Yes. Use the Actor API or a saved Task. The default dataset endpoint returns the normalized rows.
Is the data legal to use? The Actor calls public job APIs rather than bypassing browser controls. Follow source terms, preserve required attribution, and handle any personal data under applicable privacy and employment rules.
Related Actors
- Remotive Jobs Intelligence
- Jobicy Remote Jobs Intelligence
- Job Listings Aggregator
- Wellfound Jobs Scraper
Keywords: remote jobs scraper, remote jobs API, only new job alerts, hiring signals, job monitor, Arbeitnow API, Jobicy API, Himalayas jobs, RemoteOK API, Remotive API, Working Nomads jobs, recruitment data, n8n job alerts, remote hiring feed, job listings export, scheduled job scraper, Slack job alerts, Google Sheets jobs.