Remote Jobs Aggregator & Scraper: Remote OK, We Work Remotely avatar

Remote Jobs Aggregator & Scraper: Remote OK, We Work Remotely

Pricing

from $1.20 / 1,000 job listings

Go to Apify Store
Remote Jobs Aggregator & Scraper: Remote OK, We Work Remotely

Remote Jobs Aggregator & Scraper: Remote OK, We Work Remotely

Remote job listings from Remote OK, Jobicy and We Work Remotely in one clean dataset. Filter by keyword, location, category, job type, salary and date, with duplicates across boards merged. Source link and attribution on every row. Pay only per job returned.

Pricing

from $1.20 / 1,000 job listings

Rating

0.0

(0)

Developer

JT Palms

JT Palms

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Remote Jobs Aggregator: Remote OK, Jobicy and We Work Remotely in one feed

Get the latest remote job listings from three job boards in one clean dataset. The actor reads each board's official public API or RSS feed, maps every job to the same fields, filters by keyword, location, category, job type, salary and date, and merges the same job when it appears on more than one board. Every row keeps its source name, a link to the original listing and the board's attribution line.

USD 1.50 per 1,000 jobs. You pay only for the job rows in your results. Jobs removed by your filters or merged as duplicates are free.

What people use it for

  • Remote job boards and newsletters. Fill a niche job board or a weekly jobs email with fresh, filtered listings, each one linking back to the original post.
  • Job alerts. Schedule a daily run with your keywords and locations and send new jobs to Slack, email or Google Sheets through Make, Zapier or n8n.
  • Recruiting market research. See who is hiring remotely, for which roles, open to which countries, and how that changes week to week.
  • Salary benchmarking. About half the listings state a salary. Each one comes as salaryMin, salaryMax, salaryCurrency and salaryPeriod, so you can compare roles without reading every post.

Sample output

One row per job. This is a real row from a test run, with the description shortened. The same job was also on We Work Remotely, so it was merged and that listing is in alsoListedOn.

{
"id": "ae008cdac8f188b0",
"source": "Jobicy",
"sourceId": "151810",
"title": "Financial Analyst",
"company": "Salesloft",
"companyUrl": null,
"companyLogo": "https://jobicy.com/data/server-nyc0409/galaxy/mercury/2022/03/8f0ff4d3ba38b945acfa9bbe11e39be1.jpeg",
"url": "https://jobicy.com/jobs/151810-financial-analyst-2",
"sourceUrl": "https://jobicy.com/jobs/151810-financial-analyst-2",
"attribution": "Source: Jobicy (https://jobicy.com). Keep Jobicy as the original source and link to the Jobicy job URL (sourceUrl).",
"location": "USA",
"remoteRegion": "americas",
"remoteCountries": ["United States"],
"employmentType": "full_time",
"seniority": null,
"category": "Finance & Accounting",
"tags": [],
"salaryMin": 67000,
"salaryMax": 77500,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salarySource": "listing",
"postedAt": "2026-09-27T07:20:31.000Z",
"descriptionText": "Job Title: Financial Analyst\n\nLocation: United State, REMOTE\n\nClari + Salesloft are building the next era of enterprise revenue...",
"duplicateOf": null,
"alsoListedOn": [
{ "source": "We Work Remotely", "sourceUrl": "https://weworkremotely.com/remote-jobs/salesloft-financial-analyst" }
],
"scrapedAt": "2026-09-28T18:20:11.966Z"
}

A We Work Remotely row from the same run, where the salary was read from the description:

{
"source": "We Work Remotely",
"title": "CPS Solution Architect",
"company": "Collibra",
"url": "https://weworkremotely.com/remote-jobs/collibra-cps-solution-architect-1",
"location": "United States of America",
"remoteRegion": "americas",
"remoteCountries": ["United States"],
"employmentType": "full_time",
"category": "DevOps and Sysadmin",
"salaryMin": 96000,
"salaryMax": 120000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salarySource": "description",
"postedAt": "2026-09-28T07:31:13.000Z"
}

