# Remote Jobs Scraper – Himalayas, RemoteOK, WWR & more (`anxuanng/remote-jobs-scraper`) Actor

Scrape remote jobs from Himalayas, Remote OK, We Work Remotely, Jobicy and Arbeitnow in one schema: title, company, hiring region, salary, dates and description, deduplicated across boards. Keyword, region and salary filters; only-new mode for daily feeds.

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

## Pricing

$1.50 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Remote Jobs Scraper – Himalayas, Remote OK, We Work Remotely, Jobicy & Arbeitnow

Get fresh remote jobs from five remote job boards in one clean schema: **Himalayas, Remote OK, We Work Remotely,
Jobicy and Arbeitnow**. Filter by keyword, hiring region and minimum salary, get jobs newest first across all
boards, with duplicates (the same role posted on two boards) removed. An only-new mode turns it into a daily feed.

### What data can I get?

| Field | Example |
|---|---|
| `title`, `company`, `companyLogo` | `Frontend Engineer React and AWS`, `Numentica` |
| `locationText`, `anywhere` | `USA`, `false` (hiring region as the board states it; `anywhere: true` = open worldwide) |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | `160000`, `176000`, `USD`, `year` |
| `employmentType`, `seniority`, `category`, `tags` | `Full-Time`, `Senior`, `Developer`, `["react", "aws"]` |
| `postedAt`, `expiresAt` | ISO dates |
| `source`, `sourceName`, `url`, `applyUrl` | `jobicy`, `Jobicy`, listing link, apply link |
| `description` | full job description as plain text |

### How much does it cost?

**$1.50 per 1,000 jobs.** You pay only for jobs delivered. A daily feed of 300 new remote jobs costs about $0.45 a day.

### How do I use it?

1. Pick boards (all five by default).
2. Optionally add keywords (`react`, `product designer`), hiring regions (`Europe`, `USA`, `anywhere`), a minimum
   yearly USD salary, or a posting window.
3. Run, then download JSON, CSV or Excel, or call the API.

```json
{
  "keywords": ["react", "typescript"],
  "locations": ["anywhere", "Europe"],
  "salaryMinYearlyUsd": 90000,
  "postedWithinDays": 7,
  "maxItems": 500
}
```

### How do I build a daily remote-jobs feed?

Turn on **Only new jobs** and schedule the Actor daily. Each run returns only jobs you haven't received before,
newest first, so you never pay twice for a job. Pipe the dataset to Google Sheets, Airtable, Slack or your site.

### How are salaries compared across boards?

Boards quote pay hourly, monthly or yearly. `salaryPeriod` keeps the original, and the minimum-salary filter
converts to yearly (hourly × 2,080, monthly × 12) before comparing. Jobs without a published USD salary are left out
when the salary filter is set.

### Crediting the boards

These boards publish their jobs through public APIs and feeds and ask that republished jobs **credit the board
and link to the original listing**. Every row carries `sourceName` and `url` for exactly that: if you show these
jobs on a site or in a newsletter, link each one to its `url` and mention its `sourceName`. Remotive is not included
because its API terms don't allow republishing.

### Use cases

- **Remote job boards and newsletters:** a deduplicated feed from five boards with salaries.
- **Job seekers:** one alert for every new remote role matching your stack and region.
- **Market research:** remote salary bands and hiring volume by category or region.
- **Recruiting and sales:** companies hiring remotely right now.

### FAQ

**Is it legal?** It reads each board's public API or RSS feed, the way those boards intend them to be used, and
keeps the attribution fields they ask for. No login, no personal data.

**Why do some boards return fewer jobs?** Each board's public feed exposes a different window: Remote OK about the
latest 100 jobs, We Work Remotely about the latest 90, Himalayas and Arbeitnow page back further.

**Do I need a proxy?** No. It runs at 256 MB without a proxy.

### More scrapers by the same developer

- [ATS Jobs Scraper](https://apify.com/anxuanng/ats-jobs-scraper): Job postings straight from company career boards on Greenhouse, Lever, Ashby, Workday, Workable, Recruitee and SmartRecruiters in one schema, with salary ranges and an only-new mode.
- [Chotot Scraper](https://apify.com/anxuanng/chotot-scraper): Scrape Chợ Tốt (chotot.com), Vietnam's largest classifieds site: cars, motorbikes, real estate, phones, laptops and more, with prices in VND, location and all item attributes. Pay per listing.
- [Prediction Markets Scraper](https://apify.com/anxuanng/prediction-markets-scraper): Kalshi and Polymarket markets in one schema: yes/no probabilities, bid/ask, volume, liquidity, close time and results, with keyword and category filters and an only-changed mode for monitoring.
- [SEEK, JobStreet & JobsDB Jobs Scraper](https://apify.com/anxuanng/seek-jobs-scraper): Job listings from SEEK (Australia, New Zealand), JobStreet (Malaysia, Singapore, Philippines, Indonesia) and JobsDB (Hong Kong, Thailand) in one schema, with salary, work type, classification and an only-new mode.
- [Substack Scraper](https://apify.com/anxuanng/substack-scraper): Posts from any Substack newsletter with likes, comments, word count, free or paid flag and the full text of free posts. Search publications by keyword; only-new mode for monitoring.
- [Telegram Channel Scraper](https://apify.com/anxuanng/telegram-channel-scraper): Scrape public Telegram channels: posts, views, reactions, media, links, forwards, plus channel stats. Incremental mode for daily monitoring. Pay per post.
- [Vietnam Jobs Scraper](https://apify.com/anxuanng/vietnam-jobs-scraper): Scrape job postings from VietnamWorks, TopCV and ITviec in one unified schema. Extract title, company, salary in VND/USD, location, level, skills, deadline and full description. Pay per job, JSON/CSV export, API and MCP access.

# Actor input Schema

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

Which boards to read. Leave empty for all five.

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

Keep jobs whose title, tags or category contain any of these (e.g. 'react', 'data analyst', 'marketing'). Boards that support search are searched server-side. Empty keeps all.

## `locations` (type: `array`):

Keep jobs whose hiring region contains any of these (e.g. 'Europe', 'USA', 'Canada'). Use 'anywhere' for jobs open worldwide. Empty keeps all.

## `postedWithinDays` (type: `integer`):

Keep only jobs published in the last N days.

## `salaryMinYearlyUsd` (type: `integer`):

Keep only jobs with a published USD salary of at least this much per year. Hourly and monthly pay is converted to yearly. Jobs without a salary are dropped when this is set.

## `includeDescription` (type: `boolean`):

Add the full job description as plain text.

## `onlyNewJobs` (type: `boolean`):

Return only jobs you have not received in earlier runs of this Actor. Turn on for a scheduled daily feed so you never pay twice for the same job.

## `maxItems` (type: `integer`):

Stop after this many jobs across all boards, newest first. You are only charged per job delivered.

## Actor input object example

```json
{
  "sources": [],
  "includeDescription": true,
  "onlyNewJobs": false,
  "maxItems": 500
}
```

# Actor output Schema

## `listings` (type: `string`):

All job rows as JSON; append ?format=csv for CSV or ?format=xlsx for Excel.

## `runSummary` (type: `string`):

Counts of pushed/skipped/failed rows and whether the budget limit was hit.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("anxuanng/remote-jobs-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("anxuanng/remote-jobs-scraper").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 '{}' |
apify call anxuanng/remote-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/z791bQtdftjckRyb8/builds/1ynV48oAa7S9MkXsJ/openapi.json
