Redfin Property Scraper — Sale + Sold · Market KPIs
Pricing
Pay per event
Redfin Property Scraper — Sale + Sold · Market KPIs
Redfin scraper and US real estate data API. Search for-sale, for-rent, sold and coming-soon listings by region, coordinates or property URL; return price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.
Pricing
Pay per event
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
31
Total users
15
Monthly active users
4 hours ago
Last modified
Categories
Share
Redfin Property Scraper — Sale + Sold · Market KPIs 🏡
🎯 Extract Redfin US Property Listings With Market KPIs in Seconds
Investors, agents, market analysts, and prop-tech builders — get full Redfin listings plus price/sqft analytics, days-on-market, and optional Redfin Estimate + Walk Score
🔎 What is the Redfin Scraper — and when should you use it?
The Redfin Scraper turns US property listings from Redfin into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: for-sale, for-rent, sold and coming-soon US listings — price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.
Use something else when: you want Zillow and its Zestimate instead. Use Zillow Scraper for US listings with Zestimate, rent Zestimate and investor KPIs. Use Centris Property Scraper for Quebec and Montreal listings.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/redfin-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want US property data from Redfin using the Apify Actor `sian.agency/redfin-property-scraper`.Use it when I need: for-sale, for-rent, sold and coming-soon US listings — price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.Don't use it when: you want Zillow and its Zestimate instead — use zillow-property-scraper or centris-ca-property-scraper instead.How to call it: start with `searchMode: autocomplete` to turn a place name into a `regionId`, then run `byRegionId` (or use `byCoordinates`, or `propertyDetails` for specific listing URLs).Start with this input:{"searchMode": "autocomplete","autocompleteQuery": "Austin, TX"}Ask me which city or ZIP, and whether you want for-sale, sold or coming-soon, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Find coming-soon listings in Austin before they hit the wider market.
- Compare price per sqft by school district in Seattle.
- Flag listings with high flood risk in Tampa.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/redfin-property-scraper.md.
📋 Overview
Pull Redfin US property listings — for-sale, sold, and coming-soon — into clean structured data. Search any US market by region (city, neighborhood, zip) or by lat/lng + radius, and get back complete listings with calculated price-per-sqft, beds/baths, square footage, lot size, year built, days-on-market, listing agent, geo coordinates, and full photo URLs.
Why investors and agents choose us over the alternatives:
- 📊 Analytics included, not just raw data — auto-generated HTML market report with median price, price/sqft distribution (min/median/avg/p90/max), days-on-market distribution, top cities + zips by inventory, and property-type breakdown — computed for you on every run
- 🧮 Calculated price/sqft on every listing — comp sheets and CMAs are ready straight from the dataset
- 🌎 Nationwide US coverage — every Redfin region: cities, neighborhoods, zip codes, school districts
- ⭐ Optional Redfin Estimate + Walk Score — Redfin's AVM and Walk/Bike/Transit scores per listing for valuation and livability filtering (PAID)
- 🔎 Built-in autocomplete — type a city or zip, get back the region IDs you need to scrape — no manual lookup
- 🆓 FREE tier with full feature parity — 25 listings per run, no credit card, same KPIs and HTML report — just a smaller cap
✨ Features
- 🏷️ For-sale, sold, or coming-soon — single
listingStatustoggle picks the side of the market - 🧭 Six search modes —
autocomplete(region-ID lookup),byRegionId(primary scrape mode),byLocation(free-text city/area),byPolygon(custom map boundary, PAID),byCoordinates(lat/lng + radius, PAID),propertyDetails(per-property dossier) - 🔥 Market-info enrichment (PAID) —
includeMarketInfoadds hot-market stats and mortgage cost inputs (rates, property tax, insurance) to every listing - 🏠 Property dossier mode — pass Redfin home URLs or street addresses and get a deep per-property profile: listing agent name + phone, marketing remarks, key facts, full amenity breakdown, price history, schools with ratings, flood risk, view/favorite popularity, Redfin Estimate, and Walk / Bike / Transit Scores — all in a single row per home
- 📊 Auto-calculated price/sqft — for every listing with usable square footage
- 📈 Market KPIs in HTML report — median price, price/sqft distribution, days-on-market distribution, city + zip + property-type tallies
- 🏠 Rich listing fields — beds, baths (full + total), sqft, lot size, year built, HOA dues, MLS ID, listing agent name + ID, virtual-tour flag, 3D scan URL, full photo URLs (medium-res)
- ⭐ Redfin Estimate + Walk Score enrichment — bundled into one PAID toggle (
includeEnrichment) - 📦 Bulk region search — pass an array of region IDs in one run (PAID)
- 📱 Standard Apify exports — JSON, CSV, XLSX, RSS, HTML
🎬 Quick Start
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=[YOUR_TOKEN]' \-H 'Content-Type: application/json' \-d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":50}'
🚀 Getting Started (3 Simple Steps)
Step 1: Find Your Region ID
Run with searchMode: "autocomplete" and autocompleteQuery: "Austin" (or any city/zip/neighborhood). The dataset will list matching region IDs in <type>_<id> format (e.g. 2_30818 for Austin, TX).
Step 2: Scrape The Region
Switch to searchMode: "byRegionId", paste the ID into regionId, pick listingStatus (forSale / sold / comingSoon), and set maxResults.
Step 3: Run & Export
Hit Run. Listings stream into the dataset; an HTML market report lands in the key-value store. Export as JSON, CSV, or Excel.
That's it! In under 2 minutes you'll have:
- Complete listings with address, specs, pricing, photos, geo, agent
- Auto-calculated price/sqft per listing
- Market-level KPIs (median price, distribution, days-on-market, city + zip + type breakdowns)
- A polished HTML market summary
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchMode | string | No | autocomplete, byRegionId, byCoordinates, or propertyDetails (default: byRegionId). |
listingStatus | string | No | forSale, sold, or comingSoon (default: forSale). |
autocompleteQuery | string | If searchMode=autocomplete | Free-text city / zip / neighborhood lookup. |
regionId | string | If searchMode=byRegionId | Region ID in <type>_<id> format (e.g. 2_30818). |
regionIds | array | No | Multiple region IDs in one run (PAID only). |
lat, lng, radius | number, number, integer | If searchMode=byCoordinates | Center lat/lng + radius in miles (1–50). PAID only. |
propertyUrls | array | If searchMode=propertyDetails (or use propertyAddresses) | Redfin home URLs (https://www.redfin.com/.../home/<id>) — one full dossier per URL. |
propertyAddresses | array | If searchMode=propertyDetails (or use propertyUrls) | Full US street addresses — one full dossier per address. |
maxResults | integer | No | Listings per query, 1–350 (default: 100). Applies to byRegionId and byCoordinates; ignored in autocomplete mode (autocomplete always returns the upstream candidate list). FREE tier capped at 25 per run. |
includeEnrichment | boolean | No | Fetch Redfin Estimate + Walk Score per listing — PAID only (default: false). |
Example — Austin TX for-sale listings:
{"searchMode": "byRegionId","listingStatus": "forSale","regionId": "2_30818","maxResults": 100}
Example — Look up a region ID:
{"searchMode": "autocomplete","autocompleteQuery": "Park Slope"}
Example — Bulk regions, sold homes, with enrichment:
{"searchMode": "byRegionId","listingStatus": "sold","regionIds": ["2_30818", "2_29470", "2_17151"],"maxResults": 200,"includeEnrichment": true}
Example — Property dossiers by URL / address:
{"searchMode": "propertyDetails","propertyUrls": ["https://www.redfin.com/TX/Austin/6702-Fireoak-Dr-78759/home/31327561"],"propertyAddresses": ["9201 La Siesta Bnd, Austin, TX 78749"]}
Example — Coordinates + radius (PAID):
{"searchMode": "byCoordinates","listingStatus": "forSale","lat": 30.27,"lng": -97.74,"radius": 5,"maxResults": 100}
📤 Output
Results land in the Apify dataset. Common fields per listing:
| Field | Type | Description |
|---|---|---|
propertyId | string | Unique Redfin property ID |
listingId | string | Unique Redfin MLS listing ID |
listingStatus | string | forSale, sold, or comingSoon |
url | string | Full listing URL on redfin.com |
listingTitle | string | Formatted address |
address | object | street, unit (condos/apartments only), city, state, zip, neighborhood, full |
pricing | object | price, pricePerSqft, hoaDues |
specs | object | beds, baths, bathsFull, bathsTotal, sqft, lotSize, yearBuilt, propertyType, propertyTypeCode (Redfin numeric code) |
market | object | daysOnMarket, timeOnRedfinSecs, listingAddedDate, lastSoldDate, mlsId |
location | object | latitude, longitude, timezone |
listingAgent | object | name, redfinAgentId (when available — only emitted when Redfin exposes the agent) |
media | object | photoCount, hasVirtualTour, scanUrl, photos[] |
redfinEstimate | object | (Optional, PAID) AVM data |
walkScores | object | (Optional, PAID) walkScore, bikeScore, transitScore |
scrapedAt | string | ISO timestamp |
Property dossier rows (searchMode: "propertyDetails") additionally include: mlsStatus, remarks (agent's marketing description), keyFacts[], listingAgent.phone + brokerName, schools[] (with GreatSchools + parent ratings, distance, enrollment), priceHistory[] (listing/sale events with prices and dates), popularity (views + favorites), floodRisk (flood factor, FEMA zones, insurance range), amenityDetails[] (full grouped amenity breakdown), plus redfinEstimate and walkScores bundled at no extra charge.
Example listing:
{"propertyId": "31887455","listingId": "214636605","listingStatus": "forSale","url": "https://www.redfin.com/TX/Austin/4159-Steck-Ave-78759/unit-267/home/31887455","listingTitle": "4159 Steck Ave #267, Austin, TX 78759","address": { "street": "4159 Steck Ave", "unit": "#267", "city": "Austin", "state": "TX", "zip": "78759", "neighborhood": "Mesa Village Condo Amd" },"pricing": { "price": 250000, "pricePerSqft": 302, "hoaDues": 271 },"specs": { "beds": 2, "baths": 1, "bathsFull": 1, "bathsTotal": 1, "sqft": 829, "lotSize": 2583, "yearBuilt": 1977, "propertyType": "Condo" },"market": { "daysOnMarket": 4, "listingAddedDate": "2026-05-01T18:51:42.660Z", "mlsId": "5826517" },"location": { "latitude": 30.375407, "longitude": -97.75824, "timezone": "US/Central" },"listingAgent": { "name": "Andrew Vallejo", "redfinAgentId": "4289" },"media": { "photoCount": 22, "hasVirtualTour": true, "scanUrl": "https://my.matterport.com/show/?m=eHpABi2Y4PB" }}
💼 Use Cases & Examples
1. Investment Comps & Underwriting
Investors comparing homes by price/sqft across markets
- Input: Bulk region IDs for Austin, Nashville, Tampa
- Output: Listings with calculated price/sqft + median per market
- Use: Rank markets by entry-price-per-sqft; build comp sheets in minutes.
2. Recently-Sold Comparable Sales
Agents pulling sold comps for a CMA
- Input:
listingStatus: "sold"+ neighborhood region ID - Output: Sold homes with last-sale-date, beds/baths/sqft
- Use: Plug straight into CMAs and pricing strategy decks.
3. Days-On-Market Velocity Tracking
Brokers tracking how fast markets move
- Input: Same region, weekly schedule
- Output: Median + p90 days-on-market per run
- Use: Spot when inventory starts to stale or accelerate.
4. Redfin Estimate vs. List-Price Spread
Investors hunting for under-priced inventory
- Input:
includeEnrichment: true - Output: Each listing carries the Redfin Estimate (AVM)
- Use: Rank by AVM-vs-list-price spread to find mispriced homes.
5. Walkability-Based Filtering
Buyer-agents matching urban-buyer preferences
- Input:
includeEnrichment: true - Output: Walk/Bike/Transit scores per listing
- Use: Surface walkable inventory in suburban markets.
6. AVM / ML Training Data
Data scientists building US-wide valuation models
- Input: Bulk regions across multiple states
- Output: Comprehensive listings dataset with full specs + geo
- Use: Train and validate AVM and pricing models.
🔗 Integration Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/redfin-property-scraper').call({searchMode: 'byRegionId',listingStatus: 'forSale',regionId: '2_30818',maxResults: 100,includeEnrichment: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/redfin-property-scraper').call(run_input={'searchMode': 'byRegionId','listingStatus': 'sold','regionId': '2_30818','maxResults': 100})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":150}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Schedule (daily / weekly market refresh) or webhook
- HTTP Request: Call Redfin scraper API with target region IDs
- Process: Filter by price band, compute KPIs, dedupe against last run
- Action: Push to DB, send Slack/email digest, update dashboard
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 listings per run — full feature parity, same data quality
- 1 query per run (use Autocomplete + a single Region ID)
- No credit card required
- Perfect for testing and one-off analyses
PAID Tier (Production Ready)
- Unlimited listings and queries per run
- Bulk region arrays
- Coordinates + radius mode
- Redfin Estimate + Walk Score enrichment
- Pay-per-result: only charged for listings actually returned
💰 Transparent per-result pricing — $0.005 per listing extracted, $0.003 per listing enriched (only on success), $0.005 per actor start. Property dossiers have their own event, PropertyDossierExtracted, at $0.008 per dossier returned (BRONZE; $0.024 FREE, down to $0.004 at DIAMOND) — a dossier bundles agent contact, price history, schools, flood risk and the Redfin Estimate, so it's priced as its own deliverable rather than as an enrichment. What you get for the price: every listing comes with calculated price/sqft and the run produces a full HTML market report with median, distribution, and city/zip breakdowns — no post-processing required.
❓ Frequently Asked Questions
Q: How do I find a Redfin region ID?
A: Run the actor with searchMode: "autocomplete" and the city or zip you want — the dataset returns matching IDs in <type>_<id> format. Plug the ID into byRegionId mode for the actual scrape.
Q: Why does pricePerSqft come back null on some listings?
A: Redfin records sometimes omit square footage, especially on land or new-construction listings. We only compute price/sqft when sqft is reported.
Q: Does this cover sold homes?
A: Yes — set listingStatus: "sold" to pull recently-sold comps with last-sold date.
Q: What does the Redfin Estimate enrichment return? A: Redfin's AVM payload — when available. Some listings (off-market or in low-data areas) return a "not serviced" flag instead of a number; we surface that explicitly so you can filter.
Q: Can I get full details for one specific home?
A: Yes — use searchMode: "propertyDetails" with the home's Redfin URL (propertyUrls) or its street address (propertyAddresses). You get one deep dossier row per property: agent contact, remarks, amenities, price history, schools, flood risk, popularity stats, Redfin Estimate, and Walk Score.
Q: How many listings can I extract per run? A: FREE tier: 25. PAID tier: unlimited. A single region search returns up to ~350 listings in one call.
Q: What output formats are available? A: JSON, CSV, Excel — exported directly from the Apify dataset.
Q: Is this legal? A: We only extract publicly available listings. See the legal section below.
🐛 Troubleshooting
"Invalid regionId" error
- The format is
<type>_<id>, e.g.2_30818for a city,6_<id>for a neighborhood,13_<zip>for a zip code. UsesearchMode: "autocomplete"to look it up.
"Region ID not found" inside results
- The ID format was right but Redfin doesn't have data for that exact slot. Try a parent region (city instead of neighborhood) or run autocomplete to see active alternatives.
FREE tier hit at 25 listings
- That's the FREE cap. Upgrade for unlimited.
byCoordinates rejected on FREE
- Coordinates mode is PAID-only. Use
byRegionIdor upgrade.
No enrichment on a listing
- Enrichment requires
includeEnrichment: trueon PAID. Some properties have no Redfin Estimate available; we still return the metadata so you can filter.
⚠️ Trademark Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Redfin Corporation, or any of its subsidiaries. The name "Redfin" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools