ZipRecruiter Jobs Scraper — US Jobs & Salaries avatar

ZipRecruiter Jobs Scraper — US Jobs & Salaries

Pricing

from $0.99 / 1,000 job listings

Go to Apify Store
ZipRecruiter Jobs Scraper — US Jobs & Salaries

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.

ActorFocus
ZipRecruiter Jobs Scraper ◄── you are hereZipRecruiter.com US job listings
Glassdoor ScraperEmployer reviews, salaries, interviews, and jobs
Naukri Jobs ScraperIndia’s largest job board (Naukri.com)
Foundit Jobs ScraperFoundit.in / Monster India listings
Stepstone Jobs ScraperDACH commercial job board
Arbeitsagentur Jobs ScraperGermany 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 searchposition, location, optional extra searchKeywords and locations (pooled and deduplicated)
  • Start URL parsing — paste ZipRecruiter jobs-search URLs; 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 caseWhat you get
Job aggregationFresh ZipRecruiter openings into a board / search index
Salary benchmarkingDisclosed USD bands by role × city (hourly and annual)
Recruiting intelligenceCompetitor vacancy monitoring with full JD text
Employer lead genCompanies actively hiring in a US segment
Labor-market dashboardsEmployment 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

ParameterTypeDefaultDescription
positionStringKeywords / job title
searchKeywordsArrayExtra keyword queries (merged, deduped)
locationStringCity, ST / ZIP / Remote
locationsArrayExtra cities (one ZipRecruiter search each)
startUrlsArrayZipRecruiter jobs-search URLs
jobTypeStringanyfull_time / part_time / contract / temporary / internship
postedWithinDaysStringany1 / 5 / 10 / 30
radiusMilesIntegerRadius in miles (max 100)
salaryMin / salaryMaxIntegerUSD salary floor / ceiling
remoteOnlyBooleanfalseRemote-eligible jobs
easyApplyBooleanfalseQuick Apply only
includeJobDescriptionBooleantrueFetch detail JobPosting JSON-LD
maxItemsInteger100Max jobs (0 = unlimited subject to maxPages)
maxPagesInteger20Pagination safety cap (max 100)
monitorModeBooleanfalseEmit only new job IDs vs previous run
monitorStoreNameStringziprecruiter-jobs-monitorNamed KV store for seen IDs
resetMonitorStateBooleanfalseWipe the seen-job cache
proxyConfigurationObjectUS residentialRequired — Cloudflare blocks datacenter / non-US IPs

Output Format

Each dataset item is one job listing.

FieldTypeDescription
jobIdStringZipRecruiter jid token
urlStringJob posting URL
applyUrlStringApply URL (same as url when Quick Apply)
titleStringJob title
employerStringHiring company
employerUrlStringCompany website when JobPosting includes sameAs
employerLogoUrlStringLogo URL
locationStringLocation text
city / state / country / postalCodeStringParsed address
workModeStringremote / hybrid when detected
isRemote / isHybridBooleanFlags from location / title
employmentTypeStringe.g. FULL_TIME
industryStringEmployer industry
occupationalCategoryStringSOC code + label when present
benefitsArrayBenefit labels
salaryNoteStringFormatted band (e.g. $36 - $55.8/hr)
salaryMin / salaryMaxNumberAbsolute USD amounts
salaryPeriodStringhour / year / month / week / day
salaryCurrencyStringUsually USD
postedAt / validThroughStringISO dates from JobPosting
descriptionStringFull text (when includeJobDescription succeeds)
descriptionHtmlStringOriginal HTML description
sourceStringAlways 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 ApifyClient
client = 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.

ActorFocus
ZipRecruiter Jobs Scraper ◄── you are hereZipRecruiter.com US job listings
Glassdoor ScraperReviews, salaries, interviews, jobs
Naukri Jobs ScraperNaukri.com India jobs
Foundit Jobs ScraperFoundit.in / Monster India
Stepstone Jobs ScraperDACH job listings
Arbeitsagentur Jobs ScraperGermany BA Jobsuche