# Zillow Listings Scraper — 24 Fields, Zestimate, No API Key (`themineworks/zillow-search-scraper`) Actor

Scrape Zillow for-sale listings by city, zip code, or neighborhood. Extract price, beds, baths, sqft, Zestimate, days on market, coordinates & listing URL. API alternative with no login, no API key. Filter by price range, beds, baths, property type & days listed.

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

## Pricing

from $0.60 / 1,000 zillow properties

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/platform/actors/running/actors-in-store#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 Search Scraper: Listings & Zestimate · $1/1k

> **Part of the Real Estate MCP.** This actor's data is also available to AI agents through our [Real Estate MCP server](https://apify.com/themineworks/real-estate-mcp) — eight listing, sales and rental-market tools behind one endpoint. No result, no charge.

> ⚡ Part of a 69-scraper suite trusted by 450+ developers across 8,000+ runs · >99% run success · no login, no cookies, no ban risk.

> 💸 You're only charged for delivered results. Empty searches, failed pages and duplicate listings are never billed.

### Overview

Zillow Search Scraper turns any Zillow for-sale search into structured JSON. Give it a city, ZIP, neighborhood, or address (`Austin, TX`, `78701`, `Brooklyn, NY`), add optional price, beds, baths, property-type and days-on-market filters, and get back price, address, beds, baths, sqft, Zestimate, rent Zestimate, coordinates, and listing URL for every matching property. No login, no API key.

It's a fast, cheap alternative to buying Zillow data through a marketplace: pay per property returned, filter server-side so you don't waste budget on properties you don't need.

✅ No login required | ✅ No API key | ✅ Pay only for results | ✅ MCP-ready for AI agents

Reliability: blocked, empty, or failed pages are never charged. You only pay for properties actually delivered to your dataset.

### Features

Location search. City, ZIP, neighborhood, or address supported as one input string.
Server-side filters. Price range, min beds, min baths, property type, days on market.
Zestimate included. Zillow's estimated value and estimated monthly rent per listing.
Coordinates. Latitude and longitude on every property for map plotting.
Deep pagination. Follows Zillow's paged result set within your `maxItems` budget.

### How it works

The actor takes your location string, resolves it against Zillow's search endpoint, applies your filters (price, beds, baths, property type, days on Zillow), and fetches paginated result pages until it hits your `maxItems` budget or Zillow runs out of listings. Each property is flattened to a single row with the fields listed below and streamed to the dataset as it's parsed.

Zestimate values are pulled directly from Zillow's own estimate model, so the numbers match what a buyer sees on the listing page. Rent Zestimate is included as a separate field, which is useful for investor use cases.

### 🧾 Input configuration

```json
{
  "location": "Austin, TX",
  "maxItems": 200,
  "minPrice": 500000,
  "maxPrice": 1500000,
  "minBeds": 3,
  "minBaths": 2,
  "propertyType": "SINGLE_FAMILY",
  "daysOnZillow": 30
}
```

### 📤 Output format

```json
{
  "zpid": "29444771",
  "address": "1234 Rio Grande St, Austin, TX 78701",
  "city": "Austin",
  "state": "TX",
  "zipCode": "78701",
  "price": 875000,
  "priceLabel": "$875K",
  "beds": 3,
  "baths": 2,
  "sqft": 1720,
  "lotSizeSqft": 4356,
  "propertyType": "SINGLE_FAMILY",
  "statusType": "FOR_SALE",
  "daysOnZillow": 12,
  "zestimate": 890000,
  "rentZestimate": 3400,
  "latitude": 30.2811,
  "longitude": -97.7473,
  "detailUrl": "https://www.zillow.com/homedetails/1234-Rio-Grande-St-Austin-TX-78701/29444771_zpid/",
  "imgSrc": "https://photos.zillowstatic.com/fp/xyz.jpg"
}
```

Every property record contains these fields:

| Field | Description |
| --- | --- |
| 🆔 `zpid` | Zillow property ID |
| 🏠 `address` | Full address string |
| 🏙️ `city` | City |
| 🗺️ `state` | State abbreviation |
| 📮 `zipCode` | ZIP code |
| 💵 `price` | Listing price in USD (numeric) |
| 🛏️ `beds` | Number of bedrooms |
| 🛁 `baths` | Number of bathrooms |
| 📐 `sqft` | Living area in square feet |
| 🏷️ `propertyType` | SINGLE\_FAMILY, CONDO, TOWNHOUSE, etc. |
| 📅 `daysOnZillow` | Days listed on Zillow |
| 📈 `zestimate` | Zillow estimated value (USD) |
| 🏦 `rentZestimate` | Zillow estimated monthly rent (USD) |
| 📍 `latitude` | Property latitude |
| 📍 `longitude` | Property longitude |
| 🔗 `detailUrl` | Full Zillow listing URL |

