Remote Jobs Feed - every listing on Himalayas, with source link
Pricing
$1.00 / 1,000 job rows
Remote Jobs Feed - every listing on Himalayas, with source link
Every remote job Himalayas lists, from the public JSON API it publishes for job boards and AI agents. Browse the whole feed (100k+ jobs, no duplicates) or search by keyword, country, seniority, type, company and timezone. One row per job with salary, categories and source link. No login, no key.
Pricing
$1.00 / 1,000 job rows
Rating
0.0
(0)
Developer
Stephen Psaradellis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Remote Jobs Feed - every listing on Himalayas, with its source link
Every remote job on Himalayas, read from the public JSON API Himalayas publishes for exactly this - "to backfill other remote job boards, power job search experiences, populate internal dashboards, or feed AI agents and automation workflows". About 100,000 live listings. Browse the whole feed from newest to oldest with no duplicates, or search by keyword, country, seniority, employment type, company and timezone. One dataset row per job: title, company, salary and period, seniority, categories, location and timezone restrictions, published and expiry dates, the apply link, and the job's own page on Himalayas.
No login, no API key, no browser. Plain GETs to a documented public endpoint, and every row carries the attribution its licence asks for.
Use case
- Fill a job board or newsletter. Browse the whole feed once, then run it
daily with a small
maxRows- the feed is newest-first, so the first pages are today's postings. - Watch a niche. Search
"machine learning"inUSatSeniorand compare the rows week to week. - Salary research. About 4 in 10 listings carry a published range, with its currency and period, as numbers you can aggregate.
- Feed an agent. Ask your assistant over MCP for "remote product design roles open to applicants in Europe" and it runs this Actor.
What you get
| field | what it holds |
|---|---|
source, source_url | Himalayas, and the job's page on himalayas.app. The API's terms ask that republished rows link back here and name the source - both are on every row, so passing them through is enough. |
guid | the job's stable id (its URL). One row per guid per run, whichever keywords matched it. |
title, company_name, company_slug, company_logo | the role and who is hiring; the slug is what the company filter takes |
employment_type, seniority | Full Time / Part Time / Contractor / ...; one or more of Entry-level through Executive |
min_salary, max_salary, salary_period, currency | the published range as numbers, or null when the employer did not state one |
location_restrictions, timezone_restrictions | countries and UTC offsets the employer accepts; empty means anywhere |
categories, parent_categories | the venue's fine and coarse role categories |
excerpt, description_html | the venue's summary, and the full posting as HTML (includeDescription, on by default) |
published_at, expires_at | ISO 8601, UTC |
apply_url | where a candidate applies |
query | the keyword that matched, in search mode |
read_at | when the page was read |
The run summary (key-value store, RUN_SUMMARY) records the permission
check, pages read, jobs seen, duplicates skipped, rows pushed, per-keyword
counts, and what stopped the run.
Sample output
Two rows from a browse run on 2026-09-11, descriptions trimmed:
[{"source": "Himalayas","source_url": "https://himalayas.app/companies/mercor/jobs/business-analyst-fully-remote-upto-160-hr-8973351818","guid": "https://himalayas.app/companies/mercor/jobs/business-analyst-fully-remote-upto-160-hr-8973351818","title": "Business Analyst - Fully Remote | Upto $160/hr","company_name": "mercor","company_slug": "mercor","company_logo": "https://cdn-images.himalayas.app/6jo5q9nua35jgtdfm41nq6b7ocqf","employment_type": "Contractor","seniority": ["Mid-level"],"min_salary": 80,"max_salary": 160,"salary_period": "hourly","currency": "USD","location_restrictions": ["Ireland"],"timezone_restrictions": ["1"],"categories": ["Business-Analyst", "Document-Review", "Quality-Assurance", "Evaluation-Specialist", "Business-Analysis", "Remote-Business-Analyst"],"parent_categories": ["Data Science", "Developer"],"excerpt": "About the jobMercor connects elite creative and technical talent with leading AI research labs.","published_at": "2026-09-10T23:36:27.000Z","expires_at": "2026-11-09T23:36:27.000Z","apply_url": "https://himalayas.app/companies/mercor/jobs/business-analyst-fully-remote-upto-160-hr-8973351818","query": "","read_at": "2026-09-11T21:40:46.775Z"},{"source": "Himalayas","source_url": "https://himalayas.app/companies/mercor/jobs/medical-affairs-specialist-fully-remote-upto-200-hr-3694042227","guid": "https://himalayas.app/companies/mercor/jobs/medical-affairs-specialist-fully-remote-upto-200-hr-3694042227","title": "Medical Affairs Specialist - Fully Remote | Upto $200/hr","company_name": "mercor","company_slug": "mercor","company_logo": "https://cdn-images.himalayas.app/6jo5q9nua35jgtdfm41nq6b7ocqf","employment_type": "Contractor","seniority": ["Senior"],"min_salary": 200,"max_salary": 200,"salary_period": "hourly","currency": "USD","location_restrictions": ["India"],"timezone_restrictions": ["5.5"],"categories": ["Medical-Affairs", "Clinical-Research", "Healthcare-Consulting", "Medical-Writing", "Market-Research", "Remote-Senior-Medical-Affairs-Specialist", "Senior-Medical-Affairs-Specialist"],"parent_categories": ["Marketing"],"excerpt": "About the jobMercor connects elite creative and technical talent with leading AI research labs.","published_at": "2026-09-11T02:08:33.000Z","expires_at": "2026-11-10T02:08:32.000Z","apply_url": "https://himalayas.app/companies/mercor/jobs/medical-affairs-specialist-fully-remote-upto-200-hr-3694042227","query": "","read_at": "2026-09-11T21:40:42.218Z"}]
How to run it
- Open the Actor in Apify Console and press Start. The defaults browse the newest 1,000 jobs in the feed and finish in about twenty seconds.
- For the whole feed, set Max jobs to
0. That is about 100,000 rows and 5,000 requests, read one page at a time with a short pause between, and takes roughly half an hour. - For a slice, switch Mode to Search, add keywords one per line, and set the filters. The venue returns at most 5,000 jobs per keyword.
- Read the dataset in Console, export it as JSON or CSV, or fetch it from the
API with the run's
defaultDatasetId.
Sample input
{"mode": "search","queries": ["machine learning", "product designer"],"country": "US","seniority": ["Senior"],"employmentType": ["Full Time"],"sort": "recent","includeDescription": false,"maxRows": 2000}
Input
| field | default | notes |
|---|---|---|
mode | browse | browse reads the feed newest-first with cursor pagination and never repeats a job; search asks the search endpoint per keyword |
queries | [] | keywords, search mode; a job matched twice is one row |
country | ISO alpha-2, a country name or a slug | |
worldwide | false | keep only jobs open to applicants anywhere |
seniority | [] | Entry-level, Mid-level, Senior, Manager, Director, Executive |
employmentType | [] | Full Time, Part Time, Contractor, Temporary, Intern, Volunteer, Other |
company | canonical slugs, comma separated | |
timezone | -5, UTC-5, UTC+05:30 | |
sort | recent | recent, relevant, salaryAsc, salaryDesc, nameAToZ, nameZToA |
includeDescription | true | keep the full HTML posting on each row |
maxRows | 1000 | stop after this many rows; 0 is unbounded |
timeoutSecs | 20 | per request; retried twice with backoff |
Pricing
Pay per event, one event:
| event | price | when |
|---|---|---|
| Job row | $0.001 | one job pushed to the dataset |
That is $1.00 per 1,000 jobs, and nothing else: no charge for starting the run, none per page, none for a job the run already pushed. A run that reads the whole feed - about 100,000 jobs - costs about $100; the default run costs $1.00. Your account's Max total charge on a run is honoured: when it is reached the Actor stops before the next row rather than after it.
Use it from code
The API tab on this page has ready-made snippets for Node.js, Python and
curl, including run-sync-get-dataset-items, which starts a run and returns
the rows in one call. For the whole feed use the asynchronous run and read
the dataset when it finishes.
Use it from Claude or ChatGPT (Apify MCP)
This Actor is a tool your assistant can call directly, over the
Model Context Protocol. Apify hosts the
server at https://mcp.apify.com; adding ?tools= pins this Actor as one
named tool rather than loading the whole store.
Claude Desktop or Claude Code - add a custom connector with the URL:
https://mcp.apify.com?tools=vital_tuxedo/remote-jobs-feed
Any other MCP client (Cursor, VS Code, ChatGPT developer mode, your own agent) - add the server to its config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=vital_tuxedo/remote-jobs-feed","headers": { "Authorization": "Bearer <APIFY_TOKEN>" }}}}
Drop the headers block to use OAuth instead: the browser opens once so you
can sign in to Apify and approve access. Then ask in plain language:
Find senior remote data engineering roles open to applicants in Germany that were posted this week, with their salary ranges.
Your assistant starts the run, waits for it and reads the dataset back. The per-event price above is the whole cost - going through MCP adds nothing.
No Apify account at all? This Actor is built to the agentic-payments
criteria (pay-per-event, no platform-usage charge, no Standby), so an agent
holding USDC on Base can buy a prepaid Apify token at https://agi.apify.com
over x402 and run it with no account and no signup.
FAQ
Is this allowed? Yes, and it is checked every run. Himalayas publishes
this API for public use and says so on its API page; the only conditions are
to link back to the job's URL on Himalayas and to name Himalayas as the
source - both are on every row - and not to submit the jobs to Jooble, Neuvoo,
Google Jobs or LinkedIn Jobs. Before reading anything the Actor re-fetches
himalayas.app/robots.txt and the API page, and if the feed path is ever
disallowed or the grant sentence disappears it stops with nothing read and
nothing charged.
Can I republish the rows on my own site? That is what the API is for -
"backfill other remote job boards" is the venue's own first example. Keep
source_url as a link and name Himalayas as the source. Do not push them to
the aggregators the licence names.
Why 20 jobs a page? The venue's maximum. The Actor reads pages one at a time with a short pause; the whole feed is about 5,000 requests and about half an hour.
Does search return everything? Up to 5,000 jobs per keyword, the venue's cap. For more than that, browse the whole feed and filter locally.
Why is a salary null? The employer did not publish one. When they did,
min_salary, max_salary, currency and salary_period carry it as
numbers and codes, not as a string.
What does the run summary say? The permission check result, pages read,
jobs seen, duplicates skipped, rows pushed, per-keyword counts in search
mode, and stoppedBy when a cap or a charge limit ended the run.
Running locally
npm installnpm start
With no INPUT.json under storage/key_value_stores/default/ the run uses
the schema defaults: browse, 1,000 rows. Off the platform nothing is charged
and every row is written under storage/datasets/default/.