Himalayas API
Free remote job API with no key: nearly 99,000 listings with salary ranges, required timezones, seniority and company profiles. Tested curl example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Himalayas API?
Himalayas provides a free, key-free API for remote job listings. It exposes a large database — nearly 99,000 roles at the time of testing — with salary ranges, the timezones a role requires overlap with, seniority level, category tags and linked company profiles.
Remote job data is harder than it looks, because "remote" alone is not enough information: a role may be remote but require US working hours, or be restricted to specific countries for tax and employment reasons. Himalayas models this explicitly with timezone and location-restriction fields, which is what separates it from a generic job feed and makes it genuinely usable for matching.
Salary data is the other differentiator. A meaningful share of listings carry structured minimum and maximum salary figures with a currency, rather than the free-text "competitive salary" that makes most job feeds useless for analysis. The API also returns a `totalCount` alongside `offset` and `limit`, so you know the size of the result set before paging. Note the `comments` field in the response, which the maintainers use to announce schema changes — worth logging.
Quick facts
- Base URL
https://himalayas.app/jobs/api- Authentication
- No API key or account. Himalayas asks for attribution and that application links point back to the original listing.
- Rate limit
- No published hard limit; `limit` caps the page size. Cache rather than re-fetching the same pages.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Himalayas API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch one remote job listing
GET https://himalayas.app/jobs/api?limit=1
curl 'https://himalayas.app/jobs/api?limit=1'const res = await fetch("https://himalayas.app/jobs/api?limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://himalayas.app/jobs/api?limit=1", timeout=20)
res.raise_for_status()
print(res.json()){
"comments": "13/03/2026: The API has been updated to include the companySlug field in the response.",
"updatedAt": 1787296573,
"offset": 0,
"limit": 1,
"totalCount": 98920,
"jobs": [
{
"title": "Head of Operations - DTC Ecommerce (Remote, UK-hours overlap)",
"excerpt": "About the roleOur client is looking for a highly hands-on Head of Operations to turn the founders’ vision into a scalable operating system.",
"companyName": "Paired",
"companySlug": "paired-so",
"companyLogo": "https://cdn-images.himalayas.app/1fxfh3e5wgbqa5idmme30rmo8kkk",
"employmentType": "Full Time",
"minSalary": null,
"maxSalary": null,
"salaryPeriod": "annual",
"seniority": [
"Director"
],
"currency": null,
"locationRestrictions": [
"Brazil"
],
"timezoneRestrictions": [
-5,
-4,
-3,
-2
],
"categories": [
"Head-of-Operations",
"DTC-ECommerce-Operations-Director",
"eCommerce-Operations-Manager",
"Operations-Strategy",
"DTC-Brand-Operations",
"ECommerce-Operations-Director",
"Director-of-B2C-Operations",
"Head-Of-ECommerce",
"D2C-ECommerce-Director"
],
"parentCategories": [
"Operations"
],
"description": "<h3>About the role</h3><p>Our client is looking for a highly hands-on <strong>Head of Operations</strong> to turn the founders’ vision into a scalable operating system. This person will own the company’s operating cadence, OKRs, physicalParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | query | Optional | Results per page. Keep it modest — descriptions are long. 1 |
offset | query | Optional | Pagination offset, used with `totalCount` to know when to stop. 0 |
(companies) | path segment | Optional | A companion `/companies/api` endpoint returns employer profiles rather than roles. |
Response fields
totalCountinteger- Total listings available — nearly 99,000 at the time of testing. Use it with `offset` to plan paging.
offset / limitinteger- Pagination state, echoed back.
updatedAtinteger- Unix timestamp for when the feed was last refreshed.
commentsstring- Maintainer announcements about schema changes. Log this rather than ignoring it — it is how breaking changes are communicated.
jobs[].title / companyNamestring- Role title and employer.
jobs[].excerpt / descriptionstring- Short summary and full description. The description carries HTML — sanitise it.
jobs[].minSalary / maxSalarynumber- Structured salary range where the employer published one, with a currency field. Frequently null.
jobs[].timezones / locationRestrictionsarray- Required timezone overlap and any country restrictions — the fields that make "remote" actually actionable.
jobs[].seniority / categoriesarray- Experience level and role categories for filtering.
What you can build with the Himalayas API
- Build a remote job board filtered by timezone compatibility
- Analyse remote salary ranges by role, seniority or region
- Alert candidates when roles matching their timezone appear
- Research which companies hire remotely in which countries
Common errors and how to fix them
Empty jobs array
The offset exceeded `totalCount`.
Fix: Read `totalCount` from the first response and stop paging when offset passes it.
Null salary fields
Not an error — many employers do not publish a range.
Fix: Check for null before formatting. Do not render a zero or an empty range as if it were real data.
Large responses
Full descriptions are long.
Fix: Keep `limit` modest. Fetching hundreds of listings with full HTML descriptions in one request is slow and wasteful.
Himalayas API — frequently asked questions
Is the Himalayas jobs API free?
Yes, free with no API key or account. Himalayas asks for attribution and that your application links back to the original listing rather than re-hosting it.
Does it include salary information?
Yes, a meaningful share of listings carry structured `minSalary` and `maxSalary` values with a currency, rather than free-text "competitive salary". Many are still null, so check before formatting.
What are the timezone fields for?
They record which timezones a role requires overlap with, and which countries it is restricted to. That is what makes the data actionable — a role can be remote and still require US working hours or exclude your country for employment-law reasons.
How many jobs are available?
Just under 99,000 at the time of testing, reported in the `totalCount` field on every response. Use it alongside `offset` to plan paging rather than fetching until you get an empty page.
Tools that pair with this API
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
Strip HTML Tags
Remove all HTML tags and convert markup to clean plain text. Decode HTML entities and keep line breaks for block elements like paragraphs and headings.
Percentage Calculator
Calculate what X% of a number is, what percent one number is of another, and percentage increase or decrease between two values — instantly and free.
Himalayas is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.