Zillow, Realtor & Redfin Property Data by Address
Pricing
from $1.20 / 1,000 property records
Zillow, Realtor & Redfin Property Data by Address
Get the same home from Zillow, Realtor.com and Redfin by street address, ID or listing URL, in one shape: price, facts, last sale, agent, MLS, photos — and each site's own estimate (Zestimate, Redfin, Realtor.com) side by side. Listed, sold and off-market homes. JSON, CSV or Excel, via API.
Pricing
from $1.20 / 1,000 property records
Rating
0.0
(0)
Developer
Mu0i
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
19 hours ago
Last modified
Categories
Features
Share
Get the same home from Zillow, Realtor.com and Redfin — by street address, ID or listing URL — in one shape: price, address and coordinates, beds, baths, living area, lot, year built, home type, days on market, list date, last sale, the listing agent and brokerage, the MLS number, the description, the photos, and each site's own estimates — the Zestimate, Redfin's estimate and Realtor.com's provider estimates — side by side. Homes for sale, for rent, sold or off market: a home needs no listing to have a record. Structured JSON, no browser, no proxy setup. Export to JSON, CSV, Excel or XML, run it on a schedule, call it from the API, or use it from an AI agent through Apify's integrations.
- 🏠 Three sites, one row shape — every row has the same fields whatever the source, so a Zillow row and a Redfin row compare column by column.
- 💲 Every site's estimate — the Zestimate, Redfin's and Realtor.com's, with ranges and history where the site gives them.
- 🔗 Paste addresses, IDs or links — a street address is asked of every site you pick; a zillow.com, realtor.com or redfin.com link finds the same home on the other two by its address.
- 🎯 Exact matches only — an address resolves when the house number, street, unit and ZIP (or city) agree, or not at all: never a neighbour's house.
- 💵 Pay per record — never for an address or an ID that finds no home.
What property data can you extract?
| Group | Fields |
|---|---|
| Identity | id (zillow:<zpid>, realtor:<id>, redfin:<id>), source, nativeIds, url |
| Status and price | status (FOR_SALE, COMING_SOON, PENDING — under contract, FOR_RENT, SOLD, OFF_MARKET, OTHER) and nativeStatus; price {amount, currency, kind} — the asking price, the rent, or the sale price; null off the market |
| Address and location | address {line, unit, city, state, zip, county}, geo {lat, lng} |
| Facts | propertyType (SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, APARTMENT, MANUFACTURED, LAND, FARM, COOP, OTHER) and nativePropertyType, beds, baths {total, full, half}, livingAreaSqft, lotSqft, yearBuilt, hoaMonthly |
| Listing | daysOnMarket, listedDate, listingAgent {name, brokerage, phone, license}, mls {id, name}, description, photos {count, urls} |
| Sales | lastSold {date, price} — the price is null where a state does not disclose sale prices (Texas, among others) |
| Estimates | valuation {estimates[], rentEstimates[]} — one entry per provider: provider, value, low, high, asOf, history[] |
| Per row | input (what you gave), unsupported (the fields this site never has), note (what is partial about this answer) |
How to get property records
- Click Try for free at the top of this page. Apify creates a free account if you do not have one — no card is needed to run this.
- Put street addresses, IDs or listing links into Addresses, ids or listing URLs — one per line. An address needs its city and state or its ZIP (
7705 Mowinkle Cv, Austin, TX 78736). - Pick the Sources — Zillow, Realtor.com, Redfin, or any of them. Each home is one row per source.
- Press Start. You are billed per row with a record, so lines × sources is your budget.
- Rows show up in the Dataset tab while the run is still going. Export to JSON, CSV, Excel or XML from there, or read them over the API.
Want every home in a city or ZIP rather than a list you already have? Run
Zillow, Realtor & Redfin Search — Free Listings on the place:
every row carries its id, ready to paste here.
The same home, three sites, measured
Read on 2026-10-28 for a block of Mowinkle Cove in Austin, TX:
| Home | Zillow | Realtor.com | Redfin |
|---|---|---|---|
| 7705 Mowinkle Cv — for sale at $550,000 | listed 2026-10-19, 4 bd / 3 ba, 2,491 sqft | the same | the same |
| 7706 Mowinkle Cv — off market, estimates | $694,400 (Zestimate) | $652,500 · $619,000 · $715,621 (three providers) | $577,248 |
The three sites agree on what the listed house is — beds, baths, living area, lot, year, list date, MLS number — and disagree, sometimes widely, on what an unlisted one is worth. That spread is the point of asking all three.
Input
| field | ||
|---|---|---|
properties | required | Street addresses, source IDs (zillow:…, realtor:…, redfin:…, or a bare zpid) or zillow.com / realtor.com / redfin.com home links, one per line |
sources | all three | Any of zillow, realtor, redfin |
includeValuation | on | Adds valuation: each site's own estimates, with ranges and history — in the row's price |
includePhotos | on | The photo URLs arrive with the record, so leaving this on is free; turn it off to keep rows small |
A home named by an ID or a link is fetched on its own site first, and its address is how the other sites are asked for the same home. Every field, with its default — paste the whole block and delete what you do not need:
{"properties": ["7705 Mowinkle Cv, Austin, TX 78736","https://www.zillow.com/homedetails/3611-30th-Ave-W-Seattle-WA-98199/48677710_zpid/"],"sources": ["zillow", "realtor", "redfin"],"includeValuation": true,"includePhotos": true}
Output example
One row per home per source, with the input it came from. A Redfin row, exactly as it lands in your dataset
(lists shortened, description trimmed, the agent's phone left out):
{"input": "7705 Mowinkle Cv, Austin, TX 78736","id": "redfin:31703680","source": "redfin","nativeIds": { "propertyId": "31703680", "listingId": "224517419" },"url": "https://www.redfin.com/TX/Austin/7705-Mowinkle-Cv-78736/home/31703680","status": "FOR_SALE","nativeStatus": "ACTIVE","propertyType": "SINGLE_FAMILY","nativePropertyType": "SINGLE_FAMILY_RESIDENTIAL","address": { "line": "7705 Mowinkle Cv", "unit": null, "city": "Austin", "state": "TX", "zip": "78736", "county": "Travis County" },"geo": { "lat": 30.2407032, "lng": -97.9092561 },"price": { "amount": 550000, "currency": "USD", "kind": "LIST" },"beds": 4,"baths": { "total": 3, "full": null, "half": null },"livingAreaSqft": 2491,"lotSqft": 48878,"yearBuilt": 1981,"daysOnMarket": 8,"listedDate": "2026-10-19","lastSold": { "date": "2023-10-24", "price": null },"hoaMonthly": null,"description": "For those looking for space, serenity, and uniqueness, then welcome to 7705 Mowinkle Cv! Tucked at the end of …","photos": { "count": 39, "urls": ["https://ssl.cdn-redfin.com/photo/92/mbmobile/571/genMbmob.5907571_0.jpg", "…"] },"listingAgent": { "name": "Lisa Munoz", "brokerage": "Compass RE Texas, LLC", "phone": "…", "license": null },"mls": { "id": "5907571", "name": "Unlock MLS" },"valuation": {"estimates": [{ "provider": "redfin", "value": 702599, "low": null, "high": null, "asOf": "2026-10-28","history": [{ "date": "2026-09-01", "value": 637827 }, { "date": "2026-10-01", "value": 702599 }, "…"] }],"rentEstimates": []},"unsupported": ["hoaMonthly", "baths.full", "baths.half", "listingAgent.license"],"note": null}
The Zillow and Realtor.com rows for the same home have exactly these fields; unsupported says which ones a site
never fills, so a null there is the site's answer, not a gap in this one.
How much does it cost?
Pay per record — plus Apify's $0.00001 run start. Platform usage is included: the run's memory and time are not billed on top, on any Apify plan.
| Event | Per 1,000 | What one unit is |
|---|---|---|
property | $2.00 | one home's record from one source — the estimates included |
Paid Apify plans pay less than this. The table above is the free-plan rate. Starter, Scale and Business each get a lower per-unit price — up to 40% off on Business — and the Actor's Pricing tab shows every tier before you run anything.
Is it free to try? Yes: Apify's free plan comes with monthly credit, enough for roughly 2,500 records at the rate above, and no card is needed.
There is no run minimum. You are never billed for a lookup that found nothing. An address with no exact
match, an ID a site does not have, or a line that is none of these becomes a row saying so in the dataset —
never a silently empty result, and never a charge. A run that fails because the data could not be reached —
after four minutes of trying — fails loudly, because that one is worth retrying. Your run budget
(maxTotalChargeUsd) is met exactly: the run delivers what fits and stops, never one record over.
Use cases
- Valuation — three sites' estimates for any home, listed or not, with each one's value history.
- Cross-checking a listing — does every site agree on the beds, the area, the price and the status?
- Enrich an address list — turn your CRM's addresses into records with IDs on all three sites.
- Investor screening — year built, lot size, HOA, last sale and days on market as typed fields for filters.
- Portfolio monitoring — schedule the same addresses weekly and diff price, status and estimates per site.
Integrations and API
Every Actor is an API endpoint. This starts a run, waits for it, and returns the rows in one call — swap in your token from Settings → Integrations:
curl -X POST 'https://api.apify.com/v2/acts/mu0i~zillow-property-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{ "properties": ["7705 Mowinkle Cv, Austin, TX 78736"], "sources": ["zillow", "realtor", "redfin"] }'
From JavaScript with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('mu0i/zillow-property-scraper').call({ properties: ['7705 Mowinkle Cv, Austin, TX 78736'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
From Python:
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('mu0i/zillow-property-scraper').call(run_input={'properties': ['7705 Mowinkle Cv, Austin, TX 78736']})items = client.dataset(run['defaultDatasetId']).list_items().items
Schedule it, get a webhook when a run finishes, or connect it to Make, Zapier, Google Sheets, Slack and the rest of Apify's integrations from the Actor's Integrations tab. Every Apify Actor is also a tool for AI agents through the Apify MCP server, so an assistant can look up a home for you in a sentence.
Good to know
Addresses are matched exactly, or not at all. A near-miss would ship the wrong house with no warning —
the worst kind of wrong — so on every site an address resolves only when the house number, the street, the unit
and the ZIP (or the city and state) all agree. Spelled-out words are fine (Cove is Cv, Avenue West is
Ave W). Anything else is a free row that says why, and names the closest homes where the site gives them.
Zillow's matching was measured on 122 known homes in four spellings each: no wrong house. Realtor.com's and
Redfin's candidates go through the same part-by-part comparison.
Sites disagree, and the rows show it. One site's public record can carry a sale another has not seen, and a
home that sold a month ago reads SOLD on one site and OFF_MARKET on another. Each row reports its own site,
unchanged; nativeStatus and nativePropertyType keep the site's own words beside the common ones.
Off the market there is no listing. A home that is not listed has no asking price, listing agent, list date or MLS number in its row — even where a site still shows those from a listing that ended years ago.
Redfin's home record does not cover rentals. A home Redfin lists for rent reads OFF_MARKET on its Redfin row,
with no rent — that is how Redfin's own home page shows it. The rental itself, with its rent, is a row of the
search Actor's for-rent results.
What each site never has is listed in every row's unsupported: Realtor.com gives no rent estimate, Redfin
no HOA fee and no full/half bath split. Sale prices are null in non-disclosure states such as Texas, on every
site — a null there is the state's rule, never estimated in.
A home reached twice is charged once — twice by address, or once by its ID and once by its address. A record
a site answers only partially is delivered with a note saying which part is missing, and charged. Runs do not
time out on you: if your run timeout is about to hit, the Actor stops ahead of it with everything collected so
far and says so in the status message. A temporary problem on our side is retried — each lookup that gets no
answer is asked for again every 20 seconds, until four minutes into the run — before its row is given up on,
free and marked to retry; rows already delivered always stand.
Related Actors
| Actor | What it does |
|---|---|
| Zillow, Realtor & Redfin Search — Free Listings | Type a place, get one row per listing per site — free — with an option to attach this full record to every row. |
FAQ
Is it legal to scrape property data? This Actor reads data that is publicly available to any visitor without logging in, and scraping public data is generally lawful. What you do with it is your responsibility: comply with each site's terms where they apply to you, treat agent names and phone numbers as personal data under GDPR and CCPA, and do not republish records wholesale. This is not legal advice.
Do I need a Zillow, Realtor.com or Redfin API key? No. This Actor needs no key, no account and no proxy setup.
Does it work for homes that are not for sale? Yes. A home does not need a listing to have a record; off-market and sold homes return their facts, their last sale and each site's estimate.
Where do I get an ID? You may not need one: a street address with its city and state, or its ZIP, works on
every site. Otherwise paste the home's link from any of the three sites, and every row of the
search Actor carries its id.
How fresh is the data? Every run reads the sites live. The exceptions: a Zillow record read in the last five minutes — by any run — is served from that read, and an address's ID on a site, which never changes, is remembered once found.
Is an estimate accurate? Each is its site's own figure, passed through unchanged; the Actor never computes or adjusts a value. Comparing them is what this Actor is for.
What export formats are there? JSON, CSV, Excel and XML from the Dataset tab, or any of them over the API.
Something is wrong. Open a ticket in the Issues tab of this Actor with the run id from the run's URL; every run carries one, and it is enough to find exactly what happened. That tab is the fastest route, because the run is already linked to the ticket.
Can I email instead? Yes — support@housedata.dev, for anything you would rather not post in public: billing, a private dataset, volume or custom needs. Include the run id from the run's URL, since that is what makes an answer one lookup away rather than a round of questions. Anything about the Actor's behaviour is better in Issues, where the next person with the same question can find the answer.