---
title: "Real estate web scraping"
description: "Scrape property listings, prices, agents and price history from Zillow, Redfin, Idealista and other portals. Structured JSON from protected real estate sites."
canonical: https://www.zenrows.com/use-cases/real-estate-web-scraping
updated: 2026-10-18
---

# Real estate web scraping

Real estate web scraping collects listing data from property portals, brokerages and public records: price, address, beds, size, status and price history. Zenrows fetches those pages through protected access, returns them as HTML, Markdown or structured JSON, and runs thousands of listing URLs as one job, so your property dataset stays current.

## Sample output: one listing

```json
{
  "url": "https://www.example-portal.com/homes/1482-oak-st",
  "address": "1482 Oak St, Austin, TX 78704",
  "price": 615000,
  "currency": "USD",
  "status": "for_sale",
  "beds": 3,
  "baths": 2,
  "living_area_sqft": 1640,
  "lot_sqft": 6098,
  "year_built": 1998,
  "days_on_market": 12,
  "price_history": [
    { "date": "2026-09-29", "event": "listed", "price": 639000 },
    { "date": "2026-10-11", "event": "price_change", "price": 615000 }
  ],
  "agent": { "name": "Listing agent", "brokerage": "Example Realty" },
  "photos": 28
}
```

An illustrative listing as structured JSON. Field names follow your schema when you name the fields with CSS selectors, or come back ready-made with Extract.

## What real estate teams collect

Most property data projects start from the same few page types: search results, listing detail pages and agent profiles. The jobs differ in which fields they keep and how often they come back for them.

| Job | Data you collect | Typical sources |
|---|---|---|
| Listing aggregation | Address, price, beds, baths, size, photos, status | Zillow, Redfin, Realtor.com, Idealista, Rightmove, Immoweb |
| Price and status tracking | Price changes, days on market, sold and pending events | Listing detail pages, refreshed daily or weekly |
| Rental market analysis | Asking rent, availability, amenities, deposit | Apartments.com, Zumper, regional rental portals |
| Agent and brokerage leads | Agent name, brokerage, active listings, office location | Agent profiles and brokerage directories |
| Valuation and comps | Sold prices, lot size, year built, neighbourhood | Portal sold listings and county assessor sites |
| Investment sourcing | New and stale listings, price drops, owner-listed homes | Saved searches across several portals |

## Why scraping property portals breaks

Listing portals tend to be heavily protected, because their data is their product. Request settings and selectors that work one week can return empty pages after the next site update.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Bot protection | 403s, CAPTCHA pages, or a 200 with an empty body on the major portals | Zenrows' stealth gets through Cloudflare, DataDome, Akamai and similar protections on the portals |
| JavaScript-rendered pages | The price and photos never appear in the raw HTML | Adaptive Stealth Mode escalates to browser rendering when a page needs it and returns the rendered page |
| Regional listings | A portal shows different stock, currency or language by country | Geotargeting sends the request from the country you are studying |
| Layout changes | Selectors silently return empty fields after a redesign | Extract returns structured fields without selectors to maintain |
| Volume | Refreshing 100,000 listings a day overwhelms a homegrown queue | Batch runs the whole URL list as one job, with webhooks when it finishes |

## How to scrape real estate listings with Zenrows

1. **Collect the listing URLs.** Start from a search results page and use Crawl to gather every listing URL that matches a pattern such as `/homedetails/`.
2. **Fetch each listing.** Send the URL to Fetch with Adaptive Stealth Mode, and pick the country the request comes from.
3. **Get structured fields.** Add Extract for ready-made JSON, or name the fields yourself with CSS selectors.
4. **Refresh on a schedule.** Submit the full URL list to Batch every day and diff the results to catch price changes, new listings and delistings.

```python Python
# pip install requests
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "LISTING_URL",  # a listing detail page
    "mode": "auto",  # Adaptive Stealth Mode
    "proxy_country": "us",
    "extract": "auto",
}
response = requests.get("https://api.zenrows.com/v1/", params=params)
listing = response.json()
print(listing)
```

```bash cURL
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "LISTING_URL_1", "external_id": "listing-1" },
      { "url": "LISTING_URL_2", "external_id": "listing-2" }
    ]
  }'
```

