# Zillow Property Listings Scraper

> Paste a Zillow search for any US city or ZIP code and get the homes on it, for sale, sold or for rent, with price, address, beds, baths, size, photos and Zestimate, plus the agent's phone and MLS number if you want them.

Zillow Property Listings Scraper takes any Zillow search for a US city, ZIP code or neighborhood and returns the homes on it, for sale, sold or for rent, up to about 980 for one search. Each home is one row with price, address, beds, baths, size, photos and Zestimate. The agent’s phone, MLS number, HOA, tax rate and price history are an optional add-on.

- Web page: https://keklik.io/scrapers/zillow-property-listings-scraper
- Apify Actor: `keklik/zillow-property-listings-scraper` (https://apify.com/keklik/zillow-property-listings-scraper)
- You enter: A Zillow search link, or links to single homes
- You get: Price, address, beds, baths, size, Zestimate, photos and listing date
- Status: working, last tested 11 Nov 2026
- Needs: an Apify account (free is enough to try). No login to the site itself.

## Price per 1,000 listings

US dollars, on each Apify plan. Apify's platform costs are included. Add-ons are charged only when switched on in the input.

| Charge | Free | Starter | Scale | Business |
|---|---:|---:|---:|---:|
| Listing: Each home the scraper saves. | $1.00 | $0.90 | $0.80 | $0.70 |
| Property details (add-on): Charged on top of the listing when property details are on and they loaded. Links to single homes always include them. | $1.50 | $1.35 | $1.20 | $1.00 |

Apify's plans and a calculator: https://keklik.io/pricing.md

## Input

The run input is a JSON object with these keys:

- `startUrls` (array, required): Zillow URLs. Search for a city, ZIP code or neighbourhood on zillow.com, set your filters, then copy the address. Links to single homes work too and always include the full details.
- `propertyDetails` (boolean, optional, default false): Property details. Opens each listing for the description, agent contact, MLS record and price history. It is charged per listing as an add-on and the run takes longer.
- `maxResultsPerUrl` (integer, optional, default 1000): Max results per URL. Stops each URL after this many homes. One Zillow search returns about 980 at most.
- `status` (string, optional, default "Same as URL", one of "Same as URL", "Sold", "For rent"): Listing status. Keep the market your URL is set to, or switch every search to sold homes or to rentals.
- `priceMin` (integer, optional): Min price. Lowest price in US dollars, or the monthly rent for rentals. Leave it empty to keep your URL's setting.
- `priceMax` (integer, optional): Max price. Highest price in US dollars, or the monthly rent for rentals. Leave it empty to keep your URL's setting.
- `beds` (string, optional, default "Any", one of "Any", "1+", "2+", "3+", "4+", "5+"): Bedrooms. Minimum number of bedrooms. Any keeps what your URL already has.
- `baths` (string, optional, default "Any", one of "Any", "1+", "1.5+", "2+", "3+", "4+"): Bathrooms. Minimum number of bathrooms. Any keeps what your URL already has.
- `homeType` (string, optional, default "Any", one of "Any", "Houses", "Townhomes", "Multi-family", "Condos/Co-ops", "Apartments", "Manufactured", "Lots/Land"): Home type. One type of property only. Apartment buildings that Zillow shows as a single card are skipped, while individual units are kept.
- `daysOnSite` (string, optional, default "Any", one of "Any", "1 day", "7 days", "14 days", "30 days", "90 days", "6 months", "12 months", "24 months", "36 months"): Listed or sold within. Only homes listed within this period, from 1 day to 36 months. With Sold, it filters on the sale date instead.

Example input:

```json
{
  "startUrls": [
    "https://www.zillow.com/austin-tx/"
  ],
  "priceMax": 500000,
  "beds": "3+",
  "homeType": "Houses",
  "maxResultsPerUrl": 12,
  "propertyDetails": true,
  "status": "Same as URL",
  "baths": "Any",
  "daysOnSite": "Any"
}
```

## Output: one row per listing

97 fields in 12 groups.

### Listing

- `status`: Status. Listing status as Zillow labels it, for example FOR_SALE, SOLD, FOR_RENT or PENDING.
- `broker_name`: Broker. Brokerage that published the listing.
- `days_on_zillow`: Days on Zillow. Number of days the listing has been on Zillow.
- `time_on_zillow`: Time on Zillow (ms). Time the listing has been on Zillow, in milliseconds.
- `marketing_tagline`: Tagline. Short label Zillow prints on the listing, for example "3D Tour" or an open house time.
- `content_type`: Listing card type. Kind of listing card Zillow shows for this home, for example openHouse or threeDHome.
- `is_showcase_listing`: Showcase listing. True for Zillow Showcase listings, which have richer media and more details.
- `is_featured_listing`: Featured listing. True when Zillow promotes the listing.
- `is_zillow_owned`: Zillow owned. True when Zillow owns the home.

### Price and value

- `price`: Price. Asking price as a number, in USD. For rentals, the monthly rent. Empty on sold listings: see Sold price.
- `price_formatted`: Price (as shown). Price exactly as Zillow displays it, with the currency symbol.
- `currency`: Currency. Currency of the price, for example USD.
- `sold_price`: Sold price. Price of the most recent sale. On sold listings, what the home sold for. With Property details on, other listings show the previous sale price when Zillow has one. Empty in states that do not disclose sale prices, such as Texas.
- `date_sold`: Date sold. Date of the most recent sale (UTC).
- `price_change`: Last price change. Amount of the last price change. A negative number is a price cut.
- `price_changed_at`: Price changed on. Date of the last price change (UTC).
- `price_reduction`: Price reduction. Price reduction as Zillow displays it on the listing.
- `zestimate`: Zestimate. Zillow's estimated market value of the home, in USD.
- `rent_zestimate`: Rent Zestimate. Zillow's estimated monthly rent, in USD.
- `tax_assessed_value`: Tax assessed value. Tax assessed value published by the county, in USD.

### Address and location

- `full_address`: Address. Full address on one line.
- `street`: Street. Street part of the address.
- `unit`: Unit. Unit or apartment number, when the listing has one.
- `city`: City. City.
- `state`: State. Two-letter state code.
- `zip_code`: ZIP code. ZIP code.
- `country`: Country. Country.
- `latitude`: Latitude. Latitude of the home.
- `longitude`: Longitude. Longitude of the home.

### Home

- `bed`: Bedrooms. Number of bedrooms.
- `bath`: Bathrooms. Number of bathrooms. Zillow counts a half bath as 0.5.
- `living_area`: Living area. Living area, in square feet.
- `lot_area_value`: Lot size. Lot size, in the unit given by Lot size unit.
- `lot_area_unit`: Lot size unit. Unit of the lot size: sqft or acres.
- `home_type`: Home type. Type of property, for example SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, APARTMENT, MANUFACTURED or LOT.

### Photos and tours

- `main_image`: Main photo. Cover photo of the listing.
- `photos`: Photos. List of photo URLs of the listing.
- `photo_count`: Photo count. Number of photos.
- `has_image`: Has photos. True when the listing has at least one photo.
- `has_3d_model`: Has 3D tour. True when a 3D home tour is available.
- `has_video`: Has video. True when a video is available.

### Sale type and open houses

- `listing_source_label`: Listing source. How the listing reached Zillow, for example For Sale by Agent, For Sale by Owner or New Construction.
- `is_fsba`: For sale by agent. True when the home is for sale by an agent.
- `is_fsbo`: For sale by owner. True when the home is for sale by its owner.
- `is_new_home`: New construction. True for new construction.
- `is_coming_soon`: Coming soon. True when the home is coming soon and not yet on the market.
- `is_pending`: Pending. True when the sale is pending or under contract.
- `is_for_auction`: Auction. True when the home is for sale at auction.
- `is_foreclosure`: Foreclosure. True for a foreclosure.
- `is_bank_owned`: Bank owned. True when the home is bank owned (REO).
- `is_open_house`: Open house scheduled. True when an open house is scheduled.
- `open_house_description`: Open house. Open house as Zillow displays it, in local time.
- `open_house_start_date`: Open house start. Start of the next open house (UTC).
- `open_house_end_date`: Open house end. End of the next open house (UTC).

### Listing agent and MLS (add-on)

- `agent_name`: Agent name. Name of the listing agent. Needs Property details.
- `agent_phone`: Agent phone. Phone number of the listing agent. Needs Property details.
- `agent_email`: Agent email. Email of the listing agent. Zillow rarely shows it, so it is usually empty. Needs Property details.
- `broker_phone`: Broker phone. Phone number Zillow shows for the brokerage. Needs Property details.
- `listing_provider`: Listing provider. Details of the listing provider, when Zillow shows them. Needs Property details.
- `mls_id`: MLS number. MLS number of the listing. Needs Property details.
- `mls_name`: MLS name. Name of the MLS the listing comes from. Needs Property details.
- `mls_last_checked`: MLS last checked. When Zillow last checked the MLS, in the listing's local time. Needs Property details.
- `mls_last_updated`: MLS last updated. When the MLS record last changed, in the listing's local time. Needs Property details.
- `date_posted`: Date posted. Date the listing was posted (UTC). Needs Property details.

### Description, tour and saves (add-on)

- `description`: Description. Full listing description written by the agent or owner. Needs Property details.
- `home_insights`: Home highlights. Short highlight phrases Zillow draws from the listing, for example "Mature landscaping". Needs Property details.
- `virtual_tour_url`: Virtual tour. Link to the virtual or 3D tour, when the listing has one. Needs Property details.
- `page_view_count`: Page views. Number of views of the listing on Zillow. Needs Property details.
- `favorite_count`: Saves. Number of Zillow users who saved the listing. Needs Property details.

### Home facts (add-on)

- `year_built`: Year built. Year the home was built. Needs Property details.
- `property_sub_type`: Property sub-type. Property sub-types, for example Single Family Residence. Needs Property details.
- `neighborhood`: Neighborhood. Neighborhood name. Needs Property details.
- `bathrooms_full`: Full bathrooms. Number of full bathrooms. Needs Property details.
- `bathrooms_half`: Half bathrooms. Number of half bathrooms. Needs Property details.
- `bathrooms_three_quarter`: Three-quarter bathrooms. Number of three-quarter bathrooms. Needs Property details.
- `bathrooms_one_quarter`: Quarter bathrooms. Number of quarter bathrooms. Needs Property details.
- `living_area_unit`: Living area unit. Unit of the living area. Needs Property details.
- `time_zone`: Time zone. Time zone of the property. Needs Property details.
- `at_a_glance_facts`: Facts at a glance. Zillow's at-a-glance facts (type, year built, heating, cooling, parking, HOA, lot and more), as label and value pairs. Usually only on Showcase listings. Needs Property details.

### Parking and garage (add-on)

- `parking_capacity`: Parking spaces. Total number of parking spaces. Needs Property details.
- `garage_parking_capacity`: Garage spaces. Number of garage spaces. Needs Property details.
- `has_garage`: Has garage. True when the home has a garage. Needs Property details.
- `has_attached_garage`: Attached garage. True when the garage is attached. Needs Property details.
- `has_carport`: Has carport. True when the home has a carport. Needs Property details.
- `has_open_parking`: Open parking. True when the home has open parking. Needs Property details.
- `parking_features`: Parking features. Parking features listed in the MLS record. Needs Property details.

### Costs and price history (add-on)

- `price_per_sqft`: Price per sq ft. Price per square foot, in USD. Needs Property details.
- `monthly_hoa_fee`: Monthly HOA fee. Monthly HOA fee, in USD. Needs Property details.
- `property_tax_rate`: Property tax rate. Effective property tax rate, in percent. Needs Property details.
- `last_sold_price`: Last sold price. Price of the previous sale of this home, in USD. Needs Property details.
- `price_history`: Price history. Past prices of the home as a list of {date, price}. Usually only available on Zillow Showcase listings, so it is empty on most homes. Needs Property details.
- `mortgage_rate_30y`: 30-year fixed rate. Zillow 30-year fixed mortgage rate quoted on the listing, in percent. Needs Property details.
- `mortgage_rate_15y`: 15-year fixed rate. Zillow 15-year fixed mortgage rate quoted on the listing, in percent. Needs Property details.
- `mortgage_rate_5y_arm`: 5-year ARM rate. Zillow 5-year adjustable mortgage rate quoted on the listing, in percent. Needs Property details.

### Zillow link and scrape time

- `url`: Listing URL. Link to the listing on Zillow.
- `zpid`: Zillow ID. Zillow Property ID (zpid), the number that identifies the home on Zillow.
- `scraping_time`: Scraped at. When the row was scraped (UTC, ISO 8601).

## How it works

1. Paste a Zillow search. Search zillow.com for a city, ZIP code or neighborhood and copy the link. Add as many searches or single homes as you like.
2. Up to about 980 homes per search. That is the most Zillow shows for one search. Split a big area by ZIP code or price range for more, and a home found twice appears once.
3. Keep only the homes you want. Switch to sold homes or rentals, and filter by price, beds, baths, home type and how recently the home was listed.
4. Download your list. As a spreadsheet, in Google Sheets, or into your CRM.

## Use cases

- Finding deals: Compare asking prices with the Zestimate and the tax assessed value, and spot the homes with recent price cuts.
- Tracking a market: Stock levels, price per square foot and days on Zillow by city or ZIP code, or recent sales with the Sold filter.
- Outreach to agents and brokers: With property details on, each listing carries the agent's name and phone, the broker's phone and the MLS number.
- Rental research: Monthly rents and Rent Zestimates compared across neighbourhoods.

## Good to know

One Zillow search returns about 980 homes at most, even when it claims a bigger total. To cover a larger area, split it into several searches by ZIP code or price band and add each URL. Homes that appear in more than one are exported once.

## Questions

### Is it legal to scrape Zillow?

This scraper only collects data that Zillow shows publicly to any visitor, without logging in. Listings can include personal data, such as the names and phone numbers of agents. If you collect personal data, make sure you have a lawful reason to do so and follow the rules that apply to you, such as GDPR or CCPA. If you are unsure, ask a lawyer.

### Do I need a Zillow account?

No. You don't need a Zillow account, login or cookies. Paste a URL and start the run.

### How many listings can I get from one Zillow search?

Zillow shows at most about 980 listings for any one search, whatever total it displays. To collect more, split the search by ZIP code or by price range and add each one as its own URL. A listing that appears in several of your searches is exported only once.

### Can I scrape sold homes and rentals?

Yes. Use a sold or rental search URL, or set Listing status to Sold or For rent. Some states, such as Texas, do not disclose sale prices, so the sold price can be empty there. Zillow shows many apartment complexes as one card per building with no single price; those cards are skipped, so a rentals search can return fewer rows than Zillow's count. Houses and individual units for rent are exported normally.

### Can I filter by price, bedrooms or home type?

Yes. Set the filters on zillow.com before you copy the search link, or set them in the scraper: sold or for rent, min and max price, bedrooms, bathrooms, home type, and how recently the home was listed or sold. They apply to every search link you add.

### Why are some details missing?

Some fields depend on the listing. Sold and off-market homes have no description or price history on Zillow, though the MLS record and year built are usually there. Price history and the at-a-glance facts mostly appear on Zillow Showcase listings. The Zestimate is empty when Zillow does not show one for the home. With Property details on, a listing whose details could not be loaded keeps its basic row.

### Can I get the listing agent's phone and email?

Turn on Property details. You then get the listing agent's name and phone, and the broker's phone, whenever the listing shows them. Zillow almost never shows agent emails, so that column is usually empty.

### Can I track new listings and price cuts?

Yes. Schedule the scraper on Apify to run every day or week, with Listed or sold within set to 1 day or 7 days to get only the new homes. Each row shows the number of days the home has been on Zillow and, when the price changed, the last price change and its date.

### What happens when a run fails?

The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 full details) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both.

## Run it

- In Apify Console: https://apify.com/keklik/zillow-property-listings-scraper
- With the Apify API: POST https://api.apify.com/v2/acts/keklik~zillow-property-listings-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN with the input JSON as the body. It returns the rows.
- From an AI agent: connect the Apify MCP server (https://mcp.apify.com), add the Actor `keklik/zillow-property-listings-scraper` and call it with the input.
