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 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
- Open the Redfin Scraper in the Scrape.ly Store.
- Pick a preset. We ran Houses in Austin over 300k from a link, 10 homes. It fills in this input:
{
"maxItems": 10,
"searchMode": "sold",
"startUrls": [
"https://www.redfin.com/city/30818/TX/Austin/filter/property-type=house,min-price=300k"
],
"searchKeywords": []
}- Paste your own Redfin search URL, or type locations into Locations to search, and click Start. Our run took 24 seconds.
- 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 asSeattle, WAor78704.searchModeandsoldTimeframe:sale,soldorrentfor 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;0takes everything, past Redfin's 350-home map limit.sortBy: newest, price, size, price per square foot or sold date.
The sold homes preset pulls recent Seattle sales and the rentals preset Seattle rentals.
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:
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 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:
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:
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 page shows the same Actor as a ready-made API, and the Python client 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:
{
"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 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 |
2026-10-27T17:17:31.364Z [scrapely.actor] INFO Starting: 1 URL(s), 0 location search(es).
2026-10-27T17:17:31.473Z [scrapely.proxy_configuration] INFO Platform proxy access check succeeded.
2026-10-27T17: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, addinclude=sold-3mo(or another window) to the URL's filter, or usesearchKeywordswithsearchMode: "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;
searchModeonly applies tosearchKeywords. - 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 (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 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: 0exports everything a search matches. - One platform for property data. The same token runs Zillow, Realtor.com and Airbnb; the Zillow scrapers page compares the US options, and our real estate data scraping 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.




