Himalayas Remote Jobs Scraper avatar

Himalayas Remote Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Himalayas Remote Jobs Scraper

Himalayas Remote Jobs Scraper

Scrape remote job listings from Himalayas: title, company, pay, seniority, contract type, allowed countries and time zones, categories, full description and dates. Filter by country, seniority, contract type, category, pay and date. Pay-per-result.

Pricing

Pay per event

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Get the public remote job listings of Himalayas (himalayas.app) as one clean dataset. Browse the newest jobs or search by keyword, then narrow the result by country, seniority, contract type, category, pay and posting date. One row per job, with the full description, pay range, allowed countries and time zones.

What you can do with it

  • Build a daily feed of new remote jobs per field, for example Python, design or customer support, with the posting date on every row.
  • Find remote jobs you may take from a given country, including jobs that are open worldwide.
  • Compare pay ranges, seniority levels and contract types across remote roles.
  • Find which companies hire remotely, with a link to each company page.
  • Feed job boards, lead lists, market reports or alerts with structured data instead of web pages.

What you get

One row per job. Fields a job does not carry are null, lists are always [] when empty.

FieldWhat it holds
id, guidRow id (himalayas-<job id>) and Himalayas' own identifier of the job (the job page URL)
title, excerptJob title and the short summary
company, company_slug, company_logo_url, company_urlHiring company, its identifier, logo link and company page on Himalayas
employment_type, seniorityContract type as posted (for example Full Time, Contractor) and the list of seniority levels the job is open to
salary_min, salary_max, salary_currency, salary_periodPay range as posted. About a quarter of the jobs show pay. salary_period (annual, monthly, hourly) is null when there is no pay
location_restrictionsCountries the worker must live in. [] means the job is open worldwide
timezone_restrictionsAccepted time zones as UTC offsets in hours (for example -5, 5.5)
categories, parent_categoriesCategory tags and the broader fields
description, description_textFull job description as HTML and as plain text
posted_at, expires_atPublication and expiry time (ISO 8601, UTC)
apply_url, job_urlApplication link (tracking parameters removed) and the job page on Himalayas
remote, source_query, match_source, scraped_atAlways true, the keyword that found the job (empty for the newest-jobs feed), where it came from (search or feed, see below) and the collection time

Every job appears once per run, even when several keywords or pages find it.

Input

FieldTypeDescription
searchQueriesstring listKeywords such as a job title or skill. Each keyword returns the top 20 search hits plus matches among the newest jobs (see How keyword results work). Empty means the newest jobs first
countriesstring listOptional. ISO codes (US, DE) or names (Germany, United Kingdom). Keeps jobs a person living in one of these countries may take
includeWorldwidebooleanWith a country filter, also keep jobs without a country restriction. Default true
senioritystring listOptional. Entry-level, Mid-level, Senior, Manager, Director, Executive. A job passes when it is open to at least one of them
employmentTypestring listOptional. Contract types as shown on the rows, for example Full Time, Contractor
categoriesstring listOptional. A category or broader field, for example Developer or Python-Developer. The whole name must match
minSalaryintegerOnly jobs whose pay range reaches this yearly amount. Hourly pay counts as 2,080 hours, monthly pay as 12 months. No currency conversion, jobs without pay are dropped. 0 means no limit
postedWithinDaysintegerOnly jobs posted in the last N calendar days (UTC, today included). 0 means no limit
maxResultsintegerTotal number of jobs over everything. Default 100, 0 means no limit
feedScanPagesintegerWith keywords: pages of 20 newest jobs to scan for keyword matches. Default 50 (the 1,000 newest jobs), maximum 2000, 0 means search hits only
maxResultsPerQueryintegerJobs per keyword (or for the newest-jobs feed). Default 100, 0 means no limit

Lists also accept a comma or line separated text. Case, spaces and dashes do not matter for seniority, contract type and category (full-time matches Full Time). The country, seniority, contract type, category, pay and date filters are applied to the jobs found, before anything is charged.

Example: new senior Python jobs for Germany

{
"searchQueries": ["python"],
"countries": ["DE"],
"seniority": ["Senior"],
"maxResults": 50
}

Example: everything posted in the last two days

{
"postedWithinDays": 2,
"maxResults": 0
}

Example: well paid contractor jobs open to the US

{
"searchQueries": ["designer"],
"countries": ["US"],
"includeWorldwide": false,
"employmentType": ["Contractor"],
"minSalary": 80000
}

How keyword results work

