Remote Jobs Scraper - We Work Remotely, RemoteOK, Himalayas
Pricing
from $0.90 / 1,000 jobs
Remote Jobs Scraper - We Work Remotely, RemoteOK, Himalayas
Search remote jobs on We Work Remotely, RemoteOK, Himalayas, Jobicy and Arbeitnow via official APIs/feeds, de-duplicated. Input: keywords, boards, locations, job types, min salary, posted within. Returns per job: title, company, location, salary, date, source, URL. Default: 20 jobs. $0.90/1k.
Pricing
from $0.90 / 1,000 jobs
Rating
0.0
(0)
Developer
Bence Kadi
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
18 days ago
Last modified
Categories
Share
Remote Jobs Scraper: We Work Remotely, RemoteOK, Himalayas, Jobicy & Arbeitnow jobs in one feed
What is Remote Jobs Scraper?
Remote Jobs Scraper collects remote job listings from five job boards, We Work Remotely, Himalayas, Remote OK, Jobicy and Arbeitnow, and returns them in one clean, de-duplicated dataset. You type keywords such as python or customer support, and you get JSON, CSV or Excel with title, company, where candidates may live, job type, salary range, tags, posted date, job link and description.
It reads each board's official free public API or RSS feed. There is no browser, no login and no proxy, so runs are fast and cheap.
What makes it different
- 5 remote job boards, 1 schema. The same fields for every board, so you can sort, filter and merge without cleanup.
- Cross-board de-duplication. The same job (same company and title) on two boards comes back once. The other board's link is kept in
alsoListedOn. - Salary included. Structured pay where the board publishes it; ranges in Arbeitnow descriptions are parsed from the text.
- Filters that work across boards: keywords, categories, candidate location or region, job type, posted date, minimum salary.
- Only new jobs. Monitoring mode outputs, and charges for, only jobs you haven't seen before.
- Attribution built in. Every job has
source,sourceUrl, the original joburland a ready-to-showattributionline, which is what these boards ask for when you reuse their jobs. - No personal data. E-mail addresses and phone numbers are removed from descriptions.
Use cases: Generate leads (build B2B prospect lists, lead enrichment & validation) · Research markets & competitors (track competitors, build market datasets, track trends, profile companies & due diligence) · Developer tools (monitor & alert on website changes).
Use cases
- Remote job boards, newsletters and Slack/Discord job channels: a daily feed of fresh remote jobs with links back to the source.
- Job alerts for yourself or your community: "remote Python jobs open to Europe paying 80k+", every morning.
- Recruiting and talent market research: which companies hire remotely, for which roles, in which regions, at what pay.
- Sales and lead generation (hiring signals): companies hiring remote engineers, marketers or support staff right now.
- AI agents and automation: structured remote-job data via the API or the Apify MCP server.
Data fields you get
| Field | Description | Example |
|---|---|---|
title | Job title | People Operations Coordinator |
company | Employer | Ashby |
companyUrl | Company profile (Himalayas) or company website (We Work Remotely) | https://himalayas.app/companies/ness-usa-inc |
location | Where candidates may live (first value) | USA |
locations | All countries or regions the job is open to | ["USA"] |
isWorldwide | true when the job is open to candidates anywhere | false |
workMode | remote, or hybrid/onsite (Arbeitnow, remoteOnly off) | remote |
employmentType | full-time, part-time, contract, freelance, internship, temporary or volunteer | full-time |
seniority | Level as published by the board | Senior |
salaryMin / salaryMax | Pay range (numbers) | 55000 / 80000 |
salaryCurrency | Currency code | USD |
salaryPeriod | YEAR, MONTH, HOUR, ... | YEAR |
salaryText | Original pay text, when the range was parsed from the description | 4.000€ - 6.000€ |
tags | The board's categories and tags | ["HR & Recruiting"] |
postedDate | Posting date-time (ISO, UTC) | 2026-10-03T14:56:39Z |
url | Job page on the source board | https://jobicy.com/jobs/154451-people-operations-coordinator |
applyUrl | Apply link | https://jobicy.com/jobs/154451-... |
description | Job description as plain text | Hi! I’m Hannah and I lead People Operations… |
descriptionHtml | Description as HTML (if you choose HTML or both) | <p>…</p> |
source | Board key | jobicy |
sourceName | Board name | Jobicy |
sourceUrl | Board home page | https://jobicy.com |
attribution | Ready-made credit line | Job listing via Jobicy (https://jobicy.com): https://jobicy.com/jobs/… |
jobId | The board's job ID | 154451 |
alsoListedOn | Other boards that list the same job (source, name, URL) | [{"source": "remoteok", ...}] |
isNew | Set in monitoring mode | true |
scrapedAt | When the job was scraped (UTC) | 2026-10-05T04:10:10Z |
How to use Remote Jobs Scraper
- Type one or more keywords. The prefill (
python, 30 jobs) takes about 12 seconds and costs about $0.03. Leave empty for all remote jobs. - Optional: pick the job boards, a candidate location (e.g.
United States,Europe), job type, posted within N days or a minimum salary. - Set Max jobs to how many jobs you want in total.
- Click Start.
- When the run finishes, open the Output tab and download the data as JSON, CSV, Excel or HTML, or connect it to Google Sheets, Zapier, Make, n8n or your own code.
- To get only new jobs every day, turn on Only new jobs and create a Schedule (see Integrations and scheduling).
Input guide
Keywords (keywords)
A job is kept if its title contains ANY of the keywords (case-insensitive). Up to 10. Each keyword is also searched on the boards, so more keywords mean more requests.
- Good:
python,data engineer,customer support,react - Bad:
remote python jobs in Europe(every job here is remote; putEuropein Candidate location) - Warning: it is a simple "contains" check, so
javaalso matches "JavaScript". Use a longer phrase when that matters. - Tip: Also match keywords in the description gives more, less precise results.
Max jobs (maxResults)
A limit for the whole run, after filters and de-duplication (default 100, prefill 30, maximum 10,000). When more jobs match, they are taken in turn from each board, so even a small run shows several boards.
Categories / tags (categories)
Keeps a job if its board categories or tags contain ANY of these, e.g. Software Engineering, Marketing, devops.
Candidate location / remote region (locations)
Where candidates may live, e.g. United States, Germany, Europe, LATAM, UK. A job is kept if ANY of its locations matches. Common aliases work (US, USA, EU, EMEA, Latin America), and a job open to a whole region also matches a country inside it: Germany matches a job open to "Europe".
- Include 'work from anywhere' jobs (
includeWorldwide), on by default, also keeps jobs open worldwide.
Job type (jobTypes)
full-time, part-time, contract, freelance, internship, temporary, volunteer.
- Warning: jobs whose board publishes no type are left out when you set this. Remote OK has no job-type field, so most of its jobs are dropped.
Posted within (days) (postedWithinDays)
Only jobs posted in the last N days, e.g. 7. Leave empty for any date.
Minimum salary per year (salaryMin)
Keeps a job if the top of its pay range, converted to a yearly figure (hourly x 2080, monthly x 12), is at least this number.
- Warning: there is no currency conversion. The number is compared in the job's own currency, so
60000keeps a USD job paying 60,000 and an INR job paying 60,000. Combine it with a location filter. - Jobs without a published salary are left out when this is set.
Remote jobs only (remoteOnly)
On by default. Switch it off to also get Arbeitnow's on-site and hybrid jobs in Germany and the EU.
Jobs removed by any filter are not saved, don't count toward Max jobs and are not charged.
Only new jobs (onlyNewJobs) and Monitor name (monitorName)
See Monitoring mode below.
Output options
dedupe(default on): see How does de-duplication work?.descriptionFormat:text(default),html,bothornone(smallest output).stripContactInfo(default on): removes e-mails and phone numbers from descriptions. Keep it on to avoid storing personal data.
Advanced
proxyConfiguration: off by default and not needed for public APIs.
Example input:
{"keywords": ["python", "data engineer"],"sources": ["himalayas", "jobicy", "remoteok", "weworkremotely", "arbeitnow"],"locations": ["Europe"],"jobTypes": ["full-time", "contract"],"postedWithinDays": 7,"salaryMin": 60000,"maxResults": 200,"onlyNewJobs": true,"monitorName": "python-europe"}
Output
Each job is one item in the run's dataset. Here is one real item from an all-boards run on 2026-10-05 (description shortened). Jobicy's copy was kept and the same job on Remote OK went to alsoListedOn:
{"title": "People Operations Coordinator","company": "Ashby","companyUrl": null,"location": "USA","locations": ["USA"],"isWorldwide": false,"workMode": "remote","employmentType": "full-time","seniority": "Senior","salaryMin": 55000,"salaryMax": 80000,"salaryCurrency": "USD","salaryPeriod": "YEAR","salaryText": null,"tags": ["HR & Recruiting"],"postedDate": "2026-10-03T14:56:39Z","url": "https://jobicy.com/jobs/154451-people-operations-coordinator","applyUrl": "https://jobicy.com/jobs/154451-people-operations-coordinator","description": "Hi! I’m Hannah and I lead People Operations here at Ashby. I joined over four years ago as the first People hire …","descriptionHtml": null,"source": "jobicy","sourceName": "Jobicy","sourceUrl": "https://jobicy.com","attribution": "Job listing via Jobicy (https://jobicy.com): https://jobicy.com/jobs/154451-people-operations-coordinator","jobId": "154451","alsoListedOn": [{"source": "remoteok","sourceName": "Remote OK","url": "https://remoteok.com/remote-jobs/remote-people-operations-coordinator-ashby-1137412"}],"scrapedAt": "2026-10-05T04:10:10Z"}
Notes:
- Every board gives the same fields. Empty values are
null(or[]), so CSV and Excel columns always match. salaryMin/salaryMaxare in the job's own currency and period.location/locationssay where candidates may live, not where the company is.- Items are sorted newest first.
Dataset views
The Output tab has two views of the same data:
| View | What it shows |
|---|---|
| Jobs | A compact table: title, company, open to, type, salary min/max, currency, posted date, source and job link. Best for a quick look. |
| Full details | Title, company, company URL, work mode, all locations, seniority, salary period, tags, description, apply link, attribution and other boards (alsoListedOn). |
Every export (JSON, CSV, Excel, API) contains all fields, whichever view you look at. The run also writes a RUN_SUMMARY record to the key-value store: per board, how many jobs were fetched, matched your filters, were removed as duplicates and were saved, how many requests were made, and any board that was unavailable during the run.
How to export the data
- In the Console: Output tab > Export > JSON, CSV, Excel, HTML, XML or RSS. You can pick fields and the view.
- Google Sheets: add the Google Sheets integration to the Actor or a schedule (Integrations tab), or use
=IMPORTDATA("https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&token=<TOKEN>"). - API:
https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json(alsocsv,xlsx,xml). Add&view=overviewfor the compact table.
Pricing
This Actor uses pay per event. You pay $0.90 per 1,000 jobs ($0.0009 per job saved to the dataset), plus Apify's standard Actor start fee of $0.00005 per run. Platform compute is included in the price.
| Example run | Jobs saved | Cost |
|---|---|---|
Prefill test (python, 30 jobs) | 30 | about $0.03 |
| 500 jobs from all 5 boards | 500 | about $0.45 |
| 1,000 jobs | 1,000 | about $0.90 |
| Daily job alert, ~50 new jobs per day for 30 days | 1,500 | about $1.35 per month |
What you don't pay for:
- jobs removed by your filters (keywords, location, type, date, salary),
- duplicates removed across boards,
- jobs already seen in monitoring mode,
- malformed jobs that are skipped, and boards that return nothing,
- the
RUN_SUMMARYrecord.
To cap spending, set Max charge per run in the run options; the Actor stops cleanly at that limit and keeps what it saved. Apify's free plan includes monthly platform credit you can use for this Actor.
Use it via API
Get your API token in the Apify Console under Settings > API & Integrations. Each example runs the Actor and reads the jobs.
JavaScript / Node.js (npm install apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('kadi_bence/remote-jobs-scraper').call({keywords: ['python', 'data engineer'],locations: ['Europe'],postedWithinDays: 7,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`${items.length} jobs`, items[0]);
Python (pip install apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("kadi_bence/remote-jobs-scraper").call(run_input={"keywords": ["python", "data engineer"],"locations": ["Europe"],"postedWithinDays": 7,"maxResults": 200,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["company"], job["sourceName"], job["salaryMin"], job["url"])
cURL (runs the Actor and returns the jobs in one request; best for runs under 5 minutes)
curl -X POST "https://api.apify.com/v2/acts/kadi_bence~remote-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["python"], "maxResults": 30}'
Apify CLI
$apify call kadi_bence/remote-jobs-scraper --input '{"keywords": ["python"], "maxResults": 30}' --output-dataset
MCP server for AI agents (Claude, Cursor, VS Code and other MCP clients)
Add the Apify MCP server with this Actor as a tool. Your client will ask you to sign in to Apify (OAuth), or you can send your token as an Authorization: Bearer YOUR_APIFY_TOKEN header.
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=kadi_bence/remote-jobs-scraper"}}}
Then ask your agent, for example: "Find remote Python jobs open to candidates in Europe posted in the last 7 days and list the ones with a published salary."
Integrations and scheduling
- Schedules: in the Console go to Schedules > Create new, pick this Actor (or a saved task with your input) and a time, e.g. every day at 07:00. Each run gets its own dataset. Once or a few times a day is plenty: the boards refresh hourly to daily, and Jobicy asks integrations not to poll more than once an hour.
- Webhooks: add a "Run succeeded" webhook on the Integrations tab.
- Zapier, Make and n8n: use the Apify app or node. Trigger "Actor run finished", then "Get dataset items", then send each job to Slack, e-mail, a CRM or Airtable.
- Google Sheets: the Google Sheets integration appends each run's jobs to a sheet, which is the easiest job-alert setup.
Monitoring mode (only new jobs)
Turn on Only new jobs (onlyNewJobs: true) and schedule the Actor:
- The first run outputs all matching jobs and remembers them.
- Every later run outputs only jobs that weren't returned before. In monitoring mode every output job has
isNew: true. - You pay only for those new jobs.
The "already seen" list is stored in a named key-value store (remote-jobs-monitor) in your own Apify account, With the Monitor name default, every search (keywords, sources and filters) keeps its own list. Any other Monitor name keeps one list for that name, whatever the keywords or filters, so you can change the search without getting old jobs again. A job is remembered by its URL on every board that lists it (including alsoListedOn), so a job seen on Jobicy is not returned again from Remote OK. Only jobs actually delivered are remembered; the most recent 100,000 URLs are kept.
If you run two schedules with different searches under your own monitor name, give them different Monitor names so their lists stay separate. To start over, use a new monitor name.
Other job scrapers by the same developer
All of them use the same output fields where possible, so you can merge datasets.
- Workday Jobs Scraper: every job from company career sites on Workday (myworkdayjobs.com), by company name, with no 2,000-job cap.
- Greenhouse, Lever & Ashby Jobs Scraper: jobs from Greenhouse, Lever, Ashby, Workable, Recruitee and Personio boards, by company name.
- Oracle, Taleo, BambooHR & Rippling Jobs Scraper: nine more applicant tracking systems, including Oracle Recruiting Cloud, Taleo, Teamtailor and Jobvite.
- Germany Jobs Scraper - Arbeitsagentur: 1M+ German job offers from the federal employment agency's Jobbörse.
- Sweden Jobs Scraper - Platsbanken: all Swedish job ads from Arbetsförmedlingen, with an archive since 2016.
- EURES Jobs Scraper: EU job vacancies from 31 countries via the official European Job Mobility Portal.
Related company data for B2B leads: SEC Form D Scraper (startup funding rounds), New Business Filings USA (newly registered companies) and Website Tech Stack Detector (technologies a company uses).
FAQ
How does Remote Jobs Scraper work? It calls the five boards' free public jobs APIs (RSS feeds for We Work Remotely), maps every job to one schema, applies your filters and removes cross-board duplicates. No browser and no proxies are needed.
Which job boards are included, and why not Remotive, Working Nomads or The Muse?
We Work Remotely, Himalayas, Remote OK, Jobicy and Arbeitnow: all five publish a free public jobs API or RSS feed and allow reuse with attribution. Others were left out on purpose: Remotive's robots.txt blocks its API (Disallow: /api/*) and its terms forbid submitting its jobs to third-party sites; Working Nomads' terms forbid commercially exploiting the service or building a competing product with it; The Muse requires registration and forbids cloning its content; Get on Board restricts commercial reuse.
How many jobs can I get? Himalayas has 100,000+ active remote jobs, Jobicy publishes the last 7 days, Remote OK the latest ~100 per tag, We Work Remotely ~90 newest jobs in its main feed plus ~25 per category feed (about 250 per run), and Arbeitnow mostly German/EU jobs (on-site, hybrid and remote). Use up to 10,000 jobs per run; for "everything new", use monitoring mode on a schedule.
How fast is it? The 30-job prefill run takes about 12 seconds. A 500-job run from all four boards took about 22 seconds.
Why do I get fewer jobs than the boards show?
Usually because of a filter or Max jobs: keywords must be in the title, Job type and Minimum salary drop jobs without that data, and Remote jobs only drops Arbeitnow's on-site jobs. Each board is read up to a fixed number of requests per run; We Work Remotely has no search, so for keyword or filtered runs all 11 of its feeds are read and filtered locally; Arbeitnow is capped at 8 pages, so its remote output tops out around 150–200 jobs. RUN_SUMMARY shows the counts per board.
Why do some jobs have no salary or job type? Only what the board publishes is returned. Remote OK has no job-type field (we read it from tags only when unambiguous) and about half the jobs on any board have no published pay.
How does de-duplication work?
Company names are normalised ("Valiant Solutions, LLC" = "Valiant Solutions") and so are titles ("Sr. Python Engineer - Remote" = "Senior Python Engineer"). If the same job is on two boards, the copy with more data (salary, description) is kept and the other board's link goes to alsoListedOn. Several openings with the same title on one board (e.g. one per country) are all kept.
Is it legal to scrape these job boards?
The Actor only calls the boards' official public APIs, respects robots.txt and crawl-delay, doesn't log in and removes e-mails and phone numbers from descriptions by default, so it collects no personal data (GDPR). You are responsible for how you use the data, including each board's terms and data-protection law in your country.
Can I publish these jobs on my own site? (attribution)
The boards allow reuse when you credit them. When you display a job: link to its url on the source board and name the source (sourceName, or simply show attribution). Remote OK asks for a followed link (no rel="nofollow") and its name, not its logo. We Work Remotely asks that you attribute the links back to We Work Remotely (keep url pointing to its job page); its feeds refresh hourly, so schedule at most hourly runs. Himalayas asks that its jobs are not submitted to aggregators such as Jooble, Google Jobs or LinkedIn Jobs. Jobicy asks you not to present its listings as your own. You are responsible for following each board's terms.
Can I use it from Python or another app? Yes. Use the Apify API, the JavaScript or Python client, the CLI, or the MCP server, as shown in Use it via API.
How do I get only new jobs every day? Turn on Only new jobs and create a schedule. See Monitoring mode.
The run failed or a field is missing. What should I do?
If one board is down, the run still saves jobs from the others and names the failed board in RUN_SUMMARY. Open an issue on the Issues tab with the run link or your input. Fixes usually land within 24–48 hours. See the changelog below for recent changes.
Need a custom version?
I build custom scrapers, scheduled data feeds and integrations (CSV, Excel, Google Sheets, API, MCP for AI agents). Tell me the sites and fields you need:
- Email: bence.kadi@gmail.com
- Apify profile: https://apify.com/kadi_bence
Related Actors
More low-cost Actors by the same developer, built on official APIs and public data:
- Greenhouse, Lever & Ashby Jobs Scraper — all open jobs of a company from 6 applicant systems, plus Workday
- Workday Jobs Scraper — open jobs of any company by name (NVIDIA, Salesforce), plus Greenhouse/Lever fallback
- ATS Jobs Feed — search a daily database of jobs from 1,000+ companies, no crawling wait
- EURES Jobs Scraper — EU job vacancies from 31 countries
- Oracle, Taleo, BambooHR & Rippling Jobs Scraper — jobs from 9 more applicant tracking systems
- Arbeitsagentur Jobs Scraper — 1M+ German job offers by keyword, city and radius
- Website Tech Stack Detector — CMS, ecommerce, analytics and frameworks of any website
All my Actors: apify.com/kadi_bence
Changelog
- 2026-10-05, 1.1: added We Work Remotely (official public RSS feeds, attribution kept; on by default). Remotive (robots.txt blocks its API; terms forbid reposting) and Working Nomads (terms forbid commercial reuse) were checked again and stay excluded.
- 2026-10-05, 1.0: first public release: Himalayas, Remote OK, Jobicy and Arbeitnow APIs, unified schema with salary and location, cross-board de-duplication, keyword/category/location/type/date/salary filters, monitoring mode, attribution fields.