Zillow Scraper icon

Zillow Scraper

Scrape zillow.com properties for sale, for rent and recently sold across the US: price, beds, baths, area, address, GPS, photos, home value and rent…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Zillow Scraper at a glance

Zillow Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes id, link, change type (incremental mode), channel and status, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$1.80 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
39 options

Scrape zillow.com properties for sale, for rent and recently sold across the US: price, beds, baths, area, address, GPS, photos, home value and rent estimates. Optional property page read adds HOA fee, tax rate, MLS id, agent, brokerage and the fact sheet. 25 filters, or paste links.

What Zillow Scraper: Sale, Rent and Sold Property Listings can do

  • Coverage past the site's own ceiling. One read of a map area returns at most 500 records however many properties exist inside it. This actor splits a busy area into quarters and reads each one, so a city with thousands of homes is genuinely covered instead of truncated at the first few hundred.
  • Honest completeness. Every run reports whether it scanned an area end to end. A refused read, an unresolved place or a run cap all mark the scan partial, and expiry tracking refuses to act on a partial scan.
  • Three channels, one shape. For sale, for rent and recently sold return the same columns, so a rental feed and a sold-comparables feed line up without post-processing.
  • 25 search filters. Channel, price, beds, baths, area, lot size, year built, HOA fee, property type, keyword, time on market, sort order and eight feature toggles.
  • Recurring monitoring built in. Run the same search on a schedule and get only what changed, marked NEW, UPDATED, REAPPEARED or EXPIRED, with the exact list of fields that moved.
  • Pay for results, not for pages. The search-level record costs one result event. Reading each property's own page is optional and billed separately, so you never pay for detail you did not ask for.

Choose what to collect

These inputs let you configure Zillow Scraper: Sale, Rent and Sold Property Listings. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to start. 'Search by location' builds the search from the location and filters below. 'Direct URLs' takes zillow.com search or property links you already have.

Choices: search, url

locationsarraySearch mode only. One or more US places, written the way you would type them into the site: 'Austin, TX', 'Brooklyn, NY', '90210'. Each one is walked separately, and the run cap below is shared evenly between them.
listingTypestringSearch mode only. For sale, for rent, or recently sold properties.

Choices: FOR_SALE, FOR_RENT, SOLD

homeTypesarraySearch mode only. Leave empty for every type. Selecting one or more returns only those types.
minPriceintegerSearch mode only. Lowest price in USD. On a for-rent search this is the lowest monthly rent.
maxPriceintegerSearch mode only. Highest price in USD. On a for-rent search this is the highest monthly rent.
minBedsintegerSearch mode only. Fewest bedrooms.
Show 32 more inputs
More input fields
InputWhat it controls
maxBedsintegerSearch mode only. Most bedrooms.
minBathsintegerSearch mode only. Fewest bathrooms.
minSqftintegerSearch mode only. Smallest interior area in square feet.
maxSqftintegerSearch mode only. Largest interior area in square feet.
minLotSizeintegerSearch mode only. Smallest lot in square feet. One acre is 43560 square feet.
maxLotSizeintegerSearch mode only. Largest lot in square feet.
minYearBuiltintegerSearch mode only. Earliest year built.
maxYearBuiltintegerSearch mode only. Latest year built.
maxHoaFeeintegerSearch mode only. Highest monthly HOA fee in USD. Set 0 to return only properties with no HOA fee.
keywordsstringSearch mode only. Narrows to properties whose listing text mentions this word, for example pool, casita, cul-de-sac. Leave empty for no keyword filter.
daysOnZillowstringSearch mode only. How recently the property was listed. On a recently-sold search this is how recently it sold.

Choices: ANY, 1_DAY, 7_DAYS, 14_DAYS, 30_DAYS, 90_DAYS, 6_MONTHS, 12_MONTHS, 24_MONTHS, 36_MONTHS

sortBystringSearch mode only. Result ordering. This changes the order results arrive in, it does not change which properties match.

Choices: RECOMMENDED, NEWEST, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, BEDROOMS, SQUARE_FEET, LOT_SIZE, MOST_RECENT_CHANGE

