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

Scrape ZipRecruiter job listings by keyword and location or search URL: title, company, salary, location, remote, posted date, full description, apply link and company profile. No login needed.
Scrape ZipRecruiter job listings by keyword and location, from search URLs or single job pages. Get the title, company, salary (with yearly equivalents), location, remote type, benefits, posted date, apply link and, optionally, the full description plus the company profile. No login or account needed.
| Field | What it does |
|---|---|
searches | Search terms, e.g. software engineer, registered nurse |
location | US city, state or ZIP, e.g. New York, NY (empty = nationwide) |
maxItems | Maximum jobs to save in total |
startUrls | ZipRecruiter search URLs, job URLs or company job lists |
radius | 5, 10, 25, 50 or 100 miles |
postedWithin | 1, 5, 10 or 30 days |
salaryMin / salaryMax | Yearly salary range in USD |
employmentType | full_time, part_time, contract, temporary, internship, ... |
remote | remote, hybrid or onsite |
experienceLevel | no_experience, junior, mid, senior |
easyApplyOnly | Only 1-Click Apply jobs |
companyName | Keep only companies whose name contains this text |
includeDetails | Open each job page for the full description (default on) |
includeCompanyProfile | Also collect company profile, education and experience requirements |
{
"searches": ["registered nurse"],
"location": "Chicago, IL",
"maxItems": 200,
"postedWithin": "5",
"employmentType": ["full_time"],
"includeDetails": true
}
| Field | Description |
|---|---|
title, company, url, openSeatId | Job title, employer, job page and ZipRecruiter job id |
location, city, state, county, postalCode, country | Where the job is |
isRemote, locationType | IN_PERSON, REMOTE or HYBRID |
employmentType, employmentTypes | e.g. FULL_TIME |
salaryText, salaryMin, salaryMax, salaryInterval, salaryMinAnnual, salaryMaxAnnual, salaryCurrency | Pay as shown and as numbers |
benefits | Listed benefits |
postedAt, postedAgo, validThrough, isActive | Dates and status |
easyApply, applyUrl | How to apply |
shortDescription | Snippet from the search card |
description, descriptionMarkdown | Full description (details on); descriptionHtml with the company profile option |
industry, category, educationLevel, experienceMonths, keyResponsibilities, employerJobId, validThrough | Requirements and classification (company profile option) |
companyWebsite, companySize, companyIndustries, companyHeadquarters, companyAbout, companyRating, social links | Company profile (company profile option) |
detailsIncluded, searchQuery, searchLocation, scrapedAt | Run context |
{
"id": "M8ynRtPAgN_EmuSPWk-uzQ",
"openSeatId": "79832deae36cda35",
"url": "https://www.ziprecruiter.com/c/Endeavor-Health/Job/Registered-Nurse/-in-Chicago,IL?jid=79832deae36cda35",
"title": "Registered Nurse",
"company": "Endeavor Health",
"location": "Chicago, IL",
"postalCode": "60625",
"isRemote": false,
"locationType": "IN_PERSON",
"employmentType": "FULL_TIME",
"salaryText": "$37.25 - $57.74/hr",
"salaryMin": 37.25,
"salaryMax": 57.74,
"salaryInterval": "HOUR",
"salaryMinAnnual": 74500,
"salaryMaxAnnual": 115480,
"benefits": ["Medical", "Vision", "Dental", "Paid Time Off", "Retirement"],
"postedAt": "2026-10-12T07:00:00Z",
"easyApply": false,
"description": "Hourly Pay Range: $37.25 - $57.74 ...",
"descriptionMarkdown": "**Hourly Pay Range:** $37.25 - $57.74 ...",
"detailsIncluded": true
}
Example: 1,000 jobs with full descriptions ≈ $3.00 plus usage. A job whose detail page can't be loaded is saved with card data and charged the lower price.
Is it legal to scrape ZipRecruiter? The actor collects only public job listings that anyone can see without logging in. Make sure your use complies with ZipRecruiter's terms and the laws that apply to you.
Do I need a login or proxy? No. The actor uses a hosted browser with US exits, so there's nothing to configure.
How many jobs can I get? ZipRecruiter shows up to about 1,000 jobs per search (50 pages). Split big searches by location or filters to collect more.
Why is the salary empty for some jobs? Not every employer lists pay. When ZipRecruiter shows an estimate, salaryEstimated is true.
Can I schedule it or use the API? Yes. Schedule a daily run with postedWithin: "1" to collect new jobs, and read the dataset through the API or integrations.
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.
searchesarrayOptionalSearch terms
Job titles, skills or companies, e.g. software engineer, registered nurse, truck driver. Each term is one search.
locationstringOptionalLocation
City, state or ZIP code in the United States, e.g. New York, NY or 94105. Leave empty to search nationwide.
maxItemsintegerOptionaldefault 20Max jobs
Maximum number of jobs to save in total. ZipRecruiter shows up to about 1,000 jobs per search.
startUrlsarrayOptionalZipRecruiter URLs
Paste ZipRecruiter search URLs (ziprecruiter.com/jobs-search?search=...&location=..., filters in the URL are kept), job pages (ziprecruiter.com/c/.../Job/...?jid=...) or company job lists (ziprecruiter.com/co/Company/Jobs).
radiusenumOptionaldefault ""Distance
Search radius around the location.
postedWithinenumOptionaldefault "any"Posted within
Only jobs posted in this period.
salaryMinintegerOptionalMinimum salary (USD per year)
Only jobs paying at least this much per year, e.g. 60000.
salaryMaxintegerOptionalMaximum salary (USD per year)
Only jobs paying at most this much per year.
employmentTypearrayOptionalEmployment type
Keep only these employment types. Leave empty for all.
remoteenumOptionaldefault "any"Remote / on-site
Work location type.
experienceLevelarrayOptionalExperience level
Keep only jobs for these experience levels.
easyApplyOnlybooleanOptionaldefault false1-Click Apply only
Only jobs you can apply to directly on ZipRecruiter.
companyNamestringOptionalCompany name contains
Only keep jobs whose company name contains this text (not case-sensitive).
includeDetailsbooleanOptionaldefault trueInclude full job details
Open every job's page for the full description (as text and Markdown). Turn off for search-card data only (with a short description): faster and cheaper.
includeCompanyProfilebooleanOptionaldefault falseInclude company profile and requirements
Also read the full HTML job page for company size, industries, website, headquarters, social links and rating, plus education and experience requirements, industry, category and valid-through date. Uses more browser traffic (about $1 extra platform usage per 1,000 jobs).
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 |
| salaryText | any | Salary |
| employmentType | any | Type |
| locationType | any | Work type |
| postedAt | any | Posted |
| easyApply | any | 1-Click Apply |
| url | any | URL |
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 (search card) | One job saved from search results without full details. | $0.0008 |
| Job with full details | One job saved with its full description and company profile. | $0.003 |
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/ziprecruiter-scraper').call({
"searches": [
"software engineer"
],
"location": "New York, NY",
"maxItems": 20
})
// 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/ziprecruiter-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/ziprecruiter-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.
Job listings with full descriptions.
Jobs with details and company profiles.
Remote jobs within 5 miles posted in the last 5 days.
Jobs from a pasted ZipRecruiter search URL.
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.