All scrapers

Real estate

Redfin Real Estate Scraper

redfin.com

AWS WAF Protection
Served by plugin endpoints

Redfin is served through a dedicated plugin endpoint rather than the generic page fetch. In search mode, give it a location and it returns the listings already parsed: price, beds, baths, living area and lot size, the address and coordinates, property type, MLS status and number, days on market, price per sqft and a clean listing URL. Filter by status (for sale / sold), price range, beds, baths and property type, then sort and page through the results. In detail mode, give it a listing URL and it returns one home in full: the listing agents, price history, the Redfin Estimate, tax and public records, and nearby schools. A ZIP code or a Redfin city URL like /city/30818/TX/Austin resolves most reliably; a plain 'City, ST' is best-effort. It reads Redfin's own listing data behind AWS WAF, so there is no HTML scraping to maintain yourself.

What you can extract

  • Price, beds, baths, living area (sqft) and lot size
  • Full address and coordinates (lat/lng)
  • Property type, MLS status and MLS number
  • Days on market, price per sqft and a clean listing URL
  • Detail mode: listing agents, price history and the Redfin Estimate
  • Detail mode: tax and public records, and nearby schools

Dedicated endpoints

/realestate/redfin

Redfin listings for a location

Redfin listings for a location (mode=search): price, beds, baths, sqft, lot size, address, coordinates, propertyType, MLS status/number, days on market, price/sqft and a listing URL. Filter with status, min_price/max_price, beds, baths and property_type; sort and page with max_results. A ZIP or Redfin city URL resolves most reliably; a plain 'City, ST' is best-effort.

/realestate/redfin?mode=detail

One Redfin home in full

One home by listing URL (mode=detail): the listing agents, full price history, the Redfin Estimate, tax and public records, and nearby schools.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/realestate/redfin?mode=search&location=Austin%2C%20TX&status=for_sale&max_results=40"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/realestate/redfin",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"mode": "search", "location": "Austin, TX", "status": "for_sale", "max_results": "40"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const data = await su.redfinSearch({ location: 'Austin, TX', status: 'for_sale', maxResults: 40 });
console.log(results);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Read the API docs

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.