Remote Jobs API: Remotive, Jobicy, Himalayas, WWR, Remote OK avatar

Remote Jobs API: Remotive, Jobicy, Himalayas, WWR, Remote OK

Pricing

from $0.50 / 1,000 result rows

Go to Apify Store
Remote Jobs API: Remotive, Jobicy, Himalayas, WWR, Remote OK

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

Ailu Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

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

FieldDefaultMeaning
sourcesall fiveAny 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.
sinceDays14Only jobs published within the last N days. 0 disables the date filter.
includeDescriptionfalseWhen true, descriptionText holds the plain-text description (max 3,000 characters).
salaryOnlyfalseKeep only jobs with a salary figure or salary text.
maxItems200Maximum 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).

FieldTypeMeaning
idstringStable key <source>:<id or slug>, e.g. remotive:2091165, himalayas:<company>/<job-slug>.
sourcestringremotive, jobicy, himalayas, weworkremotely or remoteok.
title, companystring | nullJob title and company name.
companyLogoUrlstring | nullLogo image URL when provided.
categorystring | nullSource category or industry (naming differs per source; null for Remote OK).
tagsstring[]Skill/topic tags from the source (empty array when none).
employmentTypestring | nullfull_time, part_time, contract, freelance, internship, temporary or the source value in snake_case.
senioritystring | nullSeniority when stated (Jobicy, Himalayas).
locationstring | nullAllowed candidate location/region text, e.g. Worldwide, USA Only.
salaryMin, salaryMaxnumber | nullSalary bounds in salaryCurrency per salaryInterval. Parsed from text for Remotive.
salaryCurrencystring | nullISO code such as USD, EUR, GBP.
salaryIntervalstring | nullyear, month, week, day, hour or null when the source does not say.
salaryRawstring | nullSalary as the source expressed it.
publishedAtISO 8601 | nullPublish time in UTC.
urlstring | nullJob page on the source site.
applyUrlstring | nullApplication link when the source gives one (Himalayas, Remote OK).
descriptionTextstring | nullPlain-text description (max 3,000 chars) when includeDescription is true.
sourceUrlstringHomepage of the source.
alsoOnstring[]Other sources where the same company + title was found.
fetchedAtISO 8601When 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), Jobicy jobicy.com/api/v2/remote-jobs (JSON, 50 per page, cursor pagination), Himalayas himalayas.app/jobs/api (JSON, 20 per page, cursor pagination), We Work Remotely weworkremotely.com/remote-jobs.rss (RSS, newest 100 jobs), Remote OK remoteok.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: maxItems divided 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 raise maxItems to 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.

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:

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.