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

Scrape job listings from hiring.cafe by keyword and filters or by search, company and job URLs. Get title, company, salary, location, seniority, skills, company data and the full description. No login needed.
Pull job listings from hiring.cafe, the job search engine that collects openings straight from company career pages. You get structured rows with title, company, salary, location, seniority, skills, benefits, company profile and the full description. No login or API key needed, and it costs $0.75 per 1,000 jobs.
software engineer), or paste hiring.cafe Start URLs: search pages, company pages (/org/<domain>) or job pages (/job/<id>).| Field | Key | Description |
|---|---|---|
| Keyword | keyword | What to search for. Used when Start URLs are empty. |
| Start URLs | startUrls | hiring.cafe search, company (/org/<domain>) or job (/job/<id>) links. When set, the filters are ignored. |
| Maximum jobs | maxItems | Total jobs to save across all inputs. Default 20. 0 means as many as the site returns. |
| Location | location | Country, state or city. Empty means United States; Anywhere searches worldwide. |
| Workplace types | workplaceTypes | Remote, Hybrid, Onsite, Field. |
| Commitment | commitmentTypes | Full Time, Part Time, Contract, Internship, Temporary, Seasonal, Volunteer. |
| Seniority | seniorityLevels | No Prior Experience Required, Entry Level, Mid Level, Senior Level. |
| Posted within (days) | dateFetchedPastNDays | Only jobs found in the last N days. |
| Job title contains | jobTitleQuery | Title must match this text. |
| Salary | minSalary, maxSalary, onlyTransparentSalaries | Yearly pay range, and whether to hide jobs without a posted salary. |
| Experience | minYoe, maxYoe | Required years of experience (0 to 20+). |
| Companies, industries | companyNames, excludedCompanyNames, industries, excludedIndustries | Include or exclude employers and industries. |
| Sort by | sortBy | default, date, date_asc, compensation, compensation_asc, experience, experience_desc. |
| Output | enrichDescription, flattenOutput | Full description on or off; flat columns for spreadsheets. |
| Incremental | incrementalMode, skipUnchanged, watchStateKey | Track new and changed jobs across runs. |
{
"keyword": "data analyst",
"location": "Texas",
"workplaceTypes": ["Remote", "Hybrid"],
"seniorityLevels": ["Mid Level", "Senior Level"],
"dateFetchedPastNDays": 14,
"minSalary": 80000,
"maxItems": 100
}
Or scrape URLs:
{
"startUrls": [
"https://hiring.cafe/?searchState=%7B%22searchQuery%22%3A%22software%20engineer%22%2C%22dateFetchedPastNDays%22%3A7%7D",
"https://hiring.cafe/org/nikasolutions.com"
],
"maxItems": 50
}
Each row is one job. The first fields are a quick summary; the rest is the full hiring.cafe record.
| Field | Description |
|---|---|
url | The job's page on hiring.cafe |
title, company, location | Job title, employer and formatted location |
workplaceType, seniorityLevel, commitment | Remote, hybrid or onsite; seniority; full time, contract and so on |
salaryMin, salaryMax, salaryPeriod, salaryCurrency | Posted pay range, when the job lists one |
postedAt, applyUrl, scrapedAt | Estimated publish date, the employer's apply link, and when the row was saved |
id, source, board_token, apply_url, requisition_id | hiring.cafe identifiers and the applicant tracking system it came from |
job_information | Title, raw title, view, save and apply counts, description (HTML) and descriptionText |
v5_processed_job_data | Structured fields: requirements summary, tools, degrees, experience, benefits, travel, shifts, visa, compensation by period, locations and more |
enriched_company_data, attributed_org, attributed_org_card | Company profile: website, industries, size, founding year, funding, HQ |
_geoloc | Latitude and longitude of the workplace |
Example (trimmed, sample values):
{
"url": "https://hiringcafe.com/job/8mnzag84mt0rjmjk",
"title": "Software Engineer",
"company": "Example Technology Inc.",
"location": "Panama City Beach, Florida, United States",
"workplaceType": "Onsite",
"seniorityLevel": "Mid Level",
"commitment": "Full Time",
"salaryMin": 95000,
"salaryMax": 125000,
"salaryPeriod": "Yearly",
"salaryCurrency": "USD",
"postedAt": "2026-09-29T16:24:41.000Z",
"applyUrl": "https://careers.example.com/jobs/12345",
"id": "paycor___8a7883c6___8a7885ac",
"source": "paycor",
"job_information": {
"title": "Software Engineer",
"num_views": 41,
"description": "<p>We are looking for a Software Engineer to ...</p>",
"descriptionText": "We are looking for a Software Engineer to ..."
},
"v5_processed_job_data": {
"core_job_title": "Software Engineer",
"requirements_summary": "3+ years building web services in Python or Java.",
"technical_tools": ["Python", "Java", "AWS"],
"min_industry_and_role_yoe": 3,
"visa_sponsorship": false,
"yearly_min_compensation": 95000,
"yearly_max_compensation": 125000
},
"enriched_company_data": {
"name": "Example Technology Inc.",
"homepage_uri": "example.com",
"nb_employees": 120,
"year_founded": 2011,
"hq_country": "US"
}
}
You pay $0.00075 per job saved, which is $0.75 per 1,000 jobs. A 100-job run costs about $0.075 in job fees. Platform usage (compute and proxy traffic) is billed separately and is small: a few cents for thousands of jobs. Jobs skipped as unchanged in incremental mode are free.
Is it legal to scrape hiring.cafe? The scraper reads public job listings that anyone can see without an account. Check the site's terms and your local laws for your use case, and do not use the data to spam people.
Do I need a login or my own proxy? No. The run uses the built-in residential proxy by default and rotates exits on its own when the site slows it down.
How many jobs can I get?
As many as the search has. Searches often list tens of thousands of jobs; set maxItems to 0 to take everything (up to 100,000 per run). Company pages return all of the company's open jobs.
Why is a field empty?
Fields such as salary, funding or experience are only filled when the job or company publishes them. hiring.cafe marks those as null.
Can I paste a search from the site? Yes. Set your filters on hiring.cafe, copy the address bar, and paste it into Start URLs. A search URL without a location is treated as a United States search.
Can I schedule it or use the API? Yes. Schedule runs in the console and turn on incremental mode to get only new and updated jobs, or start runs and fetch results through the API.
/ai-search/...) are not supported; use classic search URLs.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.
keywordstringOptionalKeyword
What to search for, such as software engineer or registered nurse. Used when Start URLs are empty.
startUrlsarrayOptionalStart URLs
hiring.cafe links: search pages (https://hiring.cafe/?searchState=... copied from the address bar), company pages (https://hiring.cafe/org/) or job pages (https://hiring.cafe/job/). hiringcafe.com links work too. When set, the filter fields below are ignored.
maxItemsintegerOptionaldefault 20Maximum jobs
How many jobs to save in total across all inputs. 0 means as many as the site returns (up to 100,000).
Build a search from filters. Ignored when Start URLs are set.
locationstringOptionalLocation
Country, state or city, such as United States, Texas, London or Berlin. Empty means United States. Use Anywhere for a worldwide search.
workplaceTypesarrayOptionalWorkplace types
Remote, Hybrid, Onsite or Field. Empty means all.
commitmentTypesarrayOptionalCommitment
Full time, part time, contract and so on. Empty means all.
seniorityLevelsarrayOptionalSeniority
Seniority levels to include. Empty means all.
dateFetchedPastNDaysintegerOptionalPosted within (days)
Only jobs the site found in the last N days. Empty uses the site default.
jobTitleQuerystringOptionalJob title contains
Only jobs whose title matches this text.
minSalaryintegerOptionalMin salary (yearly)
Only jobs paying at least this much per year.
maxSalaryintegerOptionalMax salary (yearly)
Only jobs whose pay range starts at or below this yearly amount.
onlyTransparentSalariesbooleanOptionaldefault falseOnly jobs with a posted salary
Hide jobs that do not publish a salary.
minYoeintegerOptionalMin years of experience
Lower bound of the required years of experience.
maxYoeintegerOptionalMax years of experience
Upper bound of the required years of experience (20 means 20+).
companyNamesarrayOptionalCompanies
Only jobs from these employers.
excludedCompanyNamesarrayOptionalExclude companies
Hide jobs from these employers.
industriesarrayOptionalIndustries
Only jobs from companies in these industries, such as Software Development or Hospitals and Health Care.
excludedIndustriesarrayOptionalExclude industries
Hide jobs from companies in these industries.
sortByenumOptionaldefault "default"Sort by
Order of the search results.
What each row contains.
enrichDescriptionbooleanOptionaldefault trueInclude full job description
Load each job's full description (HTML and plain text). Turn off for faster runs with the structured fields only.
flattenOutputbooleanOptionaldefault falseFlatten nested fields
Turn nested objects into flat columns joined with underscores (v5_processed_job_data.seniority_level becomes v5_processed_job_data_seniority_level). Handy for CSV and Excel.
Track new and changed jobs across scheduled runs.
incrementalModebooleanOptionaldefault falseIncremental mode
Remember jobs across runs. Each row gets _watchStatus: NEW, UPDATED or UNCHANGED. Use it on a schedule to pay only for what changed.
skipUnchangedbooleanOptionaldefault trueSkip unchanged jobs
In incremental mode, do not save (or charge for) jobs that have not changed since the last run.
watchStateKeystringOptionalWatch name
Optional name for this watch. Different names keep separate histories. Empty derives a name from the inputs.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Proxy exits for the requests. Residential is the default: the site rate-limits datacenter IPs hard. The scraper rotates exits automatically when the site slows it down.
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 |
|---|---|---|
| title | any | Title |
| company | any | Company |
| location | any | Location |
| workplaceType | any | Workplace |
| seniorityLevel | any | Seniority |
| commitment | any | Commitment |
| salaryMin | any | Salary min |
| salaryMax | any | Salary max |
| salaryCurrency | any | Currency |
| salaryPeriod | any | Per |
| postedAt | any | Posted |
| url | any | hiring.cafe page |
| applyUrl | any | Apply |
| source | any | ATS |
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 job listing. | $0.00075 |
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/hiring-cafe-scraper').call({
"keyword": "software engineer",
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// 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/hiring-cafe-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/hiring-cafe-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.
Search Hiring.Cafe jobs by keyword and workplace type.
Jobs from a pasted Hiring.Cafe search link.
Only jobs that publish their salary.
Jobs that match a job title filter.
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.