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

Walk himalayas.app's public remote-jobs feed via cursor pagination and filter results by keyword, category, or country. The feed's own search/category params are server-side no-ops, so filtering runs client-side against real job fields, returning typed rows with null-normalized salary data.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share


🎯 What this scrapes

himalayas.app publishes its remote-job listings through a public, keyless JSON feed at /jobs/api, paginated with a nextCursor token the feed itself documents as the preferred way to page through results (the older offset parameter is deprecated). We walk that cursor chain page by page and hand back every job that matches your filters.

Here's the part that trips up a naive integration: the feed also accepts search=, category=, and categories= query parameters — and none of them do anything server-side. We verified this directly: a search= request for an obscure term returned a full page of completely unrelated job titles. So this Actor filters client-side, against the real title, excerpt, description, category tags, and location-restriction fields on each job — the only place filtering actually happens on this feed.

🔥 Features

  • 🔁 Correct cursor-pagination. himalayas.app's bare first-page response is not stable across repeated calls — we only ever treat the verified cursor chain as authoritative, never the first page in isolation.
  • 🎯 Real client-side filtering. Keyword, category, and country filters actually narrow the results, unlike the feed's own no-op query params.
  • 🧊 Null-normalized salary data. When himalayas.app has no salary or currency for a listing, you get a clean null — never a fake 0 or "" standing in for missing data.
  • 🛡️ Fault isolation per job. A single malformed record is skipped and logged; it never aborts your run or costs you the rest of the results.
  • 🔁 We retry with exponential backoff on 408 / 429 / 503 and honour Retry-After, rotating browser fingerprints across attempts.
  • 💰 You pay only for results that land. No data, no charge beyond the small warm-up fee.

💡 Use cases

  • Recruiter & sourcer pipelines — pull fresh remote roles into your ATS or CRM on a daily schedule, pre-filtered to the categories you place in.
  • Job-board aggregation — add Himalayas coverage to a multi-source remote-jobs board alongside other feeds.
  • Labor-market research — track category and country demand trends in the remote-hiring market over time.
  • Hiring-intent signals — SDR/BD teams reading newly-opened remote reqs as a proxy for company growth and headcount plans.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Optionally set keywords, categories, and/or countries to narrow the feed to what you care about — leave any of them empty to skip that filter entirely.
  3. Set max_results to cap how many matching jobs you want.
  4. Click Start. Matching rows stream into the run's dataset as they're found.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch programmatically via the Apify API.

📥 Input

FieldTypeDefaultDescription
keywordsarray of string[]Keep jobs whose title, excerpt, or description contains ANY of these (case-insensitive substring match).
categoriesarray of string[]Keep jobs whose category tags include ANY of these (case-insensitive).
countriesarray of string[]Keep jobs whose location restrictions include ANY of these; jobs with no restriction (worldwide) always pass.
max_resultsinteger100Hard stop for the cursor walk (1–5000).
proxyConfigurationobject{"useApifyProxy": false}Standard Apify Proxy configuration — not required for this keyless target, but available if you ever want it.
{
"keywords": ["engineer", "marketing"],
"categories": [],
"countries": [],
"max_results": 20,
"proxyConfiguration": { "useApifyProxy": false }
}

📤 Output

FieldDescription
idStable canonical URL for the posting — the unique row id.
title / company_name / company_slug / company_logo_urlCore listing identity.
urlDirect application URL.
excerpt / description_htmlShort summary and full HTML job description.
employment_type / seniority / categories / parent_categoriesClassification tags.
location_restrictions / timezone_restrictionsWhere the role is open to (empty = worldwide).
min_salary / max_salary / salary_period / currencyNull-normalized salary data.
published_at / expires_at / scraped_atISO-8601 timestamps.
{
"id": "https://himalayas.app/companies/example-co/jobs/senior-backend-engineer",
"title": "Senior Backend Engineer",
"company_name": "Example Co",
"company_slug": "example-co",
"url": "https://himalayas.app/companies/example-co/jobs/senior-backend-engineer",
"employment_type": "Full Time",
"seniority": ["Senior"],
"categories": ["Backend-Engineering", "API-Development"],
"location_restrictions": [],
"min_salary": 120000.0,
"max_salary": 160000.0,
"salary_period": "yearly",
"currency": "USD",
"published_at": "2026-09-10T00:00:00+00:00",
"expires_at": null,
"scraped_at": "2026-09-10T00:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — no subscription, no minimum.

EventPrice
Actor start$0.20 flat
Result$0.0015 / row (→ $1.50 / 1 000 results)

Example: 1,000 results at the rates above ≈ $1.70 total ($0.20 start + $1.50 for the rows). Apify gives every new account $5 of free credit to try it with.

🚧 Limitations

  • himalayas.app's search=/category=/categories= query parameters are confirmed no-ops server-side — filtering always happens client-side here, which means a very narrow filter combination walks more of the feed before it fills max_results than a server-side filter would.
  • The cursor walk has an internal safety page cap so an extremely narrow filter that matches almost nothing can't run away on cost; if you hit it, widen your filters or raise max_results in smaller steps.
  • We don't control himalayas.app's own posting freshness or how quickly expired listings drop off the feed.

❓ FAQ

Does this use himalayas.app's search parameter? No — we verified it's a server-side no-op and filter client-side instead, against the job's actual title, excerpt, description, category, and location fields. That's the only way filtering reliably works on this feed.

Will I get duplicate jobs across runs? No. himalayas.app's cursor pagination is documented as never returning the same job twice within a single walk, and we never re-issue a stale cursor.

What happens if a listing is missing a field? Missing salary/currency data comes through as null, not 0 or an empty string — you can trust null to mean "not published," not "confirmed zero."

What if the feed briefly returns nothing for my filters? The run still completes successfully with zero rows and a status message telling you what was searched — a real "no matches" isn't treated as a failure.

Your feedback

Found an edge case in the feed, or want a field we don't emit yet? Reach us at apify.com/DevilScrapes — we read every message.