
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape remote jobs from Himalayas.app: title, company, seniority, employment type, salary range, allowed countries and timezones, categories, full description and apply link. Search by keyword and filter by country, seniority, salary and more. Optional company profiles.
Collect remote jobs from Himalayas, one of the largest remote-only job boards, as clean structured data: title, company, seniority, employment type, salary range, the countries and timezones a job is open to, categories, full description and apply link. Search by keyword or read the whole feed, filter by country, seniority, salary and date, and optionally add each company's profile. No login, no browser, and it costs a fraction of a cent per job.
software engineer, python or product designer. Leave the list empty to read the full Himalayas feed.| Field | What it does |
|---|---|
keywords | Search terms. Each keyword is its own search; duplicates are removed. Empty means the whole jobs feed. |
maxResults | Total jobs to save (0 means no limit, up to 200,000). |
seniority | Entry-level, Mid-level, Senior, Manager, Director, Executive. |
employmentTypes | Full Time, Part Time, Contractor, Temporary, Intern, Volunteer, Other. |
countries / worldwideOnly / excludeWorldwide | Jobs open to these countries (codes or names), only jobs that hire anywhere, or only jobs that name the country. |
timezones | UTC offsets such as UTC-5 or +5:30. |
categories | Himalayas categories such as Developer, Design, Data Science. |
companies | Company slugs or himalayas.app/companies/... links. A job link keeps just that job. |
excludeKeywords | Drop jobs whose title contains these words. |
minSalary / maxSalary / salaryCurrency / onlyWithSalary | Salary filters on the yearly equivalent of the published range. |
postedWithinDays | Only jobs published in the last N days. |
sortBy | Most recent (default), most relevant, salary or company name. |
includeDescription / includeHtml / includeCompanyInfo | Control how much detail each row carries. |
{
"keywords": ["python", "data engineer"],
"maxResults": 200,
"seniority": ["Mid-level", "Senior"],
"employmentTypes": ["Full Time"],
"countries": ["DE", "Spain"],
"minSalary": 60000,
"salaryCurrency": "EUR",
"postedWithinDays": 30,
"includeCompanyInfo": true
}
One row per remote job. The table view shows the most useful columns; the full record holds everything below.
| Field | Description |
|---|---|
title, company, companySlug, companyLogo, companyUrl | Job and company basics |
location, allLocations, countryCodes, country, isWorldwide | Where candidates may live |
timezones | Accepted UTC offsets |
seniority, level, commitment | Experience level and employment type |
department, parentCategories, categories | Job categories |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Published pay |
postedAt, expiresAt | Dates in ISO 8601 (UTC) |
jobUrl, applyUrl | Links to the job and the application |
excerpt, descriptionText, lists, descriptionHtml | Summary, full description and its bullet lists |
companyInfo | Company profile (when enabled) |
Example (fictional company, real shape):
{
"id": "larchwood-labs/senior-backend-engineer",
"title": "Senior Backend Engineer",
"company": "Larchwood Labs",
"companySlug": "larchwood-labs",
"companyLogo": "https://cdn-images.himalayas.app/example-logo",
"companyUrl": "https://himalayas.app/companies/larchwood-labs",
"location": "United States, Canada",
"allLocations": ["United States", "Canada"],
"country": null,
"countryCodes": ["US", "CA"],
"isWorldwide": false,
"timezones": [-8, -7, -6, -5],
"workplaceType": "remote",
"isRemote": true,
"department": "Developer",
"parentCategories": ["Developer"],
"categories": ["Backend Development", "Software Engineer"],
"commitment": "Full Time",
"level": "Senior",
"seniority": ["Senior"],
"salaryMin": 150000,
"salaryMax": 190000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": "USD 150,000-190,000 per year",
"postedAt": "2026-10-12T09:30:00.000Z",
"expiresAt": "2026-12-11T09:30:00.000Z",
"jobUrl": "https://himalayas.app/companies/larchwood-labs/jobs/senior-backend-engineer",
"applyUrl": "https://himalayas.app/companies/larchwood-labs/jobs/senior-backend-engineer",
"source": "himalayas",
"excerpt": "Larchwood Labs is hiring a Senior Backend Engineer to scale its payments platform.",
"descriptionText": "About the role\nYou will design and run the services behind our payments platform...\n\nWhat you'll do\n- Build APIs in Go and Python\n- Own reliability for core services",
"lists": [{"title": "What you'll do", "items": ["Build APIs in Go and Python", "Own reliability for core services"]}],
"descriptionHtml": "<h3>About the role</h3><p>You will design and run...</p>",
"companyInfo": {
"name": "Larchwood Labs",
"verified": true,
"size": "51-200",
"founded": 2018,
"markets": ["Fintech", "Payments"],
"openPositions": 12,
"techStack": ["Go", "Python", "PostgreSQL"],
"benefits": ["Healthcare benefits", "Generous vacation"],
"website": "https://larchwood.example",
"socialLinks": {"linkedin": "https://linkedin.com/company/larchwood.example"}
},
"scrapedAt": "2026-10-14T19:40:00.000Z"
}
You pay $0.70 per 1,000 jobs saved ($0.0007 per job), plus a small amount of platform usage. A run that saves 1,000 jobs with descriptions costs about $0.71 in total. Company profiles are included at no extra event price. Jobs that do not match your filters are never charged.
Is it legal to scrape Himalayas? The scraper reads Himalayas' free public jobs data, the same data anyone can see on the site, without logging in. If you republish jobs, Himalayas asks for a visible link back to himalayas.app. Check that your own use complies with local law and the site's terms.
Do I need an account, cookies or my own proxy? No. No login is needed and the default datacenter proxy works well.
How many jobs can I get? The whole Himalayas feed (well over 100,000 remote jobs) when you leave keywords empty. A single keyword search on Himalayas returns at most 5,000 jobs; for bigger searches the scraper automatically splits the search by seniority and employment type to reach more, and the run's status tells you when a search was capped.
Why is a field empty?
Companies do not always publish a salary, seniority or a timezone restriction. Empty allLocations and timezones mean the job is open worldwide and in any timezone. Company profile fields are empty when the company has not filled them on Himalayas.
How fresh is the data? Himalayas refreshes its jobs data at least once a day, so a daily schedule catches every new job.
Can I schedule it or use the API? Yes. Schedule runs from the console, call it through the API, and connect the results to webhooks, Google Sheets, Zapier or Make.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
keywordsarrayOptionalSearch keywords
Job titles, skills or phrases to search for, for example software engineer, python, product designer. Each keyword is its own search and duplicates are removed. Leave empty to read the whole Himalayas jobs feed (optionally narrowed by the filters below).
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save across all keywords. Use 0 for no limit (up to 200,000).
All filters are optional and combine with AND. Within one filter, any listed value matches.
seniorityarrayOptionalSeniority
Keep only these experience levels. Leave empty for all levels.
employmentTypesarrayOptionalEmployment type
Keep only these employment types. Leave empty for all.
countriesarrayOptionalCountries
Jobs open to candidates in these countries. Two-letter codes or names, for example US, Germany, united-kingdom. Each country is its own search. Jobs open worldwide are included unless you turn on Exclude worldwide jobs.
worldwideOnlybooleanOptionaldefault falseWorldwide jobs only
Keep only jobs with no location restriction (hire from anywhere). Overrides the country filter.
excludeWorldwidebooleanOptionaldefault falseExclude worldwide jobs
With a country filter, keep only jobs that name that country and drop jobs open worldwide.
timezonesarrayOptionalTimezones
Jobs that accept candidates in these UTC offsets, for example UTC-5, UTC+1, +5:30. Each timezone is its own search.
categoriesarrayOptionalCategories
Keep jobs in any of these Himalayas categories, for example Developer, Design, Marketing, Data Science, Backend Development. Matched against the job's categories and parent categories, ignoring case.
companiesarrayOptionalCompanies
Only jobs from these companies: Himalayas company slugs (netflix) or links (https://himalayas.app/companies/netflix). A job link keeps just that job.
excludeKeywordsarrayOptionalExclude keywords
Drop jobs whose title contains any of these words, for example intern or sales.
minSalaryintegerOptionalMinimum salary (per year)
Keep jobs whose top of the range reaches at least this yearly amount. Hourly, weekly and monthly pay is converted to a year. Jobs without a salary are dropped when set.
maxSalaryintegerOptionalMaximum salary (per year)
Keep jobs whose bottom of the range is at most this yearly amount.
salaryCurrencystringOptionalSalary currency
Three-letter currency code (USD, EUR, GBP). Keeps only jobs paid in this currency; the salary limits are compared in it.
onlyWithSalarybooleanOptionaldefault falseOnly jobs with a salary
Keep only jobs that publish a salary range.
postedWithinDaysintegerOptionalPosted within the last N days
Keep jobs published in the last N days. Leave empty for any date.
sortByenumOptionaldefault "recent"Sort by
Order of search results (keyword and filter searches).
includeDescriptionbooleanOptionaldefault trueInclude job descriptions
Save the full description as text plus its bullet lists. Turn off for a lighter metadata-only dataset.
includeHtmlbooleanOptionaldefault trueInclude description HTML
Also save the description as HTML, ready to display. Needs job descriptions to be on.
includeCompanyInfobooleanOptionaldefault falseInclude company profile
Add each company's profile: size, founding year, CEO, markets, about text, tech stack, benefits, website and social links.
maxResultsPerQueryintegerOptionaldefault 0Max results per search
Cap per keyword (and country or timezone) search, so one broad keyword does not use up the whole limit. 0 means no cap.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for Himalayas' public jobs API.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | Himalayas job id (company slug / job slug) |
| title | string | null | Job title |
| company | string | null | Company name |
| companySlug | string | null | Himalayas company slug |
| companyLogo | string | null | Company logo URL |
| companyUrl | string | null | Company page on Himalayas |
| location | string | null | Countries the job is open to, or Worldwide |
| allLocations | array | Every country the job is restricted to (empty means worldwide) |
| country | string | null | Two-letter country code when the job is open to exactly one country |
| countryCodes | array | Two-letter codes of the allowed countries |
| isWorldwide | boolean | null | True when candidates can be anywhere |
| timezones | array | Accepted UTC offsets (empty means any timezone) |
| workplaceType | string | null | Always remote |
| isRemote | boolean | null | Always true |
| department | string | null | Main job category (first parent category) |
| parentCategories | array | Parent categories, for example Developer, Design |
| categories | array | Detailed job categories |
| commitment | string | null | Employment type, for example Full Time, Contractor |
| level | string | null | Seniority as text |
| seniority | array | Seniority levels |
| salaryMin | number | null | Lowest salary in the range |
| salaryMax | number | null | Highest salary in the range |
| salaryCurrency | string | null | Salary currency code |
| salaryPeriod | string | null | year, month, fortnight, week or hour |
| salaryText | string | null | Salary as readable text |
| postedAt | string | null | Publication date (ISO 8601, UTC) |
| expiresAt | string | null | Expiry date (ISO 8601, UTC) |
| jobUrl | string | null | Job page on Himalayas |
| applyUrl | string | null | Application page |
| source | string | null | Always himalayas |
| excerpt | string | null | Short summary |
| descriptionText | string | null | Full description as plain text |
| lists | array | null | Description bullet lists, each with a title and items |
| descriptionHtml | string | null | Full description as HTML |
| companyInfo | object | null | Company profile when Include company profile is on: size, founded, CEO, markets, about, tech stack, benefits, website, social links |
| scrapedAt | string | null | When the job was saved (ISO 8601, UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One saved Himalayas remote job. | $0.0007 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/himalayas-jobs-scraper').call({
"keywords": [
"software engineer"
],
"maxResults": 20,
"countries": [],
"timezones": [],
"categories": [],
"companies": [],
"excludeKeywords": [],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/himalayas-jobs-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/himalayas-jobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Full-time remote jobs sorted by highest salary.
All open remote jobs of a company.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.