---
title: "How to Scrape Redfin Listings | Scrape.ly"
description: "Scrape Redfin listings for sale, sold or for rent: prices, Redfin Estimates, history, schools and coordinates. A real run, its cost, API and MCP code."
url: https://scrape.ly/blog/scrape-redfin
markdown: https://scrape.ly/blog/scrape-redfin.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Redfin Listings: Prices, Redfin Estimates, History and Schools

Scrape Redfin listings for sale, sold or for rent from any Redfin search URL, city or ZIP code: price, Redfin Estimate, beds, baths, square feet, price and tax history, schools and coordinates. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.

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

- Published

  Oct 27, 2026

- Reading time

  8 min read

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

To scrape Redfin, give a ready-made Actor a Redfin search URL, a location such as `Austin, TX` or `78704`, or property URLs, and it returns one row per home: price, Redfin Estimate, beds, baths, square feet, year built, price and tax history, schools, Walk Score, the listing brokerage and coordinates. On Scrape.ly that's a preset and one click, or one API call, with no Redfin account and no browser.

This guide covers the fields you get, the no-code steps, the same job in curl, Python, Node.js and through an AI agent, a real run from 27 October 2026 (ten Austin houses over $300,000), its log and exact cost, and the one input rule that decides whether you get homes for sale or sold comps.

## What data you can get from Redfin

