Redfin Property Scraper ๐
Pricing
Pay per usage
Redfin Property Scraper ๐
Extract real estate listings, property details, and market insights from Redfin. This lightweight scraper is optimized for speed and efficiency. For consistent results and to prevent blocking, the use of residential proxies is highly recommended.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Shahid Irfan
Actor stats
1
Bookmarked
10
Total users
5
Monthly active users
13 days ago
Last modified
Categories
Share
Redfin Property Listings Scraper
Extract comprehensive Redfin property listing data for research, monitoring, and analysis. Collect pricing, listing status, address details, property attributes, and location coordinates in a structured dataset. Built for reliable recurring collection with practical controls for result limits and run speed.
Features
- Rich listing coverage โ Collect pricing, beds, baths, size, listing state, and timeline fields.
- Location-ready output โ Get address parts and latitude/longitude for mapping and geo analysis.
- Clean dataset records โ Saves normalized records with deduplication and empty-value cleanup.
- Flexible run controls โ Configure result count, page limit, concurrency, and target region settings.
- Monitoring friendly โ Includes timestamps and listing identifiers for repeat run comparison.
Use Cases
Real Estate Market Research
Track listing activity and asking prices in a city or region over time. Build snapshots for price movement and inventory trend analysis.
Investment Opportunity Screening
Filter and compare listings by price, property traits, and listing status. Quickly create lead lists for deeper due diligence.
Competitive Pricing Intelligence
Benchmark neighborhoods and property types by comparing per-square-foot pricing and listing timelines. Support pricing strategy with structured evidence.
Geo and Mapping Workflows
Use address and coordinate fields to visualize listings on maps. Combine with district, transport, or demographic layers for local insights.
Data Pipelines and Reporting
Feed listing data into BI dashboards, spreadsheets, or internal tools. Use recurring runs to power weekly or daily reporting.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | String | Yes | https://www.redfin.com/city/29470/IL/Chicago | Primary Redfin URL for the target market. |
regionId | String | No | Auto | Optional region override if URL parsing is not enough. |
regionType | Integer | No | 6 | Region type override (for advanced targeting). |
collectDetails | Boolean | No | true | Compatibility flag available in input schema. |
results_wanted | Integer | No | 20 | Maximum number of properties to save. |
max_pages | Integer | No | 3 | Maximum result pages to process. |
maxConcurrency | Integer | No | 3 | Concurrent request limit for balancing speed and stability. |
proxyConfiguration | Object | No | Apify Proxy | Optional proxy configuration for reliability and scaling. |
Output Data
Each dataset item can include:
| Field | Type | Description |
|---|---|---|
propertyId | String/Number | Unique property identifier. |
url | String | Listing URL. |
address | String | Combined full address string. |
streetAddress | String | Street portion of address. |
city | String | City name. |
state | String | State code/name. |
zip | String | ZIP/postal code. |
price | String | Formatted listing price. |
priceRaw | Number | Numeric price value. |
pricePerSqFt | Number | Price per square foot when available. |
beds | Number | Bedroom count. |
baths | Number | Bathroom count. |
sqft | Number | Interior area. |
propertyType | String/Number | Property type code/value. |
propertyTypeLabel | String | Human-readable property type label. |
status | String | Current listing status. |
listingType | String | Listing category/type. |
searchStatus | String | Listing search status label. |
listingDate | String | Listing date (ISO-like date string). |
daysOnMarket | Number | Time on market indicator. |
timeOnRedfin | Number | Platform time indicator when available. |
description | String | Listing remarks/description. |
latitude | Number | Latitude coordinate. |
longitude | Number | Longitude coordinate. |
mlsNumber | String | MLS identifier. |
listingId | String/Number | Listing identifier. |
lotSize | Number/String | Lot size value when available. |
yearBuilt | Number | Year built. |
hoa | Number/String | HOA value when available. |
isNewConstruction | Boolean | New construction flag. |
isHot | Boolean | High-interest listing flag. |
isRedfin | Boolean | Platform-specific listing flag. |
has3DTour | Boolean | 3D tour availability. |
hasVirtualTour | Boolean | Virtual tour availability. |
hasVideoTour | Boolean | Video tour availability. |
photoCount | Number | Number of photos when available. |
primaryPhotoUrl | String | Main listing photo URL. |
soldDate | String | Sold date when available. |
keyFacts | Array/Object | Additional key listing facts. |
source | String | Record source label. |
fetched_at | String | Extraction timestamp (ISO datetime). |
Usage Examples
Basic City Run
{"startUrl": "https://www.redfin.com/city/29470/IL/Chicago","results_wanted": 20}
Larger Dataset Collection
{"startUrl": "https://www.redfin.com/city/30749/CA/Los-Angeles","results_wanted": 200,"max_pages": 6,"maxConcurrency": 4}
Region Override Run
{"startUrl": "https://www.redfin.com/city/30753/NY/New-York","regionId": "30753","regionType": 6,"results_wanted": 50}
Proxy-Enabled Production Run
{"startUrl": "https://www.redfin.com/city/13271/PA/Philadelphia","results_wanted": 100,"max_pages": 4,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Sample Output
{"propertyId": 13251998,"url": "https://www.redfin.com/IL/Chicago/4906-W-Gladys-Ave-60644/home/13251998","address": "4906 W Gladys Ave, Chicago, IL 60644","city": "Chicago","state": "IL","zip": "60644","price": "$319,900","priceRaw": 319900,"beds": 5,"baths": 2,"sqft": 2500,"status": "Active","listingDate": "2026-03-14","latitude": 41.8760414,"longitude": -87.7476147,"mlsNumber": "12592283","yearBuilt": 1901,"photoCount": 22,"source": "primary","fetched_at": "2026-03-15T05:19:29.020Z"}
Tips for Best Results
Start Small, Then Scale
- Begin with
results_wanted: 20to validate targeting and output quality. - Increase to larger runs after confirming dataset structure.
Use Correct Target URLs
- Use stable city or region URLs as
startUrl. - Add
regionIdwhen you want strict region control.
Balance Speed and Stability
- Keep
maxConcurrencyaround3-5for consistent throughput. - Increase
max_pagesonly when you need deeper coverage.
Improve Reliability for Production
- Use proxy settings for repeated or high-volume runs.
- Schedule periodic runs for monitoring instead of one very large run.
Keep Comparisons Clean
- Use
fetched_at,propertyId, andlistingIdto compare snapshots. - Track changes in
price,status, anddaysOnMarketbetween runs.
Integrations
Connect your extracted data with:
- Google Sheets โ Build shareable market trackers.
- Airtable โ Organize listings into searchable operational tables.
- Looker Studio / BI tools โ Visualize pricing and inventory trends.
- Webhooks โ Send fresh runs to your own backend workflows.
- Zapier / Make โ Trigger alerts, enrichment, and reporting automations.
Export Formats
- JSON โ Best for APIs, apps, and data pipelines.
- CSV โ Best for spreadsheets and quick analysis.
- Excel โ Best for business reviews and stakeholder reporting.
- XML โ Best for systems that require XML feeds.
Frequently Asked Questions
How many properties can I collect per run?
You can set your target with results_wanted. Practical limits depend on your run settings and desired completion time.
Can I run this for different cities?
Yes. Replace startUrl with the city or region URL you want to collect.
Why are some fields missing in some records?
Listing pages do not always expose every field. The actor saves available values and skips empty values.
How do I keep runs under QA time limits?
Use results_wanted: 20 and reasonable max_pages values. This is the recommended QA-safe baseline.
Can I use this for ongoing monitoring?
Yes. Schedule recurring runs and compare price, status, and daysOnMarket over time.
Does it work with proxy settings?
Yes. You can pass proxyConfiguration for higher reliability in repeated production runs.
How do I export data after a run?
Use dataset export options in JSON, CSV, Excel, or XML formats.
Support
For issues or feature requests, use the Apify Console issue/support channels.
Resources
Legal Notice
This actor is intended for lawful data collection and analysis. You are responsible for complying with website terms, local laws, and platform policies. Use reasonable request volume and handle collected data responsibly.