# Zillow Scraper \[$0.001💰] | Listings | Leads | Rentals | Sold (`ahmed_jasarevic/zillow-scraper`) Actor

Extract Zillow property listings, prices, addresses, and rental data for real estate market research and lead generation

- **URL**: https://apify.com/ahmed\_jasarevic/zillow-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.001 / result

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper

Scrape property listings, prices, and details from Zillow — the largest U.S. real estate marketplace. Search by location, filter by price, beds, baths, and home type. Get structured data for sale listings, rentals, new construction, and recently sold properties.

### Use Cases

- **Real estate lead generation** — Find buyer/seller leads with up-to-date contact and listing info
- **Property market research** — Analyze pricing trends, inventory, and days-on-market for any area
- **Rental market analysis** — Compare rent prices across neighborhoods and cities
- **Comparable sales (comps)** — Pull recently sold data for accurate property valuation
- **Investment analysis** — Identify cash-flowing rental properties and fix-and-flip opportunities
- **Price monitoring** — Track listing price changes and new inventory in target markets
- **Competitive intelligence** — Monitor competitor listings, pricing strategies, and market share

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `query` | `string` | `"New York, NY"` | City, state, zip, neighborhood, or address to search |
| `homeStatuses` | `enum` | — | `newConstruction`, `forSale`, `forRent`, `recentlySold`, `pending` |
| `sortOrder` | `enum` | — | Sort results by price, days, etc. |
| `maxResults` | `int` | `500` | Maximum number of listings to scrape |
| `maxConcurrency` | `int` | `10` | Parallel browser sessions |
| `cacheTtlSecs` | `int` | — | Cache TTL in seconds for repeated queries |
| `minPrice` | `int` | — | Minimum listing price |
| `maxPrice` | `int` | — | Maximum listing price |
| `minBedrooms` | `int` | — | Minimum bedrooms |
| `maxBedrooms` | `int` | — | Maximum bedrooms |
| `minBathrooms` | `int` | — | Minimum bathrooms |
| `maxHoaFees` | `int` | — | Maximum HOA fees |
| `homeTypes` | `array` | — | Filter by type: `houses`, `apartments`, `condos`, `townhomes`, `lots`, `land` |
| `proxyConfiguration` | `object` | — | Proxy settings for rotation |

### Output Fields

| Field | Description |
|-------|-------------|
| `address` | Full property address |
| `price` | Current listing price |
| `bedrooms` | Number of bedrooms |
| `bathrooms` | Number of bathrooms |
| `sqft` | Living area in square feet |
| `lotSize` | Lot size in acres or sqft |
| `yearBuilt` | Year the property was built |
| `homeType` | Property type (house, condo, etc.) |
| `status` | Listing status (for sale, pending, sold) |
| `url` | Direct link to Zillow listing |
| `description` | Property description |
| `images` | Array of listing photos |
| `agentInfo` | Listing agent name and contact |
| `priceHistory` | Historical price changes |
| `rentZestimate` | Zillow rent estimate |
| `zestimate` | Zillow home value estimate |

### Example

```json
{
  "query": "Austin, TX",
  "homeStatuses": "forSale",
  "maxResults": 200,
  "minPrice": 300000,
  "maxPrice": 600000,
  "minBedrooms": 3,
  "homeTypes": ["houses", "townhomes"]
}
```

### Integrations

Pair this Actor with other tools for full workflow automation:

- **CRM sync** — Push leads to HubSpot, Salesforce, or Pipedrive
- **Google Sheets** — Export results with the Google Sheets Actor
- **Slack notifications** — Alert your team on new listings with Slack integration
- **Email outreach** — Trigger cold email sequences with Instantly or Smartlead
- **Tableau/Power BI** — Visualize market data with CSV/JSON exports
- **Zapier/Make** — Connect to 5,000+ apps for automated pipelines

### Related Actors