hasPoolbooleanSearch mode only.
hasGaragebooleanSearch mode only.
hasAirConditioningbooleanSearch mode only.
isWaterfrontbooleanSearch mode only.
singleStoryOnlybooleanSearch mode only.
has3dTourbooleanSearch mode only.
openHouseOnlybooleanSearch mode only.
priceReducedOnlybooleanSearch mode only.
startUrlsarrayURL mode only. Paste zillow.com search links (walked automatically) or property links ending in _zpid (returned as one record each). Multiple links supported (search pages, city pages, page-numbered pages, for-rent searches and property pages). Left untouched, the field scrapes one example of each shape. The filters above are ignored in this mode, because a pasted link already carries its own.
fetchDetailsbooleanAdds description, year built, HOA fee, property tax rate, MLS id and name, listing agent and brokerage, full photo gallery, parking and the property fact sheet. Costs one extra read per result and is billed per enriched result under the surcharge named in this section. Leave off for the search-level record, which already carries price, beds, baths, address, GPS, home value estimate, rent estimate and a photo.
maxItemsintegerMaximum number of results to return across every location or link. This is the run cap. Set 0 for unlimited.
maxPagesintegerOptional safety cap on how many search reads to spend on each location or link. A large area is covered by splitting it into smaller areas, so a big city needs more than one read. 0 means no read limit; the run still stops at Max results.
incrementalModebooleanTurn this on for recurring monitoring. The first run returns every match as NEW. Later runs return only NEW, UPDATED and REAPPEARED results. State is kept separately per mode, locations or links, every filter and the property-page setting, so two different searches never mix. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key from the mode, locations or links, every filter and the property-page setting.
emitUnchangedbooleanOff by default. Turn on to also return results that have not changed since the last run, marked UNCHANGED. This returns, and bills for, extra rows you already have, so leave it off unless you want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return results that were present in a previous run and are no longer found, marked EXPIRED, once a run has scanned the whole search end to end. Adds, and bills for, extra rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Field names that should never, on their own, turn a property into UPDATED. Always ignored, so you do not need to list them: the scrape time and the counters that move by themselves (days on Zillow, favourite count, page view count), and the added card fields sourceSearchUrl, cardType, units, isValid, hasImage, marketingTagline, cardHighlight, priceReduction, priceIncludesMonthlyFees, isRentalWithBasePrice, marketingTreatments, availabilityDate, dateSold, listingSoldPrice, listingSubType and openHouseSchedule (a change to only one of these does not, on its own, make a property UPDATED). Add more if a field is noisy for your search, for example zestimate or rentZestimate (Zillow's own estimates, which are recomputed regularly). Use a dotted name such as resoFacts.hoaFee for a field inside a nested object. Ignored fields are still returned in every row. Changing this list never marks the whole saved baseline as updated.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (address plus key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idID
urlLink (link)
changeTypeChange type (incremental mode) (text)
listingTypeChannel
homeStatusStatus
propertyTypeType
pricePrice
formattedPricePrice (display)
zestimateHome value estimate
rentZestimateRent estimate
streetAddressAddress
cityCity
Show 20 more fields
stateState
zipCodeZIP
latitudeLat
longitudeLng
bedroomsBeds
bathroomsBaths
livingAreaArea (sqft)
yearBuiltBuilt
monthlyHoaFeeHOA per month
brokerageNameBrokerage
listingAgentNameAgent
mlsIdMLS id
heroImagePhoto (image)
detailFetchedProperty page read
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
scrapedAtScraped at (date)
descriptionDescription
propertyTaxRateTax rate

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "00000001",
  "zpid": "00000001",
  "url": "https://www.zillow.com/homedetails/00000001_zpid/",
  "listingType": "FOR_SALE",
  "homeStatus": "FOR_SALE",
  "statusText": "Active",
  "propertyType": "SINGLE_FAMILY",
  "price": 612000,
  "formattedPrice": "$612,000",
  "currency": "USD",
  "zestimate": 604800,
  "rentZestimate": 2875,
  "taxAssessedValue": 498000,
  "priceChange": -9000,
  "priceChangeDate": "2026-02-01T00:00:00.000Z",
  "streetAddress": "142 Sample Ridge Dr",
  "city": "Austin",
  "state": "TX",
  "zipCode": "78701",
  "country": "USA",
  "address": "142 Sample Ridge Dr, Austin, TX 78701",
  "latitude": 30.3,
  "longitude": -97.7,
  "bedrooms": 4,
  "bathrooms": 3,
  "livingArea": 2100,
  "lotAreaValue": 8000,
  "lotAreaUnit": "sqft",
  "daysOnZillow": 14,
  "heroImage": "https://photos.zillowstatic.com/fp/00000000-p_e.jpg",
  "photos": [
    "https://photos.zillowstatic.com/fp/00000000-p_e.jpg"
  ],
  "description": "Single story home with an open kitchen and a covered patio.",
  "yearBuilt": 1995,
  "monthlyHoaFee": 60,
  "propertyTaxRate": 1.9,
  "pricePerSquareFoot": 291,
  "mlsId": "1234567",
  "mlsName": "Sample MLS",
  "listingAgentName": "Jordan Example",
  "listingAgentPhone": "(555) 010-0100",
  "brokerageName": "Sample Realty Group",
  "resoFacts": {
    "parkingCapacity": 2,
    "propertySubType": [
      "Single Family Residence"
    ]
  },
  "detailFetched": true,
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}

Ways to use this data

  • Property investors and flippers: screen a whole metro for price, days on market and lot size, then compare against the home value estimate.
  • Rental market research: track asking rent by bedroom count and neighborhood across several cities at once.
  • Comparable sales analysis: pull recently sold homes near a subject property to support a valuation or an offer.
  • Lead generation for agents and lenders: monitor a farm area on a schedule and get only the new listings and price changes.
  • Market dashboards and reports: build a standing dataset of active inventory, price trends and property mix for a region.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Zillow Scraper return?

The documented output for Zillow Scraper includes id, link, change type (incremental mode), channel, status, type, price and price (display). Availability of each field depends on the source page and the selected mode.

How much does Zillow Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated properties, and unchanged ones are not billed. Keep Max results high (or 0) on these runs; a small cap can cause the run to stop scanning before it reaches a genuinely new or changed listing, and can return fewer rows, or none, even though changes exist. See the tips under How to Use for the exact mechanics.

Why did a scheduled run suddenly return a lot of EXPIRED rows?

Once a run scans its tracked search completely, previously tracked properties that are no longer found are returned as EXPIRED in that same run. These rows count toward Max results (the whole run, minus the rows already returned), so with a cap the leftover properties stay tracked and a later run reports them; with Max results 0 the whole batch comes at once, and a large swing in local inventory can make it bigger than you expect. Turn emitExpired off if you only want the new and updated delta.

What does it not return?

Coverage is US only. Price history, tax history and school assignments are not returned, because those tables are not published on the pages this actor reads.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Zillow Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.