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

Scrape open jobs from any company that hires with Greenhouse: title, company, location, remote flag, department, employment type, pay range, full description, apply link, and posting dates. Search one board or thousands of companies.
Pull every open job from companies that hire with Greenhouse, live from their public job boards. You get title, company, location, remote flag, department, employment type, published pay ranges, the full description, the apply link and posting dates. Point it at a few companies or search about 4,600 Greenhouse employers at once. No login, no API key, and you only pay for the jobs you save.
airbnb, a link like https://job-boards.greenhouse.io/figma, a single job link, a career page that embeds Greenhouse, or a name like Discord. Or leave it empty to search every company in the directory.| Field | What it does |
|---|---|
companies | Board tokens, board or job links, career pages, or company names. Empty = search the whole directory. |
maxResults | Total jobs to save (default 20, 0 = no limit). |
keywords / excludeKeywords | Title must contain any / none of these words. engineer* matches by prefix. |
locations / excludeLocations | Location text must contain any / none of these (e.g. London, United States, Remote). |
workplaceTypes | remote, hybrid, onsite. |
departments | Department contains any of these. |
employmentTypes | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN. |
postedSince / updatedSince | A date (2026-10-01) or a period (24 hours, 7 days, 2 weeks). |
descriptionKeywords / excludeDescriptionKeywords | Title or description mentions any / none of these. |
hasSalary | Only jobs with a pay range. |
maxResultsPerCompany | Optional cap per company. |
includeDescription, descriptionFormat, includeSalary | Output options. |
{
"companies": ["airbnb", "https://job-boards.greenhouse.io/figma", "Discord"],
"keywords": ["engineer*", "product manager"],
"workplaceTypes": ["remote", "hybrid"],
"postedSince": "14 days",
"maxResults": 100
}
Search across all directory companies:
{
"keywords": ["data scientist"],
"locations": ["United States", "Remote"],
"hasSalary": true,
"maxResults": 200
}
| Field | Description |
|---|---|
title, company, companySlug | Job title, company name, Greenhouse board token |
location, allLocations | Published location and all offices |
isRemote, workplaceType | Remote flag and remote / hybrid / onsite |
department, departments | Main and all departments |
employmentType | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN when it can be detected |
salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | Pay range, with all published ranges and where it came from |
descriptionHtml, descriptionText | Full description |
applyUrl, jobUrl | Apply link on the company site, job page on Greenhouse |
postedAt, updatedAt | First published and last updated (UTC) |
requisitionId, internalJobId, language, applicationDeadline, customFields | Extra details the company publishes |
Example (shortened, sample data):
{
"id": "7001234",
"title": "Senior Backend Engineer, Payments",
"company": "Example Labs",
"companySlug": "examplelabs",
"location": "Remote - United States",
"allLocations": ["Remote - United States"],
"isRemote": true,
"workplaceType": "remote",
"department": "Engineering",
"departments": ["Engineering"],
"employmentType": "FULL_TIME",
"salary": {"min": 165000, "max": 210000, "currency": "USD", "period": "year", "text": "US Annual Pay Range", "source": "pay_transparency"},
"salaryMin": 165000,
"salaryMax": 210000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": "US Annual Pay Range",
"descriptionText": "About the role\nYou will build the services that move money for millions of customers...",
"applyUrl": "https://job-boards.greenhouse.io/examplelabs/jobs/7001234",
"jobUrl": "https://job-boards.greenhouse.io/examplelabs/jobs/7001234",
"postedAt": "2026-10-09T15:02:11Z",
"updatedAt": "2026-10-13T08:40:57Z",
"requisitionId": "ENG-482",
"language": "en",
"customFields": {"Workplace Type": "Remote"},
"source": "greenhouse"
}
You pay $1.00 per 1,000 jobs saved ($0.001 per job), plus a small amount of platform usage (compute and proxy traffic).
Is it legal? It reads the public job boards companies publish on Greenhouse for candidates and job sites. It does not log in and does not collect applicant data. Check your local rules for how you use the data.
Do I need a login, API key or proxy? No. Datacenter proxies are the default and work well.
How many jobs can I get? Every open job on each board. The built-in directory covers 4,600 active companies and about 125,000 open jobs; add any board token to reach companies outside it.
Why is a field empty? Companies fill different fields. Pay ranges appear only when the company publishes them; employment type is detected from the company's fields, the title and the description, and stays empty when none of them says it.
Can I schedule it or use the API? Yes. Schedule a daily run with postedSince: "24 hours" for alerts, and fetch results through the API or integrations.
How do I find a company's board token? It is the part after greenhouse.io/ in the board link, for example figma in job-boards.greenhouse.io/figma. You can also just paste the link or the company name.
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.
companiesarrayOptionalCompanies, board links, or job links
One per line. Accepts a Greenhouse board token (airbnb), a board link (https://job-boards.greenhouse.io/figma), a single job link, a company career page that embeds Greenhouse, or a company name (Discord). Leave empty to search all companies in the built-in directory with the filters below.
maxResultsintegerOptionaldefault 20Maximum jobs
Stop after this many jobs in total. Use 0 for no limit (every matching job).
keywordsarrayOptionalTitle keywords
Keep jobs whose title contains any of these words or phrases (case-insensitive, whole words). End a word with * for prefix matching, e.g. engineer*.
excludeKeywordsarrayOptionalExclude title keywords
Drop jobs whose title contains any of these words, e.g. senior, intern.
locationsarrayOptionalLocations
Keep jobs whose location contains any of these texts, e.g. London, United States, Remote.
excludeLocationsarrayOptionalExclude locations
Drop jobs whose location contains any of these texts.
workplaceTypesarrayOptionalWorkplace type
Keep only remote, hybrid, or on-site jobs. Detected from the company's workplace field and the location text.
departmentsarrayOptionalDepartments
Keep jobs whose department contains any of these texts, e.g. Engineering, Sales.
employmentTypesarrayOptionalEmployment type
Keep only these employment types. Detected from the company's fields, the title, and the description.
postedSincestringOptionalPosted since
Keep jobs first published on or after this date (2026-10-01) or within a period such as 24 hours, 7 days, 2 weeks.
updatedSincestringOptionalUpdated since
Keep jobs updated on or after this date or within a period such as 3 days.
descriptionKeywordsarrayOptionalDescription keywords
Keep jobs whose title or description mentions any of these words, e.g. Python, visa sponsorship.
excludeDescriptionKeywordsarrayOptionalExclude description keywords
Drop jobs whose title or description mentions any of these words.
hasSalarybooleanOptionaldefault falseOnly jobs with salary
Keep only jobs that publish a pay range.
maxResultsPerCompanyintegerOptionalMaximum jobs per company
Optional cap per company, useful when searching many companies. Leave empty for no cap.
includeDescriptionbooleanOptionaldefault trueInclude description
Save the full job description. Turn off for a faster, lighter run with titles, locations, and links only.
descriptionFormatenumOptionaldefault "both"Description format
Save the description as HTML, plain text, or both.
includeSalarybooleanOptionaldefault trueInclude pay ranges
Read the pay transparency ranges the company publishes, and fall back to a salary range written in the description.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work well for Greenhouse.
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 | Greenhouse job id |
| title | string | null | Job title |
| company | string | null | Company name |
| companySlug | string | null | Greenhouse board token |
| location | string | null | Location as published |
| allLocations | array | null | Offices or locations |
| isRemote | boolean | null | True for remote jobs |
| workplaceType | string | null | remote, hybrid or onsite |
| department | string | null | Main department |
| departments | array | null | All departments |
| employmentType | string | null | FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY or INTERN when detected |
| salary | object | null | Pay range with min, max, currency, period and source |
| salaryMin | number | null | Minimum pay |
| salaryMax | number | null | Maximum pay |
| salaryCurrency | string | null | Pay currency |
| salaryPeriod | string | null | hour, day, week, month or year |
| salaryText | string | null | Pay range as published |
| descriptionHtml | string | null | Description as HTML |
| descriptionText | string | null | Description as plain text |
| applyUrl | string | null | Apply link on the company site |
| jobUrl | string | null | Job page on Greenhouse |
| postedAt | string | null | First published (UTC) |
| updatedAt | string | null | Last updated (UTC) |
| requisitionId | string | null | Requisition id |
| internalJobId | integer | null | Internal job id |
| language | string | null | Posting language |
| applicationDeadline | string | null | Application deadline |
| customFields | object | null | Custom fields the company publishes |
| source | string | null | Always greenhouse |
| scrapedAt | string | null | When the job was saved (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 job saved to the dataset. | $0.001 |
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/greenhouse-jobs-scraper').call({
"companies": [
"airbnb",
"figma",
"discord"
],
"maxResults": 20,
"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/greenhouse-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/greenhouse-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.
Open roles from company job boards with salaries.
Jobs filtered by keyword and location.
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.