Redfin scraper
Pricing
from $0.65 / 1,000 results
Pricing
from $0.65 / 1,000 results
Rating
0.0
(0)
Developer
Lukáš Širhal
Maintained by CommunityActor stats
4
Bookmarked
190
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Scrapes real-estate listings from Redfin — homes for sale and rentals — and returns them as structured data.
Give it a Redfin search URL (or just a location name), optionally narrow the results with filters, and get back every matching listing with price, size, address, coordinates, status and description.
Features
- Homes for sale and rentals — pick either category.
- Search by URL or by location — paste a Redfin region URL, or type a city, ZIP code or neighborhood.
- Server-side filters — price, beds, baths, square footage, property type, sold-within-days and sort order are applied by Redfin itself, so filtering makes runs cheaper, not slower.
- Whole regions in one request — a full metro (7,000+ listings) is fetched in a single API call.
- No duplicates — listings are deduplicated by property id within and across runs.
- Only downloads what you need — a
maxItemsof 20 fetches roughly 20 listings, not the whole city.
Input
Everything is optional, but you must give either Redfin search URLs or a location.
| Field | Type | Description |
|---|---|---|
startUrls | Array | Redfin search URLs to scrape, e.g. https://www.redfin.com/city/16163/WA/Seattle. The fastest and cheapest option — it needs no browser. Use search/region URLs, not individual property pages. |
location | String | A city, ZIP code, neighborhood or address, e.g. "Philadelphia". Only used when no start URLs are given. Slower and more expensive, because Redfin's location lookup may require a browser. |
category | Enum | forSale (default) or forRent. A start URL must match the category you pick. |
maxItems | Integer | Maximum listings to return. 0 (default) means every listing in the search. Lower values make runs cheaper. |
propertyTypes | Array | Restrict to house, condo, townhouse, multiFamily, land, other, coop. Empty means all types. |
minPrice / maxPrice | Integer | Price range in US dollars. |
minBeds / maxBeds | Integer | Bedroom count range. |
minBaths | Integer | Fewest bathrooms. |
minSqFt / maxSqFt | Integer | Interior size range in square feet. |
soldWithinDays | Integer | Also include homes sold in the last N days. Leave empty for on-market listings only. |
sortBy | Enum | relevance (default), newest, oldest, priceAsc, priceDesc, sqftDesc, pricePerSqftAsc. Matters when combined with maxItems. |
proxyConfig | Object | Proxy configuration. See below. |
Example input
{"startUrls": [{ "url": "https://www.redfin.com/city/15502/PA/Philadelphia" }],"category": "forSale","maxItems": 100,"minPrice": 300000,"maxPrice": 750000,"minBeds": 3,"propertyTypes": ["house", "townhouse"],"sortBy": "priceAsc"}
Proxy
A proxy is strongly recommended. Redfin blocks datacenter IP addresses on its web pages, so if you search by location, use the RESIDENTIAL proxy group — the location lookup may need to load a real page. Scraping from startUrls is far more tolerant.
{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
Output
Each listing becomes one dataset item.
For sale
| Field | Type | Description |
|---|---|---|
propertyId | Number | Redfin's unique id for the property. |
url | String | Link to the listing on Redfin. |
price | Number | Asking price in US dollars. |
beds | Number | Number of bedrooms. null when not disclosed. |
baths | Number | Number of bathrooms, halves included (e.g. 2.5). |
sqft | Number | Interior size in square feet. |
status | String | MLS status — Active, Coming Soon, Pending, Closed, … |
type | String | Property type — House, Condo, Townhouse, Vacant Land, … |
address | String | Street line, e.g. 1710 Montrose St. |
city / state / zip | String | Address components. |
lat / lon | Number | Coordinates in decimal degrees. |
yearBuilt | Number | Year of construction. |
community | String | Neighborhood or community name. |
hoa | Number | HOA dues per month, when published. |
mls | String | MLS listing number. |
timeOnRedfin | Number | Minutes since the listing appeared on Redfin. |
description | String | Listing remarks written by the agent. |
yearBuild | Number | Deprecated misspelling of yearBuilt, kept for backwards compatibility. |
Fields Redfin does not publish for a given listing come back as null — this is common for hoa, and for sqft and yearBuilt on land and new construction.
For rent
Rentals return the same shape, minus yearBuilt, community, hoa, mls and timeOnRedfin. Because a rental building lists several units, price, beds, baths and sqft are ranges given as strings (e.g. "1100 - 1350") when the units differ, and a plain number when they don't.
Example output
{"propertyId": 38798295,"url": "https://www.redfin.com/PA/Philadelphia/1710-Montrose-St-19146/home/38798295","price": 925000,"beds": 3,"baths": 4,"sqft": 2178,"status": "Coming Soon","type": "Townhouse","address": "1710 Montrose St","city": "Philadelphia","state": "PA","zip": "19146","lat": 39.9400914,"lon": -75.1716835,"yearBuilt": 2006,"community": "Graduate Hospital","hoa": null,"mls": "2187927345424205529","timeOnRedfin": 37,"description": "Welcome to 1710 Montrose Street, a beautifully renovated 3-bedroom, 3.5-bath home with GARAGE parking…"}
Notes and limits
- A start URL must match the
category. A rentals URL withcategory: "forSale"returns nothing useful. - Redfin caps very large searches. If a region exceeds the cap, the scraper automatically splits it into smaller map viewports and keeps going.
soldDateon Redfin refers to a property's previous sale and appears on active listings too, so it is not exposed as a "sold" flag. Usestatusto tell sold listings apart, andsoldWithinDaysto include them.- Rental results overlap between pages; the scraper deduplicates them, so a run may report fewer new listings than the page size.
Support
Found a bug or need a field that isn't here? Open an issue on the actor's Issues tab.