Zillow Scraper avatar

Zillow Scraper

Pricing

from $1.00 / 1,000 property listings

Go to Apify Store
Zillow Scraper

Zillow Scraper

🏡 Scrape Zillow listings by location or search URL for sale, for rent, or recently sold. Get price, address, beds, baths, size, Zestimate, tax value, agent and every photo, with large areas handled automatically.

Pricing

from $1.00 / 1,000 property listings

Rating

5.0

(1)

Developer

FlowExtract API

FlowExtract API

Maintained by Community

Actor stats

8

Bookmarked

80

Total users

10

Monthly active users

2 days ago

Last modified

Share

Collect property listings from Zillow — for sale, for rent, or recently sold — anywhere in the United States.

Type a location. That is the whole setup. You get back every matching listing as structured data: price and price history, address and coordinates, beds, baths, interior and lot size, property type, Zillow's value and rent estimates, tax-assessed value, days on market, the listing agent and brokerage, and every photo on the listing — not just the thumbnail.


✨ What makes this one different

🔎 No URL wranglingEnter Austin, TX or 78704. No need to build a search on Zillow and copy a URL — though you can still paste one if you prefer.
🗺️ Large areas are handledZillow serves only so many listings per search, however many exist. Big areas are split into smaller ones automatically and each is searched, so a whole city or county comes back complete instead of capped.
📸 The full photo galleryAround 30 photos per listing on average, at full size — not one thumbnail. No separate image scraper needed.
🎛️ Filters built inPrice, beds, baths, square feet, lot size, year built, HOA, property type, keywords, sort order — set them here, not on Zillow.
💸 Pay for what you keepA small run fee, then a per-listing charge — no charge for empty pages, duplicates, or out-of-area rows the actor filters out.
♻️ Resumes itselfIf a long run is interrupted, restarting continues from where it stopped instead of re-collecting — and re-charging for — what you already have.
📐 Output that matches its docsEvery field listed below is a field the actor emits, checked automatically before release.

🚀 Quick start

Everything for sale in one city

{
"location": "Austin, TX",
"listingType": "buy",
"maxResults": 500
}

Rentals under $2,500 with at least 2 bedrooms

{
"location": "78704",
"listingType": "rent",
"maxPrice": 2500,
"minBeds": 2,
"maxResults": 200
}

Recently sold houses across several ZIP codes

{
"locations": ["78701", "78702", "78703"],
"listingType": "sold",
"homeTypes": ["houses"],
"maxResults": 300
}

A search you already built on Zillow

{
"startUrls": [
{ "url": "https://www.zillow.com/austin-tx/?searchQueryState=..." }
],
"maxResults": 1000
}

⚙️ Input

FieldTypeDescription
locationstringA city, ZIP code, county, or neighbourhood — "Austin, TX", "78704", "Travis County, TX".
listingTypestringbuy (for sale), rent, or sold. Default buy.
locationsarrayMore places to search in the same run, same filters applied to each.
maxResultsintegerCap per location or URL. Default 100. 0 means no limit. This is also your cost ceiling.

Filters — all optional

Size and priceminPrice, maxPrice, minBeds, maxBeds, minBaths, maxBaths, minSqft, maxSqft, minLotSize, maxLotSize, minYearBuilt, maxYearBuilt, maxHoaFee

PropertyhomeTypes, hasPool, hasAirConditioning, isWaterfront, singleStory, hasGarage, minParkingSpots, has3dTour

Listingkeywords, sortBy, listedWithin, openHousesOnly, includePending, and the for-sale toggles foreclosure, auction, agentListed, ownerPosted, newConstruction

Leave anything blank to skip it. A few filters only apply to certain markets and are ignored elsewhere: the for-sale toggles, minParkingSpots, and includePending apply to for-sale searches, not rentals.

Every filter here is checked against live results before release — a control that does not measurably change what comes back is not shipped.

Advanced

