Zillow ZIP Search Pro (FSBO, investor, rent & sold) avatar

Zillow ZIP Search Pro (FSBO, investor, rent & sold)

Pricing

Pay per event

Go to Apify Store
Zillow ZIP Search Pro (FSBO, investor, rent & sold)

Zillow ZIP Search Pro (FSBO, investor, rent & sold)

Search Zillow by ZIP code, city or county. Clean ZIP lists, per-ZIP status, FSBO-first investor mode, rent/sold/pending in one run, investor columns and an optional detail add-on. Pay per result with hard cost caps.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Carina Hatton

Carina Hatton

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Zillow ZIP Search Pro: FSBO, investor, rent and sold listings by ZIP code

Paste a list of ZIP codes and get a clean, flat table of Zillow listings: agent listings, for sale by owner (FSBO), pending, for rent and recently sold. Every ZIP gets its own status line, so you can tell a ZIP that truly has no listings from one that was blocked or mistyped. Pricing is pay per result: you pay for the listings you get, and the detail add-on is optional and capped.

Who it's for

  • Investors and wholesalers. FSBO-first searches, price cuts, days on Zillow, price compared with the Zestimate, rent Zestimate and gross rent yield, tax-assessed value and a non-owner-occupied flag, all in one row per property.
  • Agents. Watch your farm ZIPs for FSBO, coming-soon, pending and sold activity, sorted newest first and exported straight to CSV or Excel.
  • Analysts and data teams. Stable, flat columns, per-ZIP totals reported by Zillow, and a machine-readable run summary.

Common problems with Zillow ZIP scrapers, and how this Actor handles them

Common problemWhat this Actor does
A ZIP returns 0 rows and you can't tell whether it was empty, blocked or invalidEach input gets a status (ok, partial, no_results, blocked, invalid, skipped) with a plain-English message and Zillow's own result total, in the ZIP_SUMMARY record
Pasted ZIPs fail because of stray spaces, quotes, ZIP+4 or a lost leading zeroInputs are cleaned automatically ("33139 " → 33139, 2108 → 02108, 48080-1234 → 48080). Duplicates are removed and unfixable entries are reported, not silently dropped
FSBO homes get buried under agent listings when you set a result limitInvestor mode runs a dedicated owner-listing search for every ZIP first
Nearby-ZIP results mixed into your dataStrict in-ZIP results by default. Turn strictZip off to keep nearby homes; they are flagged isNearbyResult
Nested JSON that breaks spreadsheetsOne flat row per listing, with ready-made dataset views
Surprise bills from optional extrasA per-run detail cap (maxDetails), a total result cap, a per-ZIP cap and a clean stop before your Maximum cost per run
Rent and sold searches that ignore your price filterSeparate rent range (rentMin / rentMax) and sale price range, re-checked on every row

