# Remote Jobs Scraper & API: Himalayas, RemoteOK, Jobicy (`plainrows/remote-jobs-aggregator`) Actor

Remote jobs scraper and MCP tool: remote jobs from the Himalayas, RemoteOK, Jobicy and Arbeitnow public APIs in one table: title, company, salary, location, tags, date, apply link. Same job on 2 sources = 1 row. Pay per job ($0.0009 or less) plus a $0.001 start fee per run.

- **URL**: https://apify.com/plainrows/remote-jobs-aggregator.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Remote Jobs Scraper & API (Himalayas, Remote OK, Jobicy, Arbeitnow)

Get **remote jobs from four job boards in one clean table**: **Himalayas**, **Remote OK**, **Jobicy** and **Arbeitnow** (its remote jobs). For each job: **title, company, company logo, location or allowed countries, remote type, employment type, seniority, salary range and currency when published, tags, categories, publication date, apply link, link to the job on its source and the full description as plain text**. Search by keyword, or leave keywords empty for the latest remote jobs.

The same job posted on two boards (same company and same title) is **returned and billed once**. The Actor uses the **free public JSON APIs** of the four boards: **no login, no account, no browser, no proxy**. One request at a time, with a pause between requests, and the robots.txt of each board is respected.

Works as an **MCP tool** for AI agents (Claude, ChatGPT, Cursor…) through the Apify MCP server: "find remote Python jobs posted this week with a salary".

### Typical uses

- **Remote job boards and newsletters**: fill your own remote job board, Slack channel or weekly newsletter with fresh jobs (`publishedWithinDays: 1`).
- **Job alerts**: a daily run per keyword ("python", "product designer", "customer support") sent to Google Sheets, Notion or e-mail via n8n, Make or Zapier.
- **Recruiting and sales**: which companies hire remotely, for which roles, with which salary.
- **Market research**: salary ranges, seniority and countries allowed for remote roles in your field.
- **AI agents**: one tool call for remote jobs across four sources, deduplicated.

### What you get

One row per job:

| Field | Description |
|---|---|
| `search`, `keyword`, `source` | Your search, the keyword, and the board the job comes from (`Himalayas`, `Remote OK`, `Jobicy`, `Arbeitnow`) |
| `title`, `company` | Job title and hiring company |
| `companyUrl`, `companyLogo` | Company page (Himalayas) and logo URL when the board gives one |
| `location`, `regions` | Location or allowed countries as the board gives them (`Worldwide` when open to all) |
| `remoteType` | `Fully remote` (Himalayas, Remote OK, Jobicy) or `Remote` (Arbeitnow) |
| `employmentType`, `seniority` | Full time, contract, part time…; seniority levels when given |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Salary range when the job publishes one, never guessed |
| `tags`, `categories` | Skills / tags and categories or industries |
| `postedAt`, `expiresAt` | Publication date and expiry date (ISO 8601, UTC) |
| `applyUrl` | Application link given by the board (the original job URL) |
| `sourceUrl`, `sourceJobId` | Link to the job on its board, and its ID there |
| `description` | Full job description as plain text |
| `observedAt` | When the board was read (UTC) |

Missing values are always `null`. A search without jobs (or refused, or unreadable) gets one free row with `found: false`, a `status` and a `message`.

#### Example row

```json
{
  "search": "python on Jobicy",
  "keyword": "python",
  "source": "Jobicy",
  "found": true,
  "title": "Senior Python Developer",
  "company": "Example Corp",
  "location": "USA",
  "regions": ["USA"],
  "remoteType": "Fully remote",
  "employmentType": "Full-Time",
  "salaryMin": 120000,
  "salaryMax": 150000,
  "salaryCurrency": "USD",
  "salaryPeriod": "yearly",
  "categories": ["Programming"],
  "postedAt": "2026-10-22T09:30:12.000Z",
  "applyUrl": "https://jobicy.com/jobs/123456-senior-python-developer",
  "sourceUrl": "https://jobicy.com/jobs/123456-senior-python-developer",
  "status": "FOUND"
}
```

### Input

```json
{
  "keywords": ["python", "product designer"],
  "sources": ["himalayas", "remoteok", "jobicy", "arbeitnow"],
  "location": "Europe",
  "publishedWithinDays": 7,
  "maxResultsPerSource": 50
}
```

- **keywords** (optional): each keyword is searched on each source. Himalayas and Jobicy search on their side; Remote OK and Arbeitnow give their latest jobs, filtered here on title, tags, categories and company. Empty: the latest remote jobs of each source.
- **sources**: any of `himalayas`, `remoteok`, `jobicy`, `arbeitnow` (all four by default).
- **location** (optional): keep jobs open worldwide or whose location / allowed countries contain this text (`Germany`, `United States`, `Europe`).
- **publishedWithinDays** (optional): only jobs published in the last N days.
- **maxResultsPerSource**: most jobs per source and keyword, 1 to 1,000 (default 50).

Limits of the sources: the Himalayas search gives up to 20 jobs per keyword (its robots.txt does not allow the next pages; without keyword, the Himalayas feed is read page after page); Remote OK gives its latest ~100 jobs; Arbeitnow is read up to 3 pages of 300 jobs and only its remote jobs are kept. Up to 50 keywords per run.