FieldTypeDescription
startUrlsarrayZillow search URLs copied from your browser. Every filter you set on Zillow carries over — use this for searches the filters above cannot express. Can be combined with locations.
extractionMethodstringSUBDIVIDE (default) splits areas too large for one search. PAGINATION runs a single search and stops at Zillow's own limit — faster for small areas.

There is no proxy setting to configure. Network routing is handled for you.


📦 Output

One record per property. Every field below appears on every record; a field with no value for a given listing is null rather than missing.

Identity

FieldTypeDescription
zpidstringZillow property id — the stable unique identifier for a listing
propertyIdstringInternal listing id for this search result
palsIdstringZillow internal listing id
detailUrlstringAbsolute URL of the property page on Zillow

Status

FieldTypeDescription
statusTypestringListing status (FOR_SALE, FOR_RENT, RECENTLY_SOLD, …)
statusTextstringHuman-readable status, e.g. "Active" or "House for rent"
homeStatusstringDetailed status code, e.g. FOR_SALE, PENDING, SOLD
homeStatusForHDPstringStatus as shown on the property page
rawHomeStatusCdstringRaw status code from the listing feed
marketingStatusstringSimplified marketing status, e.g. "For Sale by Agent"
listingCategorystringBroad category, e.g. ForSale or ForRent
listingCategoryTextstringReadable category, e.g. "For Sale (Broker)"
listingSubTypesarrayListing sub-types that apply, e.g. ["FSBA"] for sale-by-agent
isRelaxedResultbooleanTrue when Zillow returned this as a nearby match rather than a direct hit

Address & location

FieldTypeDescription
addressstringFull address as one string
streetAddressstringStreet line only
citystringCity
statestringTwo-letter state code
zipcodestringZIP code
isUndisclosedAddressbooleanTrue when the exact address is withheld
latitudenumberLatitude
longitudenumberLongitude

Price

FieldTypeDescription
pricenumberPrice as a number — sale price, or monthly rent for rentals
priceTextstringPrice exactly as displayed, e.g. "$1,175,000" or "$1,895/mo"
priceForHDPnumberPrice used on the property page
priceChangenumberChange since the last price update, negative for a cut
priceReductionstringReadable price-cut summary, e.g. "$25,000 (Apr 3)"
datePriceChangedstringISO timestamp of the last price change
currencystringCurrency code
countrystringCountry code
shouldShowRequestOnPricebooleanTrue when the listing hides its price behind a request
shouldShowZestimateAsPricebooleanTrue when the estimate stands in for a list price

Valuation

FieldTypeDescription
zestimatenumberZillow's estimated market value
rentZestimatenumberZillow's estimated monthly rent
taxAssessedValuenumberTax-assessed value

Property details

FieldTypeDescription
homeTypestringProperty type, e.g. SINGLE_FAMILY, CONDO, TOWNHOUSE, APARTMENT
bedroomsnumberNumber of bedrooms
bathroomsnumberNumber of bathrooms
livingAreanumberInterior area in square feet
lotAreaValuenumberLot size, in the unit given by lotAreaUnit
lotAreaUnitstringUnit for lotAreaValue — sqft or acres
daysOnZillownumberDays listed on Zillow (-1 when unknown)
timeOnZillownumberMilliseconds listed on Zillow

Flags

FieldTypeDescription
isZillowOwnedbooleanTrue for a Zillow-owned home
isFeaturedbooleanTrue for a featured listing
isShowcaseListingbooleanTrue for a Showcase listing
isPremierBuilderbooleanTrue for a paid new-construction builder listing
isNonOwnerOccupiedbooleanTrue when the owner does not live there
isPreforeclosureAuctionbooleanTrue for a pre-foreclosure auction
isUnmappablebooleanTrue when the property has no usable map position
has3DModelbooleanTrue when a 3D home tour is available
hasVideobooleanTrue when a video tour is available

Listing agent

FieldTypeDescription
brokerNamestringListing brokerage
agentNamestringListing agent, usually with licence number
agentPhotoUrlstringListing agent photo URL

Media

FieldTypeDescription
mainImagestringPrimary listing photo URL
photosarrayEvery listing photo URL, full size
photoCountnumberNumber of photos in photos
hasImagebooleanTrue when the listing has at least one photo

