Remote Jobs Scraper — 6 Boards, One Feed
Pricing
from $12.00 / 1,000 results
Remote Jobs Scraper — 6 Boards, One Feed
Scrape and aggregate remote jobs from Arbeitnow, Jobicy, Himalayas, and RemoteOK in one normalized dataset. Search by role and export title, company, location, salary, skills, description, source, and application URL. No API key or proxy required.
Pricing
from $12.00 / 1,000 results
Rating
5.0
(1)
Developer
Ben
Maintained by CommunityActor stats
0
Bookmarked
679
Total users
127
Monthly active users
2 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 plus a $0.00005 run-start event. A 20-row dataset costs about $0.30005 before account discounts. An only-new run with no matching arrivals produces no result charge. The separately listed salary-extracted event starts on August 27, 2026; until then it isn't charged.
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 six requests run concurrently. If Jobicy hits its public rate limit or another source is temporarily unavailable, the remaining boards still return data. 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
- description excerpt 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
A missing salary or date stays null. The Actor doesn't guess source data.
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 | Source-level limit from 1 to 50. |
maxTotalJobs | Final dataset limit across all boards; use 0 for no total cap. |
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
Every posting becomes one dataset row:
{"title": "Senior Python Engineer","company": "Example Co","location": "Europe","salary": "$140,000 - $180,000","description": "Build data services for a distributed product team...","platform": "remotive","work_type": "Remote","job_type": "Full-time","seniority": "senior","tags": ["Python", "APIs"],"url": "https://remotive.com/remote-jobs/software-dev/example","posted_date": "2026-08-20T08:00:00+00:00","scraped_at": "2026-08-20T09:00:00+00:00","job_id": "68c242ec20fc44fc48a6c6c4","is_new": true,"monitor_id": "daily-senior-python","first_seen_at": "2026-08-20T09:00:01+00:00","index": 1}
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.
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's public API can enforce a low request rate. These limits come from the sources, so the Actor treats an unavailable board as an empty source instead of failing the whole run.
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.