### Pricing

Pay per event: **one event per job returned**, plus a small start fee per run ($0.001).

| Plan | Per job | Per 1,000 jobs |
|---|---|---|
| Free | $0.0009 | $0.90 |
| Bronze | $0.0008 | $0.80 |
| Silver | $0.0007 | $0.70 |
| Gold | $0.0006 | $0.60 |

Free: the same job found again on another source or by another keyword, searches without jobs, answers that are refused or cannot be read, jobs without a company and input mistakes. On the free Apify plan, a run reads up to 3 keywords and 20 jobs per source.

### Sources and attribution

Jobs come from the free public APIs of:

- **[Himalayas](https://himalayas.app)** — `himalayas.app/jobs/api` (public API, used within its documented limits);
- **[Remote OK](https://remoteok.com)** — `remoteok.com/api`. Remote OK asks to be mentioned as the source with a direct link to the job: every row has `source: "Remote OK"` and `sourceUrl`, please keep that link (without `nofollow`) when you publish the jobs;
- **[Jobicy](https://jobicy.com)** — `jobicy.com/api/v2/remote-jobs`. Jobicy asks to be credited with a direct link and to send applications to the original job URL: `applyUrl` and `sourceUrl` are that URL;
- **[Arbeitnow](https://www.arbeitnow.com)** — `arbeitnow.com/api/job-board-api` (remote jobs only); a link back to Arbeitnow is appreciated.

Every row names its `source` and links to the job there. If you republish the jobs, credit the source and link to `sourceUrl`. This Actor is not affiliated with these job boards.

### FAQ

**Is it legal?** The Actor reads the public APIs the four boards publish for this use, with an honest user agent, at a slow pace, respecting robots.txt and the attribution each board asks for. It returns company job posts, no personal data. You are responsible for how you use the data.

**Why not Remotive or We Work Remotely?** Remotive's robots.txt forbids its API to robots, so it is not used. Other boards may be added if users ask.

**How does deduplication work?** Company and title are compared after removing case, punctuation and gender marks like "(m/w/d)". The first source read (Himalayas, then Remote OK, Jobicy, Arbeitnow) keeps the job; later copies are skipped and not billed (`duplicateJobsSkipped` in the run summary).

**Why are some searches empty or BLOCKED?** If a board refuses a request (rate limit), the Actor stops that search and charges nothing for it. The other sources go on. Try again later.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Bing Keyword Search Volume & CPC](https://apify.com/plainrows/bing-keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [SEO Competitors & Keyword Gap Finder](https://apify.com/plainrows/seo-competitors-keyword-gap) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Amazon Reviews Scraper](https://apify.com/plainrows/amazon-reviews-scraper) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [AliExpress Scraper](https://apify.com/plainrows/aliexpress-scraper) · [Kleinanzeigen Scraper (Germany)](https://apify.com/plainrows/kleinanzeigen-scraper) · [AutoScout24 Scraper (Cars, Europe)](https://apify.com/plainrows/autoscout24-scraper) · [Kijiji Scraper (Canada)](https://apify.com/plainrows/kijiji-scraper) · [Marktplaats Scraper (Netherlands)](https://apify.com/plainrows/marktplaats-scraper) · [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

### Support

Open an issue on the Actor's page: issues are read and answered. Need another field, a higher limit or a custom version for your workflow? Ask in an issue.

# Actor input Schema

## `keywords` (type: `array`):

Job titles or skills ("python", "product designer", "customer support"). Each keyword is searched on each source. Himalayas and Jobicy search on their side; Remote OK and Arbeitnow give their whole feed, filtered here on title, tags, categories and company (every word must match). Leave empty for the latest remote jobs of each source.

## `sources` (type: `array`):

Job boards to read. All 4 by default.

## `location` (type: `string`):

Keep jobs open worldwide or whose allowed countries / location contain this text ("Germany", "United States", "Europe", "UK"). Also sent to the Himalayas search as its country filter.

## `publishedWithinDays` (type: `integer`):

Only jobs published in the last N days. Leave empty for all. Use 1 for a daily feed of new jobs.

## `maxResultsPerSource` (type: `integer`):

Most jobs read from each source for each keyword. Himalayas search gives at most 20 jobs per keyword (its robots.txt does not allow page 2); Remote OK gives its latest ~100 jobs; Arbeitnow is read up to 3 pages of 300 jobs (its remote jobs only).

## Actor input object example

```json
{
  "keywords": [
    "python"
  ],
  "sources": [
    "himalayas",
    "remoteok",
    "jobicy",
    "arbeitnow"
  ],
  "maxResultsPerSource": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "python"
    ],
    "maxResultsPerSource": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/remote-jobs-aggregator").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["python"],
    "maxResultsPerSource": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/remote-jobs-aggregator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "python"
  ],
  "maxResultsPerSource": 20
}' |
apify call plainrows/remote-jobs-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/remote-jobs-aggregator"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jP0AgREqZ2xpPHNF3/builds/icI0MmUGzaN89fUeM/openapi.json
