[Home](https://scrapfly.io/)/[Scrapers](https://scrapfly.io/scrapers)/Redfin

Listings · Redfin Estimates · search results · rentals

# // Redfin Scraper API

Get Redfin property details, prices, Redfin Estimates, sale and tax history, search results and rental listings as clean JSON. Scrapfly handles the bot checks, so you send a URL and read the data.

- **Clone it and run it.** An open-source Redfin scraper for search results, for-sale listings and rental floor plans, tested against live Redfin every night.
- **Price, Redfin Estimate and home facts in one request.** Read the listing data Redfin embeds in each property page: status, beds, baths, square feet, price per square foot and year built.
 
 [Get free API key](https://scrapfly.io/register) [View GitHub scraper](https://github.com/scrapfly/scrapfly-scrapers/tree/main/redfin-scraper) [Read Unblocker docs](https://scrapfly.io/docs/scrape-api/unblocker) 

1,000 free credits. No credit card required.

 [  ](https://scrapeway.com/web-scraping-api/scrapfly) [  ](https://www.capterra.com/p/212653/Scrapfly/)  

 4.9/5 from 238 reviews 

 



 

 

 Redfin pages · illustration

 

 

 Property JSON**Output**

```
{
  <span class="c-str">"property_id"</span>: <span class="c-num">99428</span>,
  <span class="c-str">"status"</span>: <span class="c-str">"Active"</span>,
  <span class="c-str">"price"</span>: <span class="c-num">919000</span>,
  <span class="c-str">"redfin_estimate"</span>: <span class="c-num">912851</span>,
  <span class="c-str">"beds"</span>: <span class="c-num">4</span>,
  <span class="c-str">"baths"</span>: <span class="c-num">2.0</span>,
  <span class="c-str">"sqft"</span>: <span class="c-num">2040</span>,
  <span class="c-str">"price_per_sqft"</span>: <span class="c-num">450</span>,
  <span class="c-str">"year_built"</span>: <span class="c-num">1941</span>
}
```

Printed by the Python request below[See the request ↓](#implementation)

  

What you can scrape from Redfin

Four kinds of Redfin data you can scrape with Scrapfly, no Redfin account required.

 ## // Scrape Redfin property details

Address, list price, listing status, beds, baths, square feet, lot size, year built and property type, with the MLS number, listing description, photos and map coordinates. Each listing also carries more than 100 property facts grouped into parking, interior, exterior, financial and utilities.

- propertyId
- priceInfo
- status
- beds
- baths
- sqFt
- lotSize
- yearBuilt
- mlsId
- photos
- amenitiesInfo

  ## // Scrape Redfin Estimates, sale and tax history

The Redfin Estimate and rental estimate for a home, the estimate history for the home, its ZIP code, city and county, every listed, price-change, pending and sold event, and yearly property tax records with assessed land and improvement values.

- predictedValue
- rentalEstimateInfo
- propertyTimeSeries
- propertyHistoryInfo
- allTaxInfo

  ## // Scrape Redfin search results

Homes for sale in a city: the listing cards on each results page plus map data for up to 350 homes, each with property ID, URL, address, price, beds, baths, square feet, price per square foot, year built, neighborhood, coordinates and listing status. Add `/page-2` to the city URL for the next results page.

- propertyId
- url
- streetLine
- price
- beds
- baths
- sqFt
- pricePerSqFt
- yearBuilt
- latLong
- mlsStatus

  ## // Scrape Redfin rental listings

Apartment buildings and rental homes in a city, with name, address, rent range, bed, bath and square-foot ranges and the number of available units. Each building's floor plans list unit rent, size and availability.

- propertyName
- rentPriceRange
- bedRange
- sqftRange
- numAvailableUnits
- unitTypesByBedroom
- rentPrice

  



Reliability

## // Get past Redfin's "Human Verification" page

Redfin runs AWS WAF in front of its listing and search pages. A plain request can get HTTP 405 and a "Human Verification" challenge instead of the page. Use Unblocker (formerly ASP) with residential proxies to fetch property, search and rental pages.

`unblocker=true`Enable Scrapfly's [Unblocker](https://scrapfly.io/products/unblocker) for Redfin's AWS WAF challenge.



`proxy_pool=residential`Send requests through residential proxies, with `country=US` for Redfin.com.



`__reactServerState`Property and search data sit in the page's embedded data cache. Check for that data before parsing, so a challenge page never reaches your dataset.



 



Choose your tools

## // Scrapfly products for Redfin scraping

Start with the Web Scraping API, Unblocker and residential proxies. Add a property extraction model, screenshots, a browser session or a URL-list crawl as your workflow needs them. One API key covers all five products.

 ### Web Scraping API for Redfin

Fetch property, search and rental URLs with Unblocker and residential proxies. The listing data comes in the page HTML, ready to parse.

Read the embedded data cache: property pages carry the listing, estimate and history, and search pages carry the result cards and map data.

 

```
GET /scrape?url=https://www.redfin.com/WA/Seattle/9752-Evanston-Ave-N-98103/home/99428&unblocker=true&proxy_pool=residential&country=US
```

 [Explore Web Scraping API →](https://scrapfly.io/products/web-scraping-api)  ### Data Extraction API for Redfin listings

Add `extraction_model=<wbr></wbr>real_estate_property` for a standard property record, with no parser to write.

Get address, price, price per square foot, living area, bedrooms, bathrooms, year built, property type, MLS number and photos in the same schema you use for other property sites.

 

```
GET /scrape?url=https://www.redfin.com/WA/Seattle/9752-Evanston-Ave-N-98103/home/99428&unblocker=true&proxy_pool=residential&country=US&extraction_model=real_estate_property
```

 [Explore Data Extraction API →](https://scrapfly.io/products/extraction-api)  ### Screenshot API for Redfin listings

Capture the listing page with its photos, price, beds, baths and square feet.

Keep a dated visual record of each listing alongside your JSON.

 

```
GET /screenshot?url=https://www.redfin.com/WA/Seattle/9752-Evanston-Ave-N-98103/home/99428&country=us&capture=fullpage&format=png
```

 [Explore Screenshot API →](https://scrapfly.io/products/screenshot-api)  ### Cloud Browser API for Redfin sessions

Connect Playwright or Puppeteer to hosted Chromium when your workflow needs a browser session.

Load the listing page, let it pass Redfin's challenge check, and read the rendered content. Set the residential pool and US country on the connection URL.

 

```
chromium.connect_over_cdp("wss://browser.scrapfly.io?key=KEY&proxy_pool=residential&country=us")
```

 [Explore Cloud Browser API →](https://scrapfly.io/products/cloud-browser-api)  ### Crawler API for lists of Redfin URLs

Submit property and search URLs as one bounded job, with Unblocker and residential proxies applied to the requests.

Ask for HTML output and parse the embedded listing or search data after the job finishes.

- url\_list
- unblocker
- proxy\_pool
- country
- content\_formats

 [Explore Crawler API →](https://scrapfly.io/products/crawler-api)  



One request

## // Fetch a Redfin listing and read its price and Redfin Estimate

The JSON at the top is what this code prints for a Seattle home for sale: one request, then selected fields from the page's embedded listing data.

Install `scrapfly-sdk` and replace the key below. The example uses only the SDK and Python's standard library.

**Prefer the full scraper?** The open-source [Redfin scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/redfin-scraper) covers Redfin's search API, for-sale listings and rental floor plans in Python 3.10. It runs against live Redfin every night. Clone it, set `SCRAPFLY_KEY`, and run `poetry run python run.py`.

 

 Python · scrapfly-sdkscrape + parse

```
<span class="c-key">import</span> json
<span class="c-key">from</span> scrapfly <span class="c-key">import</span> ScrapeConfig, ScrapflyClient

client = ScrapflyClient(key=<span class="c-str">"YOUR_SCRAPFLY_KEY"</span>)
result = client.scrape(ScrapeConfig(
    <span class="c-str">"https://www.redfin.com/WA/Seattle/"</span>
    <span class="c-str">"9752-Evanston-Ave-N-98103/home/99428"</span>,
    unblocker=<span class="c-key">True</span>,
    proxy_pool=<span class="c-str">"residential"</span>, country=<span class="c-str">"US"</span>,
))
marker = <span class="c-str">"root.__reactServerState.InitialContext = "</span>
start = result.content.find(marker)
<span class="c-key">if</span> start == -<span class="c-num">1</span>:
    <span class="c-key">raise</span> RuntimeError(<span class="c-str">"Redfin returned no property data"</span>)
start += len(marker)
state, _ = json.JSONDecoder().raw_decode(result.content, start)
cache = state[<span class="c-str">"ReactServerAgent.cache"</span>][<span class="c-str">"dataCache"</span>]
key = <span class="c-str">"/stingray/api/home/details/aboveTheFold"</span>
body = cache[key][<span class="c-str">"res"</span>][<span class="c-str">"text"</span>].removeprefix(<span class="c-str">"{}&&"</span>)
home = json.loads(body)[<span class="c-str">"payload"</span>][<span class="c-str">"addressSectionInfo"</span>]
listing = {
    <span class="c-str">"property_id"</span>: home[<span class="c-str">"avmInfo"</span>][<span class="c-str">"propertyId"</span>],
    <span class="c-str">"status"</span>: home[<span class="c-str">"status"</span>][<span class="c-str">"displayValue"</span>],
    <span class="c-str">"price"</span>: home[<span class="c-str">"priceInfo"</span>][<span class="c-str">"amount"</span>],
    <span class="c-str">"redfin_estimate"</span>: round(home[<span class="c-str">"avmInfo"</span>][<span class="c-str">"predictedValue"</span>]),
    <span class="c-str">"beds"</span>: home[<span class="c-str">"beds"</span>],
    <span class="c-str">"baths"</span>: home[<span class="c-str">"baths"</span>],
    <span class="c-str">"sqft"</span>: home[<span class="c-str">"sqFt"</span>][<span class="c-str">"value"</span>],
    <span class="c-str">"price_per_sqft"</span>: home[<span class="c-str">"pricePerSqFt"</span>],
    <span class="c-str">"year_built"</span>: home[<span class="c-str">"yearBuilt"</span>],
}
print(json.dumps(listing, indent=<span class="c-num">2</span>))
```

 

 



What the data is used for

## // Common Redfin scraping use cases

### Listing price tracking

Track list price, status and price changes for a set of homes, keyed on the property ID.



### Home valuation

Compare each list price with its Redfin Estimate and price per square foot.



### Rental market research

Follow rent ranges, available units and floor plans by building.



### Investment screening

Rank homes for sale by price, rental estimate and square feet.



### Inventory monitoring

Count active listings per city from search results and listing status.



### Property data enrichment

Fill property records with beds, baths, lot size, year built, tax records, photos and coordinates.



 



Common questions

## // Redfin scraping FAQ

 Is scraping Redfin legal?There is no universal answer. Legality depends on your jurisdiction, the data, the access method and how you use the result. Keep the workflow to public listing pages, avoid signed-in content, treat agent names and phone numbers as personal data, review Redfin's terms of use, and get legal advice for commercial use.

 Does Redfin have a public API?Redfin doesn't offer a public API for property listings. These requests read public Redfin.com pages signed out, so you need a Scrapfly API key, not a Redfin account or API access.

 Why does Redfin return "Human Verification"?That is Redfin's AWS WAF check. It answers with HTTP 405 and a challenge page instead of the listing. Set `unblocker=true`, `proxy_pool=residential` and `country=US`. Check that the response contains the embedded listing or search data before parsing it.

 Can I scrape the Redfin Estimate?Yes. A property page embeds the Redfin Estimate and rental estimate next to the list price, beds, baths and square feet. Some new listings show no estimate yet. The estimate is Redfin's and changes over time, so store the scrape date with each value.

 Can I scrape Redfin search results?Yes. A city search page embeds its result cards plus map data for up to 350 homes, with property ID, URL, address, price, beds, baths, square feet and coordinates. Add `/page-2` to the city URL for the next page of cards.

 Can I scrape Redfin rental listings?Yes. The rentals search for a city lists apartment buildings and rental homes with rent range, beds, baths, square feet and available units. A building's floor plans add unit rent, size and availability; the open-source scraper collects them.

 How much does scraping Redfin cost?A property or search page with Unblocker and residential proxies costs 25 credits, or 30 when Unblocker loads the page in a browser. The property extraction model adds credits based on the response size. Every account starts with 1,000 free credits.

 What are the rate limits when scraping Redfin?Scrapfly sets no Redfin-specific limit. Your maximum parallelism is the concurrency quota on your plan, or a lower cap configured for the project. Each in-flight request uses one slot until it finishes.

 



Start with one request

## Fetch the URL. Read the JSON.

Web Scraping API with Unblocker and residential proxies, one call per Redfin URL.

Proxies across 190+ countries

 [Redfin scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/redfin-scraper) [How to scrape Redfin](https://scrapfly.io/blog/posts/how-to-scrape-redfin) [All scraper pages](https://scrapfly.io/scrapers) 

 

 [Get free API key](https://scrapfly.io/register) [Read the docs](https://scrapfly.io/docs/scrape-api/unblocker)