# Zillow ZIP Code Bulk Search Scraper (`themineworks/zillow-zip-bulk-search`) Actor

Search Zillow across dozens of zip codes in one run. Extract price, beds, baths, sqft, Zestimate, days on market & listing URL for sale, rent, or recently sold. No login, no API key. Works in Claude, ChatGPT & any MCP-compatible AI agent.

- **URL**: https://apify.com/themineworks/zillow-zip-bulk-search.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Real estate, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 property listeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Zillow ZIP Code Bulk Search Scraper

> 🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

> 💰 From $0.60 / 1,000 results.

> ⚡ Up to 50 ZIP codes in one run, for sale, for rent or recently sold, instead of running the same search one ZIP at a time.
> 💸 You are only charged for a listing actually delivered. A ZIP code that returns nothing costs nothing on that line.

Search Zillow across many zip codes in a single run, for sale, for rent, or recently sold. Same live search Zillow's own site uses, no login, no API key.

This is one of three actors extending The Mine Works' four established Zillow actors (search, recently sold, rentals, property details), which already feed the Real Estate MCP server. It covers the case those four leave open: the same search across many ZIP codes at once.

### Input

- **zipCodes** (required), a list of US zip codes, e.g. `["90210", "10001", "78701"]`. Up to 50 per run.
- **maxItemsPerZip**, cap per zip code (default 40).
- **listingType**, `for_sale`, `for_rent`, or `recently_sold`.
- Optional filters: minPrice, maxPrice, minBeds, minBaths, propertyType, daysOnZillow.

### Output

One row per listing, tagged with `sourceZip` so you can tell which zip code it came from: address, price, beds, baths, sqft, Zestimate, days on market, coordinates, listing URL.

### Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Property listed | $0.001 | A property record from a searched ZIP lands in your dataset |

The per-listing charge only fires on a delivered record, so a ZIP code that resolves to zero results adds nothing to that line. Tiered by Apify plan: $1.00 per 1,000 on FREE, falling to $0.60 per 1,000 on GOLD and above.

### Run it on a schedule

A standing market scan across a fixed list of ZIP codes. Daily or weekly,
depending on how fast the market moves. Diff each run against the previous
dataset to catch new listings and price changes across the whole ZIP list at
once.

1. Run it once with the input you want repeated, then click **Save as a task**
   so that exact input is attached to every future run.
2. In the Apify Console go to **Schedules** and create a new one, either a
   preset (hourly / daily / weekly) or a cron expression.
3. Save. It then runs unattended, billed the same pay-per-result way. Nothing
   is charged for the schedule existing.

### FAQ

**Does it charge for ZIP codes with no listings?**
No. The per-listing charge only fires when a property record is actually delivered.

**Can I mix sale, rent and sold in one run?**
No. `listingType` is a single choice of `for_sale`, `for_rent` or `recently_sold`. Run it again with a different value for another type.

**How many ZIP codes per run?**
Up to 50, with `maxItemsPerZip` capping each one (default 40, maximum 500).

**Do I need a Zillow login or API key?**
No.

**Which filters apply to which searches?**
`propertyType` and `daysOnZillow` apply to for-sale searches only. Price, beds and baths apply across all three.

### Use from Claude, ChatGPT & any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

```
https://mcp.apify.com/?tools=themineworks/zillow-zip-bulk-search
```

Claude Desktop / Cursor config (token auth):

```json
{
  "mcpServers": {
    "zillow-zip-bulk-search": {
      "url": "https://mcp.apify.com/?tools=themineworks/zillow-zip-bulk-search",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Ask your agent: *"Find every property for sale under $450k across ZIP codes 78701, 78702 and 78703."*

### Related Zillow actors

- [zillow-property-details](https://apify.com/themineworks/zillow-property-details), full detail page for any listing this returns (price/tax history, schools, HOA, photos, agent contact).
- [zillow-photos](https://apify.com/themineworks/zillow-photos), every photo from a listing at full resolution.
- [zillow-agent-leads](https://apify.com/themineworks/zillow-agent-leads), find the agents actively listing in a market.
- [zillow-rental-listings](https://apify.com/themineworks/zillow-rental-listings), dedicated rentals search with rental-specific fields.
- [zillow-recently-sold](https://apify.com/themineworks/zillow-recently-sold), dedicated sold-comps search, up to 730 days back.

For multi-source real estate research over one connection, see the [Real Estate MCP server](https://apify.com/themineworks/real-estate-mcp), which bundles Zillow, Redfin, Realtor and Airbnb tools behind a single endpoint.

Keywords: Zillow ZIP code search, bulk property search, Zillow bulk scraper, multi-ZIP real estate data, Zillow sale listings, Zillow rental listings, Zillow recently sold, no login Zillow scraper

# Actor input Schema

## `zipCodes` (type: `array`):

US zip codes to search, one run for all of them (up to 50), e.g. "90210", "10001", "78701". Each result costs after the free tier.

## `maxItemsPerZip` (type: `integer`):

Maximum listings to return for EACH zip code.

## `listingType` (type: `string`):

Which Zillow listings to search.

## `minPrice` (type: `integer`):

Minimum listing price in USD. Leave blank for no minimum.

## `maxPrice` (type: `integer`):

Maximum listing price in USD. Leave blank for no maximum.

## `minBeds` (type: `integer`):

Minimum number of bedrooms a property must have to be included, e.g. 3.

## `minBaths` (type: `integer`):

Minimum number of bathrooms a property must have to be included, e.g. 2.

## `propertyType` (type: `string`):

Filter by property type, e.g. SINGLE\_FAMILY, CONDO, TOWNHOUSE, MULTI\_FAMILY, LAND, or OTHER. Leave blank for all. Only applies to for-sale searches.

## `daysOnZillow` (type: `integer`):

For-sale searches only: only return listings posted within the last N days (1, 7, 14, 30, 90, 180, 365).

## Actor input object example

```json
{
  "zipCodes": [
    "90210",
    "10001",
    "78701"
  ],
  "maxItemsPerZip": 40,
  "listingType": "for_sale",
  "propertyType": "SINGLE_FAMILY"
}
```

# Actor output Schema

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

No description

# 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 = {
    "zipCodes": [
        "90210",
        "10001",
        "78701"
    ],
    "maxItemsPerZip": 40,
    "propertyType": "SINGLE_FAMILY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/zillow-zip-bulk-search").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 = {
    "zipCodes": [
        "90210",
        "10001",
        "78701",
    ],
    "maxItemsPerZip": 40,
    "propertyType": "SINGLE_FAMILY",
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/zillow-zip-bulk-search").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 '{
  "zipCodes": [
    "90210",
    "10001",
    "78701"
  ],
  "maxItemsPerZip": 40,
  "propertyType": "SINGLE_FAMILY"
}' |
apify call themineworks/zillow-zip-bulk-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/zillow-zip-bulk-search"
        }
    }
}

```

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/nnsaGNUoRNmjUbLVO/builds/4HszSM0v9SwIpvf9U/openapi.json
