Remote Jobs API: Remotive, Jobicy, Himalayas, WWR, Remote OK
Pricing
from $0.50 / 1,000 result rows
Remote Jobs API: Remotive, Jobicy, Himalayas, WWR, Remote OK
Aggregate remote job listings from Remotive, Jobicy, Himalayas, We Work Remotely and Remote OK into one deduplicated JSON feed with title, company, category, location, salary, dates and links. Public feeds, no API key.
Pricing
from $0.50 / 1,000 result rows
Rating
0.0
(0)
Developer
Ailu Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Get the newest remote job listings from five public job feeds in one clean, deduplicated JSON table: Remotive, Jobicy, Himalayas, We Work Remotely (RSS) and Remote OK. Every row has the same fields (title, company, category, tags, employment type, location, salary, publish date, job URL), the same job found on several boards is merged into one row with the other boards listed in alsoOn, and the result is sorted newest first. No API key, no browser and no scraping of consumer sites: the Actor reads the sources' own public APIs and feeds and keeps their attribution (url and sourceUrl always point back to the source).
Use cases
- Build a remote-job board, newsletter or Slack digest filtered by keyword, category or region.
- Feed fresh job postings into an AI agent that matches candidates or drafts outreach.
- Track hiring activity for a set of skills (
categories: ["python", "devops"]) over time with a scheduled run. - Collect salary ranges for remote roles (
salaryOnly: true) for market research. - Compare which boards a company posts on (
alsoOn) and how fast new jobs appear per source.
Input
| Field | Default | Meaning |
|---|---|---|
sources | all five | Any of remotive, jobicy, himalayas, weworkremotely, remoteok. Each is fetched independently. |
keywords | [] | Keep jobs whose title contains at least one of these (case-insensitive). Empty = all. |
categories | [] | Keep jobs whose category, industry or tags contain one of these texts, e.g. software, marketing, python. Empty = all. |
locationContains | "" | Keep jobs whose location/region text contains this, e.g. USA, Europe, Worldwide. Jobs without location text are dropped when set. |
sinceDays | 14 | Only jobs published within the last N days. 0 disables the date filter. |
includeDescription | false | When true, descriptionText holds the plain-text description (max 3,000 characters). |
salaryOnly | false | Keep only jobs with a salary figure or salary text. |
maxItems | 200 | Maximum charged rows after merging and sorting; also limits how many pages are fetched from paginated sources. |
Example input:
{ "keywords": ["engineer", "developer"], "locationContains": "worldwide", "sinceDays": 7, "salaryOnly": true, "maxItems": 100 }
Output
One row per job after deduplication (lower-cased company + title across all selected sources; the earliest-published copy is kept).
| Field | Type | Meaning |
|---|---|---|
id | string | Stable key <source>:<id or slug>, e.g. remotive:2091165, himalayas:<company>/<job-slug>. |
source | string | remotive, jobicy, himalayas, weworkremotely or remoteok. |
title, company | string | null | Job title and company name. |
companyLogoUrl | string | null | Logo image URL when provided. |
category | string | null | Source category or industry (naming differs per source; null for Remote OK). |
tags | string[] | Skill/topic tags from the source (empty array when none). |
employmentType | string | null | full_time, part_time, contract, freelance, internship, temporary or the source value in snake_case. |
seniority | string | null | Seniority when stated (Jobicy, Himalayas). |
location | string | null | Allowed candidate location/region text, e.g. Worldwide, USA Only. |
salaryMin, salaryMax | number | null | Salary bounds in salaryCurrency per salaryInterval. Parsed from text for Remotive. |
salaryCurrency | string | null | ISO code such as USD, EUR, GBP. |
salaryInterval | string | null | year, month, week, day, hour or null when the source does not say. |
salaryRaw | string | null | Salary as the source expressed it. |
publishedAt | ISO 8601 | null | Publish time in UTC. |
url | string | null | Job page on the source site. |
applyUrl | string | null | Application link when the source gives one (Himalayas, Remote OK). |
descriptionText | string | null | Plain-text description (max 3,000 chars) when includeDescription is true. |
sourceUrl | string | Homepage of the source. |
alsoOn | string[] | Other sources where the same company + title was found. |
fetchedAt | ISO 8601 | When the row was fetched. |
Sample row:
{"id": "remotive:2091165", "source": "remotive", "title": "Full-Stack Developer", "company": "Fluence International, Inc.","companyLogoUrl": "https://remotive.com/job/2091165/logo", "category": "Software Development","tags": ["api", "AWS", "backend", "docker", "javascript", "react"], "employmentType": "contract", "seniority": null,"location": "Worldwide", "salaryMin": 3500, "salaryMax": 5000, "salaryCurrency": "USD", "salaryInterval": "month", "salaryRaw": "$3.5k–$5k/month","publishedAt": "2026-10-29T18:22:41.000Z", "url": "https://remotive.com/remote-jobs/software-development/full-stack-developer-2091165","applyUrl": null, "descriptionText": null, "sourceUrl": "https://remotive.com", "alsoOn": [], "fetchedAt": "2026-11-03T15:10:00.000Z"}
The run summary (rows fetched and matched per source, duplicates merged, failed sources, errors) is stored in the OUTPUT record of the default key-value store.
How it works and limits
- Sources and endpoints: Remotive
remotive.com/api/remote-jobs(JSON), Jobicyjobicy.com/api/v2/remote-jobs(JSON, 50 per page, cursor pagination), Himalayashimalayas.app/jobs/api(JSON, 20 per page, cursor pagination), We Work Remotelyweworkremotely.com/remote-jobs.rss(RSS, newest 100 jobs), Remote OKremoteok.com/api(JSON, newest ~100 jobs). All are fetched in parallel, each host at most one request per 250 ms, with retries and backoff on 429/5xx. - Pagination (Jobicy, Himalayas) stops when a page is older than
sinceDays, after 25 pages, or once the source has yielded its share of matching rows:maxItemsdivided by the number of selected sources (at least 20, at most 500). Himalayas alone publishes more than a thousand jobs a day, so this share keeps the default result a mix of all boards; select fewer sources or raisemaxItemsto get more from one board. - Freshness: Remotive states that its public feed is delayed by 24 hours and currently returns only its 10 most recent listings; Remote OK and We Work Remotely expose their newest ~100 jobs; Jobicy and Himalayas are near real time. A run with defaults takes about 10-20 seconds.
- Filters (
keywords,categories,locationContains,salaryOnly,sinceDays) are applied by the Actor after fetching, uniformly across sources. Category and location texts are not normalised across sources (for example "USA Only" vs "United States"), so use short substrings. - Deduplication is by lower-cased company + title only; the same role posted with slightly different titles stays as separate rows.
- Not covered: boards other than these five, jobs behind logins, applicant data, full HTML descriptions (plain text only), and historical listings beyond what the feeds expose.
- One failing source never fails the run: its error is listed in the summary and the status becomes
partial. The run fails only when every selected source fails.
Pricing
Pay per result: $0.50 per 1,000 rows (result event). Platform usage is billed separately by Apify. Removed/free rows are not charged.
Legal
Not affiliated with Remotive, Jobicy, Himalayas, We Work Remotely or Remote OK. Uses only their public APIs and feeds, and the rows keep each source's job URL so that attribution can be preserved. Each source sets conditions for reusing its data, which you must follow when you display or republish rows:
- Remotive: link back to the job URL on Remotive and name Remotive as the source; do not submit the jobs to third-party job aggregators; do not use the listings to collect sign-ups; the feed is delayed by 24 hours. Terms (stated in every API response; documentation at https://remotive.com/api-documentation, which redirects to their GitHub docs).
- Jobicy: credit Jobicy with a direct link and send applicants to the original job URL from the feed. Terms and API docs: https://jobicy.com/jobs-rss-feed
- Himalayas: public jobs API; link to the job page on Himalayas. API: https://himalayas.app/api, terms: https://himalayas.app/terms
- We Work Remotely: public RSS feed (https://weworkremotely.com/remote-jobs.rss); link back to the listing on weworkremotely.com and check the site's terms before republishing.
- Remote OK: their API terms require a follow link back to the job URL on Remote OK and naming "Remote OK" as the source; the Remote OK logo may not be used without permission. Terms (in the API response): https://remoteok.com/api, legal: https://remoteok.com/legal
FAQ
Why do I get fewer rows than maxItems? The feeds expose a limited window (about 10 Remotive, 100 We Work Remotely, 100 Remote OK jobs) and sinceDays plus your filters remove more. Set sinceDays: 0 or lower the filters to see everything the feeds offer.
Why is salaryInterval null for some Remotive jobs? Remotive publishes salary as free text such as "$170k - $200k"; the Actor extracts the numbers and currency but only sets an interval when the text states one (per hour, per month, per year).
How do I get only US-friendly jobs? Use locationContains: "us" (matches "USA", "United States", "US timezones"); note that Remote OK leaves the location empty for many worldwide jobs, and those rows are dropped by any location filter.
Can I get the full HTML description? No, only plain text (max 3,000 characters) via includeDescription: true. Follow url for the full posting.
Is it safe to republish these jobs on my site? Only if you keep the links and credits each source requires (see Legal). Remotive in particular forbids pushing its jobs into other job aggregators.