August 14, 2026 · 9 min read
ZipRecruiter Jobs Scraper Pro: 3 Practical Use Cases
Direct answer
ZipRecruiter Jobs Scraper Pro automatically extracts structured job postings and full job description text directly from ZipRecruiter.com. The actor retrieves detailed fields including job titles, hiring company names, city and state locations, parsed salary ranges, remote or hybrid flags, apply URLs, and complete job descriptions across paginated search results. Because ZipRecruiter uses aggressive Cloudflare anti-bot checks to block datacenter traffic, the scraper relies on pre-configured US residential proxy settings. Operators can run the scraper by passing search keywords with location parameters or by supplying direct search URLs. The extracted output provides clean, reliable data for competitive hiring research, salary benchmarking, and remote labor trend analysis.
Aligning data extraction with operational goals
Before executing ZipRecruiter extractions, technical teams must establish clear operational parameters that match specific analytical objectives. A data collection pipeline requires structured filtering strategies, input URL validation, and explicit output rules to avoid processing irrelevant listings. For instance, teams analyzing competitive hiring velocity need to isolate direct company profile pages or exact job queries, whereas regional compensation analysts must enforce strict geographic and employment type boundaries.
Setting systematic data verification thresholds prevents pipeline noise and manages compute consumption. System operators should define clear acceptance rules for missing fields, such as handling records where descriptionFetchFailed is marked true or where salary data is omitted by the source publisher. By aligning input filters like daysPosted, radiusMiles, and remoteOnly with downstream dashboard requirements before launching large extraction tasks, engineering teams guarantee that the dataset directly supports actionable business decisions.
Practical use cases
Use case 1: Talent intelligence playbook
Question to answer: How rapidly are target competitor organizations expanding their headcount across specific technical and operational departments?
Outcome: Monitor hiring velocity and recruiting momentum for target competitor companies.
Configure: Pass target queries using startUrls with pre-filtered search URLs (for example, https://www.ziprecruiter.com/jobs-search?search=software+engineer&location=New+York%2C+NY). Alternatively, pass the search string paired with target location inputs. Keep debugDumpHtml disabled during standard runs, and set maxItems to a small number during initial setup tests.
Working method: Establish criteria to filter incoming postings by company name and scraping window. Verify that paginated results do not produce duplicate entries across sequential runs by relying on the built-in deduplication by card ID (id). Classify records into verified target postings, borderline entries requiring review, and non-relevant market noise. Track listing timestamps via the scrapedAt ISO 8601 UTC metadata field.
Deliverable: A structured competitive hiring report containing job card IDs (id), short job identifiers (jid), job titles, direct posting URLs (url), scrapedAt UTC timestamps, and full job description text bodies (description).
Stop condition: Halt execution if target company names fail to parse correctly, if broad keyword rules return unrelated industry postings, or if geographic filters fail to reflect selected location inputs.
Use case 2: Compensation research playbook
Question to answer: What are the benchmark compensation baselines and salary distribution ranges for specific roles across target geographic markets?
Outcome: Aggregate and benchmark salary distributions across specific roles, regions, and experience levels.
Configure: Define search with specific role titles (such as 'nurse' or 'data scientist') and supply city/state values for location. Adjust optional parameters including radiusMiles and jobType (such as full_time or contract) to calibrate geographic and employment boundaries.
Working method: Process structured output parameters such as salaryMin, salaryMax, and salaryPeriod. Group listings into standardized role categories and location tiers. Retain raw salary text strings alongside extracted numerical values to verify parser accuracy against unusual compensation packages. Note that formatted strings like $80K - $180K/yr are converted into absolute values such as salaryMin=80000 and salaryMax=180000.
Deliverable: A comparative salary matrix displaying minimum, maximum, and median compensation figures organized by role category, state abbreviation, and target market.
Stop condition: Pause processing if a high proportion of returned listings lack salary values or if pay period structures cannot be normalized into standard annual or hourly baselines.
Use case 3: Remote-work trends playbook
Question to answer: What proportion of job openings in selected commercial sectors offer fully remote or hybrid work arrangements?
Outcome: Track remote and hybrid employment opportunities across selected commercial sectors.
Configure: Set remoteOnly to true while providing search queries, or input direct ZipRecruiter search URLs with remote filters applied. Use daysPosted to restrict output to recent listings within a set window such as 7 or 14 days.
Working method: Monitor the boolean indicators isRemote and isHybrid generated by the actor when location text mentions remote or hybrid terms. Compare incoming listings against previous scrape batches using unique identifiers (id or jid) to identify newly opened remote positions, updated listing copy, or expired listings.
Deliverable: A regular trend digest tracking remote position volume, key skill requirements extracted from full job descriptions, and industry-specific remote work distribution.
Stop condition: Stop execution if location text strings yield conflicting remote indicators or if search URLs fail to preserve remote filtering controls.
Step-by-step extraction workflow
- Select search inputs: Determine whether to use direct ZipRecruiter search URLs via
startUrlsor keyword and location combinations usingsearchandlocation. Direct search URLs preserve pre-applied filters from the web interface. - Configure runtime parameters: Define
maxItemsfor your test batch (such as settingmaxItemsto 3 for initial validation) and ensureproxyConfigurationuses US Residential proxies to navigate Cloudflare protection. - Run initial test batch: Execute a small collection run and inspect the returned dataset to verify that target fields are properly filled and deduplicated.
- Audit output data quality: Confirm that key fields like
title,company,location,salaryMin, anddescriptioncontain expected values. Check fordescriptionFetchFailedif detail page fetches encounter anti-bot challenges. - Export clean datasets: Route structured output into analytical databases or dashboards. Utilize input attribution tracking via
inputUrlto identify which search query generated each listing.
Input settings and runtime parameters
The actor input schema provides specific controls to manage search behavior and extraction scope:
startUrls(array): ZipRecruiter search URLs (for example,https://www.ziprecruiter.com/jobs-search?search=software+engineer&location=New+York%2C+NY). Preserves pre-applied filters from the web interface.search(string): Alternative shortcut keyword (for example, 'nurse' or 'data scientist') combined with location to generate search queries automatically.location(string): City and state text combined with search keyword. Ignored ifstartUrlsis provided.jobType(string): Employment type filter. Options includeany,full_time,part_time,contract,internship,temporary. Default:any. Only applied whensearchis used.daysPosted(integer): Restricts results to jobs posted within the last N days (0 equals any timeframe, maximum 30). Default:0. Only applied whensearchis used.radiusMiles(integer): Geographic search radius around the target location in miles (0 uses ZipRecruiter default distance, maximum 100). Default:0. Only applied whensearchis used.remoteOnly(boolean): Restricts output to remote-eligible positions when using keyword search. Default:false. Only applied whensearchis used.maxItems(integer): Maximum number of job postings to return (range 1 to 500). Default:50.debugDumpHtml(boolean): Support and diagnostic aid. When a job detail page renders without a description, dumps the first failing page full HTML to the dataset as adebug_detail_htmlrecord for offline analysis. Default:false.proxyConfiguration(object): ZipRecruiter blocks datacenter IPs. The proxy settings are hardcoded to RESIDENTIAL US. Do not disable.
Data schema and field management
Every dataset record contains structured attributes parsed from search card views and detail pages:
- Identity fields:
id(job card token),jid(short URL identifier),url(full posting URL),title(job title), andinputUrl(original query URL that produced the listing). - Organization details:
company(hiring organization name),companyUrl(company profile link), andcompanyLogo(logo image link). - Geographic fields:
location(full location text),city(parsed city name),state(2-letter state abbreviation), alongside boolean flagsisRemoteandisHybrid. - Compensation attributes:
salary(formatted text string like$80K - $180K/yr),salaryMin(numerical minimum USD),salaryMax(numerical maximum USD), andsalaryPeriod(year,month,week, orhour). - Job text body:
description(full job description text extracted from individual detail pages). If detail page fetches fail after retries,descriptionFetchFailedis populated astrueinstead of writing an empty description. - Scrape metadata:
scrapedAt(ISO 8601 UTC timestamp). - Failure sentinel handling: If ZipRecruiter blocks all sessions during a run, a sentinel record with
typeset tojob_ziprecruiter_blockedis emitted so the process exits cleanly with code 0.
Frequently asked questions
Why does ZipRecruiter scraper require residential proxies?
ZipRecruiter uses Cloudflare security systems that strictly block datacenter IP addresses. US Residential proxies allow the actor to load search pages and individual job detail links reliably without being blocked.
How does the scraper collect full job descriptions?
The Pro actor visits each individual job detail page after gathering search card listings, automatically extracting the full job description text into the description output field.
How are duplicate listings handled during extraction?
ZipRecruiter renders each job posting twice on search result pages (in the list pane and detail pane). The actor automatically deduplicates listings by card ID (id), ensuring each posting appears only once in the dataset.
What happens when salary details are not listed on a posting?
If a job posting does not disclose compensation on ZipRecruiter, the actor omits salary, salaryMin, salaryMax, and salaryPeriod fields from the output record rather than inserting zero or null values.
How can I troubleshoot missing job descriptions?
If detail pages fail to return text descriptions due to blocking or missing content, enable debugDumpHtml in the input settings. The scraper will dump the raw failing page HTML as a debug_detail_html record to help diagnose site layout changes or anti-bot issues.
How are salary ranges normalized by the parser?
Salary text such as $80K - $180K/yr is converted into numeric USD values (salaryMin=80000, salaryMax=180000) and the salaryPeriod is set to year. If only a single number appears, both min and max are set to that value.
Resources
● Featured actors
ZipRecruiter Jobs Scraper Pro
Extract job postings from ZipRecruiter.com with FULL job descriptions. Returns title, company, location, salary, skills, and the full job description body per listing. Walks paginated search results.
Run on Apify ↗