Zillow Search Scraper avatar

Zillow Search Scraper

Pricing

from $5.00 / 1,000 listing returneds

Go to Apify Store
Zillow Search Scraper

Zillow Search Scraper

Bulk Zillow listings search by ZIP, city, search URL, or map bounding box. Auto-paginates past Zillow's 800-result cap. MCP-ready.

Pricing

from $5.00 / 1,000 listing returneds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

Zillow Search Scraper — ZIP, City & Map Bounds

Zillow Search Scraper is an Apify Actor for bulk Zillow listings search by ZIP code, city or neighborhood text, a saved Zillow search URL, or a map bounding box. It accepts one search source per run, applies listing filters, and returns one record per listing with fields such as zpid, url, address, price, beds, baths, sqft, listing status, geocoordinates, broker contact, image URL, Zestimate, and scrapedAt. The output is designed for downstream enrichment, analysis, and AI-agent workflows through Apify MCP.

Best fit and connected workflows

This Actor fits workflows that start from Zillow discovery and end with a clean listing dataset.

Use it when you want to:

  • scan multiple US ZIP codes for active inventory,
  • query a city, state, or neighborhood by text,
  • replay a Zillow search URL with its embedded filters,
  • target an exact bounding box for programmatic agent workflows,
  • collect listing rows before handing selected zpid values to a detail-enrichment step.

Use For deeper property detail enrichment, connect the discovered listings to Zillow Scraper - Property Listings & Agent Leads. That downstream Actor is a natural next step when you already have a returned public Zillow URL or zpid and want richer property-level records.

Practical scenario

Maya, a leasing analyst, starts with Austin, TX as a city search and sets listingType to forRent with a capped run size. The Actor returns rows with address, price, beds, baths, sqft, listing status, days on Zillow, agent contact, and URL. Maya filters the dataset for listings that match her target size and budget, then passes the selected zpid values to a downstream review or enrichment step.

Input fields

Provide one of searchUrl, zipCodes, searchQuery, or mapBounds, then add filters and a maxResults cap.

FieldTypeDescription
searchUrlstringPaste a Zillow search URL. The Actor extracts the embedded search state and runs that exact search.
zipCodesarray of stringList of US ZIP codes to scrape. Each ZIP is processed independently.
searchQuerystringCity, state, or neighborhood search such as Austin, TX. Zillow resolves this to a region.
mapBoundsobjectBounding box with north, south, east, and west decimal degrees for exact geospatial targeting.
listingTypestringOne of forSale, forRent, or sold. Defaults to forSale.
maxResultsintegerHard cap on listings pushed to the dataset, from 1 to 5000. Defaults to 100.
minPriceintegerLowest acceptable list price in USD.
maxPriceintegerHighest acceptable list price in USD.
minBedsintegerMinimum bedroom count from 0 to 10.
minBathsintegerMinimum bathroom count from 0 to 10.
homeTypearray of stringRestrict results to property types such as houses, condos, townhomes, multifamily, manufactured, land, or apartments.
bypassPaginationbooleanSkip recursive subdivision past Zillow's 800-result cap.
proxyConfigurationobjectApify Proxy settings. Residential US is the default configuration.

Focused input example

{
"searchQuery": "Austin, TX",
"listingType": "forSale",
"maxResults": 50,
"minPrice": 400000,
"minBeds": 2,
"homeType": ["houses", "townhomes"],
"bypassPagination": false
}

Output fields

The default dataset contains one record per returned listing.

FieldTypeDescription
zpidstringZillow Property ID, a stable join key for downstream enrichment.
urlstringFull Zillow detail URL.
addressstringStreet address as shown by Zillow.
citystring or nullCity.
statestring or null2-letter state.
zipCodestring or nullZIP code.
pricenumber or nullCurrent list price for forSale and forRent, or sold price for sold.
listingStatusstring or nullRaw Zillow status such as FOR_SALE, PENDING, SOLD, FOR_RENT, or COMING_SOON.
listingTypestringRun listing mode: forSale, forRent, or sold.
homeTypestring or nullProperty type such as SINGLE_FAMILY, CONDO, or TOWNHOUSE.
bedsnumber or nullBedrooms.
bathsnumber or nullBathrooms.
sqftnumber or nullLiving area in square feet.
lotSizenumber or nullLot size in square feet.
yearBuiltnumber or nullYear built.
latitudenumber or nullLatitude.
longitudenumber or nullLongitude.
daysOnZillownumber or nullDays on Zillow.
zestimatenumber or nullZestimate in USD.
rentZestimatenumber or nullRent Zestimate in USD.
brokerNamestring or nullBroker or brokerage.
listingAgentstring or nullListing agent.
agentPhonestring or nullListing agent phone.
imgSrcstring or nullPrimary image URL.
scrapedAtstringISO 8601 UTC timestamp of the scrape.

Illustrative output record

