Redfin Scraper — For-Sale Property Listings
Pricing
from $2.50 / 1,000 listings
Redfin Scraper — For-Sale Property Listings
[💰 $2.5 / 1K] Extract Redfin.com for-sale listings at scale -- 68 fields per home: price, beds, baths, square footage, and GPS coordinates on every row, plus county tax records with one toggle. Built for real estate investors, brokerages, and proptech teams. Up to 2,950 listings per search.
Pricing
from $2.50 / 1,000 listings
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Pull for-sale property listings from Redfin.com at scale — 68 fields per home, GPS coordinates and MLS numbers on every row, county tax records on demand, and 1,000 listings in about 21 seconds. Built for real estate investors, brokerage and CRM teams, and proptech analysts who need current US listing data in a clean table today, without standing up and babysitting a data pipeline of their own.
Why This Scraper?
- 68 fields on every listing — price, beds, baths, interior and lot square footage, year built, stories, HOA dues, MLS number, open-house windows, tour flags and more, grouped into core, location, financial, media, contact and listing-detail sets. Measured on 699 listings drawn from five metros (Los Angeles, Chicago, Miami Beach, Seattle, Austin) across five property categories.
- GPS coordinates on 100% of listings — latitude and longitude on 699 of 699 sampled rows, alongside MLS number, ZIP and listing status at the same 100%. Map it or geo-join it the moment it lands, with no address geocoding step in between.
- County public records with one toggle —
enrichDetailsadds 16 further fields to the same row: annual property tax, tax roll year, taxable land value, taxable improvement value, parcel number (APN), county name and county page, year renovated, and the recorded square footage, stories and lot size — which frequently disagree with the listing's own numbers. - Every photo URL, not just a photo count — full-size and thumbnail arrays per listing (the example row below carries 32 photos), plus 3D-tour, video-tour and virtual-tour flags, with the 3D tour link and its thumbnail where the listing has one.
- 1,000 listings in 21 seconds — measured end to end on the platform; 100 listings finished in 5.9 seconds, and a 60-listing run with full county records took 15.
- Up to 2,950 listings from a single search — the run walks to the end of the result set and stops when the site genuinely runs out of homes, rather than at an arbitrary page count.
lastSoldDatemeans the previous sale, and says so — it is the property's prior sale from public records, never the current listing's close date; 494 of the 699 sampled listings carried one, spanning 1975 to 2026.daysOnMarketis likewise a real count of days (1 to 888 observed), not a millisecond figure wearing a day label.- Six property categories that mean what they say — House, Condo/Co-op, Townhouse, Multi-family (2–4 units), Multi-family (5+ units) and Land / lot, checked one filter at a time against the site's own categories: 221/221 houses, 203/203 condos, 121/121 townhouses and 36/36 land came back under the matching label.
- Wrong-city results are refused, not delivered — if a search starts answering with homes from a different state than the address you pasted, the run stops with a clear error instead of quietly filling your dataset with another market's inventory.
Use Cases
Investment & Underwriting
- Build a comparable set from price, price per square foot, beds, baths and interior square footage inside one named neighbourhood.
- Underwrite carrying costs with monthly HOA dues and the county's annual property tax figure sitting on the same row.
- Spot renovation plays by reading
yearBuiltagainstyearRenovated, and the listed square footage against the public-record square footage. - Time an offer with
daysOnMarketand theComing Soonstatus, before a property is formally on the market.
Market Research & Analytics
- Chart median price and price per square foot by ZIP or neighbourhood across five property categories in one pass.
- Measure the new-construction share of a metro from
isNewConstruction,newConstructionBuilderandnewConstructionCommunity. - Compare taxable land value against asking price to find pockets where the tax roll has fallen behind the market.
- Re-run the same search weekly and diff on
idto build your own inventory and price-cut time series.
Lead Generation & CRM
- Pull listing agent and brokerage names and phone numbers wherever the local MLS republishes them.
- Target one property class at a time — multi-family (5+ units), land parcels, townhouses — in a single filtered run.
- Plan weekend canvassing from
openHouseStart,openHouseEndandopenHouseName, withtimeZoneon the row so the times are unambiguous.
Data Enrichment & Integration
- Join to records you already hold on
mlsNumberorparcelNumber— county and MLS identifiers, not site-internal ones. - Attach coordinates, ZIP and neighbourhood to an address list that has none.
- Fill in assessed values and property tax for a portfolio you are already tracking.
Proptech Products & Content
- Power a listing search or map view with photo URLs, tour links and full marketing remarks.
- Populate neighbourhood guides and market reports with counted, current inventory instead of stale copy.
- Run on a schedule and push each new dataset into a spreadsheet, a warehouse or a Slack channel.
Getting Started
Simplest run
{"regionId": "30818","areaType": "6","listingStatus": "9","propertyTypes": "1,2,3,4,5,6,7,8","maxItems": 100}
Paste a filtered search URL from the site
Set your filters on the site, then copy the address bar URL — every filter in it is carried through.
City pages (/city/…) and neighbourhood pages (/neighborhood/…) are both supported.
A ZIP-code page is not — open the city or neighbourhood that ZIP sits in and paste
that address instead.
{"searchUrls": ["https://www.redfin.com/city/11467/FL/Miami-Beach"],"maxItems": 2950}
Everything, with full details
{"searchUrls": ["https://www.redfin.com/neighborhood/290650/CA/Los-Angeles/Westchester"],"maxItems": 2950,"enrichDetails": true}
Input Reference
What to Scrape
| Parameter | Type | Default | Description |
|---|---|---|---|
searchUrls | array | — | Redfin.com search result URLs. Set your filters on Redfin.com, then paste the address bar URL here. Overrides the individual filters below when provided. |
regionId | string | 30818 | Only used when Search URLs is empty. It is the number inside a Redfin city or neighbourhood web address - https://www.redfin.com/city/30818/TX/Austin is area 30818. Easiest route: paste the address into Search URLs above and leave this alone. |
areaType | string | 6 | Whether the ID above is a city or a neighbourhood. It must match the address the ID came from - /city/... is a city, /neighborhood/... is a neighbourhood - or Redfin quietly returns listings from somewhere else entirely. |
listingStatus | string | 9 | Active listings are on the market now; coming soon are announced but not yet accepting showings. The default returns both. |
propertyTypes | string | 1,2,3,4,5,6,7,8 | Narrow the search to one kind of property. The default returns everything Redfin lists for the area. |
maxItems | integer | 100 | Maximum listings per search URL (0 = collect everything each search returns). Redfin.com pages through at most 2,950 listings per search, so use several narrower searches to collect more. |
Options
| Parameter | Type | Default | Description |
|---|---|---|---|
enrichDetails | boolean | false | Add 16 extra fields per listing. Adds one request per listing and is billed at the higher rate. |
concurrency | integer | 8 | How many requests to run in parallel. Lower this if you see failures. |
proxyConfiguration | object | Apify Proxy | Proxy settings for the run. |
Output
Every listing is one dataset row. Enabling enrichDetails adds 16 further fields to the same row — there is no second record type to join.
{"id": "6638632","url": "https://www.redfin.com/CA/Los-Angeles/5310-W-82nd-St-90045/home/6638632","address": "5310 W 82nd St","propertyType": "House","status": "Active","beds": 3,"baths": 2,"fullBaths": 2,"sqFt": 1299,"lotSizeSqFt": 5497,"yearBuilt": 1950,"stories": 1,"parkingSpaces": 1,"description": "Thoughtfully updated and full of character, this three-bedroom, two-bathroom Westchester home offers a rare combination of inviting living spaces and an exceptional backyard design …","keyFacts": ["Custom cabinetry", "Stone countertops", "Exceptional backyard"],"city": "Los Angeles","state": "CA","zip": "90045","neighborhood": "Westchester","latitude": 33.9638032,"longitude": -118.3723913,"countryCode": "US","price": 1499000,"pricePerSqFt": 1154,"lastSoldDate": "2023-06-13T07:00:00+00:00","photoCount": 32,"has3DTour": false,"hasVideoTour": false,"hasVirtualTour": false,"mlsNumber": "26861249","listingId": "221195544","daysOnMarket": 4,"isNewConstruction": false,"isRedfinListing": false,"openHouseStart": "2026-07-28T18:00:00+00:00","openHouseEnd": "2026-07-28T21:00:00+00:00","openHouseName": "Open House - 11:00 - 2:00 PM","timeZone": "US/Pacific","badges": ["Open House"],"latestMarketingRemark": "Thoughtfully updated and full of character, this three-bedroom, two-bathroom Westchester home offers a rare combination of inviting living spaces and …","publicRecordSqFt": 1299,"publicRecordLotSqFt": 5497,"yearRenovated": 1955,"county": "Los Angeles County","countyUrl": "https://www.redfin.com/county/321/CA/Los-Angeles-County","taxesDue": 18211.8,"taxRollYear": 2025,"taxableLandValue": 1206864,"taxableImprovementValue": 301716,"photos": ["https://ssl.cdn-redfin.com/photo/40/bigphoto/249/26861249_0.jpg","https://ssl.cdn-redfin.com/photo/40/bigphoto/249/26861249_1_0.jpg","https://ssl.cdn-redfin.com/photo/40/bigphoto/249/26861249_2_0.jpg"],"photoThumbnails": ["https://ssl.cdn-redfin.com/photo/40/tmbphoto/249/genTmb.26861249_0.jpg","https://ssl.cdn-redfin.com/photo/40/tmbphoto/249/genTmb.26861249_1_0.jpg"],"parcelNumber": "4127005011","publicRecordPropertyType": "Single Family Residential","publicRecordUpdated": "2026-07-09T00:23:21.207000+00:00"}
That is one real captured listing with enrichDetails on. Fields a listing does not
publish are dropped rather than returned empty — this one has no HOA and no unit
number, so those keys are simply absent. The two long text fields and the 32-entry
photo arrays are abbreviated above for readability. Agent and brokerage contact
details arrive in listingAgentName, listingAgentPhone, listingBrokerName and
listingBrokerPhone where the listing publishes them; they are personal data and are
left out of this example rather than reprinted here.
Core Fields
| Field | Type | Description |
|---|---|---|
id | string | Property ID |
url | string | Listing URL |
address | string | Street address |
unit | string | Unit |
propertyType | string | Property type |
status | string | Listing status |
beds | number | Bedrooms |
baths | number | Bathrooms |
fullBaths | number | Full bathrooms |
partialBaths | number | Partial bathrooms |
sqFt | number | Interior sq ft |
lotSizeSqFt | number | Lot size (sq ft) |
yearBuilt | number | Year built |
stories | number | Stories |
garageSpaces | number | Garage spaces |
parkingSpaces | number | Parking spaces |
description | string | Listing description (search tier truncates at 700 characters) |
keyFacts | array | Highlights |
Price & Value
| Field | Type | Description |
|---|---|---|
price | number | Price (USD) |
pricePerSqFt | number | $ per sq ft |
hoaDues | number | HOA dues (USD/month) |
lastSoldDate | string | Last sold (prior sale, from public records) |
Location
| Field | Type | Description |
|---|---|---|
city | string | City |
state | string | State |
zip | string | ZIP code |
neighborhood | string | Neighborhood |
latitude | number | Latitude |
longitude | number | Longitude |
countryCode | string | Country |
Contacts
| Field | Type | Description |
|---|---|---|
listingAgentName | string | Listing agent |
listingAgentPhone | string | Listing agent phone |
listingBrokerName | string | Listing brokerage |
listingBrokerPhone | string | Listing brokerage phone |
coListingBrokerName | string | Co-listing brokerage |
Media
| Field | Type | Description |
|---|---|---|
photoCount | number | Photo count |
has3DTour | boolean | Has a 3D tour |
hasVideoTour | boolean | Has a video tour |
hasVirtualTour | boolean | Has a virtual tour |
tourUrl | string | 3D tour URL |
tourThumbnailUrl | string | 3D tour thumbnail |
Details & Timestamps
| Field | Type | Description |
|---|---|---|
mlsNumber | string | MLS number |
listingId | string | Listing ID |
daysOnMarket | number | Days on market |
isNewConstruction | boolean | New construction |
isRedfinListing | boolean | Listed by Redfin |
openHouseStart | string | Next open house starts |
openHouseEnd | string | Next open house ends |
openHouseName | string | Open house label |
timeZone | string | Time zone |
badges | array | Listing badges |
newConstructionBuilder | string | Builder |
newConstructionCommunity | string | Community |
With enrichDetails enabled
| Field | Type | Description |
|---|---|---|
latestMarketingRemark | string | Full marketing remarks (most recent listing event) |
publicRecordSqFt | number | Finished sq ft (county records) |
publicRecordLotSqFt | number | Lot size, sq ft (county records) |
publicRecordStories | number | Stories (county records) |
yearRenovated | number | Year renovated |
county | string | County |
countyUrl | string | County page |
taxesDue | number | Annual property tax (USD) |
taxRollYear | number | Tax roll year |
taxableLandValue | number | Taxable land value (USD) |
taxableImprovementValue | number | Taxable improvement value (USD) |
photos | array | Photo URLs (all listings of this property) |
photoThumbnails | array | Photo thumbnail URLs |
parcelNumber | string | Parcel number (APN) |
publicRecordPropertyType | string | Property type (county records) |
publicRecordUpdated | string | County record last updated |
Tips for Best Results
- Paste a city or neighbourhood page, not a ZIP page.
https://www.redfin.com/city/11467/FL/Miami-Beachandhttps://www.redfin.com/neighborhood/290650/CA/Los-Angeles/Westchesterare both fine. A ZIP-code search page is not supported — open the city or neighbourhood that ZIP belongs to and paste that address instead. - Split a big metro to get past 2,950. One search returns at most 2,950 listings. Run one search per property category, or one per neighbourhood, and the results merge into a single dataset with duplicates removed.
- Check
photoCountbefore you budget for image downloads. Photo URLs are republished from each local MLS feed, and some markets publish none at all: in our enriched sample every Chicago, Los Angeles, Miami Beach and Austin listing carried photo URLs, while none of the twelve Seattle listings did — even thoughphotoCountwas populated on all of them. TreatphotoCountas what the listing page shows and thephotosarray as what the feed releases. - Agent contacts are a market-by-market fact, not a scraper limitation. Whether a listing agent's name and phone travel with the listing depends on what the local MLS republishes: all 158 sampled Seattle listings carried an agent name, but only 1 of 140 in Miami Beach did. If contacts are the reason you are running this, sample one small search in your target market first and check before you scale up.
- Leave
enrichDetailsoff for sweeps, on for shortlists. It adds a request per listing and bills at the higher rate, so the efficient pattern is a cheap wide search, then a second run over the handful of properties you actually care about. lastSoldDateis your comp anchor. It is the prior sale from public records, not this listing's close, so pairing it with the current asking price gives you a hold-period appreciation read on every home in the search — including the ones still marked Active.- The default returns both Active and Coming Soon listings. Coming Soon homes are announced but not yet taking showings, which makes them the best early-lead pool; filter on
statusdownstream if you only want one or the other.
Pricing
From $2.50 per 1,000 results (search only) or from $7.50 per 1,000 results (with full details).
| Results | Search Only | With Full Details |
|---|---|---|
| 100 | $0.25 | $0.75 |
| 1,000 | $2.50 | $7.50 |
| 10,000 | $25.00 | $75.00 |
| 100,000 | $250.00 | $750.00 |
Those are the rates on Gold and above. Higher-volume plans pay less per result:
| Your Apify plan | Search Only | With Full Details |
|---|---|---|
| No discount | $3.00 | $9.00 |
| Bronze | $2.90 | $8.55 |
| Silver | $2.70 | $8.00 |
| Gold and above | $2.50 | $7.50 |
Per 1,000 results.
A "result" is any listing row in the output dataset. When you run several searches at once, a listing matching more than one of them is de-duplicated before it reaches the dataset, so you are never charged twice for the same listing. The full-details rate applies only to rows that actually came back enriched — if a listing's detail record is unavailable, the row is still delivered and charged at the search-only rate. Platform fees (compute, storage) are additional and depend on your Apify plan.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n — Workflow automation
- Google Sheets — Direct spreadsheet export
- Slack / Email — Notifications on new results
- Webhooks — Trigger custom APIs on run completion
- Apify API — Full programmatic access
Legal & Ethical Use
This is an unofficial scraper. It is not affiliated with, endorsed by, or connected to Redfin.com or its operators in any way. All trademarks belong to their respective owners.
This actor is intended for legitimate market research and analytics. You are responsible for complying with applicable laws and with Redfin.com's Terms of Service.
Results may include personal data such as contact details. Treat them accordingly: do not use them for spam, harassment, or any unlawful purpose, and follow applicable privacy rules when storing or processing them.