# Himalayas Remote Jobs Scraper (`rocketapi/himalayas-remote-jobs-scraper`) Actor

Scrape remote job listings from Himalayas.app — titles, companies, salaries, seniority, categories and application links. Filter by keyword, category and minimum salary. Clean JSON, failed runs are not billed.

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

## Pricing

$4.00 / 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/platform/actors/running/actors-in-store#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

## Himalayas Remote Jobs Scraper

Extract remote job listings from [Himalayas.app](https://himalayas.app) — **99,000+ open
remote positions** with salary ranges, company data and direct application links.
Clean JSON, one record per job, no browser automation and no proxies needed.

### Who this is for

- **Recruiters and sourcers** — track who is hiring remotely, at what salary, in which timezones.
- **Job boards and aggregators** — fill your listings with fresh remote roles.
- **Market researchers** — build salary benchmarks by seniority, category and region.
- **Lead generation** — companies that hire remotely are companies that buy remote tooling.

### What you get

Every record carries the full source payload — 21 fields — plus two computed ones:

| Field | Example |
|---|---|
| `title` | `Network Engineer Senior` |
| `companyName` / `companySlug` / `companyLogo` | `Peraton` |
| `minSalary` / `maxSalary` / `currency` / `salaryPeriod` | `86499` / `138399` / `USD` / `annual` |
| **`salaryText`** *(computed)* | `USD 86,499 – USD 138,399 per year` |
| `seniority` | `["Senior"]` |
| `employmentType` | `Full Time` |
| `categories` / `parentCategories` | `["DevOps", "Cloud-Engineering"]` |
| `locationRestrictions` / `timezoneRestrictions` | `["United States"]` / `[-8, -7, -6]` |
| `applicationLink` | direct apply URL |
| `pubDate` / `expiryDate` | Unix timestamps in seconds |
| **`scrapedAt`** *(computed)* | ISO timestamp of collection |

`salaryText` collapses to a single value when min equals max (`USD 85 per hour`) and is
`null` when the listing has no salary data — no invented numbers.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `maxItems` | integer | 100 | How many jobs to collect in total. |
| `search` | string | `""` | Keyword filter, matched in title and description, case-insensitive. |
| `categories` | array | `[]` | Keep only jobs matching at least one category. |
| `minSalaryFrom` | integer | 0 | Drop jobs paying below this threshold. |
| `includeDescription` | boolean | `true` | Set to `false` for compact records without full job text. |

#### Example input

```json
{
  "maxItems": 200,
  "search": "engineer",
  "minSalaryFrom": 90000,
  "includeDescription": false
}
```

### Pricing

**$0.004 per job scraped.** No subscription, no monthly minimum.

- You pay only for records actually written to the dataset.
- **Failed runs are not billed** — if the source is down, you owe nothing.
- Filtered-out jobs cost nothing: charging happens after a record is saved.

### Notes

- Uses the source's public JSON API over plain HTTP — no headless browser, which is why
  it is fast and cheap to run.
- Retries with exponential back-off on network errors; a single failed page never kills the run.
- Stops on `maxItems`, on an empty page, or on a hard page limit — it cannot loop forever.

Found a bug or need another source? Write to **hi@rocketapi.store** — see
[rocketapi.store](https://rocketapi.store).

# Actor input Schema

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

Total number of job records to collect.

## `search` (type: `string`):

Case-insensitive substring to match in title or description.

## `categories` (type: `array`):

Only keep jobs that have at least one matching category.

## `minSalaryFrom` (type: `integer`):

Discard jobs with minSalary lower than this value.

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

If false, the description field is omitted from output to save space.

## `proxyConfiguration` (type: `object`):

The source rate-limits datacenter IPs and answers with an empty list instead of an error. Residential proxy is used by default.

## Actor input object example

```json
{
  "maxItems": 100,
  "search": "",
  "categories": [],
  "minSalaryFrom": 0,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

All collected job listings

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rocketapi/himalayas-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("rocketapi/himalayas-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rocketapi/himalayas-remote-jobs-scraper --silent --output-dataset

```

## MCP server setup

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