What you get

  • Listing types in one run: agent, FSBO, new construction, coming soon, auction, foreclosure, pending, for rent and sold.
  • Filters (applied on Zillow's side): home type, minimum beds and baths, price range, rent range, days on Zillow, sold within, sort order.
  • Investor columns: priceCutUsd, daysOnZillow, priceVsZestimateUsd / priceVsZestimatePct, rentZestimate, grossRentYieldPct, pricePerSqft, taxAssessedValue, isNonOwnerOccupied.
  • Optional detail add-on: year built, HOA, Zillow's area tax rate and an estimated annual tax, last sold date and price, date posted, MLS ID, views and saves, description and brokerage. It can also return the public "Listed by" name and phone (off by default).

Input examples

FSBO leads in three ZIPs (investor mode), details on the first 25:

{
"zipCodes": ["78701", "33139", "48080"],
"investorMode": true,
"includeDetails": true,
"maxDetails": 25,
"maxResults": 300,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Houses and townhomes under $450k with 3+ beds, plus recent sales for comps:

{
"zipCodes": ["48080", "48081"],
"listingTypes": ["forSaleByAgent", "forSaleByOwner", "sold"],
"homeTypes": ["houses", "townhomes"],
"bedsMin": 3,
"priceMax": 450000,
"soldInLast": "90",
"maxResultsPerZip": 100,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Rentals between $1,500 and $3,000 a month:

{
"zipCodes": ["33139"],
"listingTypes": ["forRent"],
"rentMin": 1500,
"rentMax": 3000,
"maxResults": 100,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Main input fields

FieldWhat it does
zipCodesZIP codes to search. Messy input is cleaned (see above)
locationsOptional city or county names, e.g. "Austin, TX"
listingTypesAny of forSaleByAgent, forSaleByOwner, newConstruction, comingSoon, auction, foreclosure, pending, forRent, sold. Default: agent + FSBO
investorModeSearches FSBO first for every ZIP
homeTypeshouses, townhomes, multiFamily, condos, apartments, lotsLand, manufactured
bedsMin, bathsMin, priceMin, priceMax, rentMin, rentMaxFilters. 0 means no limit
daysOnZillow, soldInLastany, 1, 7, 14, 30, 90, 6m, 12m, 24m, 36m
sortByrelevance, newest, priceLow, priceHigh
strictZipKeep only homes inside the requested ZIP (default on)
includeDetailsDetail add-on, $0.005 per successfully enriched listing
maxDetailsTotal cap on detail enrichments for the whole run (default 20; 0 = none). Listings beyond the cap are saved without details and without the detail charge
includeListedByContactAdds the public "Listed by" name and phone from the listing page (detail add-on only; off by default)
maxResultsTotal listing cap for the run (default 100)
maxResultsPerZipPer-ZIP cap (0 = no per-ZIP cap)
proxyConfigurationApify Proxy settings. Residential US is recommended

Output

There is one row per listing, with 79 flat columns. Dataset views: Overview, Investor, FSBO & listing details and Rentals & sold.

GroupFields
Identity and linkszpid, url, requestedZip, requestedLocation, searchMode, inRequestedZip, isNearbyResult, scrapedAt
Type and statuslistingStatus, statusText, listingType (AGENT, FSBO, NEW_CONSTRUCTION, …, RENTAL, RENTAL_BUILDING, SOLD), isFSBO, isAgentListed, isNewConstruction, isComingSoon, isAuction, isForeclosure, isPreforeclosureAuction
Addressaddress, street, unit, city, state, zipCode, latitude, longitude
Property and pricehomeType, price, priceUnit (total or per_month), priceText, bedrooms, bathrooms, livingAreaSqft, pricePerSqft, lotAreaValue, lotAreaUnit
Market signalsdaysOnZillow, priceCutUsd, lastPriceChangeUsd, lastPriceChangeDate, priceReductionText, openHouse, openHouseStart, openHouseEnd, comingSoonOnMarketDate, highlight
Valuationzestimate, rentZestimate, priceVsZestimateUsd, priceVsZestimatePct, grossRentYieldPct, taxAssessedValue, isNonOwnerOccupied
Sold and rentalssoldPrice, soldDate, buildingId, buildingName, buildingUnitsSummary, buildingAvailableUnits
MediaimageUrl, has3DModel, hasVideo, brokerName
Detail add-ondetailStatus, yearBuilt, hoaMonthlyUsd, propertyTaxRatePct, estAnnualTaxUsd, lastSoldDate, lastSoldPrice, datePosted, mlsId, pageViewCount, favoriteCount, description, brokerageName
Contact (opt-in)listedByRole, listedByName, listedByPhone

Notes on the data:

  • estAnnualTaxUsd is an estimate: list price × Zillow's displayed area tax rate. It is not the actual tax bill.
  • Zestimates are often missing from Zillow's search results, so the fill rate varies a lot by ZIP.
  • Price and tax history tables are not included because Zillow doesn't include them in the page it serves. Last sold date and price are included.
  • Apartment-building rental rows have zpid = null, listingType = RENTAL_BUILDING and a unit price summary.

Per-ZIP status (ZIP_SUMMARY)

Open the run's Storage → Key-value store → ZIP_SUMMARY record. There is one entry per input:

StatusMeaning
okListings saved and no pages blocked
partialSome listings saved, but at least one page was blocked. Re-run the ZIP to fill the gap
no_resultsZillow was reached but reports 0 matching listings, or none passed your filters or the strict-ZIP check. The message says which
blockedZillow blocked every page for this ZIP. Nothing was saved and nothing was charged for it
invalidNot a usable ZIP, or not recognised by Zillow
skippedNot processed because the run stopped early (result cap, cost limit or abort)

Each entry also includes zillowTotals (Zillow's own count for each search), saved, fsboSaved, nearbySkipped, filteredOut, duplicates, detailsOk, detailsFailed, detailsSkipped and capped (which limit stopped it).

Example: {"input":"33139 ","zip":"33139","status":"ok","message":"input \"33139 \" cleaned to 33139; stopped at limit: maxResultsPerZip","zillowTotals":{"forSale":936},"saved":20,...}

RUN_SUMMARY holds runtime, rows saved, the stop reason (max_results, charge_limit, aborted), maxDetails, detailsAttempted, detailsSkippedByCap, charged event counts, and request and block counts.

Pricing (pay per event)

EventPriceWhen it's charged
Actor start (apify-actor-start)$0.00005Once per run, per GB of memory (minimum one)
listing-result$0.0015Each listing row saved to the dataset
detail-enrichment$0.005Only when the detail add-on successfully reads that listing's page

Proxy and compute are included in these prices. You aren't billed separately for residential proxy traffic.

Example costs, calculated from the prices above:

  • 100 listings without details: 100 × $0.0015 = $0.15 (+ start event)
  • 100 listings with maxDetails: 20: $0.15 + 20 × $0.005 = $0.25 (+ start event)
  • 1,000 listings without details: $1.50 (+ start event)

Cost control

  • maxResults caps the total number of listings in the run, and maxResultsPerZip caps each ZIP.
  • maxDetails caps paid detail enrichments for the whole run. Once it's reached, the remaining listings are still saved, but without details and without the detail charge.
  • Maximum cost per run (set in Apify's run options): before each listing, the Actor checks that the listing (plus detail, if any) fits in the remaining budget. If only the listing fits, it is saved without details. If nothing fits, the run stops cleanly with stopReason: "charge_limit", and the ZIPs it didn't reach are marked skipped.
  • No charge for failures: blocked, invalid or empty ZIPs produce no rows and no listing charges. A detail page that fails or can't be read is not charged (detailStatus explains why).

FAQ

Do I need a proxy? Yes, for reliable results. Zillow uses bot protection. Use Apify residential proxy with country US (the default prefill).

How many listings can one ZIP return? Zillow shows at most 20 pages (about 41 listings each) per search. For very dense areas, combine several listing types or filters to split the results.

Why does a ZIP have fewer rows than Zillow's total? Usually a cap (maxResultsPerZip or maxResults), the strict-ZIP check removing nearby homes, or your filters. ZIP_SUMMARY shows which one.

Why are some Zestimates empty? Zillow leaves them out of many search results. The detail add-on doesn't add Zestimates; it adds the fields listed above.

Can I get the owner's phone number? Only what the listing itself publicly shows in its "Listed by" box, and only if you turn on includeListedByContact together with the detail add-on. The Actor doesn't look up owners, skip-trace or enrich contacts.

How fast is it? Requests are made one at a time with a polite delay (default 2.5 s plus jitter). A run without details covers a few ZIPs in well under a minute. With details, expect a few seconds per enriched listing.

Can I schedule it? Yes. Use Apify Schedules (for example, daily with daysOnZillow: "1" and sortBy: "newest") to catch new FSBO listings.

  • The Actor reads only publicly visible listing pages, one request at a time. It does not log in or bypass paywalls.
  • You are responsible for how you use it. Zillow's Terms of Use restrict automated access and reuse of its data. Make sure your use is lawful and complies with Zillow's terms and any applicable laws.
  • Contact data: "Listed by" names and phones are off by default and come only from the public listing page. If you contact anyone by phone, text or email, you are responsible for complying with the TCPA, the National Do-Not-Call Registry and state DNC lists, CAN-SPAM and state telemarketing laws. Don't use this data for unsolicited robocalls or texts.
  • Data may be incomplete or out of date. Verify important details on Zillow or with the listing agent before acting on them.