Zillow Scraper - Homes For Sale, Rentals & Sold Prices avatar

Zillow Scraper - Homes For Sale, Rentals & Sold Prices

Pricing

from $2.00 / 1,000 run start fees

Go to Apify Store
Zillow Scraper - Homes For Sale, Rentals & Sold Prices

Zillow Scraper - Homes For Sale, Rentals & Sold Prices

Zillow scraper for homes for sale, rentals and recently sold properties. Enter a city or paste a Zillow search URL and get one row per listing: address, price, beds, baths, square feet, Zestimate, sold date and coordinates. For investors, agents and housing analysts.

Pricing

from $2.00 / 1,000 run start fees

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

Zillow Scraper: Homes For Sale, Rentals and Sold Prices

Zillow Scraper turns any Zillow property search into structured rows you can download as JSON, CSV or Excel. Search homes for sale, rental listings or recently sold properties by city and state, or paste a Zillow search URL with the filters you already selected. Each row keeps the address, published price, rooms, floor area, coordinates and the Zillow estimates shown in the search results.

What Zillow Scraper returns

The actor returns one row per listing, including apartment building cards that appear in rental searches. Zillow's property identifier, zpid, and the absolute listing url help you match listings between runs. Positions start at one and continue across the pages of your search. Duplicate listings are removed before they are delivered and counted.

Use the results to compare asking prices across an area, find properties matching your criteria, track new listings or combine housing data with your own address records. A search is a snapshot of the listings Zillow returns at that moment. Running the same input later can produce different properties, prices or ordering as the source changes.

Input

Supply location, such as Austin, TX, or a Zillow search url. If both are present, the URL determines the search. The location is retained as the search label on each row. No location is required for a URL-only search.

{
"location": "Austin, TX",
"listing_type": "for_sale",
"limit": 100,
"retries": 3
}

This input was used for an actual run returning 100 Austin listings. Other verified searches include 50 rentals in Boise, Idaho, 90 recently sold properties in Miami, Florida, and a URL-based search returning 45 homes in Boulder, Colorado.

FieldDefaultMeaning
locationNo defaultCity and state; optional when supplying a URL
urlNo defaultZillow search URL; takes precedence over location
listing_typefor_salefor_sale, sold or for_rent
limit100Maximum listings to return, from 1 to 800
retries3Maximum attempts per search page, from 1 to 6

A URL copied from a filtered Zillow search retains its searchQueryState filters while additional result pages are collected. The listing type in each returned row reflects the actual source listing, including when you supply a sold or rental URL while leaving listing_type at its default.

Output

Rows are written to the default dataset and can be downloaded as JSON, CSV or Excel. The run summary is available in the summary record of the key-value store. When a source page cannot be collected, the errors record gives the available error code and message.

Example Zillow scraper row: a recently sold home

This is the first row of a real run for recently sold properties in Miami, FL:

{
"zpid": "43843061",
"url": "https://www.zillow.com/homedetails/540-SW-39th-Ave-Miami-FL-33134/43843061_zpid/",
"address": "540 SW 39th Ave, Miami, FL 33134",
"street": "540 SW 39th Ave",
"city": "Miami",
"state": "FL",
"zipcode": "33134",
"price": 875000,
"price_text": null,
"currency": "USD",
"beds": 3,
"baths": 3,
"living_area_sqft": 2496,
"lot_area": 7700,
"lot_area_unit": "sqft",
"home_type": "SINGLE_FAMILY",
"status": "SOLD",
"status_text": "Sold",
"marketing_status": "RecentChange",
"days_on_zillow": 2,
"sold_price": null,
"date_sold": "2026-10-02",
"tax_assessed_value": 620026,
"zestimate": 850600,
"rent_zestimate": 5966,
"latitude": 25.766907,
"longitude": -80.2599,
"broker": "MVG Real Estate Services, LLC",
"is_zillow_owned": false,
"has_3d_model": false,
"has_video": false,
"price_per_sqft": 350.56,
"image": "https://photos.zillowstatic.com/fp/552637f7ee5b9c5ea1ffb7919c9f9851-p_e.jpg",
"listing_type": "sold",
"search_location": "Miami, FL",
"position": 1
}

And a shorter excerpt from a real Austin search for homes for sale:

