Zillow Listings Scraper -- No Login Required avatar

Zillow Listings Scraper -- No Login Required

Pricing

from $1.60 / 1,000 property extracteds

Go to Apify Store
Zillow Listings Scraper -- No Login Required

Zillow Listings Scraper -- No Login Required

Extract Zillow property listings, Zestimates, price labels, and optional detail data. No login or cookies needed. Supports city/ZIP search, Zillow URL mode, and address or ZPID lookup.

Pricing

from $1.60 / 1,000 property extracteds

Rating

0.0

(0)

Developer

Crowd Pull

Crowd Pull

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Scrape property listings, Zestimates, agent contact info, price history, and tax records from Zillow. No login, no cookies. Search by location, paste a Zillow URL, or look up specific addresses -- one actor does all three.

Smart Scrape: stop re-scraping data you already have

Every other per-result Zillow scraper on the Apify Store charges you the same price whether you're pulling a property for the first time or the tenth. This one doesn't.

Turn on Smart Scrape and the actor keeps a persistent cache of every property it's seen. On the next run, anything already in the cache gets skipped. You pay $0.50/1K for the skip instead of the full extraction price.

Say you scrape Houston every week. Week 1 pulls 2,000 listings. Week 2, 1,700 of those haven't changed. Smart Scrape skips them and only extracts the 300 new ones. That's 300 extractions + 1,700 cache checks instead of 2,000 extractions -- about 60% cheaper.

No other per-result Zillow scraper does this.

Three modes, one actor

Other Zillow scrapers make you use separate actors for searching vs. looking up individual properties. This one combines them:

  • Search -- find listings by city, ZIP, or neighborhood with filters applied programmatically
  • URL -- paste a Zillow search URL and the actor picks up its filters directly
  • Lookup -- fetch full details for specific addresses or ZPIDs

What you get

From search (41 fields per property)

Address, coordinates, price, buyer-facing price label, price explanation, listing flags, Zestimate, rent Zestimate, tax assessed value, beds, baths, sqft, lot size, home type, listing status, days on Zillow, 3D tour/video flags, broker name, primary image, detail URL.

With detail enrichment (optional)

Set includeDetails: true to hit each property's detail page. This adds:

  • Agent name, phone, email
  • Broker/agency name
  • Year built, description, county, MLS ID
  • All photo URLs (not just the thumbnail)
  • Monthly HOA fee and property tax rate
  • Price history -- every listing, sale, and price change with dates and agents
  • Tax history -- assessed values and tax payments going back 20+ years

Filters

FilterOptions
Listing typeFor Sale, Recently Sold, For Rent, Foreclosures
Price rangeMin/Max
BedroomsMinimum
BathroomsMinimum
Square feetMin/Max
Lot sizeMin/Max
Year builtMin/Max
Home typesHouses, Townhomes, Multi-Family, Condos, Land, Apartments, Manufactured
Sort byNewest, Relevance, Price (Low/High), Bedrooms, Bathrooms, Sqft, Lot Size, Zestimate
Days on Zillow1 day to 36 months
AmenitiesPool, AC, Waterfront, Single Story, Garage, Basement, 3D Tour

Search extraction

With residential proxies, search mode uses Zillow's server-rendered search result page data first: it builds a region-locked searchQueryState URL, reads the __NEXT_DATA__ payload, and paginates with Zillow's own /2_p/, /3_p/ paths. This keeps ZIP and city searches tied to Zillow's canonical region instead of an approximate map box.

If the SRP path is blocked or no proxy is available, the actor falls back to Zillow's async search API. For ZIP searches, fallback rows are post-filtered to the requested ZIP so nearby ZIP codes do not leak into the output.

Zillow caps visible SRP results at about 500 listings. When that cap applies, rows include resultsCapped: true and scrapeWarnings includes zillow_srp_result_cap. Narrow the region or filters for full coverage.

How it compares

CrowdPullOther PPE scrapers
Smart Scrape dedupBuilt-in, $0.50/1K skipsNot available
ModesSearch + URL + LookupUsually one
Memory2 GB default, HTTP-first search1-4 GB, often browser-based
Price + tax historyIncluded with detail enrichmentSeparate actor or missing
FiltersProgrammatic -- no URL wranglingMost need a Zillow URL
Agent contact infoName, phone, emailVaries

Pricing

EventPer 1,000Notes
Property extracted$2.00 (FREE/BRONZE tier)Volume discounts up to 40%
Detail enrichment$2.50 (FREE tier)Only charged when enabled and successful
Smart Scrape skip$0.50Flat rate for cached properties
Actor start$0.0005Once per run, charged by Apify's synthetic start event

Search + detail together runs $4.50/1K. Using two separate actors elsewhere costs $5.00+/1K.

Input examples