{
"zpid": "123456789",
"url": "https://www.zillow.com/homedetails/123456789_zpid/",
"address": "123 Example St",
"city": "Austin",
"state": "TX",
"zipCode": "78704",
"price": 625000,
"listingStatus": "FOR_SALE",
"listingType": "forSale",
"homeType": "SINGLE_FAMILY",
"beds": 3,
"baths": 2,
"sqft": 1840,
"lotSize": 5227,
"yearBuilt": 1998,
"latitude": 30.25,
"longitude": -97.75,
"daysOnZillow": 12,
"zestimate": 640000,
"rentZestimate": 3200,
"brokerName": "Example Brokerage",
"listingAgent": "Example Agent",
"agentPhone": "(555) 123-4567",
"imgSrc": "https://photos.zillowstatic.com/fp/example.jpg",
"scrapedAt": "2026-07-27T00:00:00.000Z"
}

How it works

The Actor accepts one Zillow search source per run, applies the selected listing mode and filters, and collects listings into the default dataset. It can also recurse through map subdivisions to continue past Zillow's 800-result cap. The dataset schema includes an overview table with link, price, and sqft columns for quick review.

Under the hood, the Actor reads Zillow search state, translates it into search requests, and writes a flat listing record for each returned property.

Pricing

This Actor uses Pay per event plus Apify platform usage. The primary event is Listing returned, which is charged for each listing pushed to the default dataset. The run also includes an Actor start event, which is charged once per run and scales with RAM.

Open the live Pricing tab on the Actor page for the current rates.

Example in words: if a run returns one hundred listings, the listing-returned charge is applied one hundred times, and the actor-start charge is applied once.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a tool that turns Zillow search inputs into structured listing records. It is useful when an agent needs to query a city, ZIP set, saved search URL, or map bounds and then reason over returned listing fields.

Exact Actor identity: khadinakbar/zillow-search-scraper

Tool description: search Zillow inventory by one input source per run, optionally narrow by price, beds, baths, home type, and result cap, then read back structured listings from the dataset.

Find active for-sale homes in Austin, TX with at least 3 beds, cap the run at 25 listings, and return the dataset rows so I can sort by price and days on Zillow.

Output interpretation:

  • zpid is the stable join key for follow-up workflows.
  • url points to the public Zillow detail page.
  • scrapedAt shows when the record was collected.
  • listingStatus, beds, baths, sqft, price, zestimate, and daysOnZillow are the most direct fields for screening and ranking.

Provenance and scope:

  • Records come from Zillow search results.
  • searchUrl replays the Zillow search encoded in the URL.
  • mapBounds is the most precise input for agent-driven geospatial searches.
  • zipCodes runs each ZIP independently.

Pagination and cost guidance:

  • Zillow search pages are capped at 800 listings per search.
  • The Actor can subdivide the search area to continue past that cap.
  • maxResults sets a hard stop on returned listings.
  • Costs scale with returned listing records, so tighter filters and a smaller cap keep runs focused.

Apify API example

JavaScript example with APIFY_TOKEN and dataset readback:

const { ApifyClient } = require("apify-client");
(async () => {
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor("khadinakbar/zillow-search-scraper").call({
searchQuery: "Austin, TX",
listingType: "forSale",
maxResults: 10,
minBeds: 2,
});
const dataset = client.dataset(run.defaultDatasetId);
const { items } = await dataset.listItems({ format: "json" });
console.log(items);
})();

Best results and outcome guidance

Start with the narrowest search source that matches your workflow:

  • use searchUrl when Zillow filters are already configured,
  • use zipCodes for market-by-market scans,
  • use searchQuery for region-level discovery,
  • use mapBounds when you already have exact boundaries.

For cleaner result sets, combine one search source with a single listingType, a realistic maxResults, and only the filters that matter for the task. If you are preparing a downstream enrichment workflow, keep zpid and url in the handoff set.

Continue the workflow

Design note

I found that the dataset schema requires zpid, url, listingType, and scrapedAt, which makes each returned record easy to join, trace, and reuse in downstream workflows.

FAQ

When should I use searchUrl instead of searchQuery?

Use searchUrl when you already built the Zillow search in the UI and want the Actor to replay the exact search state. Use searchQuery for simple city, state, or neighborhood lookup.

Can I execution multiple ZIP codes in one job?

Yes. Put the ZIP codes in the zipCodes array, and the Actor processes each ZIP independently.

What should I use for exact geospatial targeting?

Use mapBounds with north, south, east, and west values when you have a defined bounding box or polygon workflow.

How do I hand results to a detail enrichment step?

Use zpid and url from the dataset, then connect selected listings to Zillow Scraper - Property Listings & Agent Leads.

What listing modes are available?

The Actor supports forSale, forRent, and sold.

Responsible use

Use Zillow Search Scraper in line with Zillow's terms, applicable data protection rules, and any real-estate licensing or MLS obligations relevant to your workflow. Treat returned records as sourced from Zillow search results and review any downstream use, redistribution, or enrichment against your own compliance requirements.