Real Estate Listings & Sold Comps Scraper
Pricing
from $0.40 / 1,000 property scrapes
Real Estate Listings & Sold Comps Scraper
Scrape US property listings and sold comparables from Redfin. Every row carries price per square foot, HOA, lot size, year built, MLS number and coordinates. Sold searches return confirmed sales only - dated and priced, never padded with unconfirmed rows - plus median $/sqft per area.
Pricing
from $0.40 / 1,000 property scrapes
Rating
0.0
(0)
Developer
Eimantas V
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Real Estate Listings & Sold Comps
For-sale listings and sold comparables — with price per square foot, HOA, lot size, year built and coordinates on every row.
Austin, TX 350 properties median $549,000 @ $318/sqft 4 days on marketMiami, FL 348 properties median $650,000 @ $466/sqft 2 days on marketPhoenix, AZ 349 properties median $467,000 @ $290/sqft 2 days on market2704 Winding Brook Dr, Austin 78748 SOLD 2026-06-05 $400,0003 bed / 2 bath · 1,890 sqft · $212/sqft · built 1996 · HOA $42 · lot 5,793 sqft
1,068 properties in 4 requests and 2.2 seconds. No browser, no API key, no MLS membership.
Sold comps are the point
Live listings are visible to anyone. What a property actually sold for — with a date, a price per square foot and a matching set of beds, baths and floor area — is what valuations, offer analysis and rental underwriting are built on, and it normally sits behind an MLS membership or an enterprise data contract.
Set listingType: "sold" and you get exactly that, with a look-back window you choose.
What you get
Per property
| Group | Fields |
|---|---|
| Valuation | price, pricePerSqft, squareFeet, lotSizeSqft, yearBuilt, propertyAgeYears |
| Comparables | isSold, soldDate, daysOnMarket, status, saleType |
| Carrying cost | hoaMonthly — the field that decides whether a rental actually cashflows |
| Location | address, city, state, zipCode, neighborhood, latitude, longitude |
| Identity | mlsNumber, source, listingUrl, open-house times |
Per location — median price, median price per square foot, median size, median days on market, price range, HOA count, new-build count and unconfirmedSales. Medians throughout: one estate moves a mean by six figures and a median not at all.
Who this is for
- Investors — pull sold comps for a ZIP, sort by
pricePerSqft, and find what is mispriced.hoaMonthlyandlotSizeSqftare in the same row, so a yield model needs no second source. - Agents and appraisers — a defensible comp set in one run: same area, same window, same fields.
- Proptech and iBuyers — coordinates on every row, MLS number as a stable key, so daily runs diff cleanly.
- Market researchers — median $/sqft across dozens of areas, refreshed on a schedule.
Input
{"locations": ["https://www.redfin.com/city/30818/TX/Austin","https://www.redfin.com/zipcode/78704"],"listingType": "sold","soldWithinDays": 180,"propertyTypes": ["house"],"minPrice": 300000}
Open the area on redfin.com and paste the address bar. City, ZIP, county and neighbourhood pages all work; an individual property page or a saved search does not.
| Option | Default | Notes |
|---|---|---|
listingType | for-sale | sold for comparables |
soldWithinDays | 90 | Only applies to comparables |
maxListingsPerLocation | 350 | Redfin's own per-export ceiling |
propertyTypes | all | house, condo, townhouse, multi-family, land, manufactured-home, co-op, other |
minPrice / maxPrice | — | Also the way around the 350 ceiling — run price bands |
minBeds / minBaths / minSqft | — | Applied by Redfin before billing |
minYearBuilt | — | Skip pre-1978 stock, or isolate new construction |
maxConcurrency | 5 | Deliberately low; see below |
Four things worth knowing
Each was found by running against live data.
A sold export is not all sales. Redfin returns two kinds of row under the same PAST SALE label: confirmed sales, with a status of Sold and a date, and records it carries an address for but cannot confirm — blank status, no date, and in non-disclosure states such as Texas no price either. The second kind is not rare. It is 153 of 343 rows in Miami, 131 of 350 in Phoenix, and about a tenth of Austin. Their prices are not sale prices, so leaving them in drags the median: Phoenix's median sale price reads $508,500 with them and $600,000 without, an 18% error in the exact number a valuation turns on. A sold search here returns confirmed sales only, counts the rest as unconfirmedSales on the summary row, and does not bill for them.
350 properties per location is a hard ceiling, and it is Redfin's. The export gives no way to page past it. When an area has more, the summary row is flagged truncated: true and the run warns. The way through is to split by price band — $0–400k, $400–700k, $700k+ — or to use ZIP codes instead of a whole city. Anything claiming unlimited results from this source is paging something else, or not telling you it stopped.
An empty response is not an empty market. Redfin sheds load by returning HTTP 200 with no body at all, which is indistinguishable from "no properties here" on the status line and completely different in the body. A genuine empty result still arrives with its CSV header. The Actor checks for that header, retries with a backoff when it is missing, and reports THROTTLED rather than quietly telling you a suburb has no houses in it. This is also why maxConcurrency defaults to 5.
A ZIP code is not a region id. redfin.com/zipcode/78701 carries the postal code; Redfin's internal id for that area is 34095. Reading the ZIP as an id queries a different region that returns a valid but empty export — a wrong answer that looks like a real one. Only city URLs carry a usable id in the path; everything else is resolved from the page.
Output
{"recordType": "listing","address": "2704 Winding Brook Dr", "city": "Austin", "zipCode": "78748","latitude": 30.150797, "longitude": -97.8535557,"price": 400000, "pricePerSqft": 212,"beds": 3, "baths": 2, "squareFeet": 1890, "lotSizeSqft": 5793,"yearBuilt": 1996, "propertyAgeYears": 30, "hoaMonthly": 42,"isSold": true, "soldDate": "2026-06-05","propertyType": "Single Family Residential", "mlsNumber": "…"}
Three ready-made views: Properties, Sold comparables and Market summary. Set flattenOutput: true for CSV.
Honest limits
- United States only. Redfin does not cover other markets.
- 350 properties per location per request. See above.
daysOnMarketis empty on comparables. Redfin populates it on every for-sale row and on none of the sold ones, somedianDaysOnMarketis null for a sold search. Null rather than a guess.- A city search spills slightly into neighbouring cities. An Austin export came back as
Austin: 344, Manor: 1, Cedar Park: 1. Filter oncityif you need a strict boundary. - Not every field is on every row. Bathroom counts and lot sizes are missing from some MLS feeds; those arrive as null rather than zero.
pricePerSqftis derived when Redfin omits it and both price and floor area are present. It is never invented from one of them.- Price bounds on a sold search are re-applied here. Redfin filters comparables by list price and exports the sale price, so a sale that closed away from asking slips through its filter — measured at ten rows over a $400k ceiling, the highest at $425,000. Those rows are dropped and not charged.
- Some MLS feeds withhold listings from bulk export by their own rules, which Redfin states in the file. A location is a near-complete picture, not a guaranteed-complete one.
- Throttled locations, unresolvable locations and unconfirmed sales are never charged.
Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.005 | Once per run |
| Location scraped | $0.004 | Per location resolved and summarised |
| Property scraped | $0.0004 | Per property returned, after filters |
$0.40 per 1,000 properties. Fifty ZIP codes at 350 each costs about $7.20. Failures and unconfirmed sales are free.
Tips
- Run sold comps weekly and diff on
mlsNumber. New rows are closings; that is your market pulse before any index publishes it. - Median
pricePerSqftper ZIP, tracked over months, is the cleanest local price index you can build from public data. - Split a hot city into price bands to get past the 350 ceiling and, incidentally, to see how each band is moving separately.
daysOnMarketrising whilemedianPricePerSqftholds is the earliest sign of a market turning — sellers stop selling before they cut.- Pair
hoaMonthlywithpricePerSqftwhen screening rentals. A cheap condo with a $600 HOA is not cheap.