# Himalayas Scraper - Remote Jobs, Salaries & Company Profiles (`scrapersdelight/himalayas-scraper`) Actor

Scrape Himalayas remote jobs and company profiles: title, salary, seniority, countries, timezones, skills and apply link, plus company website, size, founded year, CEO, markets, tech stack, benefits and socials. Every Himalayas filter, past the 5,000-job window, companies hiring for a search.

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

## Pricing

from $0.09 / 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.

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

### What does Himalayas Scraper do?

**Himalayas Scraper** exports remote jobs and company profiles from [Himalayas](https://himalayas.app), the remote-work job board: one row per job with the title, company, salary range and pay period, seniority, employment type, the countries and timezones a candidate must be in, categories, posted and expiry dates, apply link and the full description — or one row per company with its **website, size, founded year, CEO, locations, markets, open positions, tech stack, benefits and social links**. Recruiters, sales teams selling to remote-first companies, job boards and salary researchers use it to see who hires remotely, where, and for how much.

Himalayas scraper · Himalayas jobs scraper · Himalayas remote jobs API · himalayas.app company data export

- **Every Himalayas job filter**: keywords, countries, worldwide-only, seniority, employment type, company, timezone and sort (relevant, newest, highest or lowest salary).
- **The whole catalogue**: with no keyword it reads Himalayas' full feed newest first (123,675 jobs listed on 2026-10-16); a search reads up to 5,000 jobs, and **deep search** goes past that.
- **Company firmographics**: website, employee range, founded year, CEO, locations, markets, open positions, tech stack by category, benefits, verified badge, 4-day week, LinkedIn / X / Facebook / Instagram — for any of the 33,041 companies in Himalayas' directory, searchable by keyword, country, benefits and tech stack.
- **Companies hiring for a search**: one row per company hiring for your keyword, with its profile and the matching jobs — a lead list instead of a job list.
- **Skills, education and experience** on each job, and the **company profile on each job**, as options.
- **Only new jobs**: schedule it and each run delivers only jobs earlier runs did not.
- **No login, no cookies, no browser.** It reads Himalayas' public Remote Jobs API and Himalayas' public company and job profiles.

### What data can you get from Himalayas?

| | | |
|---|---|---|
| 💼 Job title `title` | 🏢 Company `companyName` + slug + logo | 💵 Salary min / max `minSalary` `maxSalary` |
| 🗓️ Pay period + yearly figure `salaryMaxAnnual` | 💱 Currency `currency` | 🎚️ Seniority `seniority` |
| 🕒 Employment type `employmentType` | 🌍 Countries allowed `locationRestrictions` | 🕐 Timezones `timezoneRestrictions` |
| 🏷️ Categories + parent categories | 📅 Posted / expires `postedAt` `expiresAt` | 📄 Full description (text or HTML) |
| 🔗 Job page + apply link `applicationLink` | 🧠 Skills `skills` (option) | 🎓 Education + years of experience (option) |
| 🌐 Company website + domain | 👥 Employee range `employeeRange` | 🏛️ Founded year `yearFounded` |
| 👤 CEO `ceo` | 📍 Company locations | 🏭 Markets / industries `markets` |
| ⚙️ Tech stack by category `techStack` | 🎁 Benefits `benefits` | 🔗 LinkedIn, X, Facebook, Instagram |
| ✅ Verified company, 🗓️ 4-day week | 📊 Open positions `openPositions` | 🧭 Hiring countries + timezones (company rows) |

### How to scrape Himalayas with Himalayas Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — it comes with monthly free credit.
2. Open **Himalayas Scraper** and pick **What to scrape**: remote jobs, company profiles, or companies hiring for a job search.
3. Type a keyword (e.g. `software engineer`), add filters if you want them, and set **Max results**.
4. Click **Start**.
5. Download the rows as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `mode` | select | `jobs` (default), `companies`, `hiringCompanies` |
| `searchQueries` | list | Keywords, one search each. Company mode: company keywords (e.g. `fintech`). |
| `jobUrls` | list | Himalayas job pages to fetch one by one. |
| `companySlugs` | list | Company slugs or URLs: jobs of these companies only, or these company profiles. |
| `countries` | list | ISO code or name (`US`, `Germany`, `UK`); one search per country. |
| `worldwideOnly`, `excludeWorldwide` | boolean | Jobs open anywhere / leave out worldwide jobs when a country is set. |
| `seniority`, `employmentTypes` | multi-select | Any of Himalayas' 6 levels and 7 types. |
| `timezone` | text | `-5`, `UTC+1`, `UTC+05:30`. |
| `sort` | select | relevant, newest first, highest / lowest salary. |
| `benefits`, `techStack`, `companySort` | company mode | Himalayas' 30 benefit categories (all must match), technology slugs (`react`, `python`), sort by relevance, recently added, most open jobs, name. |
| `categories`, `includeKeywords`, `excludeKeywords`, `excludeCompanies` | list | Applied to each job after it is read. |
| `onlyWithSalary`, `minAnnualSalary` + `salaryCurrency`, `postedWithinDays` | | Salary and date filters. |
| `includeJobDetails` | boolean | Adds `skills`, `educationRequirement`, `experienceRequirement`, `experienceYearsMin`. |
| `includeCompanyProfile` | boolean | Adds the company profile to each job row. |
| `includeOpenJobs`, `maxOpenJobsPerCompany` | company modes | Open jobs, hiring countries, timezones, seniority mix and USD salary range per company. |
| `maxMatchedJobsPerCompany` | integer | Hiring-companies mode: matching jobs listed per company (default 20). |
| `onlyNew`, `monitorStoreName` | | Skip rows earlier runs with the same input delivered. |
| `maxResults` (default 100), `maxResultsPerSearch`, `deepSearch` | | Caps, and going past the 5,000-job window. |
| `descriptionFormat`, `descriptionMaxLength`, `compact` | | Text / HTML / both / none, a length cut, core fields only. |
| `himalayasApiKey` | secret | Optional free Himalayas key for your own request allowance. |

#### Input JSON

```json
{
    "mode": "jobs",
    "searchQueries": ["product designer"],
    "countries": ["US"],
    "seniority": ["Senior"],
    "sort": "recent",
    "includeCompanyProfile": true,
    "maxResults": 100
}
```

#### Pick the mode before anything else

**Remote jobs** gives one row per job. **Company profiles** gives one row per company from Himalayas' directory or company search. **Companies hiring for a job search** runs your job search and folds it into one row per hiring company, with its profile and the jobs that matched — use it to build a lead list of companies hiring for a role.

#### Leave the keyword empty for the newest jobs

With no keyword and no filter, Himalayas Scraper reads Himalayas' full feed, newest first, with no 5,000 limit. Add `postedWithinDays: 1` on a daily schedule for a daily feed.

#### Countries, timezones and "worldwide"

`locationRestrictions` is the list of countries a candidate must live in; an empty list means the job is open worldwide (`isWorldwide: true`). A country filter returns jobs open to that country, worldwide jobs included, unless `excludeWorldwide` is on.

### ⬆️ Output

```json
{
  "jobId": "instrument/product-designer-contract-senior-design-director",
  "title": "Product Designer, Contract (Senior - Design Director)",
  "companyName": "Instrument",
  "companySlug": "instrument",
  "employmentType": "Contractor",
  "seniority": ["Senior"],
  "locationRestrictions": ["United States"],
  "isWorldwide": false,
  "timezoneRestrictions": [-10, -9, -8, -7, -6, -5, 14],
  "currency": "USD",
  "categories": ["Product-Designer", "UX-Designer", "UI-Designer", "Design-Director"],
  "parentCategories": ["Design"],
  "postedAt": "2026-10-07T23:31:14.000Z",
  "expiresAt": "2026-12-06T23:31:13.000Z",
  "url": "https://himalayas.app/companies/instrument/jobs/product-designer-contract-senior-design-director",
  "skills": ["Figma", "Design Systems", "Prototyping", "UX Design", "Accessibility"],
  "experienceRequirement": "required",
  "companyWebsite": "https://instrument.com",
  "companyEmployeeRange": "201-500",
  "companyYearFounded": 2005,
  "companyCeo": "Laurel Burton",
  "companyLocations": ["United States"],
  "description": "Instrument is a digitally native design and technology company..."
}
```

A company row (company modes):

```json
{
  "companyName": "Stripe",
  "companySlug": "stripe",
  "website": "https://stripe.com",
  "employeeRange": "1001-5000",
  "companySizeLabel": "Enterprise",
  "yearFounded": 2009,
  "ceo": "Patrick Collison",
  "locations": ["Australia", "United States", "Japan", "France", "Germany", "India", "Ireland", "Mexico", "Netherlands", "United Kingdom", "Singapore"],
  "markets": ["Payments", "Developer-Tools", "Cloud-Infrastructure", "Credit-Cards", "Developer-APIs", "SaaS"],
  "openPositions": 90,
  "techStack": [{ "category": "Languages & Frameworks", "name": "TypeScript" }, { "category": "Monitoring", "name": "PagerDuty" }],
  "benefits": [{ "category": "Healthcare benefits", "title": "Inclusive coverage" }, { "category": "Paid parental leave", "title": "Paid parental leave" }],
  "linkedin": "https://linkedin.com/company/stripe",
  "twitter": "https://twitter.com/stripe",
  "facebook": "https://facebook.com/StripeHQ",
  "isVerified": false,
  "hasFourDayWeek": false
}
```

#### Fields and how often they are filled

Measured on real runs, 2026-10-16. A field is empty when Himalayas does not publish it.

| Job rows | 20 "software engineer" / 1,000 "engineer" / 4,804 "manager" |
|---|---|
| title, company, employment type, seniority, timezones, categories, posted, expires, url, apply link, description | 100% / 100% / 100% |
| countries (`locationRestrictions`; empty = worldwide) | 95% / 97% / 98% |
| company logo | 85% / 84% / 84% |
| parent categories | 95% / 80% / 81% |
| salary (`minSalary`, `maxSalary`, period, yearly figure) | 45% / 39% / 41% |
| skills / experience years (`includeJobDetails`, 100 "devops" jobs) | 99% / 81% |

| Company rows | 50 "saas" companies / 20 companies hiring "account executive" in the US |
|---|---|
| name, slug, website, domain, locations, open positions, about | 100% / 100% |
| employee range, markets | 100% / 80% |
| founded year | 98% / 80% |
| CEO | 86% / 75% |
| LinkedIn / X / Facebook / Instagram | 94% / 68% / 66% / 14% · 85% / 55% / 50% / 30% |
| tech stack / benefits | 78% / 72% · 65% / 60% |
| verified badge | 12% · 5% |
| logo, hiring countries (from the company's jobs) | 0% (no jobs read) · 90%, 95% |

Companies reached through job rows are smaller on average: on 100 "devops" jobs with `includeCompanyProfile` (77 companies) the website was filled 100%, employee range 51%, CEO 47%, tech stack 28%, LinkedIn 73%.

### How can I use Himalayas data?

- 🧲 **Recruiters and staffing agencies**: remote roles by seniority and country, with the salary and the apply link.
- 📈 **B2B sales**: "companies hiring for X" with website, size, CEO, tech stack and LinkedIn — remote-first companies that are growing.
- 🧰 **Tech-stack prospecting**: companies using React, Python or Kubernetes, with their open jobs.
- 💵 **Salary research**: pay ranges by title, seniority, country and currency, with a yearly figure.
- 🔔 **Job boards, newsletters and alerts**: the newest jobs on a schedule with **Only new rows**.
- 🤖 **AI agents**: compact rows through the API or MCP.

### How much does it cost to scrape Himalayas?

Pay per result, no start fee:

| Event | Price | When |
|---|---|---|
| Job | $0.00009 per job ($0.09 per 1,000) | every job row, description included |
| Company profile | $0.0018 per company ($1.80 per 1,000) | every company row, or the first job row of a run that carries that company's profile |

| Run | Cost |
|---|---|
| 20 jobs (the prefilled demo) | $0.0018 |
| 1,000 jobs | $0.09 |
| 100 company profiles | $0.18 |

Skills, education and experience (`includeJobDetails`) cost nothing extra. Duplicates, filtered-out jobs, jobs an earlier run already delivered and companies Himalayas does not have are not charged.

### Integrations, API, scheduling and MCP

Run it on a **schedule** with **Only new rows** to receive only new jobs. Send results to **Google Sheets, Slack, Make, Zapier or n8n**, or trigger **webhooks** when a run finishes. Call it from code with the [Python](https://apify.com/scrapersdelight/himalayas-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/himalayas-scraper/api/javascript) client, or let AI assistants use it through the [MCP server](https://apify.com/scrapersdelight/himalayas-scraper/api/mcp).

### More job and company scrapers

- 🚀 [Wellfound Jobs Scraper](https://apify.com/scrapersdelight/wellfound-jobs-scraper) — startup jobs
- 🧑‍🚀 [Wellfound Startup Scraper](https://apify.com/scrapersdelight/wellfound-startup-contact-scraper) — startups, founders, websites and funding
- 🧩 [ATS Jobs Scraper](https://apify.com/scrapersdelight/ats-jobs-scraper) — jobs straight from Greenhouse, Lever and Ashby career pages
- 🟠 [Y Combinator Scraper](https://apify.com/scrapersdelight/yc-company-founder-contact-scraper) — YC companies, founders and open jobs
- 💼 [LinkedIn Jobs Scraper](https://apify.com/scrapersdelight/linkedin-jobs-scraper) — LinkedIn job postings
- ⭐ [Glassdoor Scraper](https://apify.com/scrapersdelight/glassdoor-company-scraper) — jobs, salaries and company ratings

All our actors: [apify.com/scrapersdelight](https://apify.com/scrapersdelight).

### Limits and empty runs

- Himalayas serves at most **5,000 jobs per search** (page 250 is the last). With **deep search**, a capped search is split by seniority, then by employment type, and merged without duplicates: one "manager" search returned 6,500 unique jobs (the run's cap) from 348 requests in under 6 minutes, against 4,804 without deep search.
- With no keyword and no filter the feed has no such limit: every listed job, newest first.
- Himalayas limits how fast anyone may ask: without a key it answered "too many requests" after about 100 requests in under a minute. The actor paces itself under that (20 jobs per request, about 1,200 jobs a minute) and waits when asked to slow down. Your own free Himalayas API key (`himalayasApiKey`) gives your runs their own allowance.
- Speed, measured with Apify's 256 MB CPU share: 20 jobs in about 14 seconds, 1,000 jobs in about 70 seconds, 50 company profiles in about 18 seconds; one search of 5,000 jobs in about 4 minutes.
- `applicationLink` is the Himalayas job page, where the candidate applies; Himalayas does not publish the employer's own application URL.
- Not published by Himalayas, so not in the rows: company funding, a remote-work policy field, and timezones at company level (company rows list the timezones of the company's open jobs instead).
- A job URL that is no longer listed comes back under `jobLookups.notFound` in `RUN_SUMMARY`, uncharged. An empty run costs nothing; `RUN_SUMMARY` lists, per search, Himalayas' own total, pages read, rows delivered, duplicates, already-delivered and filtered counts, and errors.
- Attribution: Himalayas asks that wherever results are shown, the job links back to its Himalayas URL (`url`) and Himalayas is named as the source.

### ❓ FAQ

#### How much does Himalayas Scraper cost?

$0.09 per 1,000 jobs and $1.80 per 1,000 company profiles. No start fee; an empty run costs nothing.

#### How many jobs can Himalayas Scraper get?

All of them: with no keyword it walks Himalayas' whole feed (123,675 jobs on 2026-10-16). A keyword search is capped by Himalayas at 5,000 results; **deep search** splits it to go further.

#### Does Himalayas Scraper get company data?

Yes. Company mode returns Himalayas' company profile — website, employee range, founded year, CEO, locations, markets, open positions, tech stack, benefits, socials — and job rows can carry it with **Company profile on each job**.

#### Can Himalayas Scraper find companies hiring for a role?

Yes. Pick **Companies hiring for a job search**, type the role, and each row is one hiring company with its profile, `matchedJobsCount` and the matching jobs.

#### Does Himalayas Scraper get salaries?

Yes, when the employer publishes one (about 40% of jobs in our runs): `minSalary`, `maxSalary`, `currency`, `salaryPeriod`, plus a yearly figure. **Only jobs with a salary** and **Minimum yearly salary** filter on it.

#### Can Himalayas Scraper monitor new remote jobs?

Yes. Turn on **Only new rows** and schedule the run: each run delivers only jobs that earlier runs with the same input did not.

#### Does Himalayas Scraper need a login or an API key?

No. A free Himalayas API key is optional and only raises the request allowance for big runs.

#### Can I use Himalayas Scraper with the Apify API?

Yes. Start runs and read results with the Apify API or its Python and JavaScript clients; every input above is a JSON key.

#### Can AI agents use Himalayas Scraper through MCP?

Yes. Add it to the Apify MCP server; `compact` keeps rows short.

#### Why did Himalayas Scraper return no results?

Usually the filters exclude everything, or Himalayas rejected a value (an unknown country stops the run with Himalayas' own message, uncharged). `RUN_SUMMARY` shows Himalayas' total for each search and why jobs were filtered.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/himalayas-scraper/issues/open); we read every one.

# Actor input Schema

## `mode` (type: `string`):

Remote jobs (one row per job), company profiles (one row per company, with size, founded year, CEO, website, socials, tech stack and benefits), or companies hiring for your job search (one row per hiring company with its matching jobs).

## `searchQueries` (type: `array`):

One search per keyword, e.g. "react engineer", "customer success", "data analyst". In company mode the keyword searches company names and descriptions, e.g. "fintech". Empty = no keyword.

## `jobUrls` (type: `array`):

Himalayas job pages to fetch one by one, e.g. https://himalayas.app/companies/stripe/jobs/product-designer-terminal. Jobs mode only; a closed job is listed as not found and not charged.

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

Himalayas company slugs or company URLs, e.g. "stripe", "gitlab", https://himalayas.app/companies/doist. Jobs modes: only these companies' jobs. Company mode: these profiles.

## `countries` (type: `array`):

Jobs open to candidates in these countries (one search per country). ISO code or name, e.g. "US", "Germany", "UK". Company mode: companies located there.

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

Only jobs open to candidates anywhere in the world (no country restriction).

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

With a country set: only jobs that name that country, leaving out jobs open worldwide.

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

Any of these levels. Empty = all levels.

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

Any of these types. Empty = all types.

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

Jobs whose working hours fit this UTC offset, e.g. "-5", "UTC+1", "UTC+05:30". Empty = any timezone.

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

Order Himalayas returns jobs in. "Newest first" pairs with "Posted within" for daily alerts.

## `benefits` (type: `array`):

Company mode: companies that offer all of these benefits.

## `techStack` (type: `array`):

Company mode: companies that use all of these technologies, e.g. "react", "python", "kubernetes", "ruby-on-rails".

## `companySort` (type: `string`):

Company mode: order of the company directory or company search.

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

Keep jobs in any of these Himalayas categories, e.g. "Software Engineer", "Customer Success", "Developer", "Marketing".

## `includeKeywords` (type: `array`):

Keep jobs whose title or description contains any of these words, e.g. "typescript", "visa sponsorship".

## `excludeKeywords` (type: `array`):

Drop jobs whose title or description contains any of these words, e.g. "senior", "clearance".

## `excludeCompanies` (type: `array`):

Drop jobs from companies whose name or slug contains any of these, e.g. "mercor", "lemon".

## `onlyWithSalary` (type: `boolean`):

Keep only jobs that publish a salary range.

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

Keep jobs whose yearly salary (hourly x 2,080, monthly x 12) reaches this, in the currency below, e.g. 100000. Jobs in another currency are left out. 0 = off.

## `salaryCurrency` (type: `string`):

Currency of the minimum yearly salary.

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

Keep jobs posted in the last N days, e.g. 1 for a daily run. 0 = any date. With newest-first order the walk stops at the first older page.

## `includeJobDetails` (type: `boolean`):

Add each job's skills list, education requirement and minimum years of experience (one extra request per job, no extra charge).

## `includeCompanyProfile` (type: `boolean`):

Jobs mode: add the hiring company's website, size, founded year, CEO, locations, markets, tech stack, benefits and socials to each job. Charged once per company per run as a company profile.

## `includeOpenJobs` (type: `boolean`):

Company modes: add the company's open jobs, hiring countries, timezones, seniority mix and USD salary range.

## `maxOpenJobsPerCompany` (type: `integer`):

How many open jobs to read per company when "Open jobs on company rows" is on (20 per request).

## `maxMatchedJobsPerCompany` (type: `integer`):

Hiring-companies mode: how many of a company's matching jobs to list on its row.

## `onlyNew` (type: `boolean`):

Skip jobs (or companies) that an earlier run with the same input already delivered. Pairs with a daily schedule.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered rows between runs. Use a different name to keep separate alert histories.

## `maxResults` (type: `integer`):

Most rows to deliver in this run (jobs, or companies in company modes). A single search stops at 5,000 jobs; turn on deep search to go past it.

## `maxResultsPerSearch` (type: `integer`):

Cap per keyword x country search. 0 = no per-search cap.

## `deepSearch` (type: `boolean`):

When a search finds more than 5,000 jobs, re-run it split by seniority and employment type (each slice has its own 5,000 window) and remove duplicates.

## `descriptionFormat` (type: `string`):

Full job description as plain text, HTML, both, or left out for smaller rows.

## `descriptionMaxLength` (type: `integer`):

Cut descriptions to this many characters. 0 = full description.

## `compact` (type: `boolean`):

Core fields only - trimmed for spreadsheets and AI / MCP pipelines.

## `himalayasApiKey` (type: `string`):

Optional free key from himalayas.app/api for your own allowance (60 requests/min, 10,000/day). Without it the jobs API's shared public allowance is used.

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

Not needed: requests go direct, with a budgeted residential fallback. Add your own proxy only if your network blocks himalayas.app.

## Actor input object example

```json
{
  "mode": "jobs",
  "searchQueries": [
    "software engineer"
  ],
  "worldwideOnly": false,
  "excludeWorldwide": false,
  "sort": "relevant",
  "companySort": "relevant",
  "onlyWithSalary": false,
  "minAnnualSalary": 0,
  "salaryCurrency": "USD",
  "postedWithinDays": 0,
  "includeJobDetails": false,
  "includeCompanyProfile": false,
  "includeOpenJobs": false,
  "maxOpenJobsPerCompany": 20,
  "maxMatchedJobsPerCompany": 20,
  "onlyNew": false,
  "maxResults": 20,
  "maxResultsPerSearch": 0,
  "deepSearch": false,
  "descriptionFormat": "text",
  "descriptionMaxLength": 0,
  "compact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per Himalayas job, or one row per company in the company modes.

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

Per search: Himalayas' own total, pages read, rows delivered, duplicates, already-delivered and filtered counts, not-found and unreachable lists, and the route used.

# 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 = {
    "mode": "jobs",
    "searchQueries": [
        "software engineer"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/himalayas-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 = {
    "mode": "jobs",
    "searchQueries": ["software engineer"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/himalayas-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 '{
  "mode": "jobs",
  "searchQueries": [
    "software engineer"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/himalayas-scraper --silent --output-dataset

```

## MCP server setup

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