```bash CLI
npx -y @zenrows/cli init
zenrows extract LISTING_URL --autoparse
zenrows batch create listings.jsonl --wait   # one {"url": "..."} per line
zenrows batch results JOB_ID --out listings-results.jsonl
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to extract address, price, beds, baths, square footage and days on market from these three Zillow listing pages and return them as one table.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Pull one listing or search page on demand | [Fetch](/products/fetch) | One request returns the rendered page, from protected portals included |
| Get listing fields as JSON without writing selectors | [Extract](/products/extract) | Automatic structured extraction returns data that adapts when the layout changes |
| Find every listing URL in a market or on a brokerage site | [Crawl](/products/crawl) | Follows pagination and links, keeps only URLs that match your patterns |
| Refresh a large portfolio every day | [Batch](/products/batch) | Thousands of URLs as one job, results by webhook or download |
| Ask an agent to research a neighbourhood | [MCP Server](/mcp) | Claude, Cursor and other MCP clients call Zenrows as a tool |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Coverage | Every listing in your target markets has a current record | Compare your listing count with the portal's own result count |
| Freshness | Price and status changes land in your data within one refresh cycle | Diff each run against the last and track the age of every record |
| Field completeness | Price, address, beds, baths and size are present on nearly every record | Report the share of empty fields per portal after each run |
| Run time | A full daily refresh finishes well before your analysts start work | Log the start and end time of every Batch job |
| Upkeep | Little engineer time goes to fixing selectors or chasing blocked requests | Count hours spent on scraper fixes per month |

## Real estate web scraping FAQ

### Is it legal to scrape real estate listings?

Collecting publicly available listing data is common practice in property research, valuation and lead generation. What matters is how you use it: respect each site's terms, avoid personal data you have no basis to process, and do not republish copyrighted photos or descriptions. When in doubt, ask your legal team about your specific use.

### Can Zenrows scrape Zillow, Redfin and Realtor.com?

Yes. Zenrows is built for protected, JavaScript-heavy sites like the major US portals. Adaptive Stealth Mode starts with the lightest setup and escalates to browser rendering and stealth only when a portal needs it, and Extract returns the listing as JSON.

### What real estate data can I collect?

Anything a visitor can see on the page: price, address, beds, baths, living area, lot size, year built, status, days on market, price history, photos, amenities, and agent or brokerage details. Search pages give you listing URLs and summary fields; detail pages give you the full record.

### How do I keep property data up to date?

Store each listing URL, then resubmit the full list to Batch on a schedule, daily for active markets. Compare each run with the previous one to catch price drops, status changes, new listings and delistings.

### How do I build a real estate scraper for rental listings?

Point Crawl at a rentals search page on a site such as Apartments.com or Zumper and keep only URLs that match the listing pattern. Fetch each listing with Extract to get rent, beds, baths, size, availability date and amenities as JSON. Rentals turn over fast, so refresh active listings daily with Batch and drop the ones that return a removed page.

### Can I scrape listings outside the US?

Yes. Use geotargeting to send the request from the market you are studying, for example Spain for Idealista or the UK for Rightmove, so the portal returns local listings, prices and currency.

## Related use cases

- [Short-term rental data](https://www.zenrows.com/use-cases/short-term-rental-data.md): Nightly rates, fees, calendars and reviews from Airbnb, Vrbo and Booking.com listings, per market.
- [Public records API](https://www.zenrows.com/use-cases/public-records-api.md): Permits, violations, licenses and registry filings from city, county and state portals, returned as JSON on demand.
- [Alternative data for investors](https://www.zenrows.com/use-cases/alternative-data.md): Hiring, pricing, app ranks, reviews and store counts per ticker, collected weekly as point-in-time series.
- [Competitor price scraping](https://www.zenrows.com/use-cases/price-scraping.md): Competitor prices, promotions, shipping and stock per SKU from retailers and marketplaces, refreshed on your schedule.
- [Travel data scraping](https://www.zenrows.com/use-cases/travel-data-scraping.md): Fares, room rates, car hire quotes, tour prices and reviews from airlines, OTAs and travel marketplaces.
- [Market research web scraping](https://www.zenrows.com/use-cases/market-research-web-scraping.md): Assortments, prices, reviews and forum talk across a whole category, for sizing studies and recurring trackers.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
