Remote Jobs Scraper - Himalayas, Remote OK, Jobicy, Arbeitnow avatar

Remote Jobs Scraper - Himalayas, Remote OK, Jobicy, Arbeitnow

Pricing

from $5.00 / 1,000 job returneds

Go to Apify Store
Remote Jobs Scraper - Himalayas, Remote OK, Jobicy, Arbeitnow

Remote Jobs Scraper - Himalayas, Remote OK, Jobicy, Arbeitnow

Remote jobs from four public job feeds (Himalayas, Remote OK, Jobicy, Arbeitnow) in one format: title, company, location, salary, tags, date and source links. The same job on several sites is returned once. Monitor the feeds and get only new jobs.

Pricing

from $5.00 / 1,000 job returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Categories

Share

Remote job postings from four public job feeds - Himalayas, Remote OK, Jobicy and Arbeitnow - returned in one format, one row per job: title, company, location, employment type, salary, tags, categories, posting date, description, the job page on the source site and the apply link.

  • The same job on several sites is one row. Jobs with the same company and title on different sites are merged; the row lists every site it was found on and is charged once.
  • Monitoring mode returns only the jobs that were not there at earlier runs.
  • No login, no cookies, no proxy. Only the feeds each site publishes for this purpose are read.

Source credit: what you must do with this data

Each site lets its feed be used on the condition that it is credited and linked. If you publish or redistribute these rows, you are responsible for meeting each site's conditions. Every row carries what you need: source (the site name), sourceUrl (the job's page on that site - link back to it) and applyUrl (the apply address the feed provides - send applicants there). The conditions, as written in the feeds on 2026-10-05:

  • Remote OK - "Please link back (with follow, and without nofollow!) to the URL on Remote OK and mention Remote OK as a source [...] Please don't use the Remote OK logo without written permission".
  • Jobicy - "Please ensure Jobicy is clearly credited with a direct link to the source, and all application buttons redirect to the original job URL provided in this feed."
  • Arbeitnow - "This is a free public API for jobs, please do not abuse. I would appreciate linking back to the site."
  • Himalayas - the feed is published at himalayas.app/jobs/api; credit Himalayas and link to the job's page (sourceUrl). Read the current terms on himalayas.app before you republish.

Company logo addresses are deliberately not included in the rows. The conditions can change; the feeds themselves carry the current wording.

What you get

ColumnMeaning
title, companyJob title and company name as given by the feed
location, locationRestrictionsLocation or region text (USA, Anywhere, Berlin), and the list of allowed countries/regions when the feed gives one
employmentType, employmentTypeRawfull-time, part-time, contract, freelance, internship or temporary when the feed's wording is recognised, and the wording as written. Remote OK gives no type
seniorityAs written by the feed (Himalayas, Jobicy)
salaryMin, salaryMax, salaryCurrency, salaryPeriodAs given by the feed, not converted. Remote OK gives amounts without a currency or period, so those two stay null. A salary of 0 in a feed means "not given" and is returned as null
tags, categoriesThe feed's own tags and categories
postedAt, expiresAtPosting date (ISO 8601, UTC); expiry date when the feed gives one (Himalayas)
description, descriptionIsFullA plain-text excerpt of up to 500 characters, or the full text with HTML tags removed when includeFullDescription is on
source, sourceUrl, applyUrl, sourceJobIdThe site the row was read from, the job's page on that site, the apply address from the feed, and the job's id on that site
sources, foundOnSourcesEvery site the job was found on in this run, each with its own sourceUrl, applyUrl and sourceJobId
sourcesQueriedThe feeds that were read in this run
change, previousCheckedAtMonitoring runs only: new-job, and when jobs were last recorded for these filters
status, scrapedAtok for a job row; when the run delivered it

A value the feed does not give is null, never an empty string.

When a job is found on several sites, the row's values come from the first site in this order: Himalayas, Remote OK, Jobicy, Arbeitnow. Values that site does not give (location, type, seniority, tags, categories, salary) are filled from the other sites. Two jobs with the same company and title on the same site stay two rows.

How much of each site this covers

A run reads the newest postings of each feed, not every job the sites hold:

FeedRequests per run (at most)Jobs per requestNote
Himalayas1020The feed said it held about 116,000 jobs on 2026-10-05; a run reads the newest 200 at most
Remote OK1about 100The feed carries only its newest postings
Jobicy1100
Arbeitnow3325Arbeitnow also lists on-site jobs; only postings it marks as remote are used (19 of 325 on the first page on 2026-10-05)

So one run can return up to about 450 jobs before filters, and maxJobs is capped at 500. Filters (keywords, locations, ...) are applied to these newest postings after they have been read; they are not sent to the sites as a search. If nothing matches, the run says so in a free no-match row. For a steady stream, use monitoring mode on a schedule.

