---
title: "Web Scraping Real Estate Data: A Guide | Scrape.ly"
description: "Web scraping real estate data from Zillow, Redfin and Realtor.com: fields per source, real runs with sold comps and price cuts, Python code and costs."
url: https://scrape.ly/blog/real-estate-data-scraping
markdown: https://scrape.ly/blog/real-estate-data-scraping.md
---

[Use cases](https://scrape.ly/blog/category/use-cases.md)

# Web Scraping Real Estate Data: Listings, Prices and Market Signals

How to collect real estate data from Zillow, Redfin, Realtor.com and dozens of other portals: which fields each source gives you, two real runs from 26 October 2026 (Las Vegas listings and Seattle sold comps), a Python script that merges the sources, and the cost per 1,000 homes.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 26, 2026

- Reading time

  10 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a blue house icon off two houses at night, beside a yard sign with the blue Zillow logo over a red rider and a green bush, and drops it into a crate](https://scrape.ly/media/real-estate-data-scraping.png?w=1080)

Web scraping real estate data means collecting listing pages from portals such as Zillow, Redfin and Realtor.com and turning them into rows: price, beds, baths, square feet, status, price history, sold prices and the signals around them. The fastest way to do it is a ready-made scraper per portal, run on a schedule, with the rows merged into one table you can query.

This guide covers which portal gives you what, what investors, agents and analysts use the data for, two real runs from 26 October 2026 (homes for sale in Las Vegas ZIP 89166 on Realtor.com and recently sold homes in Seattle on Redfin), a Python script that puts every portal into one schema, and the cost per 1,000 homes. Every number comes from those runs or from a reused run we label with its date. Short-term rental data is in [Airbnb MCP](https://scrape.ly/blog/airbnb-mcp.md).

## What real estate data you can scrape, and from where

Each portal has its own Actor in the Scrape.ly [Store](https://scrape.ly/store.md), all published by Roam & Roof. The three big US portals overlap on the basics and differ on the extras:

| Actor                                                                                 | Best for                 | Fields beyond price, beds, baths, sqft                                                                    | Price per 1,000 homes                    |
| ------------------------------------------------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| [Zillow Detail Scraper](https://scrape.ly/store/roamandroof/zillow-detail-scraper.md) | Valuation checks         | Zestimate and rent Zestimate, HOA, tax rate, MLS ID, photos                                               | $1.31                                    |
| [Redfin Scraper](https://scrape.ly/store/roamandroof/redfin-scraper.md)               | Sold comps               | Redfin Estimate, sold date and price, price and tax history, schools, Walk Score, optional climate risk   | $1.47                                    |
| [Realtor.com Scraper](https://scrape.ly/store/roamandroof/realtor-scraper.md)         | Listing history and risk | Price cuts, last sale, listing history, tax assessments, building permits, flood, wildfire and noise risk | $0.108 summary, $0.537 with full details |

All three take a city, a ZIP code or a pasted search URL, and cover for-sale, sold and rental listings. Prices are per home saved, with platform usage included, checked on the Store pages on 26 October 2026.

Beyond the big three, the Store covers rentals (Apartments.com at $0.35 per 1,000 properties, RentCafe, HotPads), regional and niche US sources (HAR.com for Texas, StreetEasy, Trulia, Homes.com, FSBO.com, LandWatch, Crexi for commercial) and portals abroad, from Rightmove, Zoopla and Idealista to Immowelt, Funda, Domain and Bayut. Search the Store for the country or site you need.

## What teams use real estate data for

- **Comps and valuation.** Recently sold homes in a ZIP code with sold price, date, size and lot are the raw material of every comparative market analysis.
- **Deal screening.** Investors filter for price cuts, long days on market and listings priced below the estimate or the last sale.
- **Market monitoring.** Asking prices, inventory and price reductions per ZIP code, tracked weekly, show where a market is turning before the monthly reports do.
- **Rental analysis.** Rents, floor plans and fees per building feed underwriting and pricing for landlords and property managers.
- **Risk and location scoring.** Flood, wildfire and noise scores, schools and Walk Score turn a listing into an input for insurance, lending or proptech models.
- **Data products and agents.** Coordinates, county FIPS codes and MLS IDs make listings joinable with census, permit and tax data, and with an AI agent through MCP.

## A real run: homes for sale in Las Vegas ZIP 89166 (Realtor.com)

We ran the Realtor.com [Homes for sale in ZIP 89166](https://scrape.ly/store/roamandroof/realtor-scraper/presets/search-zip-details.md) preset on 26 October 2026 with `maxItems` lowered from 10 to 5. Realtor.com reported 659 matching listings; the run saved the first 5 with full details in 6.4 seconds. These are private homes, so we show ZIP and city only, never the street or the listing agent:

| Location            | List price | Beds | Baths | Sq ft | Built | Price cut | Last sale         |
| ------------------- | ---------- | ---- | ----- | ----- | ----- | --------- | ----------------- |
| Las Vegas, NV 89166 | $629,900   | 5    | 3     | 2,542 | 2010  | $20,100   | $380,000 (2019)   |
| Las Vegas, NV 89166 | $650,000   | 4    | 3     | 2,404 | 2008  | —         | $375,000 (2018)   |
| Las Vegas, NV 89166 | $435,000   | 3    | 2.5   | 1,943 | 2010  | —         | —                 |
| Las Vegas, NV 89166 | $515,000   | 3    | 2     | 1,939 | 2019  | $18,900   | $520,000 (2023)   |
| Las Vegas, NV 89166 | $3,450,000 | 5    | 3.5   | 4,419 | 2009  | $300,000  | $1,010,000 (2023) |

```plaintext
20261026T14:31:40.801Z [Scrapely] Container started (setup 1.7 s)
20261026T14:31:42.157Z [scrapely.actor] INFO  Searching 89166 (BUY) from offset 0
20261026T14:31:42.905Z [scrapely.actor] INFO  '89166': 659 matching listings
20261026T14:31:43.332Z [scrapely.actor] INFO  Loaded 5 property details in 0.4s
20261026T14:31:45.075Z [scrapely.actor] INFO  Requests: 6, response bytes: 182769
20261026T14:31:45.077Z [scrapely.actor] INFO  Saved 5 properties in 3.0s.
20261026T14:31:45.678Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

Five rows, and already three market signals. Three of the five had cut their price, by $18,900 to $300,000. The 2019 build at $515,000 is now listed below the $520,000 it sold for in May 2023, which is exactly the kind of row a deal screen should surface. The $3.45 million home sits on a lot of 435,600 square feet (10 acres), so its $781 per square foot isn't comparable with the others at $224 to $270. Every row also carried a flood score of 1 ("minimal", FEMA zone X), between 8 and 11 nearby schools and, for four of the five, the 2025 tax bill.

## A real run: recently sold homes in Seattle (Redfin)

For comps, sold prices matter more than asking prices. We ran the Redfin [Recently sold homes in Seattle](https://scrape.ly/store/roamandroof/redfin-scraper/presets/search-sold.md) preset the same day with `maxItems` lowered from 15 to 5. It saved 5 homes in 10.9 seconds (27 requests, 0.7 MB over datacenter proxies). Again ZIP and city only:

| Location          | Listed at  | Sold for   | Sold vs list | Redfin Estimate | $/sq ft | Listed to pending |
| ----------------- | ---------- | ---------- | ------------ | --------------- | ------- | ----------------- |
| Seattle, WA 98118 | $1,150,000 | $1,185,420 | +3.1%        | $1,181,098      | $515    | 3 days            |
| Seattle, WA 98115 | $1,495,000 | $1,565,000 | +4.7%        | $1,514,036      | $683    | 5 days            |
| Seattle, WA 98178 | $788,000   | $750,000   | −4.8%        | $801,393        | $369    | 6 days            |
| Seattle, WA 98125 | $1,699,000 | $1,696,000 | −0.2%        | $1,863,825      | $501    | 18 days           |
| Seattle, WA 98122 | $1,950,000 | $1,950,000 | 0.0%         | $1,626,932      | $720    | 9 days            |

All five closed on 23 October 2026. Two sold over asking after going pending within 5 days; the one that took 18 days sold slightly under. The list prices and the pending dates come from each home's `priceHistory`, so one run gives you the sale-to-list ratio and the time to contract without a second source. The Redfin Estimate was within half a percent of the price for the first home and 16.6% below it for the last, a reminder to treat automated estimates as one input, not the answer.

For Zillow, we reuse our run from 25 October 2026: five homes for sale in Austin ranged from $185 to $650 per square foot, and only one of the five carried a Zestimate. The [Zillow data guide](https://scrape.ly/blog/scrape-zillow-data.md) walks through that run and the Zillow fields in detail, and the [Zillow scrapers](https://scrape.ly/scrapers/zillow.md) page compares the search, detail and agent Actors.

Scrape.ly Store Redfin Scraper For-sale, sold and rental homes from any Redfin search, location or property URL: price, Redfin Estimate, price and tax history, schools and coordinates. $1.47 per 1,000 homes.

[Try it free](https://scrape.ly/store/roamandroof/redfin-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape real estate listings without code

1. **Pick the portals.** Open each Actor, set a location (`search` on Realtor.com, `searchKeywords` on Redfin, `searchQueries` on Zillow) or paste a filtered search URL from the portal, and choose for sale, sold or rent.
2. **Save the input.** Use **Save as new…** in the **Input** menu, one saved input per market.
3. **Schedule it.** In **Automations**, create a new automation **On a schedule** (weekly for comps, daily for new listings) and add the Actors under **Run**.
4. **Keep what matters.** Use **Only new items since the last run** with `url` as the key to get only new listings, or **Only rows where…** to keep price cuts or homes under a threshold.
5. **Deliver.** Append rows to Google Sheets, post to Slack or email, or upload every run to S3 or R2 as JSON or CSV.

Set **Max cost per run** on each run; the run stops when it reaches it.

## Real estate data scraping with Python

Each portal names its fields differently, so the first job in any multi-source pipeline is one schema. This script (`pip install scrapely-client-python`) pulls homes for sale in one market from all three portals, maps them to the same columns and adds price per square foot:

```python
import os
from decimal import Decimal

from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
CAP = Decimal("0.05")

def run(actor, run_input):
    r = client.actor(actor).call(run_input=run_input, max_total_charge_usd=CAP)
    return list(client.dataset(r.default_dataset_id).iterate_items())

def normalize(source, h):
    if source == "zillow":
        row = {"zip": (h.get("listingAddress") or {}).get("zipCode"), "price": h.get("price"),
               "beds": h.get("bedrooms"), "baths": h.get("bathrooms"), "sqft": h.get("livingArea")}
    elif source == "redfin":
        row = {"zip": h.get("zip"), "price": h.get("price"),
               "beds": h.get("beds"), "baths": h.get("baths"), "sqft": h.get("sqft")}
    else:  # realtor
        row = {"zip": (h.get("address") or h.get("location") or {}).get("postalCode"), "price": h.get("listPrice"),
               "beds": h.get("beds"), "baths": float(h.get("bathsConsolidated") or h.get("baths") or 0),
               "sqft": h.get("sqft")}
    row["source"] = source
    row["price_per_sqft"] = round(row["price"]  row["sqft"]) if row["price"] and row["sqft"] else None
    return row

homes = (
    [normalize("zillow", h) for h in run("roamandroof/zillow-detail-scraper",
        {"searchQueries": ["Seattle, WA"], "maxItems": 10, "propertyStatus": "FOR_SALE"})]
    + [normalize("redfin", h) for h in run("roamandroof/redfin-scraper",
        {"searchKeywords": ["Seattle, WA"], "maxItems": 10, "searchMode": "sale"})]
    + [normalize("realtor", h) for h in run("roamandroof/realtor-scraper",
        {"search": "Seattle, WA", "maxItems": 10, "includeDetails": False})]
)
for h in sorted(homes, key=lambda h: h["price_per_sqft"] or 0):
    print(h)
```

We tested `normalize()` on the stored rows of the three runs in this article: it returns the same columns for every portal, and its price per square foot matches Redfin's own `pricePerSqft` field. The same listing can appear on all three portals; deduplicate on the full address in your own database, which the rows carry even though we don't print it here.

The same jobs run over the REST API (for example `POST https://api.scrape.ly/v2/actors/roamandroof~redfin-scraper/run-sync-get-dataset-items` with the JSON input; all runs here finished in under 11 seconds) and from AI agents through the hosted MCP server at `https://mcp.scrape.ly`. Our [Zillow MCP](https://scrape.ly/blog/zillow-mcp.md) guide shows the agent setup and prompts; the [Redfin API](https://scrape.ly/api/redfin-api.md) and [Realtor.com API](https://scrape.ly/api/realtor-com-api.md) pages show the other two portals as APIs.

## What it costs

Prices per home saved, platform usage included, checked on 26 October 2026: Zillow Detail $0.00131, Redfin $0.00147 (plus $0.00105 per agent email if you turn that option on), Realtor.com $0.000108 per listing plus $0.000429 for full details.

- **Realtor.com run:** 5 × ($0.000108 + $0.000429) = $0.002685 at list price.
- **Redfin run:** 5 × $0.00147 = $0.00735 at list price.

Our account was billed $0.002148 and $0.00588 after its plan's Store discount.

**A worked example:** weekly comps for 20 ZIP codes, 100 sold homes each from Redfin, plus 100 for-sale listings each with full details from Realtor.com, is 2,000 × $0.00147 + 2,000 × $0.000537 = $2.94 + $1.07 = $4.01 a week, about $17.40 a month (4.33 weeks). The Free plan's $5 of monthly credit covers a one-ZIP pilot many times over.

## What to watch out for

- **Search ceilings.** Realtor.com returns at most 10,000 results per search, and a Zillow location search reads one results page (about 40 homes). Split big markets by ZIP code, price band or property type. Redfin searches page past Redfin's 350-home map limit.
- **Fields differ by portal and by state.** Some states don't disclose sold prices, HOA fees and estimates are missing for some homes, and land has no beds. Expect `null` and keep the source on every row.
- **Half baths.** Realtor.com's `baths` rounded 2.5 baths up to 3 in our run; `bathsConsolidated` keeps "2.5". The script uses it.
- **Duplicates across portals.** One home can be listed on all three with slightly different facts. Deduplicate on a normalized address or coordinates, and decide which source wins per field.
- **Blocking.** The portals defend their pages. The Actors run on Scrape.ly's built-in proxies, and the Redfin and Realtor.com Actors switch from datacenter to residential addresses on their own when refused, so you never manage IPs.
- **Personal data.** Street addresses of private homes, listing agents' names and phones are in the rows. Store them only if you need them, and never publish them, as we didn't above.

## Is web scraping real estate data legal?

The Actors read public listing pages that any visitor can open, without logging in. The portals' terms are restrictive. Redfin's [Terms of Use](https://www.redfin.com/about/terms-of-use) say: "You may not automatedly crawl or query the Services for any purpose or by any means (including, without limitation, screen and database scraping, spiders, robots, crawlers and any other automated activity with the purpose of obtaining information from the Services) unless you have received prior express written permission from the applicable Redfin Company." Realtor.com's [Terms of Service](https://www.realtor.com/terms-of-service/) list among prohibited uses "engaging in the practices of 'screen scraping,' 'database scraping,' or any other activity with the purpose of obtaining lists of users or other information", and forbid automated collection without the express written permission of Move, the company behind Realtor.com. Listing content also comes from MLS feeds: the MLS notices on Redfin's terms page say listing information is "for personal, non-commercial use by viewers of this site and may not be reproduced or redistributed". We read all three on 26 October 2026; the [Zillow guide](https://scrape.ly/blog/scrape-zillow-data.md) quotes Zillow's terms.

Whether and how such terms bind you depends on your jurisdiction and your use. Facts such as price, beds and square feet are different from listing photos and descriptions, which are copyrighted. Addresses and agent details are personal data under the GDPR, the CCPA and similar laws. This is not legal advice; before you build a commercial product on portal data, talk to a lawyer, and consider licensed MLS or public-records data where you qualify for it.

## Why Scrape.ly for real estate data

- **Every portal is one Actor away.** Zillow, Redfin, Realtor.com, Apartments.com and dozens of international portals, all with the same API, schedules and export formats.
- **Fast and cheap.** Our runs took 6 to 11 seconds for five detailed homes, at $0.11 to $1.47 per 1,000 homes with platform usage included.
- **Signals, not just listings.** Sold dates and prices, price history, price cuts, tax records, flood and fire risk, schools and estimates come in the same row.
- **No surprise bills, ready for agents.** A maximum charge per run, a prepaid balance, and the same Actors from Claude, Cursor or ChatGPT over MCP.

## FAQ

### What is real estate data scraping?

It's the automated collection of property listings and their details from real estate portals: price, size, status, history, estimates and location. On Scrape.ly each portal has a ready-made scraper you run from the console, the API, a schedule or an AI agent.

### Which site is best for scraping real estate data?

It depends on the field you need. Redfin is strongest for sold comps and price history, Realtor.com for listing history, price cuts and climate risk, and Zillow for Zestimates. Most projects combine two or three and merge them, as in the Python script above.

### How do I scrape real estate listings for a whole city?

Split it. Run one search per ZIP code or per price band so no search hits a portal's ceiling, set `maxItems` to 0 or a high number, and deduplicate the merged rows on the address.

### Can I scrape sold prices?

Yes. Use `searchMode: "sold"` with `soldTimeframe` on Redfin, `mode: "SOLD"` with `soldWithin` on Realtor.com, or `propertyStatus: "RECENTLY_SOLD"` on Zillow. In states that don't disclose sale prices, the field can be empty.

### Can I scrape rental listings?

Yes. Redfin and Realtor.com have rent modes, Zillow has `FOR_RENT`, and the Apartments.com, RentCafe and HotPads Actors return rents, floor plans, fees and pet policies per building.

### How often should I scrape real estate data?

Daily for new listings and price cuts in active markets, weekly for comps and market dashboards. Schedule the runs and filter for new rows so you only process changes.

Scrape.ly Store Start with Realtor.com Homes for sale, rentals and sold properties by city, ZIP or URL, with price cuts, history, tax records and flood and fire risk. From $0.11 per 1,000 homes.

[Try it free](https://scrape.ly/store/roamandroof/realtor-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Use cases

- [![Pixel-art robot with an orange >\_ on its terminal head takes a yellow price tag off a store shelf whose header shows the Amazon, Shopify and Walmart logos and drops it into a crate of price tags](https://scrape.ly/media/ecommerce-scraping.png?w=750)](https://scrape.ly/blog/ecommerce-scraping.md)
  ### [Web Scraping Ecommerce Sites: Product Data From Amazon, Walmart, Shopify and More](https://scrape.ly/blog/ecommerce-scraping.md)
  [Collect product data from Amazon, Walmart, eBay, Shopify stores, Google Shopping and AliExpress with ready-made scrapers. A real cross-store check of USB-C cables from 26 October 2026, Python that normalizes prices per unit, current prices per 1,000 products, and the pitfalls.](https://scrape.ly/blog/ecommerce-scraping.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with gold rating squares out of a wide monitor showing the Google Maps pin, the red Yelp burst and the green Trustpilot star above rating cards, an amber alarm bell ringing on top of the monitor](https://scrape.ly/media/review-monitoring.png?w=750)](https://scrape.ly/blog/review-monitoring.md)
  ### [Review Monitoring: Track Google, Yelp and Trustpilot Reviews in One Feed](https://scrape.ly/blog/review-monitoring.md)
  [Review monitoring means catching every new review on Google Maps, Yelp and Trustpilot, alerting on the bad ones and tracking replies. Real runs from 26 October 2026 show why one brand can look 5-star on one site and 1-star on another, plus a daily setup, Python for one feed, and costs.](https://scrape.ly/blog/review-monitoring.md)
- [![Pixel-art robot with an orange >\_ on its terminal head holds up a post taken from a feed headed by the white X logo, sorting posts into two crates marked with a green smiling face and a red frowning face](https://scrape.ly/media/twitter-sentiment-analysis.png?w=750)](https://scrape.ly/blog/twitter-sentiment-analysis.md)
  ### [Twitter Sentiment Analysis in Python: Score Real Tweets With VADER](https://scrape.ly/blog/twitter-sentiment-analysis.md)
  [Twitter sentiment analysis on 20 real tweets about Delta Air Lines: collect them with the Tweet Scraper, score them with VADER in a few lines of Python, see where VADER goes wrong, and fix it with engagement weighting and a transformer model. Tested code, real output, real cost.](https://scrape.ly/blog/twitter-sentiment-analysis.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
