Real Estate Listings & Sold Comps Scraper avatar

Real Estate Listings & Sold Comps Scraper

Pricing

from $0.40 / 1,000 property scrapes

Go to Apify Store
Real Estate Listings & Sold Comps Scraper

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

Eimantas V

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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 market
Miami, FL 348 properties median $650,000 @ $466/sqft 2 days on market
Phoenix, AZ 349 properties median $467,000 @ $290/sqft 2 days on market
2704 Winding Brook Dr, Austin 78748 SOLD 2026-06-05 $400,000
3 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

GroupFields
Valuationprice, pricePerSqft, squareFeet, lotSizeSqft, yearBuilt, propertyAgeYears
ComparablesisSold, soldDate, daysOnMarket, status, saleType
Carrying costhoaMonthly — the field that decides whether a rental actually cashflows
Locationaddress, city, state, zipCode, neighborhood, latitude, longitude
IdentitymlsNumber, 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. hoaMonthly and lotSizeSqft are 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.

OptionDefaultNotes
listingTypefor-salesold for comparables
soldWithinDays90Only applies to comparables
maxListingsPerLocation350Redfin's own per-export ceiling
propertyTypesallhouse, condo, townhouse, multi-family, land, manufactured-home, co-op, other
minPrice / maxPriceAlso the way around the 350 ceiling — run price bands
minBeds / minBaths / minSqftApplied by Redfin before billing
minYearBuiltSkip pre-1978 stock, or isolate new construction
maxConcurrency5Deliberately 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.
  • daysOnMarket is empty on comparables. Redfin populates it on every for-sale row and on none of the sold ones, so medianDaysOnMarket is 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 on city if 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.
  • pricePerSqft is 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

EventPriceWhen
Actor start$0.005Once per run
Location scraped$0.004Per location resolved and summarised
Property scraped$0.0004Per 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 pricePerSqft per 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.
  • daysOnMarket rising while medianPricePerSqft holds is the earliest sign of a market turning — sellers stop selling before they cut.
  • Pair hoaMonthly with pricePerSqft when screening rentals. A cheap condo with a $600 HOA is not cheap.