# Himalayas Remote Jobs Scraper – Remote Jobs with Salary Data (`slate_cyclone/himalayas-jobs-scraper`) Actor

Scrape remote job listings from Himalayas. Get title, company, employment type, seniority, salary range, currency, worldwide eligibility, publish date and URL. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/slate_cyclone/himalayas-jobs-scraper.md
- **Developed by:** [泽斌 王](https://apify.com/slate_cyclone) (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

$0.80 / 1,000 results

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?

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

## Himalayas Remote Jobs Scraper

### What does Himalayas Remote Jobs Scraper do?

Himalayas lists remote jobs with salary and seniority details. This Actor turns those listings into structured data you can filter, store, or plug into your own tools.

### What data do you get?

Each job includes: title, companyName, employmentType, seniority, minSalary, maxSalary, currency, salaryPeriod, isWorldwide, publishedAt, url.

### Use cases

- Find remote jobs open worldwide (isWorldwide)
- Compare salary ranges by seniority
- Power a remote job alert, board, or newsletter

Export results as JSON, CSV, Excel, or pull them via the Apify API.

### ✨ Features

- 🔎 **All official search filters**: keywords, country, worldwide-only, seniority, employment type, company, timezone, sort by recent / relevance / salary.
- 💰 **Salary filters**: keep only jobs with a published salary, or above a minimum annual salary. Hourly and monthly pay is annualized for easy comparison.
- 📅 **Posted within N days**.
- 🔔 **Only-new-jobs mode** remembers jobs from earlier runs. Schedule it daily and send only new jobs to Slack, email, Google Sheets, Notion, Airtable, Make, Zapier or n8n.
- 🌐 **Full-feed mode**: leave the filters empty to walk the whole Himalayas feed, newest first.
- 🛡️ **Polite & reliable**: retries with backoff on rate limits, and an honest run summary.

### 📥 Input example

```json
{
  "keywords": "react",
  "country": "DE",
  "seniority": ["Mid-level", "Senior"],
  "employmentTypes": ["Full Time", "Contractor"],
  "postedWithinDays": 7,
  "salaryRequired": true,
  "maxJobs": 200,
  "onlyNewJobs": true
}
```

### 📤 Output example

```json
{
  "id": "https://himalayas.app/companies/elitevorasys-llc/jobs/software-engineer",
  "title": "Software Engineer",
  "companyName": "ElitevoraSys LLC",
  "companySlug": "elitevorasys-llc",
  "companyUrl": "https://himalayas.app/companies/elitevorasys-llc",
  "employmentType": "Full Time",
  "seniority": ["Senior"],
  "minSalary": 160000,
  "maxSalary": 240000,
  "currency": "USD",
  "salaryPeriod": "annual",
  "minSalaryAnnual": 160000,
  "maxSalaryAnnual": 240000,
  "isWorldwide": false,
  "locationRestrictions": ["United States"],
  "timezoneRestrictions": [-10, -9, -8, -7, -6, -5],
  "categories": ["Software-Engineer", "Software-Developer"],
  "parentCategories": ["Developer"],
  "excerpt": "ElitevoraSys is a modern engineering consultancy ...",
  "publishedAt": "2026-09-21T03:43:48.000Z",
  "expiresAt": "2026-10-17T15:00:23.000Z",
  "url": "https://himalayas.app/companies/elitevorasys-llc/jobs/software-engineer",
  "source": "Himalayas",
  "sourceUrl": "https://himalayas.app",
  "descriptionHtml": "<h3><strong>About Us</strong></h3> ...",
  "descriptionText": "About Us\nElitevoraSys is a modern engineering consultancy ...",
  "scrapedAt": "2026-10-07T22:25:37.230Z"
}
```

### 💡 Who uses it

- **Job seekers**: a daily feed of remote roles that match your stack, seniority, timezone and salary expectations.
- **Remote-work communities & newsletters**: curated job sections with attribution links back to Himalayas.
- **Recruiters & talent teams**: track which companies hire remotely and at what salary.
- **Market & salary research**: remote salary ranges by role, seniority and region.
- **AI agents & automations**: structured remote-job data for assistants and workflows.

### 💰 Pricing

Pay per result: a small fixed price per job saved, with platform compute included. 100 jobs cost a few cents. Use **Max jobs** to cap spend.

### 📜 Data source & attribution

Data comes from the [Himalayas public Remote Jobs API](https://himalayas.app/api). Himalayas refreshes it every 24 hours, so schedule this Actor **at most once a day** per search. If you display these jobs publicly, Himalayas asks that you **link back to the original job URL (`url`) and mention Himalayas as the source**, and that you don't submit the jobs to third-party job sites or job aggregators such as Google Jobs, Jooble or Neuvoo. This Actor is not affiliated with Himalayas.

### ❓ FAQ

**Do I need an API key or account?** No.

**Why do some searches stop before `maxJobs`?** The search API returns a limited number of pages per query. Narrow the query (country, seniority, keywords) or leave the filters empty to walk the full feed.

**Can I get only jobs I haven't seen?** Yes. Enable **Only new jobs** and keep the same **State key** between runs.

**Missing something?** Open an issue on the Issues tab. Feedback is welcome.

### Step-by-step tutorial

Export Himalayas jobs with salaries to CSV, plus how to combine it with Remote OK: [How to export remote job salary data to CSV](https://dev.to/wenwu_dev/how-to-export-remote-job-salary-data-to-csv-himalayas-remote-ok-36eb)

# Actor input Schema

## `keywords` (type: `string`):

Free-text search, e.g. "react engineer" or "product designer". Leave all filters empty to walk the whole Himalayas jobs feed (newest first).

## `country` (type: `string`):

Only jobs open to applicants in this country (ISO code like US, DE or a country name).

## `worldwideOnly` (type: `boolean`):

Only jobs with no location restriction (hire from anywhere).

## `excludeWorldwide` (type: `boolean`):

With a country set, drop jobs that are open worldwide and keep only country-specific ones.

## `seniority` (type: `array`):

Filter by experience level.

## `employmentTypes` (type: `array`):

Filter by employment type.

## `companySlugs` (type: `array`):

Only jobs from these companies, using the slug from the company URL, e.g. 'linear' for himalayas.app/companies/linear.

## `timezone` (type: `string`):

Only jobs that accept this timezone, e.g. 'UTC+8', '-5' or 'UTC+05:30'.

## `sort` (type: `string`):

Sort order when any filter is set.

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

Only jobs published in the last N days (0 = any date).

## `minAnnualSalary` (type: `integer`):

Keep jobs whose (annualized) salary reaches at least this amount, in the job's own currency. 0 = no salary filter.

## `salaryRequired` (type: `boolean`):

Drop jobs that don't publish a salary range.

## `maxJobs` (type: `integer`):

Maximum number of jobs to save (0 = unlimited). Keeps your cost under control.

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

Add the full job description as HTML and plain text.

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

Remember jobs from previous runs and output only jobs you haven't received yet. Combine with a daily schedule and a Slack/email/Sheets integration.

## `stateKey` (type: `string`):

Use different keys to keep separate memories for different saved searches.

## Actor input object example

```json
{
  "keywords": "python",
  "worldwideOnly": false,
  "excludeWorldwide": false,
  "sort": "recent",
  "postedWithinDays": 0,
  "minAnnualSalary": 0,
  "salaryRequired": false,
  "maxJobs": 100,
  "includeDescription": true,
  "onlyNewJobs": false,
  "stateKey": "default"
}
```

# Actor output Schema

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

All Himalayas remote job postings in the default dataset (table view 'overview'; full fields incl. description and apply URL in each item).

# 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"
};

// Run the Actor and wait for it to finish
const run = await client.actor("slate_cyclone/himalayas-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 = { "keywords": "python" }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,slate_cyclone/himalayas-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/dgt9mFMoMZIIBcn55/builds/crgXibMzWMQGA3HPp/openapi.json