Input

  • sources - any of himalayas, remoteok, jobicy, arbeitnow. Empty means all four.
  • keywords - any one must appear in the title, company, tags or categories, as a word or the start of a word (ai matches "AI Engineer" but not "Retail"; engineer matches "Engineering").
  • categories - any one must appear in the tags or categories.
  • locations - any one must appear in the location text or the allowed countries/regions. A job with no location in the feed does not match.
  • employmentTypes - full-time, part-time, contract, freelance, internship, temporary. A job with no recognised type does not match.
  • withSalaryOnly - only jobs with a minimum or maximum salary in the feed.
  • postedAfter - only jobs posted on or after this date.
  • maxJobs - with monitoring off, at most this many rows, newest first (default 200, at most 500).
  • includeFullDescription - full description text instead of the excerpt.
  • monitoringMode, resetMonitoringState - see below.

All filters that are set must match. With monitoring off, the feeds are read in rounds - one request to each feed per round - until enough matching jobs for maxJobs have been read or the request limits above are reached.

Monitoring mode

Turn monitoringMode on and schedule the Actor with the same input.

  • The first time a feed is read with a given set of filters, its newest jobs are only remembered (Himalayas: the newest 60; the others: one request). Nothing is returned and nothing is charged for that feed (a free baseline-saved row). To get the jobs that are listed now, run once with monitoring off.
  • On later runs, each feed that is read and compared is charged one monitoring check (source-checked), and only jobs that have not been seen before come back, with change: "new-job". If nothing is new, the run returns one free no-new-jobs row and costs only the checks.
  • A job counts as seen when its id on that site is remembered, or when a job with the same company and title is remembered - from any of the four sites. So a job that shows up on a second site later, or is reposted under the same title, is not returned again.
  • A job older than the oldest job remembered at the first read of its feed is not returned as new.
  • Each feed is read from the newest posting down until a page with nothing new is reached (or the request limits above). If more jobs were posted between two runs than those limits cover, the older ones among them are not read.
  • maxJobs is not applied in monitoring mode: every new job that was read is returned.
  • A job that could not be delivered because of a charge limit is not remembered; it still counts as new, and later runs read that feed up to the request limits until a run delivers everything. The same applies when a later page of a feed could not be read. A feed that could not be read at all is not charged and nothing about it is remembered.
  • When you add a feed to a monitoring schedule that already runs, the added feed gets its own first read; jobs that are also new on the feeds you already watch are still returned.
  • A job that did not match your filters when it was first seen is remembered and is not returned later.

Jobs are remembered per set of filters, so two schedules with different filters do not affect each other. Do not run two schedules with the same filters at the same moment: the platform's key-value store has no atomic update, so two runs finishing together can overwrite each other's record and return the same job twice.

What is charged

  • job-returned - one per job row. A job found on several sites is one row and is charged once.
  • source-checked - monitoring mode only: one per feed that was read (its first answer held at least one remote job) and compared with the remembered jobs, whether or not it carried a new job. The first read of a feed (which only remembers its jobs) is not charged, and runs with monitoring off never charge it.

There is no start fee and no monthly fee. Jobs dropped by your filters are not charged. Rows that explain why something was not returned are free: source-unreadable, source-blocked, invalid-input, no-jobs, no-match, no-new-jobs, baseline-saved, limit-reached, not-read, budget-reached.

If you set a maximum total charge for a run, a feed is not read when the limit has no room for one job row (in monitoring mode: one check plus one row), and a free not-read row names the feeds that were not read. Rows that do not fit inside the limit are not delivered and not charged, and a free budget-reached row says how many.

How it reads

  • Only these addresses are requested: himalayas.app/jobs/api (paged with the feed's own cursor), remoteok.com/api, jobicy.com/api/v2/remote-jobs and www.arbeitnow.com/api/job-board-api.
  • One request at a time, with a pause of more than one second between requests. A request that fails with a connection error or HTTP 5xx is retried once. HTTP 403 or 429 is not retried and no proxy is used.
  • If a feed cannot be read, the run adds a free row that names the feed and the reason, and continues with the other feeds. If a feed's answer no longer has the expected format, it is reported as source-unreadable, not as "no jobs".

Limits

  • Coverage is the newest postings of each feed (see above), not the whole of each site.
  • Duplicates are matched by company name and job title after removing case, punctuation and accents. Jobs whose company or title is written differently on two sites are not merged, and two different openings with the same company and title on different sites are merged.
  • Dates, salaries and locations are what the feeds give; nothing is converted or guessed.
  • This Actor is not affiliated with or endorsed by Himalayas, Remote OK, Jobicy or Arbeitnow. You are responsible for how you use the data, including each site's conditions above.