# ZipRecruiter Jobs Scraper (`sian.agency/ziprecruiter-jobs-scraper`) Actor

Scrape ZipRecruiter job postings into clean structured data — search by keyword + location or paste a filtered search URL. Fast overview (titles + links) or full detail: company, location, salary band, employment type, posted/expiry dates, category, industry & description. Clean JSON/CSV, no code.

- **URL**: https://apify.com/sian.agency/ziprecruiter-jobs-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Jobs, Business, Lead generation
- **Stats:** 31 total users, 7 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 extracted overview jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ZipRecruiter Jobs Scraper — Salary, Company & Search Data 💼

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store-Jobs Search API](https://img.shields.io/badge/Store-Jobs%20Search%20API-1AE392)](https://apify.com/sian.agency/active-job-postings-scraper?fpr=sian) [![Store-Zillow Agent Scraper](https://img.shields.io/badge/Store-Zillow%20Agent%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-agent-scraper?fpr=sian) [![Store-Idealista Scraper](https://img.shields.io/badge/Store-Idealista%20Scraper-E60023)](https://apify.com/sian.agency/fastest-idealista-scarper?fpr=sian)

#### 🎉 Turn any ZipRecruiter search into a clean, structured jobs dataset — salaries, companies & full descriptions included

##### Built for recruiters, talent researchers, job aggregators, and HR analytics teams

***

### 📋 Overview

**Need ZipRecruiter job data without copy-pasting hundreds of listings?** This actor turns any keyword + location — or a pre-filtered search URL — into a clean dataset of job postings you can export to JSON, CSV, or Excel in minutes.

**Why professionals choose us:**

- ✅ **Real salary data**: Min/max salary, currency, and pay period straight from each posting
- ⚡ **Two speeds**: Fast *overview* (titles + links) or rich *detail* (company, location, salary, dates, category, description)
- 🎯 **Filter like a pro**: Carry radius, date-posted, salary floor, and employment-type filters through every page
- 💰 **Pay only for what you extract**: Per-result pricing with a free tier — no monthly subscription
- 💎 **Clean, typed fields**: 20+ structured fields per job, de-duplicated across pages
- ✨ **No code, no account**: Paste a search, click Start, download your dataset

***

### ✨ Features

- 🔍 **Keyword + location search**: `software engineer` in `Austin, TX`, or any role nationwide
- 🚀 **Paste-a-URL mode**: Drop in a filtered ZipRecruiter search URL and every filter is preserved
- 💵 **Salary intelligence**: Salary min/max, unit (hourly/yearly), and currency for benchmarking
- 🏢 **Company & location**: Hiring organization, city, state, and country for every job
- 📅 **Freshness signals**: Posted date and expiry date to find the newest openings
- 🗂️ **Classification**: Employment type, occupational category, and industry
- 📝 **Full descriptions**: Complete job description text in detail mode
- 🔁 **Auto de-duplication**: One clean row per job across all search pages
- 📄 **Run report**: A built-in HTML summary of every run

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Enter your search

Type a **job title** (e.g. `registered nurse`) and an optional **location** (`Austin, TX` or a ZIP). Or paste one or more filtered ZipRecruiter search URLs under *Advanced*.

#### Step 2: Pick a mode

Choose **Overview** for a fast list of titles + links, or **Detail** for the full record (salary, company, description, dates).

#### Step 3: Run & download

Click **Start**. When the run finishes, export your jobs as JSON, CSV, or Excel — or pull them via the API.

***

### 📥 Input

| Field | Description |
|---|---|
| **Search keywords** | Job title / keywords to search for |
| **Location** | City + state (`Austin, TX`) or a ZIP code |
| **Scrape mode** | `overview` (titles + links) or `detail` (full record) |
| **Max results** | How many jobs to return (FREE: 25, PAID: unlimited) |
| **Search URLs** | Paste filtered ZipRecruiter search URLs (advanced) |
| **Radius / Posted within / Min salary / Employment type** | Optional filters |

***

### 📤 Output

Each job is one structured row:

| Field | Description |
|---|---|
| `title` | Job title |
| `company` | Hiring company |
| `location` / `city` / `region` / `country` | Where the job is |
| `salary_min` / `salary_max` / `salary_unit` / `currency` | Compensation band |
| `employment_type` | Full-time, part-time, contract, … |
| `occupational_category` / `industry` | Role classification |
| `posted_at` / `valid_through` | Posted & expiry dates |
| `direct_apply` / `experience` | Apply flag & experience requirement |
| `description` | Full job description (detail mode) |
| `url` / `id` | Direct link & stable job id |

```json
{
  "id": "3b0ec9847eac7786",
  "title": "Software Test Engineer - AI Trainer",
  "company": "DataAnnotation",
  "location": "Austin, TX",
  "city": "Austin",
  "region": "TX",
  "country": "US",
  "salary_min": 40,
  "salary_max": 100,
  "salary_unit": "HOUR",
  "currency": "USD",
  "employment_type": "FULL_TIME",
  "posted_at": "2026-06-20",
  "url": "https://www.ziprecruiter.com/c/DataAnnotation/Job/...?jid=3b0ec9847eac7786"
}
```

***

### 💡 Use Cases

- **Salary benchmarking** — compare pay bands across roles, cities, and industries
- **Recruiting & sourcing** — build target lists of live openings by role and geography
- **Job aggregators & boards** — feed fresh postings into your own product
- **Labor-market research** — track hiring trends, employment types, and demand
- **Lead generation** — find companies actively hiring in your niche

***

### 💰 Pricing

This actor uses **pay-per-event** pricing — you only pay for the jobs you actually extract, with a **free tier** to try it out. No monthly subscription. See the live pricing on the actor's Apify page.

***

### ❓ FAQ

**Q: Do I need a ZipRecruiter account or API key?**
A: No. Just enter a search and click Start.

**Q: Can I use my own filtered search?**
A: Yes — run the search on the site, then paste the resulting URL into *Search URLs*. Radius, date, salary, and employment-type filters are carried through.

**Q: What's the difference between Overview and Detail?**
A: Overview is fast and cheap (title + link per job). Detail fetches each job's full record — company, salary, dates, category, and description.

**Q: Is this legal?**
A: It only returns publicly available job postings. See the legal note below.

***

### 🐛 Troubleshooting

**No jobs returned**

- Broaden the keyword or location, or remove restrictive filters.
- Confirm the location format (`City, ST` or a ZIP).

**Fewer results than expected**

- FREE runs are capped at 25 jobs. Upgrade for unlimited.
- Some searches simply have few live postings.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract private user data. They only return job postings that employers have chosen to publish publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, your results could contain personal data (for example, a hiring-manager name or email an employer published in a posting). Personal data is protected by the **GDPR** in the European Union and by other regulations worldwide. You should not process personal data unless you have a legitimate reason to do so. If you're unsure, consult your lawyers. You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

> **Note on data sources:** This is an independent tool and is **not affiliated with, endorsed by, or sponsored by ZipRecruiter**. "ZipRecruiter" and all related names and trademarks belong to their respective owners; their use here is descriptive only. The actor returns only publicly available job-posting data.

***

### ✨ More by SIÁN Agency

- [Jobs Search API — Indeed, LinkedIn & Glassdoor](https://apify.com/sian.agency/active-job-postings-scraper?fpr=sian)
- [Zillow Agent Scraper — Licenses & Contacts](https://apify.com/sian.agency/zillow-agent-scraper?fpr=sian)
- [Smart Idealista Scraper — Property Data](https://apify.com/sian.agency/fastest-idealista-scarper?fpr=sian)
- [Browse all SIÁN actors →](https://apify.com/sian.agency?fpr=sian)

⭐ **Love this actor?** Leave a [5-star review](https://apify.com/sian.agency/ziprecruiter-jobs-scraper/reviews) — it helps us build more features for you.

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/ziprecruiter-jobs-scraper/changelog.md

# Actor input Schema

## `search` (type: `string`):

🔍 **JOB TITLE / KEYWORDS:** What you're hiring for or researching, e.g. `software engineer`, `registered nurse`, `truck driver`.

💡 **TIP:** Combine with a **Location** below for a targeted local search. Leave Location empty for a nationwide search.

Use this OR paste full **Search URLs** below — at least one is required.

## `location` (type: `string`):

📍 **LOCATION:** City + state (`Austin, TX`) or a ZIP code (`78701`). Leave empty for a nationwide search.

## `scrapeMode` (type: `string`):

⚙️ **OVERVIEW vs DETAIL:**

- **Overview** — fast & cheap. Job title + direct link for every result (≈20 per search page). Best for building a list of openings.
- **Detail** — full record per job: company, location, salary band, employment type, posted/expiry dates, category, industry & full description.

💡 Start with **Overview** to scope a search, then run **Detail** on the slice you want.

## `maxResults` (type: `integer`):

🔢 **HOW MANY JOBS TO RETURN.**

- **FREE users:** up to 25 jobs per run
- **PAID users:** unlimited

Results are de-duplicated across search pages.

## `startUrls` (type: `array`):

🚀 **PASTE FILTERED SEARCH URLs:** Run a search on ziprecruiter.com with the exact filters you want (radius, date posted, salary floor, employment type, remote), then paste the resulting `/jobs-search?...` URL(s) here. Every allowlisted filter is carried through pagination automatically.

💡 **TIP:** Use this for precise filtering the simple keyword/location fields don't cover. You can mix multiple URLs.

📋 **BULK EDIT:** Click "Bulk edit" to paste URLs (one per line).

## `radius` (type: `integer`):

📏 Search radius in miles around the **Location** (ZipRecruiter default is 25).

## `days` (type: `integer`):

📅 Only jobs posted within the last N days (e.g. `1`, `5`, `7`).

## `refine_by_salary` (type: `integer`):

💰 Minimum annual salary floor (e.g. `60000`). Only jobs at or above this are returned.

## `refine_by_employment` (type: `string`):

🧰 Filter by employment type.

## Actor input object example

```json
{
  "search": "software engineer",
  "location": "Austin, TX",
  "scrapeMode": "overview",
  "maxResults": 20,
  "refine_by_employment": ""
}
```

# Actor output Schema

## `results` (type: `string`):

All extracted ZipRecruiter job postings.

## `scrapingSummary` (type: `string`):

HTML run report with job counts, fetched pages, and a sample of results.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "search": "software engineer",
    "location": "Austin, TX",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/ziprecruiter-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "search": "software engineer",
    "location": "Austin, TX",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/ziprecruiter-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "search": "software engineer",
  "location": "Austin, TX",
  "maxResults": 20
}' |
apify call sian.agency/ziprecruiter-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/ziprecruiter-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Dj4kzc5K5Mrh7AvRe/builds/4wFKxqb2wPd3HQHKn/openapi.json