Record metadata

FieldTypeDescription
_sourcestringOrigin tag for this record — always zillow_scraper
source_urlstringThe search this record came from
scrapedAtstringISO timestamp of when the record was collected
proxyModestringNetwork route used for the request
chargedbooleanTrue when this result was billed; see chargeSkipReason when false
chargeSkipReasonstringWhy this result was delivered without being billed. Absent on billed results.
_errorstringOnly on an explanatory row when a search could not run — a bad location, for example. Listing rows never carry it, so filter on it to separate the two.

Sample record

{
"zpid": "97557004",
"detailUrl": "https://www.zillow.com/homedetails/27006-Rocky-Rim-San-Antonio-TX-78266/97557004_zpid/",
"statusType": "FOR_SALE",
"statusText": "House for sale",
"address": "27006 Rocky Rim, San Antonio, TX 78266",
"city": "San Antonio",
"state": "TX",
"zipcode": "78266",
"latitude": 29.703697,
"longitude": -98.29464,
"price": 1175000,
"priceText": "$1,175,000",
"priceChange": -25000,
"priceReduction": "$25,000 (Apr 3)",
"zestimate": 1183300,
"rentZestimate": 5017,
"taxAssessedValue": 1175610,
"homeType": "SINGLE_FAMILY",
"bedrooms": 4,
"bathrooms": 5,
"livingArea": 3672,
"lotAreaValue": 1.09,
"lotAreaUnit": "acres",
"daysOnZillow": 46,
"brokerName": "Keller Williams Heritage",
"agentName": "Marcus Soliz TREC #786473",
"photoCount": 42,
"photos": ["https://photos.zillowstatic.com/fp/…-p_e.jpg", "…"]
}

💰 Pricing

Two charges: a $0.005 run fee when the actor starts, then a per-property charge for each listing saved. Nothing is charged for pages that return nothing, for duplicates, or for out-of-area rows the actor filters out.

Apify planPrice per property1,000 listings
Free$0.0020$2.00
Bronze$0.0016$1.60
Silver$0.0013$1.30
Gold / Platinum / Diamond$0.0010$1.00

Plus $0.005 per run when the actor starts. On a typical run that is a rounding error — collecting 1,000 listings on Bronze costs $1.605 in total.

Set maxResults to cap a run, or set a maximum spend on the run itself: the actor subtracts the run fee first and then collects only what your limit actually covers, so it stops at a planned number instead of running into its ceiling.


💡 Good to know

  • Duplicates are removed within a run. When a large area is split, neighbouring pieces overlap; the same listing is saved and billed once.
  • maxResults applies per location or URL, not to the run as a whole. Three locations at 100 each is up to 300 listings.
  • Sorting affects what you get when capping. With maxResults set, sortBy: "days" gives the newest listings rather than an arbitrary slice.
  • Rentals put monthly rent in price. priceText keeps the displayed form, e.g. "$1,895/mo".
  • This actor reads search results. Fields shown only on an individual property page — full description, price history table, school ratings, tax history — are not included.
  • A bad location does not fail the run. You get a successful run with one row explaining what went wrong, so a typo never costs you a failed run.

🎯 Perfect for

  • 🧑‍💼 Agents and brokerages — build and monitor listing lists across a market
  • 📈 Investors and analysts — track price cuts, days on market, and rent-to-value across an area
  • 🏢 Proptech teams — feed a CRM, valuation model, or search product
  • 🗺️ Researchers — assemble complete regional datasets, not a capped sample
  • 🤖 Developers — one call from a workflow, straight to JSON or CSV

📞 Support

🏠 Real estate

🛠️ Developer tools


  • Public data only — processes publicly available listing information
  • Respects source limits — operates within the source site's rate limits and terms of use
  • No personal data storage — nothing is retained beyond your own dataset
  • Commercial use — suitable for business intelligence and research applications
  • No affiliation with or endorsement by Zillow is implied.

Zillow Scraper — by FlowExtract API. Turn any website into structured data.