ZipRecruiter Jobs Scraper
Pricing
from $5.00 / 1,000 ziprecruiter job record scrapeds
ZipRecruiter Jobs Scraper
Search public US ZipRecruiter listings by keyword, location, or a public search URL. Returns validated job records for talent intelligence and labor-market research.
Pricing
from $5.00 / 1,000 ziprecruiter job record scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
ZipRecruiter Jobs Scraper is an Apify Actor for searching public US ZipRecruiter listings by keyword, location, or a public ZipRecruiter search URL. It accepts a job search phrase and a place name, or a ZipRecruiter search link, and returns one dataset record per public job listing. Each record can include job title, company name, location, remote flag, employment type, description, salary text and parsed salary fields when publicly exposed, posting time, canonical job URL, application URL when exposed, source URL, and scrape time. The outcome is a validated job dataset for talent intelligence and labor-market research.
Best fit and connected workflows
This Actor fits workflows that start with a public job-market question and end with structured records ready for analysis, review, or downstream automation.
Common routing patterns:
- Recruitment research by role and location, such as a keyword search for a specific skill set in a city or Remote.
- Labor-market monitoring that compares job titles, compensation text, employment types, and posting recency.
- Hiring intelligence pipelines that enrich public job listings before feeding them into dashboards or internal review steps.
- Lead-generation-style workflows that use public job posting signals to identify active employers and roles.
Related Apify Actors:
- Use APEC Jobs Scraper - a good alternative when the research brief matches that job board, geography, or audience.
- Use Ashby Jobs Scraper - a good alternative when the research brief matches that job board, geography, or audience.
- Use Bayt Jobs Data Scraper for MENA Listings - a good alternative when the research brief matches that job board, geography, or audience.
Practical scenario
Maya is a talent researcher tracking software engineering demand in Austin, TX. She starts with the keyword senior data engineer, location Austin, TX, and a cap of 25 records. The dataset returns fields like title, companyName, salaryText, salaryMin, salaryMax, postedAt, and jobUrl. Maya uses those fields to compare active employers and compensation ranges, then sends the canonical jobUrl list into an internal review sheet for follow-up.
Input
The Actor accepts these input fields:
| Field | Type | Purpose |
|---|---|---|
keywords | string | Free-text job search terms, such as senior data engineer. Defaults to software engineer. |
location | string | Place name for the search, such as Austin, TX or Remote. Defaults to Remote. |
startUrls | array | Optional public ZipRecruiter search URLs. When provided, they override keyword-built search. |
maxResults | integer | Hard cap on persisted job records. Accepts 1 to 100. |
includeJobDetails | boolean | Visits selected public job pages to improve description, compensation, and employment-type coverage when available. Defaults to true. |
Focused JSON input example:
{"keywords": "senior data engineer","location": "Remote","startUrls": [{"url": "https://www.ziprecruiter.com/jobs-search?search=data+engineer&location=Remote"}],"maxResults": 25,"includeJobDetails": true}
Output
One dataset record represents one public ZipRecruiter job listing. The Actor writes validated records to the default dataset and also exposes machine-readable execution artifacts in the default key-value store.
| Field | Type | Purpose |
|---|---|---|
jobId | string | Stable identifier from the public listing or canonical public job URL. |
title | string | Public job title. |
companyName | string or null | Hiring organization when exposed. |
location | string or null | Public location text. |
isRemote | boolean or null | Remote indicator when the listing states it. |
employmentType | string or null | Public employment type such as FULL_TIME or Contract when exposed. |
description | string or null | Public job description or teaser normalized to plain text. |
salaryText | string or null | Salary text shown on the public listing. |
salaryMin | number or null | Parsed lower salary bound when safely available. |
salaryMax | number or null | Parsed upper salary bound when safely available. |
salaryCurrency | string or null | Currency code inferred from public salary text. |
salaryPeriod | string or null | Pay period inferred from public salary text. |
postedAt | string or null | ISO 8601 posting timestamp when publicly exposed. |
postedText | string or null | Human-readable recency text shown by ZipRecruiter. |
applyUrl | string or null | Public application or destination URL when exposed. |
jobUrl | string | Canonical public ZipRecruiter job URL. |
sourceUrl | string | Search or detail URL from which the record was collected. |
scrapedAt | string | ISO 8601 collection time. |
Illustrative output record:
{"jobId": "J3V4B26MF8XNC1W2TQP","title": "Senior Software Engineer","companyName": "Example Company","location": "Austin, TX","isRemote": true,"employmentType": "FULL_TIME","description": "Build reliable web services and developer tools.","salaryText": "$120,000 - $160,000 annually","salaryMin": 120000,"salaryMax": 160000,"salaryCurrency": "USD","salaryPeriod": "year","postedAt": "2026-07-18T00:00:00.000Z","postedText": "Posted 2 days ago","applyUrl": "https://www.ziprecruiter.com/c/Example/Job/Senior-Software-Engineer/-in-Austin,TX","jobUrl": "https://www.ziprecruiter.com/c/Example/Job/Senior-Software-Engineer/-in-Austin,TX","sourceUrl": "https://www.ziprecruiter.com/jobs-search?search=software+engineer&location=Remote","scrapedAt": "2026-07-19T14:30:00.000Z"}
How it works
This Actor uses a residential Camoufox browser session to search public US ZipRecruiter listings. It supports two routing modes: keyword-plus-location search, or direct collection from public ZipRecruiter search URLs. When includeJobDetails is enabled, it visits selected public job pages to improve the available description, compensation, and employment-type fields. It persists validated job records to the dataset and records execution artifacts in key-value storage for automation-friendly readback.
Pricing
ZipRecruiter Jobs Scraper uses Pay per event plus Apify platform usage. The billed event types are:
- Actor start
- ZipRecruiter job record scraped
The job-scraped event is charged only when one complete, validated job record is persisted to the dataset. The start event is charged once per run and is scaled by allocated memory. For example, a run that persists twenty job records charges twenty job-scraped events plus one start event. Apify platform usage is billed separately, and the live Pricing tab is the current source of truth for the complete charge configuration.
Use with AI agents (MCP)
This Actor is usable through Apify MCP as a tool for collecting structured public ZipRecruiter job data. The exact Actor identity is khadinakbar/ziprecruiter-jobs-scraper.
Tool description:
- Search public US ZipRecruiter listings by keyword, location, or public search URL.
- Return validated dataset records with provenance fields such as
sourceUrlandscrapedAt. - Support bounded collection with
maxResultsand optional job-page enrichment viaincludeJobDetails.
Collect up to 25 public ZipRecruiter listings for "data engineer" in Remote using
khadinakbar/ziprecruiter-jobs-scraper. Return the dataset rows and summarize title, company, location, salary text, salary bounds when present, posting time, and canonical job URL. PreservesourceUrlandscrapedAtfor each record.
Output interpretation:
- Use
jobUrlas the canonical public listing route. - Use
sourceUrlto trace the exact search or detail page that produced each record. - Use
scrapedAtto understand collection time. - Use
salaryTextfor the public salary display, andsalaryMin/salaryMaxwhen the text can be parsed safely. - Use
postedAtorpostedTextfor recency analysis.
Scope and pagination:
maxResultsis a hard cap on persisted job records.startUrlscan target public ZipRecruiter search pages directly.- The Actor returns one record per persisted job listing, so downstream tools can process the dataset row by row.
- Pricing is event-based, so larger caps generally mean more job-scraped events. Check the live Pricing tab before running a large collection.
API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/ziprecruiter-jobs-scraper').call({keywords: 'product manager',location: 'New York, NY',maxResults: 20,includeJobDetails: true,});const datasetId = run.defaultDatasetId;const { items } = await client.dataset(datasetId).listItems();console.log(items);
Best results and outcome guidance
- Use a clear role phrase, such as a job title or skill cluster, for cleaner search results.
- Pair the keyword with a city/state or
Remoteto keep the search focused. - Start with a smaller
maxResultsvalue when validating a new query shape. - Turn on
includeJobDetailswhen you want richer public fields like description or salary text. - Use a public ZipRecruiter search URL in
startUrlswhen you already have a search page you want to reproduce.
Design note
I found that the dataset contract marks jobId, title, jobUrl, sourceUrl, and scrapedAt as required, which makes provenance and canonical linking part of every record.
FAQ
When should I use keywords and location instead of startUrls?
Use keywords and location when you want a fresh search built from a role phrase and place name. Use startUrls when you already have a public ZipRecruiter search page and want the Actor to collect from that exact route.
What does one dataset record represent?
One dataset record represents one public ZipRecruiter job listing. It is a validated row with a canonical job URL and source provenance.
Which fields are most useful for labor-market analysis?
title, companyName, location, isRemote, employmentType, salaryText, salaryMin, salaryMax, postedAt, and jobUrl are the most common analysis fields.
Can this Actor be used in an AI agent workflow?
Yes. It is usable through Apify MCP and returns structured public job data that agents can read back from the dataset.
How do I estimate cost before a run?
Set maxResults, then check the live Pricing tab for the current event configuration. Event charges are tied to the run start and each persisted job record.
Responsible use
Use this Actor for lawful collection and analysis of publicly available job-listing data, in line with applicable law, data-protection obligations, and ZipRecruiter's terms.