{
"zpid": "29461976",
"address": "6107 Felix Ave, Austin, TX 78741",
"price": 370000,
"beds": 3,
"baths": 2,
"living_area_sqft": 1252,
"price_per_sqft": 295.53,
"currency": "USD"
}

All output fields

Every row preserves the established fields: zpid, url, address, street, city, state, zipcode, price, price_text, currency, beds, baths, living_area_sqft, lot_area, lot_area_unit, home_type, status, status_text, marketing_status, days_on_zillow, sold_price, date_sold, tax_assessed_value, zestimate, rent_zestimate, latitude, longitude, broker, is_zillow_owned, has_3d_model, has_video, price_per_sqft, image, listing_type, search_location and position.

Additional fields include the collection time fetched_at, source, platform and consistent property names such as listing_id, postal_code, bedrooms, bathrooms, living_area, living_area_unit and estimated_value. These fields are added alongside the existing names so existing dataset integrations can continue using the same columns.

Unavailable values are null. Rental building cards can have no single property price, bedroom count or floor area. Their published information is instead exposed through building_name, min_base_rent, max_base_rent and units. The actor does not turn a building's minimum rent into an individual apartment's price.

For sold listings, price contains the numeric price published by Zillow when available. sold_price is a separate source field and can remain null even when price is present. date_sold is the published sale date in YYYY-MM-DD form. Zestimate and tax-assessed value are separate values, each kept under its own name.

Use cases

  • Comparable sales. Pull recently sold homes for a city or ZIP-filtered search and compare sale price, price per square foot and Zestimate side by side.
  • Investment screening. Combine asking price with rent_zestimate to rank properties by gross rental yield before you look at a single listing page.
  • Rental market research. Track asking rents and building rent ranges in the cities you manage or plan to enter.
  • Lead lists for agents and service providers. New listings with days_on_zillow and broker name show who is active in an area this week.
  • Price monitoring. Run the same search on a schedule and compare zpid, price and status between runs to see price cuts, status changes and new inventory.

How to scrape Zillow without code

Choose a city and a listing type, or paste the search URL from your browser after setting price, bed or home-type filters on Zillow. Start the run and download the dataset when it finishes. You can also call the actor through the Apify API or schedule it, so the same Zillow search lands in your spreadsheet, database or workflow tool every day.

Zillow scraper compared with other options

  • Browser extensions and Zillow data exporters export the page you are looking at, one search at a time, from your own browser. This actor runs in the cloud, pages through up to 800 listings per search and can be scheduled or called by API.
  • The official Zillow API is aimed at approved partners and specific data products; it does not give you an open export of current search results.
  • Writing your own scraper means maintaining parsers and pagination as the site changes. Here you pay only for the rows you receive, with stable field names.

Pricing

The existing price is $0.002 per run start and $0.0015 per delivered property. A valid search with no listings still has its run start fee and has zero property events. Returning 100 properties produces one run start event and 100 property events, for $0.152 in actor event charges.

Users without a paid Apify plan receive at most ten property rows per run. Property events correspond to those delivered rows. Increasing limit does not increase the free-plan row cap. Paid users can request up to 800 listings.

FAQ

Can I paste a Zillow URL with filters?

Yes. Supply it in url. The URL wins over location, and its search filters are preserved as more pages are collected. Use a search results URL for the area and listing criteria you want.

Can I export Zillow data to Excel or CSV?

Yes. Every run stores its rows in a dataset that you can download as Excel, CSV, JSON or XML from the run page, or fetch through the API.

The actor collects listing information that Zillow shows publicly in its search results, without logging in. How you use the data is your responsibility; check the terms that apply to your use case and local law, especially for personal data such as broker names.

Why do some listings have null prices or room counts?

Zillow does not publish every field for every card. Rental building cards often describe a building and several unit types instead of one priced apartment. Their building and unit fields provide the source information without guessing missing property values.

What happens when no properties are found?

The run succeeds with an empty dataset and a message in the summary. Check the city and state or adjust your search criteria. An unrecognized location is kept empty rather than returning properties from an unrelated area.

Does the limit guarantee that many rows?

The limit is a maximum. A smaller result set, repeated listings or a page that cannot be collected can reduce the delivered count. The summary reports the returned properties and available source match count. Page errors preserve already collected rows and identify the interruption.