{
"mode": "search",
"location": "Houston, TX 77008",
"listingType": "for_sale",
"priceMin": 200000,
"priceMax": 500000,
"bedsMin": 3,
"homeTypes": ["houses", "townhomes"],
"maxResults": 100,
"includeDetails": true
}

URL

{
"mode": "url",
"searchUrls": [
"https://www.zillow.com/houston-tx/?searchQueryState=..."
],
"maxResults": 500
}

Lookup

{
"mode": "lookup",
"addresses": ["1246 Omar St, Houston, TX 77008"],
"zpids": ["27886690"]
}

Sample output

A single record with detail enrichment enabled:

{
"zpid": "27783682",
"address": "1246 Omar St, Houston, TX 77008",
"streetAddress": "1246 Omar St",
"city": "Houston",
"state": "TX",
"zipcode": "77008",
"latitude": 29.787777,
"longitude": -95.38971,
"price": 1050000,
"zestimate": 1010800,
"rentZestimate": 3163,
"taxAssessedValue": 929206,
"beds": 4,
"baths": 2,
"sqft": 2454,
"lotSize": 6272,
"yearBuilt": 1930,
"homeType": "MULTI_FAMILY",
"homeStatus": "RECENTLY_SOLD",
"daysOnZillow": 1,
"description": "Charming duplex in the Heights with...",
"detailUrl": "https://www.zillow.com/homedetails/1246-Omar-St-Houston-TX-77008/27783682_zpid/",
"imgSrc": "https://photos.zillowstatic.com/fp/a25daf77...-p_e.jpg",
"photoUrls": ["https://photos.zillowstatic.com/fp/...jpg", "..."],
"has3DModel": false,
"hasVideo": false,
"dateSold": "2026-03-10",
"county": "Harris County",
"monthlyHoaFee": null,
"propertyTaxRate": 1.75,
"agentName": "Nathan Mutchler",
"agentPhone": null,
"agentEmail": null,
"brokerName": "RJ Williams & Company RE LLC",
"mlsId": null,
"priceHistory": [
{ "date": "2026-03-10", "event": "Sold", "price": null, "source": "NTREIS" },
{ "date": "2026-01-30", "event": "Pending sale", "price": 1050000, "source": "NTREIS" },
{ "date": "2026-01-12", "event": "Listed for sale", "price": 1050000, "source": "NTREIS" }
],
"taxHistory": [
{ "time": 1741737710674, "taxPaid": null, "value": 975432, "valueIncreaseRate": 0.0497 },
{ "time": 1710201710674, "taxPaid": 19442.36, "value": 929206, "valueIncreaseRate": -0.0294 }
],
"scrapedAt": "2026-03-12T00:01:50.803Z"
}

Without detail enrichment, fields like yearBuilt, description, photoUrls, agentName, priceHistory, and taxHistory will be null.

Rows with price: 0 or price: null can still include useful Zillow context:

  • priceDisplay -- buyer-facing label such as Est. $220,900, Auction, or Contact for price
  • priceQualifier -- normalized reason such as auction_estimate, auction, contact_for_price, or no_published_price
  • priceExplanation -- short explanation when Zillow does not publish a normal list price
  • listingFlags -- normalized tags such as auction, foreclosure, bank_owned, new_construction, pending, contingent, or no_published_price

Each row also includes scrape-health fields:

  • scrapeStatus -- base, detail_enriched, or partial
  • detailStatus -- not_requested, enriched, or failed
  • detailFailureReason -- structured reason when enrichment fails, such as perimeterx_block or proxy_upstream_error
  • resultsCapped and scrapeWarnings -- set when Zillow's result cap or another guardrail affects coverage
  • source -- async_api, srp_next_data, or detail_lookup

Limitations

  • No school or neighborhood data. Competitors like maxcopell's detail scraper extract nearby schools and neighborhoods. We don't.
  • Price/tax history depends on a GraphQL hash that Zillow can rotate when they redeploy their frontend. If history stops returning data, the hash may need updating.
  • Sold price is sometimes undisclosed. For recently sold properties, price may be 0 or null when Zillow does not publish the sale price in search results.
  • Datacenter proxies don't work. Zillow's PerimeterX protection blocks them. You need residential proxies for production runs.
  • Detail enrichment is intentionally marked partial on anti-bot failures. The actor still returns the base search row and records the failure reason instead of silently dropping the listing.

Tips

  • Use residential proxies for production volume. Datacenter proxies get blocked by PerimeterX.
  • Keep includeDetails off unless you need detail-page-only fields. Search data comes from Zillow's SRP __NEXT_DATA__; detail pages are more likely to trigger anti-bot checks.
  • Start with maxConcurrency: 1. Bump to 2-3 if you're not seeing blocks. More concurrency means faster enrichment but higher block risk.
  • Turn on Smart Scrape for any recurring job. The savings add up fast.
  • URL mode is handy when you've already set up filters on Zillow's site. Just copy the URL.