Job Listings & Salary Scraper for ZipRecruiter (US, UK, IE, CA)
Pricing
from $1.50 / 1,000 results
Job Listings & Salary Scraper for ZipRecruiter (US, UK, IE, CA)
ZipRecruiter job & salary scraper/API (US, UK, Ireland, Canada): search by keyword/location; export title, company, salary, location, type, date, description, apply URL. No login. Independent tool, not affiliated with or endorsed by ZipRecruiter; trademarks belong to their owners.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
1
Bookmarked
25
Total users
4
Monthly active users
a day ago
Last modified
Categories
Features
Share
ZipRecruiter Scraper 💼 — Jobs, Salary, Quick Apply & Geo (US, UK, IE, CA)
Scrape ZipRecruiter job listings into a clean, structured B2B dataset — no login and no coding. This ZipRecruiter scraper extracts job postings from ziprecruiter.co.uk, ziprecruiter.ie, ziprecruiter.com, and ziprecruiter.ca with job title, hiring company, normalized salary range, employment type, posted & expiration dates, exact geo coordinates, Quick Apply status, and full HTML + plain-text job descriptions.
Export your ZipRecruiter data in bulk to JSON, CSV, Excel, or API — ready for your ATS, CRM, B2B lead generation pipeline, compensation benchmark database, or AI/LLM workflow.
💡 Built for recruitment & staffing agencies, B2B sales teams tracking hiring-intent signals, compensation and labor-market analysts, job-board aggregators, and AI teams building skill-extraction and salary-prediction datasets.
⚡ At a glance
| Feature | Details |
|---|---|
| 🌍 Supported Markets | United Kingdom (uk), Ireland (ie), United States (us), and Canada (ca) |
| 🔍 Search Modes | Keyword + Location search, Remote-only filter, Date-posted filter (1, 5, 10, 20 days), or direct startUrls |
| 📊 Rich Job Schema | 28 structured fields including normalized salaryMin/salaryMax, employmentType, latitude/longitude, quickApply, and full descriptions |
| 🔢 Pagination & Scale | Unlocked 1,000+ results pagination (maxPages: 0 unlimited default, governed by maxRecords) |
| 🛡️ Deduplication | 100% deduplicated within every run by canonical numeric jobId |
| ⚡ Speed & Modes | Fast list-only mode (scrapeDescription: false, ~5× faster) or full detail enrichment (scrapeDescription: true) |
| 📤 Export Formats | JSON, CSV, Excel (XLSX), XML, RSS, and live Apify REST API / Webhooks |
📋 Table of contents
- Why scrape ZipRecruiter?
- What this ZipRecruiter scraper does
- Use cases
- Input parameters
- Output schema & field reference
- Pagination & 1,000+ scale
- How to use
- Integrations & workflows
- Tips for best results
- FAQ
- Related scrapers
- Changelog
🔎 Why scrape ZipRecruiter?
ZipRecruiter is one of the world's largest online recruitment marketplaces across North America, the United Kingdom, and Ireland. Every public job posting contains high-value B2B intelligence: which companies are actively expanding headcount, what roles and tech stacks they are hiring for, what compensation bands they offer, where their offices are located, and whether they use instant in-platform applications.
Gathering this data manually is impractical: search results paginate ~20 jobs at a time across dozens of pages, exact posting dates and geo coordinates are embedded inside individual job pages, and compensation figures appear in mixed hourly, daily, and annual formats. This ZipRecruiter data extractor automates the entire workflow — walking every result page, normalizing salaries and locations, deduplicating by jobId, and delivering structured records ready for analytics or outreach.
Common reasons teams scrape ZipRecruiter:
- 🎯 Hiring-intent B2B lead generation — companies posting multiple engineering, sales, finance, or operations roles have active budget; trigger outbound sequences the day a role goes live.
- 💰 Salary & compensation benchmarking — compare
salaryMin,salaryMax,salaryCurrency, andsalaryPeriodacross cities, regions, and job titles. - 🤝 Agency recruitment & candidate sourcing — monitor open requisitions across your niche and identify employers struggling to fill specialist roles.
- 📈 Labor-market & macroeconomic research — track remote-work share (
isRemote), contract vs. full-time ratios (employmentType), and hiring velocity over time. - 🤖 AI & LLM training pipelines — feed clean
descriptionTextanddescriptionHtmlinto skill-taxonomy extractors, resume matchers, and salary-estimation models. - 🗺️ Geo-spatial workforce mapping — plot hiring clusters on maps using native
latitudeandlongitudecoordinates without paying for third-party geocoding APIs.
✨ What this ZipRecruiter scraper does
- ✅ Multi-market job search (
uk,ie,us,ca) — search by job title, skill, or company name in any city, state, postcode, or nationwide. - ✅ Direct Start-URL support (
startUrls) — paste any pre-filtered ZipRecruiter search URL from your browser and scrape it directly. - ✅ Unlocked 1,000+ deep pagination — automatically walks
?page=1, 2, 3…withmaxPages: 0(unlimited default) until yourmaxRecordstarget is reached or listings are exhausted. - ✅ Full job-detail enrichment (
scrapeDescription) — optionally visits each job page to capture full HTML & plain-text descriptions, exactpostedDateandvalidThroughdates,employmentType,latitude/longitude,companyUrl, and thequickApplyflag. - ✅ Built-in salary parser — normalizes
$60k - $90k,£45,000 - £55,000 per annum,€25/hr, and structured salary metadata into numericsalaryMin,salaryMax,salaryCurrency, andsalaryPeriod, with an automatic fallback scan of the job description. - ✅ Smart location & postcode parser — splits raw location strings into clean
city,state(expanding region codes likeENG→England),postcode(UK postcodes, Irish Eircodes, Canadian postcodes, US ZIPs), andcountry. - ✅ Remote-work detection — automatically flags remote and work-from-home listings (
isRemote: true) from title, location, and description signals. - ✅ Fast list-only mode — set
scrapeDescription: falsefor rapid, high-volume discovery runs at a fraction of the time.
🎯 Use cases
| Team / Role | How they use this ZipRecruiter Scraper |
|---|---|
| 🎯 B2B Sales & RevOps (Lead Gen) | Scrape companies hiring for roles that buy your product (e.g., "head of compliance", "devops engineer", "warehouse manager"), deduplicate by company, and enrich decision-makers in your CRM. |
| 🤝 Staffing & Recruiting Agencies | Schedule daily runs with datePosted: "1" (Past 24 hours) to spot newly opened roles in London, Manchester, Dublin, Toronto, or New York before rival agencies pitch. |
| 💰 HR & Compensation Consultants | Pull 1,000+ listings per role category to calculate median, 25th-percentile, and 75th-percentile salary bands across regions. |
| 🗂️ Niche Job Boards & Aggregators | Populate vertical job boards (healthcare, logistics, fintech, remote-only) with live listings, applyUrl links, and clean snippets. |
| 📊 Workforce & Economic Analysts | Track month-over-month posting volume, regional hiring shifts, and remote-work adoption across UK, Irish, US, and Canadian markets. |
| 🤖 AI & Data Science Teams | Ingest thousands of full job descriptions (descriptionText / descriptionHtml) to train NER skill extractors and automated job-classification models. |
📥 Input parameters
All fields are optional — leaving the input completely empty runs a built-in diverse sample across popular job categories so your first run always returns clean data.
| Field | Type | Default | Description |
|---|---|---|---|
country | string | "uk" | Target ZipRecruiter market: "uk" (ziprecruiter.co.uk), "ie" (ziprecruiter.ie), "us" (ziprecruiter.com), or "ca" (ziprecruiter.ca). UK and Ireland offer the fastest, most dependable results. |
keyword | string | "" (prefill "software engineer") | Job title, skill, or company name to search (e.g., "software engineer", "registered nurse", "accountant"). Leave empty for a mixed sample across 10 popular job titles. |
location | string | "" (prefill "London") | City, state, region, or postcode (e.g., "London", "Manchester", "Dublin", "New York, NY"). Leave empty to search nationwide. |
remoteOnly | boolean | false | When true, filters the search to remote / work-from-home listings only. |
datePosted | string | "any" | Filter by posting recency: "any" (Any time), "1" (Past 24 hours), "5" (Past 5 days), "10" (Past 10 days), or "20" (Past 20 days). |
scrapeDescription | boolean | true (prefill false) | Visit each job's detail page for full description, geo coordinates, employment type, exact dates, and Quick Apply status. Turn false for ~5× faster list-only runs. |
maxRecords | integer | 100 | Maximum total jobs to return (0 = unlimited, or set 1000+ for large-scale harvests). |
maxPages | integer | 0 | Maximum listing pages to walk per search (0 = unlimited, governed by maxRecords). |
requestDelay | integer | 1000 | Polite delay between requests in milliseconds (300–10000). |
startUrls | array | [] | Advanced: paste one or more ZipRecruiter search URLs directly. Overrides keyword and location. |
proxyConfiguration | object | RESIDENTIAL (GB) | Apify Proxy configuration. Match the residential proxy country (GB, IE, US, CA) to your chosen country market for optimal reliability. |
Input examples
1. Fast UK job discovery run (list-only mode):
{"country": "uk","keyword": "software engineer","location": "London","scrapeDescription": false,"maxRecords": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}}
2. Rich detail enrichment with full descriptions, geo & Quick Apply:
{"country": "uk","keyword": "property manager","location": "London","remoteOnly": false,"datePosted": "any","scrapeDescription": true,"maxRecords": 250,"requestDelay": 800,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}}
📤 Output schema & field reference
Every job record uses a consistent 28-field JSON structure whether scrapeDescription is enabled or disabled.
{"jobId": "635719110","slug": "635719110-property-manager","title": "Property Manager","company": "Hobdens Property Management","companyUrl": null,"location": "Littlehampton, ENG, GB","city": "Littlehampton","state": "England","postcode": null,"country": "United Kingdom","latitude": 50.81137,"longitude": -0.54078,"isRemote": null,"salaryMin": 40000,"salaryMax": 48000,"salaryCurrency": "GBP","salaryPeriod": "year","salaryRaw": "£40,000 - £48,000/year","employmentType": "Full Time","quickApply": false,"postedDate": "2026-10-31","validThrough": "2026-11-30","postedDateDisplay": "31 Oct","descriptionText": "Job Description PROPERTY MANAGER Hobdens Property Management • Competitive • Hybrid - Littlehampton ROLE OVERVIEW You will take ownership of a well-established residential portfolio across East Sussex and West Sussex...","descriptionHtml": "<h3>Job Description</h3><div><p><strong>PROPERTY MANAGER</strong></p>...</div>","descriptionSnippet": "Job Description PROPERTY MANAGER Hobdens Property Management • Competitive • Hybrid - Littlehampton...","applyUrl": "https://www.ziprecruiter.co.uk/jobs/635719110-property-manager","listingUrl": "https://www.ziprecruiter.co.uk/jobs/635719110-property-manager","searchKeyword": "property manager","searchLocation": "London","searchUrl": "https://www.ziprecruiter.co.uk/jobs/search?q=property+manager&l=London","market": "UK","scrapedAt": "2026-11-10T02:00:00.000Z"}
💼 Job identity & company fields
| Field | Type | Coverage | Description |
|---|---|---|---|
🆔 jobId | string | 🟢 High (100%) | Unique numeric ZipRecruiter job identifier (primary deduplication key). |
🔗 slug | string | 🟢 High (100%) | Canonical URL slug ({jobId}-{title-slug}). |
🏷️ title | string | 🟢 High (100%) | Job title as published on the listing card. |
🏢 company | string | 🟢 High (~99%) | Hiring organization or recruitment agency name. |
🌐 companyUrl | string | 🟡 Conditional | Employer website URL when published in detail metadata. |
🕒 employmentType | string | 🟢 High (~87% w/ detail) | Normalized schedule type (Full Time, Part Time, Contract, Temporary, Intern). |
⚡ quickApply | boolean | 🟢 High (~87% w/ detail) | true when the job supports instant in-platform application (directApply). |
📍 Location & geo fields
| Field | Type | Coverage | Description |
|---|---|---|---|
📍 location | string | 🟢 High (100%) | Raw human-readable location string from the listing card. |
🏙️ city / state | string | 🟢 High (~98%) | Parsed city and normalized state/region/county (ENG → England). |
📮 postcode | string | 🟡 Conditional | Extracted UK postcode, Irish Eircode, Canadian postal code, or US ZIP when present. |
🌍 country / market | string | 🟢 High (100%) | Full country name (United Kingdom, Ireland, etc.) and 2-letter market code (UK, IE, US, CA). |
🧭 latitude / longitude | number | 🟢 High (~87% w/ detail) | Exact decimal geographic coordinates from the job detail page. |
🏠 isRemote | boolean | 🟡 Conditional | true when the title, location, or description indicates remote / work-from-home eligibility. |
💰 Compensation, dates & content fields
| Field | Type | Coverage | Description |
|---|---|---|---|
💵 salaryMin / salaryMax | number | 🟡 Conditional (~43%) | Numeric minimum and maximum pay when disclosed by the employer (card + description fallback). |
💱 salaryCurrency / salaryPeriod | string | 🟢 High / 🟡 Conditional | Currency code (GBP, EUR, USD, CAD) and pay period (hour, day, week, month, year). |
🏷️ salaryRaw | string | 🟡 Conditional (~43%) | Raw compensation string as displayed on the listing or detail page. |
📅 postedDate / validThrough | string | 🟢 High (~87% w/ detail) | Exact ISO-8601 (YYYY-MM-DD) posting date and expiration date from detail metadata. |
🗓️ postedDateDisplay | string | 🟢 High (~95%) | Short date badge shown on the search card (e.g., "31 Oct", "Just posted"). |
📄 descriptionSnippet | string | 🟢 High (~99%) | Short summary snippet captured directly from the search results page. |
📝 descriptionText / descriptionHtml | string | 🟢 High (~87% w/ detail) | Complete plain-text and HTML job description (populated when scrapeDescription: true). |
🔗 listingUrl / applyUrl | string | 🟢 High (100%) | Canonical ZipRecruiter listing URL and application redirect/entry URL. |
🔎 searchKeyword / searchLocation / searchUrl | string | 🟢 High (100%) | Provenance fields recording the exact search query and URL that produced the record. |
⏱️ scrapedAt | string | 🟢 High (100%) | ISO-8601 UTC timestamp of extraction. |
🔁 Pagination & 1,000+ scale
ZipRecruiter serves ~20 job cards per search result page. This actor is engineered for both rapid sampling and 1,000+ record bulk extraction:
- Automatic multi-page walking (
maxPages: 0): By default,maxPagesis0(unlimited), meaning the scraper advances through?page=1, 2, 3…automatically until it reaches yourmaxRecordstarget or the search results end. - Zero-duplicate guarantee: Every job card is checked against an in-memory
Setof seenjobIdvalues. If ZipRecruiter repeats a sponsored listing across pages or wraps pagination at the end of a result set, the scraper detects the duplicate-only page and stops cleanly. - Scaling past single-query limits (
1,000+jobs): To harvest several thousand jobs in one run, pass multiple city or role URLs instartUrls(or run a broad blank/multi-term sweep withmaxRecords: 1000+). The actor iterates through every search sequentially and deduplicates across the entire dataset.
⚙️ How to use
- Open ZipRecruiter Scraper in the Apify Console.
- Pick your Market (
country) —ukoriefor European markets,usorcafor North America. - Enter a Search Keyword (e.g.,
"software engineer") and Location (e.g.,"London"), or paste custom URLs into Start URLs. - Choose whether to enable Scrape Full Description (
scrapeDescription) — leavefalsefor fast list-only discovery or settruefor full descriptions, exact dates, and geo coordinates. - Set Max Records (
maxRecords) (e.g.,100for a quick run or1000+ for a deep harvest) and click Start.
🔌 Integrations & workflows
- HubSpot, Salesforce & Pipedrive — automatically create or enrich company accounts when a target prospect posts new roles on ZipRecruiter.
- Clay, Apollo & Hunter — pipe scraped
companynames andcity/statelocations into contact-enrichment waterfalls to find hiring managers' verified emails. - Google Sheets & Looker Studio — schedule recurring runs and track live salary bands and open-role counts by city.
- Make, Zapier & n8n — trigger instant Slack or email alerts whenever a high-priority role matches your keyword and salary criteria.
- Snowflake, BigQuery & Postgres — ingest daily job snapshots via Apify Webhooks keyed on
jobId.
💡 Tips for best results
- 🌍 Match your proxy country to the market: In
proxyConfiguration, keepapifyProxyCountry: "GB"forcountry: "uk", set"IE"forcountry: "ie","US"forcountry: "us", and"CA"forcountry: "ca". Country-matched residential IPs ensure consistent local results. - ⚡ Use list-only mode for high-speed prospecting: When your primary goal is discovering which companies are hiring (
company,title,location,salaryRaw,descriptionSnippet), setscrapeDescription: falseto run ~5× faster. - 📅 Use
datePosted: "1"or"5"on scheduled runs: If you run the scraper daily or every few days, filtering to recent postings avoids re-scraping older listings and keeps compute usage minimal. - 🔀 Combine multiple
startUrlsfor 1,000+ harvests: Group 5–10 regional or role-specific search URLs into a single run withmaxRecords: 2000for a unified, deduplicated dataset.
❓ FAQ
How many jobs can I scrape in a single run?
You can extract hundreds to thousands of unique jobs per run. Set maxRecords to your desired cap (e.g. 1000) or 0 for unlimited, and leave maxPages: 0 so pagination continues automatically.
Why are some salaryMin / salaryMax values null?
Employers on ZipRecruiter choose whether to disclose compensation on a listing. In typical runs, ~40–50% of postings include an explicit salary range. Whenever pay is disclosed on the card, in the detail metadata, or inside the description text, the scraper extracts and normalizes it.
Why do I get 0 results if I switch markets without changing the proxy country?
ZipRecruiter routes traffic based on IP geography. Always pair country: "uk" with apifyProxyCountry: "GB", country: "ie" with "IE", country: "us" with "US", and country: "ca" with "CA".
What happens if a narrow search matches 0 jobs? The actor logs a clear status message and exits cleanly without throwing a run failure, keeping your scheduled pipelines and health monitors green.
Can I run this actor programmatically from Python or Node.js?
Yes — use the apify-client package in Python or JavaScript, or call the Apify REST API directly to start a run and download the dataset in JSON, CSV, or Excel.
API Quickstart (Python & Node.js)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/ziprecruiter-scraper").call(run_input={"country": "uk","keyword": "software engineer","location": "London","scrapeDescription": False,"maxRecords": 100,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["jobId"], job["title"], job["company"], job["location"], job["salaryRaw"])
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/ziprecruiter-scraper').call({country: 'uk',keyword: 'data analyst',location: 'London',scrapeDescription: true,maxRecords: 100,proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'], apifyProxyCountry: 'GB' },});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Extracted ${items.length} ZipRecruiter jobs`);
🔗 Related scrapers
- SEEK Scraper — Australia & NZ Jobs with Salary
- Xing Jobs Scraper — DACH Job Listings & Salaries
- Naukri Scraper — India Jobs, Salary & Company Ratings
- GulfTalent Jobs Scraper — Gulf Jobs, Salaries & Leads
- Arbeitsagentur Job Scraper — Germany Jobs, Salary & Contact
- RemoteOK Scraper — Remote Jobs, Skills & Salary
📋 Changelog
| Version | Date | Updates |
|---|---|---|
| v1.2 | 2026-11 | Unlocked 1,000+ job pagination: removed the 100-record clamp when users explicitly request maxRecords > 100 on default/multi-term runs, set maxPages default to 0 (unlimited, governed by maxRecords), and improved per-search scaling across multi-query runs. |
| v1.1 | 2026-11 | Added JWT data-track job ID extraction for UK affiliate-redirect cards, stripped literal escape sequences from descriptionHtml/descriptionText, and improved UK/IE/CA postcode & region normalization. |
| v1.0 | 2026-05 | Initial release supporting US, UK, Ireland, and Canada markets with salary normalization, geo coordinates, and full job-detail enrichment. |