ZipRecruiter Jobs Scraper avatar

ZipRecruiter Jobs Scraper

Pricing

from $5.00 / 1,000 ziprecruiter job record scrapeds

Go to Apify Store
ZipRecruiter Jobs Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

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:

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:

FieldTypePurpose
keywordsstringFree-text job search terms, such as senior data engineer. Defaults to software engineer.
locationstringPlace name for the search, such as Austin, TX or Remote. Defaults to Remote.
startUrlsarrayOptional public ZipRecruiter search URLs. When provided, they override keyword-built search.
maxResultsintegerHard cap on persisted job records. Accepts 1 to 100.
includeJobDetailsbooleanVisits 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.

FieldTypePurpose
jobIdstringStable identifier from the public listing or canonical public job URL.
titlestringPublic job title.
companyNamestring or nullHiring organization when exposed.
locationstring or nullPublic location text.
isRemoteboolean or nullRemote indicator when the listing states it.
employmentTypestring or nullPublic employment type such as FULL_TIME or Contract when exposed.
descriptionstring or nullPublic job description or teaser normalized to plain text.
salaryTextstring or nullSalary text shown on the public listing.
salaryMinnumber or nullParsed lower salary bound when safely available.
salaryMaxnumber or nullParsed upper salary bound when safely available.
salaryCurrencystring or nullCurrency code inferred from public salary text.
salaryPeriodstring or nullPay period inferred from public salary text.
postedAtstring or nullISO 8601 posting timestamp when publicly exposed.
postedTextstring or nullHuman-readable recency text shown by ZipRecruiter.
applyUrlstring or nullPublic application or destination URL when exposed.
jobUrlstringCanonical public ZipRecruiter job URL.
sourceUrlstringSearch or detail URL from which the record was collected.
scrapedAtstringISO 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 sourceUrl and scrapedAt.
  • Support bounded collection with maxResults and optional job-page enrichment via includeJobDetails.

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. Preserve sourceUrl and scrapedAt for each record.

Output interpretation:

  • Use jobUrl as the canonical public listing route.
  • Use sourceUrl to trace the exact search or detail page that produced each record.
  • Use scrapedAt to understand collection time.
  • Use salaryText for the public salary display, and salaryMin / salaryMax when the text can be parsed safely.
  • Use postedAt or postedText for recency analysis.

Scope and pagination:

  • maxResults is a hard cap on persisted job records.
  • startUrls can 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 Remote to keep the search focused.
  • Start with a smaller maxResults value when validating a new query shape.
  • Turn on includeJobDetails when you want richer public fields like description or salary text.
  • Use a public ZipRecruiter search URL in startUrls when 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.