Himalayas.app Scraper
Pricing
from $1.00 / 1,000 results
Himalayas.app Scraper
Search 100,000+ remote job listings on Himalayas.app by keyword, location, seniority, and employment type. No API key required.
Browse and filter 100,000+ remote job listings on Himalayas.app by country and seniority. No API key required.
Why this scraper?
- No credentials needed — Himalayas's public API requires no registration or API key
- 100,000+ remote jobs — one of the largest remote-only job boards
- Working filters — country and seniority, both verified against live data
- Salary data — min/max salary with currency and pay period on many listings
- Detailed output — location restrictions, timezone restrictions, categories, full HTML description
- Cursor pagination — walk the whole feed with
cursor, which never repeats a job
Note: Himalayas' API does not support keyword search. See Upstream limitations before you build against this.
What you can fetch
| Mode | Description |
|---|---|
search | Filter jobs by country and seniority |
browse | Browse all jobs, paginated with cursor (or legacy offset) |
Usage
Filter by country and seniority
{"queryType": "search","country": "United States","seniority": "Senior"}
Browse all jobs
{"queryType": "browse","limit": 20}
Paginate with a cursor
Pass the nextCursor from each response back as cursor:
{"queryType": "browse","limit": 20,"cursor": "MjAyNi0wOS0wOVQxODo0MDowMS45Nz..."}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
queryType | string | search | search or browse |
country | string | — | search mode — filter by country name (e.g. United States) |
seniority | string | — | search mode — Entry-level, Mid-level, Senior, Manager, Executive, Internship |
cursor | string | — | browse mode — pagination cursor from a previous response's nextCursor |
offset | integer | — | browse mode — pagination offset (deprecated upstream, prefer cursor) |
limit | integer | — | browse mode — max results per page (upstream caps at 20) |
Output fields
| Field | Type | Description |
|---|---|---|
title | string | Job title |
excerpt | string | Short job summary |
companyName | string | Company name |
companySlug | string | Company slug |
companyLogo | string | Company logo CDN URL |
employmentType | string | Employment type |
minSalary | integer|null | Minimum salary (USD) |
maxSalary | integer|null | Maximum salary (USD) |
currency | string | Salary currency |
seniority | array | Seniority levels |
locationRestrictions | array | Allowed countries/regions |
timezoneRestrictions | array | Allowed UTC timezone offsets |
categories | array | Job category tags |
parentCategories | array | High-level parent categories |
pubDate | integer | Publication date (Unix timestamp) |
expiryDate | integer | Expiry date (Unix timestamp) |
applicationLink | string | Job URL on Himalayas.app |
description | string | Full job description (HTML) |
salaryPeriod | string | Pay period for the salary range (e.g. yearly) |
guid | string | Stable unique job URL, usable as an id |
Pagination
Browse mode only. Each response includes a nextCursor — pass it back as cursor
to get the next page. Cursor paging never returns the same job twice. offset still
works but Himalayas has deprecated it and will remove it in a future release.
totalCount tells you how many jobs match overall. Search mode returns a single
page and cannot be paginated — see below.
Upstream limitations
Himalayas' public API accepts several parameters that it silently ignores. Rather than pass those through and appear to filter, this scraper does not accept them. All the underlying values are still on every job, so you can filter client-side. Verified against the live API on 2026-09-09:
| Not supported | What upstream actually does | Do this instead |
|---|---|---|
| Keyword search | query=python and query=zzzznotreal return identical results; only 1 in 10 "python" hits mentions Python | Match on title / excerpt / description yourself |
employmentType | Returns the unfiltered feed | Filter on the employmentType field |
companySlug | Returns the unfiltered feed — companySlug=stripe returns no Stripe jobs | Filter on the companySlug field |
sort | Every value except recent is rejected 400 Invalid sort, and recent does not actually order by date | Sort by pubDate yourself |
| Paging search results | offset is ignored on search; it always returns one page of ~20 | Use browse mode + cursor to walk the full feed |
Search mode filters that DO work: country and seniority. Both are verified on
every request in this repo's test suite.
Use cases
- Build a remote-only job board with rich location and timezone filtering
- Research salary ranges for specific roles and seniority levels
- Monitor new listings from specific companies (filter the feed on
companySlug) - Build timezone-aware job matching tools using
timezoneRestrictions - Aggregate remote job data for career analytics
Latency & caching
| Data | Cache TTL |
|---|---|
| Job listings | 1 hour |
Disclaimer
This scraper uses Himalayas.app's public API. It is not affiliated with or endorsed by Himalayas. Use responsibly and in accordance with Himalayas's terms of service.