Remote Jobs Feed - every listing on Himalayas, with source link avatar

Remote Jobs Feed - every listing on Himalayas, with source link

Pricing

$1.00 / 1,000 job rows

Go to Apify Store
Remote Jobs Feed - every listing on Himalayas, with source link

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

Stephen Psaradellis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

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" in US at Senior and 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

fieldwhat it holds
source, source_urlHimalayas, 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.
guidthe job's stable id (its URL). One row per guid per run, whichever keywords matched it.
title, company_name, company_slug, company_logothe role and who is hiring; the slug is what the company filter takes
employment_type, seniorityFull Time / Part Time / Contractor / ...; one or more of Entry-level through Executive
min_salary, max_salary, salary_period, currencythe published range as numbers, or null when the employer did not state one
location_restrictions, timezone_restrictionscountries and UTC offsets the employer accepts; empty means anywhere
categories, parent_categoriesthe venue's fine and coarse role categories
excerpt, description_htmlthe venue's summary, and the full posting as HTML (includeDescription, on by default)
published_at, expires_atISO 8601, UTC
apply_urlwhere a candidate applies
querythe keyword that matched, in search mode
read_atwhen 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

  1. 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.
  2. 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.
  3. 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.
  4. 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

fielddefaultnotes
modebrowsebrowse 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
countryISO alpha-2, a country name or a slug
worldwidefalsekeep 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
companycanonical slugs, comma separated
timezone-5, UTC-5, UTC+05:30
sortrecentrecent, relevant, salaryAsc, salaryDesc, nameAToZ, nameZToA
includeDescriptiontruekeep the full HTML posting on each row
maxRows1000stop after this many rows; 0 is unbounded
timeoutSecs20per request; retried twice with backoff

Pricing

Pay per event, one event:

eventpricewhen
Job row$0.001one 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 install
npm 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/.