The [Redfin Scraper](https://scrape.ly/store/roamandroof/redfin-scraper.md) returns one row per listing:

| Field                                                                             | What it holds                                                         |
| --------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `url`, `propertyId`, `listingId`, `mlsId`                                         | The listing link and its identifiers                                  |
| `listingType`, `status`                                                           | `sale`, `sold` or `rent`, and Active, Coming Soon, Pending or Sold    |
| `price`, `redfinEstimate`, `pricePerSqft`                                         | Asking or sold price, Redfin's own estimate and price per square foot |
| `soldDate`, `lastSoldPrice`, `daysOnMarket`                                       | Sale history and time on market                                       |
| `beds`, `baths`, `sqft`, `lotSizeSqft`, `yearBuilt`, `propertyType`, `hoaMonthly` | Home facts                                                            |
| `address`, `zip`, `neighborhood`, `latitude`, `longitude`                         | Location                                                              |
| `priceHistory`, `taxHistory`, `annualTax`, `publicRecords`                        | Listing events, tax assessments and public records                    |
| `schools`, `walkScore`, `bikeScore`, `transitScore`, `climateRisk`                | Schools with ratings, scores and optional climate risk                |
| `listingBrokerName`, `listingBrokerPhone`, `photos`                               | The brokerage on the listing and full-size photo links                |
| `rentMin`, `rentMax`, `units`, `petPolicies`                                      | Rental buildings                                                      |

Detail fields (history, tax records, amenities and the Redfin Estimate) come with **Include property details**, which is on by default. Schools are on by default too; climate risk is off.

## How to scrape Redfin without code

1. Open the Redfin Scraper in the Scrape.ly Store.
2. Pick a preset. We ran [Houses in Austin over 300k from a link, 10 homes](https://scrape.ly/store/roamandroof/redfin-scraper/presets/url.md). It fills in this input:

```json
{
  "maxItems": 10,
  "searchMode": "sold",
  "startUrls": [
    "https://www.redfin.com/city/30818/TX/Austin/filter/property-type=house,min-price=300k"
  ],
  "searchKeywords": []
}
```

3. Paste your own Redfin search URL, or type locations into **Locations to search**, and click **Start**. Our run took 24 seconds.
4. Open the dataset and export it as JSON, CSV, Excel or HTML.

The input fields that matter most:

- `startUrls`: Redfin search URLs with any `/filter/...` part, including map views, rental searches and property pages. Set the filters on redfin.com and paste the link.
- `searchKeywords`: locations as you'd type them into Redfin's search box, such as `Seattle, WA` or `78704`.
- `searchMode` and `soldTimeframe`: `sale`, `sold` or `rent` for those locations, and how far back sold homes go (a week up to 5 years).
- `minPrice`, `maxPrice`, `minBeds`, `propertyTypes`, `maxDaysOnMarket`, `maxHoa`: filters added on top of any filters in a URL.
- `maxItems`: listings for the whole run; `0` takes everything, past Redfin's 350-home map limit.
- `sortBy`: newest, price, size, price per square foot or sold date.

The [sold homes preset](https://scrape.ly/store/roamandroof/redfin-scraper/presets/search-sold.md) pulls recent Seattle sales and the [rentals preset](https://scrape.ly/store/roamandroof/redfin-scraper/presets/search-rent.md) Seattle rentals.

Scrape.ly Store Redfin Scraper Redfin listings for sale, sold or for rent from search URLs, locations or property pages: price, Redfin Estimate, history, schools and coordinates, with no login.

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

## How to scrape Redfin with the API

Create a token under **Settings → API & Integrations** in the dashboard and store it as `SCRAPELY_TOKEN`. Twenty detailed listings take a few seconds, so the synchronous endpoint fits:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~redfin-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"searchKeywords": ["78704"], "searchMode": "sold", "soldTimeframe": "6mo", "minBeds": 3, "maxItems": 50}'
```

Add `?format=csv` for a CSV. For a whole city, start the run asynchronously (`POST /v2/actors/roamandroof~redfin-scraper/runs`), poll `/v2/actor-runs/RUN_ID?waitForFinish=60` until `SUCCEEDED`, then read `/v2/actor-runs/RUN_ID/dataset/items?format=csv`. The [API docs](https://scrape.ly/docs/api-actors.md) cover each step.

In Python (`pip install scrapely-client-python`), this comps script pulls six months of sold 3-bedroom houses in one ZIP code and prints the median price per square foot and how far sale prices landed from the Redfin Estimate:

```python
import os
from statistics import median

from scrapely_client import ScrapelyClient

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

run = client.actor("roamandroof/redfin-scraper").call(
    run_input={
        "searchKeywords": ["78704"],
        "searchMode": "sold",
        "soldTimeframe": "6mo",
        "minBeds": 3,
        "propertyTypes": ["house"],
        "maxItems": 200,
    }
)
homes = [h for h in client.dataset(run.default_dataset_id).iterate_items() if h.get("pricePerSqft")]
print(len(homes), "sales, median $/sqft:", median(h["pricePerSqft"] for h in homes))
gaps = [h["price"]  h["redfinEstimate"]  1 for h in homes if h.get("redfinEstimate")]
if gaps:
    print(f"median sale vs Redfin Estimate: {median(gaps):+.1%}")
```

In JavaScript or Node.js (`npm install scrapely-client`), watch a saved search for new listings and price cuts:

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('roamandroof/redfin-scraper').call({
  startUrls: ['https://www.redfin.com/city/30818/TX/Austin/filter/property-type=house,min-price=300k'],
  sortBy: 'newest',
  maxDaysOnMarket: 7,
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const h of items) console.log(h.status, h.price, h.redfinEstimate, h.neighborhood, h.url);
```

The [Redfin API](https://scrape.ly/api/redfin-api.md) page shows the same Actor as a ready-made API, and the [Python client](https://scrape.ly/docs/client-python.md) docs cover paging through large datasets.

### With an AI agent (MCP)

Scrape.ly runs a hosted MCP server at `https://mcp.scrape.ly`. In Cursor, add it to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://mcp.scrape.ly",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://mcp.scrape.ly`, then `/mcp` to sign in with OAuth. Then ask: "Use scrapely to get houses sold in 78704 in the last six months with 3+ beds, and tell me the median price per square foot and which streets sold above their Redfin Estimate." The [MCP docs](https://scrape.ly/docs/mcp.md) list ChatGPT, VS Code, Windsurf and the other clients.

## A real run: ten Austin houses over $300,000

We ran the preset as-is on 27 October 2026. It saved 10 listings in 24 seconds:

| Status      | Neighborhood (ZIP)                | Price      | Redfin Estimate | Beds / baths | Sq ft | Built | $/sq ft |
| ----------- | --------------------------------- | ---------- | --------------- | ------------ | ----- | ----- | ------- |
| Active      | Parmer Villas (78729)             | $350,000   | none            | 3 / 2.5      | 1,812 | 2016  | $193    |
| Coming Soon | Zilker (78704)                    | $2,995,000 | $2,515,323      | 3 / 4        | 2,767 | 2018  | $1,082  |
| Coming Soon | Westlake (78746)                  | $1,250,000 | $987,022        | 3 / 2        | 1,573 | 1978  | $795    |
| Coming Soon | Bryker Woods (78703)              | $1,875,000 | $1,248,906      | 3 / 2        | 1,969 | 2019  | $952    |
| Coming Soon | Crestview (78757)                 | $2,295,000 | $2,034,293      | 4 / 5        | 3,814 | 2023  | $602    |
| Coming Soon | Walnut Creek-Pioneer Hill (78754) | $449,000   | $426,850        | 3 / 3        | 1,683 | 1961  | $267    |
| Coming Soon | Village at Western Oaks (78749)   | $585,000   | $597,308        | 3 / 3        | 2,031 | 1989  | $288    |

```plaintext
20261027T17:17:31.364Z [scrapely.actor] INFO  Starting: 1 URL(s), 0 location search(es).
20261027T17:17:31.473Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
20261027T17:17:52.022Z [scrapely.actor] INFO  Done in 20s. Saved 10 listings (maxItems 10 reached) (44 requests, 1.3 MB, proxy DATACENTER).
```

What the ten rows show:

- **The URL decides the mode.** The preset sets `searchMode: "sold"`, but a pasted search URL keeps its own mode, so we got homes for sale: one active, nine coming soon. For sold comps, add `include=sold-3mo` (or another window) to the URL's filter, or use `searchKeywords` with `searchMode: "sold"`.
- **Asking prices sit above Redfin's estimate.** Seven of the nine homes with an estimate were listed above it, from 5% in Walnut Creek to 81% for a new 5-bedroom in Lost Creek. Only two, in 78734 and Village at Western Oaks, asked slightly less. That gap is the first thing an investor screens on.
- **Coming Soon homes arrive thin.** None of the nine had a price history or days on market yet, while the active listing carried 9 history events. Schedule a weekly re-run and the history fills in as they go live.
- **Price per square foot spans 5×.** From $193 to $1,082 inside one city search. Group by ZIP or neighborhood before you average anything.
- **Walkability varies just as much.** Walk Scores ran from 1 to 82, which is the kind of field that's tedious to collect by hand and free in every row here.

The whole job used 1.3 MB over Redfin's own JSON data on datacenter proxies, with no browser. Listing agents' names and phone numbers are in the dataset as published on the listing; we left them out of the table.

## What it costs

The Actor charges one event per listing, platform usage (compute and proxy) included. Price checked on the Store page on 27 October 2026: **$0.00147 per listing**, which is $1.47 per 1,000 listings. With **Include listing agent contacts** on, a listing that gets an agent email from a public Redfin agent profile costs $0.00105 more.

**Our run:** 10 × $0.00147 = $0.0147 at list price ($0.01176 charged, because our plan has a Store discount).

**At scale:** a 2,000-home city export costs about $2.94. A weekly sold-comps pull of 200 homes in five ZIP codes is 1,000 listings a week, $1.47. The Free plan's $5 of monthly usage covers about 3,400 listings.

## What to watch out for

- **Search URLs keep their own mode.** Sale, sold or rent comes from the URL when you paste one; `searchMode` only applies to `searchKeywords`.
- **Empty fields are Redfin's, not the scraper's.** Some states don't disclose sold prices, HOA fees aren't listed for every home, and the Redfin Estimate is missing for some property types (our active listing had none).
- **US only.** redfin.com listings; Redfin Canada isn't covered.
- **Agent emails are rare and personal.** They come only from public Redfin agent profiles, mostly Redfin's own agents. Agent names, phones and emails are personal data; collect them only with a lawful basis.
- **Sold listings have fewer contacts.** Redfin blanks the agent phone on sold homes, so contact fields are mostly empty in sold searches.

## Is it legal to scrape Redfin?

The Actor reads public listing pages that anyone can open without an account. Redfin's [Terms of Use](https://www.redfin.com/about/terms-of-use) (read on 27 October 2026) 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". Whether and how those terms bind you depends on your jurisdiction, whether you have a Redfin account that accepted them, and your use.

Listings also carry personal data: agent names and phones, and addresses that can point to an owner. Keep what you need, which for market analysis is usually price, size, location and dates, and treat the rest under the GDPR, the CCPA and similar laws. Our [GDPR and web scraping](https://scrape.ly/blog/gdpr-web-scraping.md) guide explains the basics. This is not legal advice; for a commercial project, ask a lawyer about your case.

## Why Scrape.ly for Redfin

- **Every way in.** Search URLs with their filters, typed locations and property pages in one run, for sale, sold or for rent.
- **Detail without a browser.** Price and tax history, schools, Walk Score and the Redfin Estimate from Redfin's own JSON, about 2 seconds per listing.
- **Whole cities.** Searches page past Redfin's 350-home map limit, so `maxItems: 0` exports everything a search matches.
- **One platform for property data.** The same token runs [Zillow](https://scrape.ly/blog/scrape-zillow-data.md), [Realtor.com](https://scrape.ly/blog/scrape-realtor-com.md) and [Airbnb](https://scrape.ly/blog/scrape-airbnb.md); the [Zillow scrapers](https://scrape.ly/scrapers/zillow.md) page compares the US options, and our [real estate data scraping](https://scrape.ly/blog/real-estate-data-scraping.md) guide shows how they fit together.

## FAQ

### Can you scrape Redfin for free?

Yes. The Free plan includes $5 of usage credit every month with no credit card, and at $1.47 per 1,000 listings that covers about 3,400 homes.

### Does Redfin have an API?

Redfin doesn't offer a public listings API. Its Data Center publishes downloadable market statistics, but not listing-level rows. The Actor returns listings as JSON through the Scrape.ly API.

### How do I scrape sold homes on Redfin?

Use `searchKeywords` with `searchMode: "sold"` and a `soldTimeframe` from one week to five years, or paste a Redfin search URL whose filter includes `include=sold-3mo` (or another window).

### Can I get the Redfin Estimate?

Yes, in `redfinEstimate`, with **Include property details** on (the default). It's empty for property types Redfin doesn't estimate.

### Can I scrape Redfin rentals?

Yes. Use `searchMode: "rent"` or paste a `/rentals` or `/apartments-for-rent` URL. Rental rows carry rent ranges, available units, floor plans, deposits and pet policies.

### Can I scrape Redfin with Python?

Yes. Install `scrapely-client-python` and call `roamandroof/redfin-scraper`, as in the comps script above. The scraping runs in the cloud, so you don't manage proxies or Redfin's internal endpoints.

Scrape.ly Store Start with the Austin preset Run the preset as-is or paste your own Redfin search. Prices, Redfin Estimates, history and schools at $1.47 per 1,000 listings, platform usage included.

[Try it free](https://scrape.ly/store/roamandroof/redfin-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 Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls an image pin with a red save button off a cork board topped with the red Pinterest logo and covered in photo pins of different heights, and drops it into a crate](https://scrape.ly/media/scrape-pinterest.png?w=750)](https://scrape.ly/blog/scrape-pinterest.md)
  ### [How to Scrape Pinterest: Pins, Boards, Profiles, Search Results and Comments](https://scrape.ly/blog/scrape-pinterest.md)
  [Scrape Pinterest pins, boards, profiles, idea pages and search results without a login: title, description, images, source domain, likes, saves, board, comments and profile stats. No-code presets, curl, Python, Node.js and MCP, plus a real run, exact costs and the limits that matter.](https://scrape.ly/blog/scrape-pinterest.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a job card with a briefcase off a cork job board topped with the black Upwork logo and pinned with job cards, and drops it into a crate](https://scrape.ly/media/scrape-upwork-jobs.png?w=750)](https://scrape.ly/blog/scrape-upwork-jobs.md)
  ### [How to Scrape Upwork Jobs: Titles, Budgets, Skills and Client Stats](https://scrape.ly/blog/scrape-upwork-jobs.md)
  [Scrape Upwork jobs by keyword or search URL: title, description, budget or hourly range, skills, experience level, posting time and the client's country, rating and spend. No-code steps, curl, Python, Node.js and MCP, with a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-upwork-jobs.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a company card with a small building and a blue line out of a monitor showing the blue Crunchbase logo above rows of company profiles with blue funding bars, and drops it into a crate](https://scrape.ly/media/scrape-crunchbase.png?w=750)](https://scrape.ly/blog/scrape-crunchbase.md)
  ### [How to Scrape Crunchbase Company Data: Search, Profiles, Ranks and IDs](https://scrape.ly/blog/scrape-crunchbase.md)
  [Scrape Crunchbase company data without an account: search by name or open organization pages for permalink, UUID, categories, location, website, employee band and rank. No-code steps, curl, Python, Node.js and MCP, plus real runs from 27 October 2026 and their exact cost.](https://scrape.ly/blog/scrape-crunchbase.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.