| Actor | Description |
|-------|-------------|
| [Realtor Scraper](https://apify.com/bebity/realtor-scraper) | Scrape Realtor.com listings with agent data |
| [Redfin Scraper](https://apify.com/bebity/redfin-scraper) | Extract listings, prices, and market stats from Redfin |
| [Trulia Scraper](https://apify.com/bebity/trulia-scraper) | Get Trulia listings and neighborhood data |
| [Apartments.com Scraper](https://apify.com/bebity/apartments-scraper) | Scrape rental listings from Apartments.com |
| [Zillow Contact Extractor](https://apify.com/bebity/zillow-contact-extractor) | Extract agent and owner contact info from Zillow |

### AI Agents

This Actor is optimized for AI agent pipelines:

```python
## Example: Agent-driven market research
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

## Run Zillow scraper
run = client.actor("nzkusvhbQu7NY73zD").call(input={
    "query": "Miami, FL",
    "homeStatuses": "forSale",
    "maxResults": 100
})

## Process results with LLM
items = client.dataset(run["defaultDatasetId"]).list_items().items
for listing in items:
    analysis = llm.analyze(f"Is {listing['price']} fair for {listing['sqft']}sqft in {listing['address']}?")
    # Feed analysis to your agent workflow
```

### Performance Tips

- Increase `maxConcurrency` (up to 20) for faster large-scale scrapes
- Use `cacheTtlSecs` to avoid re-scraping unchanged data
- Set `maxResults` conservatively — you pay $0.001 per result
- Use proxy configuration for sustained high-volume runs

### Legal Disclaimer

This Actor is intended for legitimate research, analysis, and personal use. Users are responsible for compliance with Zillow's Terms of Service and all applicable laws. Do not use scraped data for spam, harassment, or any purpose that violates platform policies. The developer assumes no liability for misuse.

### SEO Keywords

Zillow scraper, Zillow property data, real estate listings, Zillow API alternative, property search, for sale listings, for rent listings, recently sold, price estimation, property valuation, Zillow data extraction, real estate lead generation, property market research, comparable sales comps, rental market data, scrape Zillow, Zillow dataset, housing data, real estate data, property data API, Zillow listings, home values, real estate analytics

### FAQ

**Q: Does this bypass Zillow's anti-scraping protection?**
A: The Actor uses rotating residential proxies and browser fingerprinting to handle protection. Success rate varies by query volume.

**Q: What data fields are included?**
A: Price, address, beds, baths, sqft, year built, photos, agent info, price history, Zestimate, and more.

**Q: How much does it cost?**
A: $0.001 per result. 500 listings = $0.50. Apify usage charges apply on top.

**Q: Can I filter by specific neighborhoods?**
A: Yes. Pass neighborhood names, zip codes, or addresses as the `query`.

**Q: Is there a rate limit?**
A: No hard limit, but high concurrency may trigger temporary blocks. Use 5-10 for steady runs.

**Q: Can I get agent contact information?**
A: Basic agent info is included. For detailed contact extraction, use the dedicated Zillow Contact Extractor Actor.

***

*Built on [Apify](https://apify.com) — the platform for web scraping and automation.*

# Actor input Schema

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

Zillow URLs to scrape. Accepts property DETAIL pages (https://www.zillow.com/homedetails/... or https://www.zillow.com/b/...) and/or SEARCH results pages (https://www.zillow.com/homes/..., https://www.zillow.com/{city}/, for\_sale / for\_rent / sold filters). Search pages are followed to their detail pages for the full dataset.

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

Maximum number of property records to scrape. Free users are capped at 10 items regardless of this value.

## `maxConcurrency` (type: `integer`):

Parallel requests. Keep low (1-5) for Zillow to avoid soft-blocks.

## `mode` (type: `string`):

auto = detect detail vs search per page; search = only extract listings and follow detail links; detail = only parse detail pages (ignore search listing extraction).

## `includePhotos` (type: `boolean`):

Extract the list of photo URLs for each property.

## `includePriceHistory` (type: `boolean`):

Extract the price-history events (date, price, event type) for each property.

## `proxyConfiguration` (type: `object`):

Proxy used to avoid Zillow's PerimeterX/HUMAN IP blocks. Residential is strongly recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.zillow.com/homes/for_sale/Seattle-WA/"
    }
  ],
  "maxItems": 100,
  "maxConcurrency": 2,
  "mode": "auto",
  "includePhotos": true,
  "includePriceHistory": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.zillow.com/homes/for_sale/Seattle-WA/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/zillow-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 = { "startUrls": [{ "url": "https://www.zillow.com/homes/for_sale/Seattle-WA/" }] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/zillow-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 '{
  "startUrls": [
    {
      "url": "https://www.zillow.com/homes/for_sale/Seattle-WA/"
    }
  ]
}' |
apify call ahmed_jasarevic/zillow-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/zillow-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/nzkusvhbQu7NY73zD/builds/OEA3C78ux9mBriKkO/openapi.json