### 💼 Common use cases

**Real estate investor analysis**
Pull every for-sale property under $500k in a target ZIP and rank by Zestimate spread and rent Zestimate.
Build a monthly deal-flow list filtered by property type and price band.

**Broker & agent tooling**
Feed a client dashboard with fresh listings that match a specific search brief.
Track new listings in a neighbourhood and alert on price drops.

**Market research**
Compute median price and days-on-market by city, ZIP, or neighbourhood.
Track inventory changes week over week for a metro or state.

**PropTech data pipelines**
Power an app or SaaS with normalised Zillow data without maintaining a scraper.
Enrich existing property datasets with Zestimate and coordinates.

### 🚀 Getting started

1. Open the actor and enter a `location` (city, ZIP, neighborhood, or address).
2. Set filters: price range, min beds, min baths, property type, days on Zillow.
3. Set `maxItems` (default 100) to cap how many properties a run returns and what it costs.
4. Click Start. Records stream to the dataset as each page is parsed.
5. Download as JSON, CSV, or Excel, or pull the dataset via API or MCP.

### FAQ

**How fresh is the data?**
Every run fetches live from Zillow at request time, so the price, Zestimate, and days-on-market reflect what is currently on the listing page.

**How much does it cost?**
$1 per 1,000 properties returned ($0.001 per property). There is no free tier: you pay only for properties actually returned. Empty or blocked runs cost nothing.

**Can I filter by school district or HOA?**
Those filters are not exposed as inputs yet. You can add them client-side by joining on the `zipCode` or `latitude`/`longitude` field.

**Can I use it in an AI agent?**
Yes. It's exposed as an MCP tool. See below.

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

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

Or call it programmatically with the Apify client:

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/zillow-search-scraper').call({
  location: 'Austin, TX',
  maxItems: 100,
  minPrice: 500000,
  minBeds: 3,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Related real estate actors

Pulled the listings. Now enrich and act on them with the rest of the wedge:

- **[Zillow Property Details](https://apify.com/themineworks/zillow-property-details)**: get full detail (price history, tax history, schools, HOA) for any listing by URL or ZPID.
- **[Zillow Recently Sold](https://apify.com/themineworks/zillow-recently-sold)**: pull recent sale comps for pricing analysis.
- **[Zillow Rental Listings](https://apify.com/themineworks/zillow-rental-listings)**: pull rentals for the same market and compare buy vs rent.
- **[Redfin Scraper](https://apify.com/themineworks/redfin-scraper)**: cross-check the same market on Redfin for-sale and sold listings.
- **[Realtor.com Scraper](https://apify.com/themineworks/realtor-scraper)**: cross-check Realtor.com listings with agent and brokerage data.
- **[99acres Scraper](https://apify.com/themineworks/99acres-scraper)**: India rent, buy, PG, and commercial listings for the Indian market.
- **[Google Maps Leads Scraper](https://apify.com/themineworks/maps-leads)**: find realtors, brokers, and property managers in the target ZIP.

Typical flow: zillow-search-scraper surfaces the inventory, zillow-recently-sold gives comps, maps-leads finds the agents to work with.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

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

City, zip code, neighborhood, or address to search (e.g. 'Austin, TX', '78701', 'Brooklyn, NY', 'Beverly Hills, CA').

## `maxItems` (type: `integer`):

Maximum number of for-sale properties to return. Each property costs $0.001 after the 25 free results.

## `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.

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

Minimum number of bathrooms.

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

Filter by property type (SINGLE\_FAMILY, CONDO, TOWNHOUSE, MULTI\_FAMILY, LAND, OTHER). Leave blank for all.

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

Only return listings posted within the last N days (1, 7, 14, 30, 90, 180, 365). Leave blank for all.

## Actor input object example

```json
{
  "location": "Austin, TX",
  "maxItems": 100,
  "propertyType": ""
}
```

# 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 = {
    "location": "Austin, TX",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/zillow-search-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 = {
    "location": "Austin, TX",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/zillow-search-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "location": "Austin, TX",
  "maxItems": 100
}' |
apify call themineworks/zillow-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=themineworks/zillow-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/3bnmANhccaIH1ED3T/builds/nrMMpiBOpmKO2Ryrv/openapi.json