Export as JSON, CSV or Excel, or read the results through the Apify API.

Sources

Job boardWhat one run readsAttribution the board asks for
Remote OKPublic API, the latest ~100 jobsLink back to the Remote OK listing and mention Remote OK as the source. Do not use the Remote OK logo.
JobicyPublic API, the latest 200 jobs (about 2 days)Keep Jobicy as the original source and link to the Jobicy job URL.
We Work RemotelyPublic RSS feeds (all jobs plus each category), ~200 jobsAttribute the links back to We Work Remotely.

A run with no filters and no date limit returns about 500 unique jobs.

Attribution. Every row has source, sourceUrl (the listing on that board) and attribution (the board's credit line). If you publish these jobs on a site, board, newsletter or app, show the source name and link to sourceUrl. That is the condition each board sets for reusing its listings. Do not present the jobs as your own postings or remove the credit.

Boards not included. Remotive, Himalayas and Arbeitnow also publish job APIs, but their terms rule out this kind of use: Remotive and Himalayas ask that their jobs are not submitted to third-party websites (Remotive sells a paid API for commercial use), and Arbeitnow's terms allow personal, non-commercial use only. LinkedIn, Indeed and Glassdoor have no public feed for this and are not scraped.

How to use it

  1. Choose the Job boards (all three by default).
  2. Add filters. All are optional:
    • Keywords: any of these words in the title, tags, category or description (whole words, so go does not match "good").
    • Exclude keywords: drop jobs with these words in the title, company, category or tags.
    • Categories: text to look for in the category or tags, like design or customer support.
    • Locations: text to look for in the location, like Canada, USA, Europe, LATAM or Worldwide. USA, US and United States all match each other. Turn on Also keep worldwide jobs to add jobs open to anyone.
    • Posted within (days): 30 by default, 0 for no limit.
    • Employment types, Minimum salary, Only jobs with a salary.
  3. Click Start, then download the results or connect them to your tools.

Example input:

{
"keywords": ["python", "django"],
"excludeKeywords": ["senior", "lead"],
"locations": ["Canada"],
"matchWorldwide": true,
"postedWithinDays": 7,
"employmentTypes": ["full_time", "contract"],
"maxResults": 200
}

Daily job alerts

  1. Save your filters as a task and add a schedule that runs once a day.
  2. Set Posted within (days) to 2 so nothing is missed between runs.
  3. Keep Merge duplicates on. It merges the same job across boards within one run.
  4. To send only jobs you have not seen before, keep the id of every job you process. The id is stable across runs (a hash of the board and the board's own job ID), so you can skip ids you already have in your sheet or database.

Each board is read at most once an hour per Apify account. Runs closer together than that reuse the copy from the last hour (see Limits), so a schedule more frequent than hourly adds cost without adding jobs.

Output fields

FieldDescription
idStable ID: hash of board + the board's job ID.
source, sourceIdBoard name and the board's own job ID.
title, companyJob title and employer.
companyUrl, companyLogoEmployer website and logo, when the board gives them.
urlThe job listing to send applicants to (the board's listing page).
sourceUrlThe listing on the source board. Link here when you publish the job.
attributionThe credit line the board asks for.
locationLocation text as the board states it.
remoteRegionworldwide, americas, europe, emea, apac, multiple or empty. Best effort from the location.
remoteCountriesCountries named in the location, as English names.
employmentTypefull_time, part_time, contract, internship, other or empty.
seniorityintern, junior, mid, senior, lead, director, executive or empty. From the title, or the board's level field.
category, tagsThe board's category and tags or skills.
salaryMin, salaryMax, salaryCurrency, salaryPeriodPay, when stated. Period is year, month, week, day or hour.
salarySourcelisting (the board's salary field) or description (read from the job text).
postedAtPosting date, ISO 8601.
descriptionTextDescription as plain text, up to 3,000 characters. Turn off with Include description.
duplicateOfWith Merge duplicates off: the id of the main copy of this job.
alsoListedOnOther boards where the same job appears, with their links.
scrapedAtWhen the data was fetched from the board.

A run summary (jobs per board, how many each filter removed, duplicates merged, jobs billed) is saved as SUMMARY in the run's key-value store.

Pricing

WhatPrice
Job row in your resultsUSD 0.0015 (USD 1.50 per 1,000)
Jobs removed by filters, merged duplicatesFree

A run that returns all ~500 jobs costs about USD 0.75. A daily alert with a few keywords usually returns 10 to 50 jobs, so 2 to 8 cents a day. Set a maximum cost per run in the run options and the actor stops cleanly when it reaches it. Jobs saved before that are kept.

Limits

  • The actor identifies itself. Every request carries the user agent Mozilla/5.0 (compatible; remote-jobs-aggregator/1.0; +https://apify.com/JTPalms/remote-jobs-aggregator), with plain request headers. It never pretends to be a browser. Some sites block bots; a blocked request is reported as an error, not hidden.
  • Coverage. The actor returns what the three boards publish in their feeds right now: about 500 unique jobs. It is not a historical archive, and Jobicy's feed only covers its latest 200 jobs.
  • Hourly refresh. Each board is fetched at most once per 60 minutes per Apify account. Jobicy asks integrations not to poll more often than hourly, and the feeds change slowly anyway. The actor keeps the last copy in a key-value store named remote-jobs-aggregator-cache in your account and reuses it for runs within the hour; scrapedAt shows when each job was fetched. If a board is down, a copy up to 24 hours old is used, and the run log says so.
  • Salary. Remote OK and Jobicy have salary fields. For other jobs the actor reads the salary from the description only when it is clearly stated (a currency sign or code, a pay word or a period like "per hour", and a realistic amount). Those rows have salarySource: "description". A bare $ is read as USD unless the job names a single country that uses its own dollar (Canada, Australia, New Zealand, Singapore). Minimum salary compares amounts in the job's own currency without conversion.
  • Location and region are best effort from the board's location text. Remote OK often leaves the location empty, so many Remote OK jobs have no region.
  • Employment type. Remote OK does not state it. The actor marks part-time, contract and internship when the title or tags say so, and leaves the rest empty. Filtering by employment type drops jobs with no type.
  • Duplicates are matched on company plus title, posted within 14 days of each other. The same job with a differently worded title on two boards stays as two rows.
  • Descriptions are plain text, cut at 3,000 characters. The full post is at sourceUrl.

FAQ

Is it legal? The actor reads only the official public APIs and RSS feeds that these boards publish so others can reuse their listings, it follows each board's stated request limits, and it keeps each board's attribution on every row. It does not log in, get around any protection or read pages the boards do not offer for reuse. It collects job listings only, with no candidate profiles. Descriptions are returned as each board publishes them, so a posting can include a recruiter's contact details if the employer put them there. If you republish the jobs, keep the source name and the link to sourceUrl, as each board asks. Boards whose terms do not allow this use are left out.

Why does a second run within the hour return the same jobs? The boards are read at most once an hour, as described under Limits. New jobs appear after the hour is up.

Does url go to the employer's own application page? It goes to the listing on the job board, which has the apply button. The boards ask that their listing is what you link to.

Can I get more than ~500 jobs? Not from these feeds. They only publish the latest jobs. Scheduled daily runs, stored by id, build up a larger history over time.

Can you add another job board? Open an issue with the board's name. It will be added only if the board publishes a feed or API whose terms allow reuse.

Is this an official Remote OK, Jobicy or We Work Remotely product? No. It is an independent tool that reads their public APIs and RSS feeds. It is not affiliated with or endorsed by Remote OK, Jobicy or We Work Remotely.