A keyword run gives you two kinds of rows:

  1. The top 20 search hits of Himalayas for the keyword, in relevance order (match_source is search).
  2. Matches among the newest jobs. The actor reads the newest jobs page by page (feedScanPages pages of 20) and keeps those whose title, summary, categories or company contain your keyword (match_source is feed). Short words of up to 3 letters (such as go or ai) must match a whole word, longer words match inside words, case and accents do not matter, and a keyword of several words needs every word.

The newest jobs are read once per run for all your keywords, and a job goes to the first keyword (in your order) it matches. A job found by both ways is returned once. To widen a keyword run, raise feedScanPages (up to 2,000 pages = 40,000 jobs); to get search hits only, set it to 0. With postedWithinDays the scan ends at the date window. The status message of the run tells how many newest jobs were scanned.

Output

{
"id": "himalayas-8699633569",
"guid": "https://himalayas.app/companies/acme/jobs/senior-python-engineer-8699633569",
"title": "Senior Python Engineer",
"company": "Acme",
"company_url": "https://himalayas.app/companies/acme",
"employment_type": "Full Time",
"seniority": ["Senior"],
"salary_min": 120000,
"salary_max": 150000,
"salary_currency": "USD",
"salary_period": "annual",
"location_restrictions": ["United States", "Canada"],
"timezone_restrictions": [-8, -7, -6, -5],
"categories": ["Python-Developer", "Backend-Engineer"],
"parent_categories": ["Developer"],
"posted_at": "2026-11-04T09:00:00Z",
"expires_at": "2026-12-04T09:00:00Z",
"apply_url": "https://himalayas.app/companies/acme/jobs/senior-python-engineer-8699633569",
"job_url": "https://himalayas.app/companies/acme/jobs/senior-python-engineer-8699633569",
"remote": true,
"source_query": "python",
"match_source": "search",
"scraped_at": "2026-11-04T09:30:00Z"
}

The example is shortened and the values are illustrative. Real rows hold all fields of the table above.

Pricing

Pay per result, two events:

  • apify-actor-start: $0.001 once per run.
  • job-result: $0.0009 per job in the dataset ($0.90 per 1,000 jobs).

Filtered-out and duplicate jobs are never charged. Set a maximum total charge on the run to stop at a budget; the run then ends cleanly with the message "Stopped at the max charge limit. N jobs delivered." The pricing box on the actor page always shows the current rates.

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client, such as Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Example prompts once connected:

"Use himalayas-jobs-scraper to find senior Python jobs open to Germany posted in the last 3 days and list title, company and pay."

"Use himalayas-jobs-scraper to list the newest contractor jobs with a published hourly rate."

Configure the MCP server with the Himalayas Remote Jobs Scraper preconfigured at mcp.apify.com?tools=nanoscrape/himalayas-jobs-scraper:

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.apify.com/?tools=nanoscrape/himalayas-jobs-scraper",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}

See the auto-generated API tab on the actor page for language-specific examples (cURL, JavaScript, Python, and more).

  • Randstad Jobs Scraper (nanoscrape/randstad-jobs-scraper): staffing jobs of Randstad in Germany, Switzerland and the UK.

FAQ

What does one run cost? A start fee plus one result fee per job in the dataset. Use maxResults or a maximum total charge to cap it.

What does an empty location_restrictions mean? The job is open worldwide. With a country filter these jobs are kept unless you set includeWorldwide to false.

Why do many jobs have no pay? Most postings do not publish pay. The pay fields are null for them, and a minSalary filter drops them.

Why is apply_url the same as job_url? Himalayas sends applicants through the job page. The actor removes tracking parameters such as utm_source from the link and keeps the rest as published.

Can I get only new jobs? Yes, set postedWithinDays. The newest jobs are read newest first and the run stops at the first job older than your window, so it reads only as many pages as needed.

What if a search finds nothing? The run ends successfully with the message "0 jobs." and the reason, for example no hits or no job inside your filters.

Limits

  • Keyword search hits are limited to the top 20 per keyword. Matches beyond them come from the scan of the newest jobs, so older jobs that are not in the top 20 are only found within the feedScanPages window.
  • Search hits come in relevance order, not by date, so postedWithinDays filters them but cannot end the search; it does end the scan of the newest jobs.
  • Without keywords, a filtered read of the newest jobs stops after 40 pages in a row without a matching job.
  • Pages are read one after the other with a short pause, so very large runs take a while.
  • Only public listing data is returned. Pay is shown as the company posted it.
  • You are responsible for using the data lawfully, including the GDPR/DSGVO, national data-protection laws and unfair-competition rules for marketing and outreach.

Support

Questions, feature requests or a field you miss: contact@nanoscrape.com.

Built by NanoScrape. Not affiliated with Himalayas.