← Guides

How-to

How to run Zillow & Redfin Property Data Scraper

Step-by-step: the exact input, what each of the 40 fields means, and the property record that comes back from Redfin or Zillow.

You have a street address and you need the house behind it as data — what it’s worth, what it last sold for, what the county assesses it at, beds, baths, square footage. Redfin and Zillow both show all of that on the listing page, so for one address you should just open the page and read it. It stops being a minute of your life somewhere around the twentieth address, when it’s a spreadsheet column of addresses and every row is a page-load, a scroll, and six copy-pastes. Worse, you can’t just script it: a plain fetch or a curl at either site comes back 403/429, because they fingerprint the client, not just the IP. This actor is that same public listing data, as one clean JSON record of up to 40 fields, addressable from an API.

What you’ll need

Nothing but an Apify account and the address. The actor drives a real browser for you, so there’s no API key to get and — for Redfin — no proxy to configure.

Redfin works direct at low volume, and it’s where the full record comes from. Zillow sits behind PerimeterX and returns only the core physical facts, so for Zillow (or for higher volume) turn on the residential proxy with the useProxy toggle. Most of the time you never touch it.

Step 1 — Open the actor

Open Zillow & Redfin Property Data Scraper on the Apify Store and press Try for free.

Step 2 — Fill in the input

Three fields:

  • Property address — a full US street address, e.g. 745 Garland Dr, Palo Alto, CA 94303. Street number, street, city, state, ZIP. The more complete it is, the more reliably it resolves to a single home.
  • Listing sourceauto (the default), redfin, or zillow. auto looks the property up on Redfin, and falls back to Zillow only when the residential proxy is on — a direct Zillow attempt is near-certain to be blocked, so queueing one would just make every miss slower. Pick a single source to pin the lookup to it.
  • Use residential proxy — off by default. Leave it off for Redfin. Turn it on for Zillow, or if you’re running enough volume that a direct IP starts getting rate-limited.

Step 3 — Run it and read the result

Press Start. A few seconds later you get one record. A hit looks like this (trimmed — the real record carries the full price history, every amenity group, and the whole photo gallery):

{
  "found": true,
  "source": "redfin",
  "data": {
    "address": "745 Garland Dr",
    "city": "Palo Alto",
    "state": "CA",
    "zip": "94303",
    "county": "Santa Clara County",
    "estimatedValue": 8608047,
    "price": 6750000,
    "priceLabel": "Last Sold Price",
    "pricePerSqft": 2094,
    "lastSoldDate": "2018-08-09",
    "status": "Sold",
    "priceHistory": [
      { "date": "2018-08-09", "event": "Sold (MLS)", "price": 6750000 },
      { "date": "2018-07-19", "event": "Listed", "price": 5988000 }
    ],
    "taxAssessedValue": 7529749,
    "taxesDue": 91413.72,
    "taxYear": 2025,
    "beds": 5,
    "baths": 4.5,
    "sqft": 4110,
    "yearBuilt": 2012,
    "lotSizeSqft": 12722,
    "propertyType": "Single Family Residential",
    "latitude": 37.4377962,
    "longitude": -122.133369,
    "fips": "06085",
    "apn": "00361019",
    "mlsId": "ML81715261",
    "listingAgent": "Jennifer Buenrostro",
    "listingBroker": "Compass",
    "schools": [
      { "name": "Walter Hays Elementary School", "type": "Public", "grades": "K-5", "rating": 9 }
    ],
    "riskFactors": {
      "flood": { "score": 1, "summary": "Minimal risk of a flood reaching the building in the next 30 years" }
    },
    "sourceUrl": "https://www.redfin.com/CA/Palo-Alto/745-Garland-Dr-94303/home/1210666"
  }
}

The fields worth knowing about:

  • estimatedValue is the Redfin Estimate — Redfin’s own automated valuation, in whole dollars. It’s their number, not ours, and not a Zestimate. It came back on every address we tested, including sold and off-market homes.
  • price and priceLabel go together. priceLabel tells you whether price is what the home is currently asking ("Price") or what it last sold for ("Last Sold Price") — don’t read one without the other.
  • priceHistory is the full listed / sold / price-change / delisted timeline, newest first.
  • taxAssessedValue is the county’s assessed value (land + improvement), and taxYear is the roll year it comes from — whatever the county last filed, which is often not the current year.
  • apn, fips, county and latitude/longitude are the join keys: they let a record line up with county assessor files and census data instead of dead-ending at a street address.
  • schools carries the GreatSchools 1-10 rating; riskFactors carries First Street’s 1-10 score for flood, fire, heat, wind and air.

data.address is the street line only (745 Garland Dr), not the whole “city, ST zip” — the city, state, and ZIP are their own fields so you can map them straight into a form or a database. baths can be fractional (2.5). lotSizeSqft is always square feet; if the source reports acres, the actor converts it.

Any field it doesn’t have, it omits — you’ll never get a null, a 0, or a guessed value standing in for “unknown”. That’s why the field count varies by home: valuation, status and geo come back on effectively any resolvable address, but tax figures need a public county record, and mlsId, description and the agent fields need an MLS record. A never-listed home just won’t have those keys.

One caveat on all of it: values are passed through exactly as the source publishes them. If Redfin’s own record has something wrong — we found the Empire State Building filed under the wrong county — you get their error, not a corrected version.

If the address doesn’t resolve on that source — or the source blocks the lookup — you get:

{ "found": false }

Step 4 — Reading the charge

You’re charged once per successful lookup — a match with address, city, and ZIP. A found: false result is free, so a bad address or a blocked source never costs you anything. That makes it safe to throw a messy address list at it: you only pay for the ones that come back with real facts.

Where to go from here

Point your app at it: send one address per call and prefill a property form, enrich a CRM record, or build a comps table. See Auto-fill a property form from just an address for the end-to-end pattern, or open the actor directly: Zillow & Redfin Property Data Scraper.

Working on the property too? Verify the trades you hire with Multi-State Contractor & Trade License Lookup.

Last updated 2026-07-29