---
title: "How to scrape real estate listings"
canonical: "https://usestring.ai/use-cases/real-estate-scraping"
description: "The String Web Access API is the best way to scrape real estate listings: any listing page, or just its homes as JSON with address, price, beds, baths and square feet, even on Realtor.com, Apartments.com and Zoopla. 5,000 free requests."
updated: 2026-10-14
---

> Markdown version of https://usestring.ai/use-cases/real-estate-scraping, for AI agents. Reading this yourself? The full page is at https://usestring.ai/use-cases/real-estate-scraping.
>
> Updated October 14, 2026.

# How to scrape real estate listings

The String Web Access API is the best way to scrape real estate listings. It returns any listing page, or just its homes as JSON with address, price, beds, baths and square feet. In our [September 2026 benchmark](https://usestring.ai/benchmark) it fetched Zillow, Redfin, Realtor.com, Apartments.com, Rightmove and Zoopla on every attempt, and returned 97% of requests across 100 bot-protected sites, the most of 16 providers.

The first 5,000 requests are free. Set it up in one step with the [quickstart](#quickstart).

**On this page**

1. [Why scrape real estate listings?](#why-scrape-real-estate-listings)
2. [Why does real estate scraping break?](#why-does-real-estate-scraping-break)
3. [How do I scrape real estate listings?](#how-do-i-scrape-real-estate-listings)
4. [Quickstart](#quickstart)
5. [Get a free sample of listing data](#get-a-free-sample-of-listing-data)
6. [Frequently asked questions](#frequently-asked-questions)

---

## Why scrape real estate listings?

Listing portals are the most current public record of the housing market. A home's asking price, a price cut and a move to pending all show up there weeks before a sale is recorded. A real estate scraper collects listings from the portals on a schedule and tells you what's new, what changed and what left the market. It answers the questions most teams care about:

- **What's for sale or for rent, and at what price?** Investors, lenders and agents price their own deals against the homes listed nearby today.
- **Which prices are falling?** A run of price cuts in one ZIP code is an early sign that a market is softening.
- **How long do homes take to sell?** Days on market and the move to pending show how fast an area is moving.

### What you can collect

| What | Examples |
|---|---|
| Homes for sale | Address, asking price, beds, baths, square feet, home type, status and days on market |
| Rentals | Rent by bedroom count for each building, and the move-in specials listed next to it |
| Price changes | Each price cut with the date the portal shows for it, kept as history on the home |
| Market activity | New listings, pending sales and the number of homes listed per area, week by week |

---

## Why does real estate scraping break?

- **Listing portals block scrapers.** In our [September 2026 benchmark](https://usestring.ai/benchmark), 11 of the 15 other scraping APIs couldn't fetch realtor.com on every attempt, including ScraperAPI (0 of 5), Oxylabs (0 of 5) and ZenRows (2 of 5). On apartments.com, 9 of the 15 couldn't, including ScrapingBee (0 of 5) and Nimble (2 of 5). Browserbase got 0 of 5 on realtor.com, apartments.com and zoopla.co.uk. String got all 5 on each. Scrapfly, Firecrawl, Apify and Bright Data also got all 5 on both US sites.
- **Search results stop early.** Zillow reported 5,603 homes for sale in Austin, but it serves 20 pages of 41. Apartments.com reported 27,773 Austin rentals across 18 pages of 40. One search for a whole city misses most of the market.
- **The same home is on every portal.** 9706 Woodshire Dr in Austin was on Zillow and Redfin at $535,000, with 3 beds, 2 baths and 1,753 square feet on both. Zillow showed 4 days on Zillow and Redfin showed 5 days on market. Count by URL and you count it twice.

Per-site results from the [benchmark](https://usestring.ai/benchmark) (Real estate table, run of September 16, 2026, attempts that returned the real page out of 5):

| Site | String | Browserbase | Scrapfly | Bright Data | Oxylabs | Other APIs below 5/5 |
|---|---|---|---|---|---|---|
| realtor.com | 5/5 | 0/5 | 5/5 | 5/5 | 0/5 | 11 of 15 |
| apartments.com | 5/5 | 0/5 | 5/5 | 5/5 | 0/5 | 9 of 15 |
| zoopla.co.uk | 5/5 | 0/5 | 5/5 | 5/5 | 0/5 | 5 of 15 |
| idealista.com | 0/5 | 0/5 | 5/5 | 0/5 | 5/5 | 11 of 15 |

String did not get idealista.com. Scrapfly, ScraperAPI, Apify and Oxylabs got all 5 there.

---

## Why do teams choose String?

- **It works where others fail.** String returned 97% of requests across 100 bot-protected sites in our [September 2026 benchmark](https://usestring.ai/benchmark), the most of 16 providers. It got all 5 attempts on 6 of the 7 real estate sites in it. The seventh, idealista.com, it missed.
- **You pay only for pages that come back.** Blocks and errors are free.
- **There's nothing to maintain.** No proxies, fingerprints or captcha solvers on your side.
- **Blank pages don't become data.** Mark the fields you need as required in your schema, and a page that comes back without them is flagged instead of saved as an empty result.

---

## How do I scrape real estate listings?

### 1. Pick your portals

In the US, Zillow, Redfin and Realtor.com cover homes for sale, and Apartments.com covers rentals. In the UK, Rightmove and Zoopla cover both. Most projects need two or three portals per market, because no one portal has every listing.

**With String:** Set `countryCode` to the portal's country, such as `US` for Zillow or `GB` for Rightmove.

### 2. Read the data the page already carries

Most portals ship their listings as JSON inside the page. Zillow and Rightmove put search results in a `__NEXT_DATA__` script tag. Redfin and Zoopla list each home in JSON-LD with its address and price. Read that JSON before you parse the HTML. It holds exact numbers, and it changes less often than the page layout.

**With String:** Ask for `format: raw` to get the page as the portal sent it, or pass a `jsonSchema` to get only the fields you need.

### 3. Split searches so none hits the cap

Portals stop serving results after a fixed number of pages. Zillow serves 20 pages of 41. Rightmove served 42 pages of about 25 for a Manchester search that reported 6,823 homes. Split each market by ZIP code, postcode district or price band until each search's total fits in the pages the portal will serve. Then check the portal's total against what you collected.

### 4. Keep the status and the price label

A search for homes for sale can include homes that aren't. Two of the first 8 homes on Realtor.com's Austin for-sale search were marked Pending. Rightmove prices come with labels like "Offers Over" or "Guide Price". Save the status and the label as their own fields, and filter on them.

### 5. Record price changes on the home

Zillow shows each price cut with its date, such as "$25,000 (Aug 25)" on 1704 Shelbourne Dr, and Rightmove marks a listing `price_reduced`. Store every price you see with the day you saw it, keyed to the home. Redfin's page data has a property ID for the home and a separate listing ID for the listing. Keep both, so a home that comes back on the market joins its old history.

### 6. Treat a blank page as a failure

A search page with no listings, or with no `__NEXT_DATA__` tag, was probably blocked or changed. Flag it and keep the last good run, so its homes aren't marked sold because one page failed. We show how to [detect a block that returns HTTP 200](https://usestring.ai/answers/detect-bot-block-http-200).

### 7. Match the same home across portals

Within one portal, use its own ID, like Zillow's `zpid`. Across portals, match on street address, unit and ZIP code, then check beds and square feet. Don't match on days on market, because portals count it differently.

---

## Quickstart

### From your agent

Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a listing search URL. It calls the `web_access_fetch` tool and reads the homes.

```text
https://mcp.usestring.ai/v1/mcp
```

[MCP setup](https://portal.usestring.ai/docs/mcp/remote) · [n8n](https://portal.usestring.ai/docs/integrations/n8n) · [Zapier](https://portal.usestring.ai/docs/integrations/zapier)

### From the API

One call returns the homes on a Realtor.com search page as JSON. If extraction can't fill the required fields, you get `"extracted": false` back instead of a guess.

```bash
curl https://request.usestring.ai/v1/fetch \
  -H "Authorization: Bearer $STRING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX",
    "countryCode": "US",
    "jsonSchema": {
      "type": "object",
      "properties": {
        "homes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "properties": {
              "address": { "type": "string" },
              "price": { "type": "integer" },
              "beds": { "type": ["number", "null"] },
              "baths": { "type": ["number", "null"] },
              "sqft": { "type": ["integer", "null"] },
              "status": { "type": "string" }
            },
            "required": ["address", "price", "status"]
          }
        }
      },
      "required": ["homes"]
    }
  }'
```

Response (first 3 of 8 homes):

```json
{
  "homes": [
    {
      "address": "1704 Shelbourne Dr, Austin, TX 78752",
      "price": 395000,
      "beds": 3,
      "baths": 2,
      "sqft": 1556,
      "status": "for_sale"
    },
    {
      "address": "1310 W Parmer Ln Apt 1902, Austin, TX 78727",
      "price": 199999,
      "beds": 2,
      "baths": 2.5,
      "sqft": 1334,
      "status": "pending"
    },
    {
      "address": "109 Largo Cv, Austin, TX 78734",
      "price": 2075000,
      "beds": 4,
      "baths": 4.5,
      "sqft": 4580,
      "status": "for_sale"
    }
  ]
}
```

[Get a free API key](https://portal.usestring.ai/sign-up) · [Structured extraction docs](https://portal.usestring.ai/docs/fetch/structured-extraction)

---

## Get a free sample of listing data

Tell us which portals and markets you track. We'll run String on them and email you a sample of the listing data, free.

Email [support@usestring.ai](mailto:support@usestring.ai) with your work email, what you want to collect and the sites, markets or URLs, or use the [form on the page](https://usestring.ai/use-cases/real-estate-scraping#sample-data).

What a sample looks like (rows from String fetches of Austin and Manchester search pages on Oct 14, 2026). The Zillow and Redfin rows are the same home on two portals. Apartments.com shows the starting rent for that bedroom count:

| Site | Home | Size | Price |
|---|---|---|---|
| Zillow | 9706 Woodshire Dr, Austin | 3 bd, 2 ba | $535K |
| Redfin | 9706 Woodshire Dr, Austin | 3 bd, 2 ba | $535K |
| Realtor.com | 1310 W Parmer Ln, Austin | 2 bd, Pending | $200K |
| Apartments.com | Stassney at SoCo, Austin | 1 bd | $948+ a month |
| Rightmove | Bartley Road, Manchester | 4 bd, 2 ba | Offers over £500K |
| Zoopla | Kelso Place, Manchester | 2 bd flat | £227K |

---

## Frequently asked questions

### What's the best way to scrape real estate listings?

Fetch each portal's search pages on a schedule, read the JSON the page already carries, split big markets into small searches, and match the same home across portals. The hard part is getting the pages at all, because several portals block most scrapers. The String Web Access API fetched Zillow, Redfin, Realtor.com, Apartments.com, Rightmove and Zoopla on every attempt in our [September 2026 benchmark](https://usestring.ai/benchmark), and returned 97% of requests across 100 bot-protected sites, the most of 16 providers.

### How do I scrape Zillow listings?

Fetch a search URL such as `zillow.com/austin-tx/` and read the listings from the `__NEXT_DATA__` script tag. Each page has 41 homes with zpid, address, price, beds, baths, square feet and days on Zillow. Add `/2_p/`, `/3_p/` and so on for more pages, up to 20. Zillow is one of the easier portals. In our benchmark, 14 of 16 APIs got it on every attempt. Our guide [How to scrape Zillow in 2026](https://usestring.ai/blog/how-to-scrape-zillow) has working Python and TypeScript.

### How much does it cost to scrape real estate listings every day?

Checking 200 search pages daily is about 6,000 requests a month. In our tests, Zillow, Redfin and Rightmove billed at the standard rate ($0.30 per 1,000 on the $20 Starter plan), which is $1.80 in usage. Realtor.com, Apartments.com and Zoopla billed at the premium proxy rate ($3.00 per 1,000), which is $18. Structured extraction adds a fee per request. See [pricing](https://usestring.ai/pricing). Failed requests aren't billed.

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

Listing pages are public, and prices, addresses and room counts are facts, which copyright doesn't cover. Listing photos and descriptions are someone's work, so don't republish them. Collect public pages while logged out, leave personal data like agent and owner names out, keep your request rate reasonable, and check with your counsel. We go through the cases in [Is web scraping legal?](https://usestring.ai/answers/is-web-scraping-legal)

### How do I avoid getting blocked when scraping Zillow, Redfin or Realtor.com?

Send each request to String instead of the site. Proxy rotation, browser fingerprints, captcha solving and retries happen behind the endpoint, and JavaScript rendering is switched on per request for pages that need it. Requests that still fail aren't billed.

### How do I scrape rental listings?

Apartments.com shows 40 buildings per search page, each with a starting rent per bedroom count, like "1 Bed $948+". Move-in specials such as "2 Months Free" sit next to the rent. Save them in their own field, apart from the rent. Austin search results also included buildings in nearby towns like Manor, so filter on the address.

### Can I scrape MLS data?

MLS systems are for members, and most license their data through feeds such as the RESO Web API. If you have an account you're allowed to automate, save the login in a browser context and connect Playwright or Puppeteer to String's remote browser over CDP. Read your MLS's rules first.

### Can I scrape UK property portals like Rightmove and Zoopla?

Yes, String fetches Rightmove and Zoopla from the UK. Set `countryCode` to `GB`. Rightmove search pages carry about 25 homes each in `__NEXT_DATA__`, with price, price label, beds, baths and whether the listing is new or reduced. Zoopla lists each home in JSON-LD with its price and address. In our benchmark, String got all 5 attempts on both. Browserbase and Oxylabs got 0 of 5 on zoopla.co.uk.

### Does String work on the real estate sites I need?

Send us the URLs and we'll run them and show you what comes back before you commit. In our benchmark it got all 5 attempts on 6 of 7 real estate sites, and none on idealista.com. Ask for a [free sample of listing data](#get-a-free-sample-of-listing-data), or test them yourself with your first 5,000 free requests.

---

## Send us the sites you can't get

We'll show you what comes back. [Get started](https://portal.usestring.ai/sign-up) · [Book a demo](https://usestring.ai/book-demo)

All use cases: https://usestring.ai/use-cases

---

[llms.txt](https://usestring.ai/llms.txt): machine-readable index of this site for AI agents.
