ZipRecruiter Jobs Scraper — US Jobs & Salaries
Pricing
from $0.99 / 1,000 job listings
ZipRecruiter Jobs Scraper — US Jobs & Salaries
Scrape ZipRecruiter jobs by keyword, city, or start URLs — a ZipRecruiter API alternative. Export title, company, salary, location, employment type, and full descriptions as JSON for recruiting and market research.
Pricing
from $0.99 / 1,000 job listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Disclaimer: Unofficial tool for publicly accessible ZipRecruiter job listings. ZipRecruiter and related names are trademarks of their respective owners. Not affiliated with, sponsored by, or endorsed by ZipRecruiter, Inc. For informational, research, aggregation, and recruiting-intelligence use only. Respect applicable terms of use and law.
Scrape ZipRecruiter job listings with this ZipRecruiter Jobs Scraper — a practical ZipRecruiter scraper, ZipRecruiter API alternative, and US jobs scraper for structured JSON. Search by keyword, city, filters, or paste jobs-search start URLs. Export title, company, location, salary (USD), employment type, benefits, posted dates, SOC category, and full descriptions. Call it from Python, Node.js, cURL, or Apify MCP / AI assistants — no login.
Ideal for US job board aggregation, salary benchmarking, recruiting intelligence, employer lead generation, and labor-market research across Austin, New York, Chicago, remote roles, and more.
| Actor | Focus |
|---|---|
| ZipRecruiter Jobs Scraper ◄── you are here | ZipRecruiter.com US job listings |
| Glassdoor Scraper | Employer reviews, salaries, interviews, and jobs |
| Naukri Jobs Scraper | India’s largest job board (Naukri.com) |
| Foundit Jobs Scraper | Foundit.in / Monster India listings |
| Stepstone Jobs Scraper | DACH commercial job board |
| Arbeitsagentur Jobs Scraper | Germany BA Jobsuche |
When to use this Actor
- You need a ZipRecruiter scraper / ZipRecruiter jobs scraper that returns structured JSON
- You want keyword + city + ZipRecruiter filters without maintaining a Cloudflare crawler
- You need parsed USD salary, benefits, employment type, and full descriptions
- You want to scrape ZipRecruiter with Python, Node.js, or MCP and export a dataset
- You run a daily monitor and only want new job IDs billed
When not to use this Actor
- Non-US job portals — this Actor covers ziprecruiter.com (US). Country white-labels are a different stack
- Guaranteed emails or phones — public listings rarely include direct contacts
- Login-walled apply-form automation — public search and JobPosting data only
- Historical archives — currently listed jobs only
- Employer reviews — use Glassdoor Scraper for ratings and interviews
Key Features
- Keyword + city search —
position,location, optional extrasearchKeywordsandlocations(pooled and deduplicated) - Start URL parsing — paste ZipRecruiter
jobs-searchURLs; query filters map automatically - ZipRecruiter filters — employment type, freshness, radius, salary floor/ceiling, remote, Quick Apply
- Structured salary — USD min/max plus period (
hour/year/month) from JobPosting JSON-LD - Full descriptions — schema.org JobPosting on each detail page (benefits, SOC category, dates, logo)
- Camoufox + US residential — ZipRecruiter Cloudflare blocks datacenter and non-US IPs
- Monitor mode — named Key-Value store of seen job IDs; later scheduled runs emit only new jobs
- Deduplicated job IDs across pages, keywords, and multi-city runs (ZipRecruiter renders each card twice)
- MCP / AI ready — call from assistants via Apify MCP
Use Cases
| Use case | What you get |
|---|---|
| Job aggregation | Fresh ZipRecruiter openings into a board / search index |
| Salary benchmarking | Disclosed USD bands by role × city (hourly and annual) |
| Recruiting intelligence | Competitor vacancy monitoring with full JD text |
| Employer lead gen | Companies actively hiring in a US segment |
| Labor-market dashboards | Employment type, remote mix, SOC codes, posted dates |
| Daily “what’s new” | monitorMode on a schedule — pay only for new job IDs |
Quick Start
Keyword + city:
{"position": "software engineer","location": "Austin, TX","maxItems": 50,"postedWithinDays": "10","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Listing start URL (filters in the query string are applied):
{"startUrls": [{ "url": "https://www.ziprecruiter.com/jobs-search?search=registered+nurse&location=Chicago%2C+IL&days=7" }],"maxItems": 100}
Remote + salary floor + monitor:
{"position": "data analyst","location": "Remote","remoteOnly": true,"salaryMin": 100000,"maxItems": 150,"monitorMode": true,"monitorStoreName": "ziprecruiter-data-analyst-remote"}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
position | String | — | Keywords / job title |
searchKeywords | Array | — | Extra keyword queries (merged, deduped) |
location | String | — | City, ST / ZIP / Remote |
locations | Array | — | Extra cities (one ZipRecruiter search each) |
startUrls | Array | — | ZipRecruiter jobs-search URLs |
jobType | String | any | full_time / part_time / contract / temporary / internship |
postedWithinDays | String | any | 1 / 5 / 10 / 30 |
radiusMiles | Integer | — | Radius in miles (max 100) |
salaryMin / salaryMax | Integer | — | USD salary floor / ceiling |
remoteOnly | Boolean | false | Remote-eligible jobs |
easyApply | Boolean | false | Quick Apply only |
includeJobDescription | Boolean | true | Fetch detail JobPosting JSON-LD |
maxItems | Integer | 100 | Max jobs (0 = unlimited subject to maxPages) |
maxPages | Integer | 20 | Pagination safety cap (max 100) |
monitorMode | Boolean | false | Emit only new job IDs vs previous run |
monitorStoreName | String | ziprecruiter-jobs-monitor | Named KV store for seen IDs |
resetMonitorState | Boolean | false | Wipe the seen-job cache |
proxyConfiguration | Object | US residential | Required — Cloudflare blocks datacenter / non-US IPs |
Output Format
Each dataset item is one job listing.
| Field | Type | Description |
|---|---|---|
jobId | String | ZipRecruiter jid token |
url | String | Job posting URL |
applyUrl | String | Apply URL (same as url when Quick Apply) |
title | String | Job title |
employer | String | Hiring company |
employerUrl | String | Company website when JobPosting includes sameAs |
employerLogoUrl | String | Logo URL |
location | String | Location text |
city / state / country / postalCode | String | Parsed address |
workMode | String | remote / hybrid when detected |
isRemote / isHybrid | Boolean | Flags from location / title |
employmentType | String | e.g. FULL_TIME |
industry | String | Employer industry |
occupationalCategory | String | SOC code + label when present |
benefits | Array | Benefit labels |
salaryNote | String | Formatted band (e.g. $36 - $55.8/hr) |
salaryMin / salaryMax | Number | Absolute USD amounts |
salaryPeriod | String | hour / year / month / week / day |
salaryCurrency | String | Usually USD |
postedAt / validThrough | String | ISO dates from JobPosting |
description | String | Full text (when includeJobDescription succeeds) |
descriptionHtml | String | Original HTML description |
source | String | Always ziprecruiter |
Example row:
{"jobId": "464aac35b7123512","url": "https://www.ziprecruiter.com/c/Endeavor-Health/Job/Registered-Nurse-GI-Days/-in-Chicago,IL?jid=464aac35b7123512","title": "Registered Nurse - GI - Days","employer": "Endeavor Health","location": "Chicago, IL","city": "Chicago","state": "IL","country": "US","workMode": null,"employmentType": "FULL_TIME","industry": "Healthcare","occupationalCategory": "29-1141.00: Registered Nurses","salaryNote": "$36 - $55.8/hr","salaryMin": 36,"salaryMax": 55.8,"salaryPeriod": "hour","salaryCurrency": "USD","postedAt": "2026-08-19T07:00:00Z","source": "ziprecruiter"}
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/ziprecruiter-jobs-scraper').call({position: 'software engineer',location: 'Austin, TX',maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/ziprecruiter-jobs-scraper").call(run_input={"position": "software engineer","location": "Austin, TX","maxItems": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("title"), item.get("employer"), item.get("salaryNote"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~ziprecruiter-jobs-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"position":"software engineer","location":"Austin, TX","maxItems":50}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/ziprecruiter-jobs-scraper.
Example prompts:
- "Run ZipRecruiter Jobs Scraper for software engineer in Austin, TX, max 50, and return title, employer, salaryNote, url as JSON"
- "Scrape ZipRecruiter registered nurse jobs in Chicago posted in the last 7 days and summarize salary bands"
- "Pull ZipRecruiter remote data analyst jobs, then run Glassdoor Scraper on the top hiring employers"
- "Monitor ZipRecruiter Python developer jobs in New York daily and return only new job IDs"
Suite next step
ZipRecruiter is the US marketplace listing feed. For employer reviews, interview questions, and salary bands on the same companies, run Glassdoor Scraper next.
FAQ
Is this an official ZipRecruiter API?
No. ZipRecruiter’s partner API is for posting jobs, not public search. This Actor reads public jobs-search pages and schema.org JobPosting JSON-LD — a practical ZipRecruiter API alternative for pipelines.
Do I need a proxy?
Yes — US residential. ZipRecruiter Cloudflare blocks datacenter IPs and geo-redirects many non-US connections (including to ziprecruiter.de, which is a different site).
Can I paste a ZipRecruiter search URL?
Yes — startUrls accepts jobs-search links. Filters such as days, radius, refine_by_salary, and refine_by_employment map automatically.
Do I need a ZipRecruiter account?
No — public listing and job pages only.
How do I get the full job description?
It is on by default (includeJobDescription: true). Each job page is opened and JobPosting JSON-LD is parsed (description, salary, benefits, dates). Turn it off for faster listing-only runs (title, company, location, URL).
Why is each job returned only once if the page shows ~40 cards?
ZipRecruiter renders every job twice (list pane + detail pane). The scraper deduplicates by jid.
What is monitor mode?
With monitorMode: true, seen job IDs are stored in a named Key-Value store. The first run is the baseline (all matches are new). Later scheduled runs push and charge only IDs not seen before.
Python / Node.js / MCP?
Yes — use the Apify client examples above or Apify MCP prompts.
How many jobs per search?
ZipRecruiter paginates 20 unique jobs per page. Use extra locations / searchKeywords or start URLs to cover more. There is no 500-item hard cap beyond maxItems / maxPages.
Related Actors
| Actor | Focus |
|---|---|
| ZipRecruiter Jobs Scraper ◄── you are here | ZipRecruiter.com US job listings |
| Glassdoor Scraper | Reviews, salaries, interviews, jobs |
| Naukri Jobs Scraper | Naukri.com India jobs |
| Foundit Jobs Scraper | Foundit.in / Monster India |
| Stepstone Jobs Scraper | DACH job listings |
| Arbeitsagentur Jobs Scraper | Germany BA Jobsuche |