Redfin Scraper — Real-Estate Listings & Sold Data
Pricing
$2.00 / 1,000 listing fetcheds
Redfin Scraper — Real-Estate Listings & Sold Data
Reliable, always-fresh Redfin listings: price, beds/baths, sqft, address, lat/long, MLS ID, and more. Paste a Redfin city/zip URL. By FreshActors.
Pricing
$2.00 / 1,000 listing fetcheds
Rating
0.0
(0)
Developer
Martin Čech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
Redfin (US Real Estate) Scraper — Listings, Sold Data & Property API
Scrape Redfin (US real estate) listings into clean, structured JSON — price, beds, baths, square footage, address, lat/long, MLS ID, property type, days-on-market and more — straight from a Redfin city or ZIP URL. No account, no login, no API key.

✅ Last verified working: 2026-06-01. Monitored by an automated daily canary. When Redfin changes something, we patch fast and log it in the changelog below.
Why this Redfin (US real estate) scraper
Most Redfin scrapers on the store are abandoned — stale code, a handful of users, low ratings — and they break the moment Redfin tweaks its internal data API. This one is maintained, monitored, and built to stay working:
- A daily canary runs the actor against live Redfin and alerts us the moment a field drifts or a block pattern changes. That's the "always-fresh" promise — and why the "Last verified working" badge above is a real date, not marketing.
- Block-resistant by design. Redfin's GIS data API returns a "Success" envelope even when it's bot-blocked, which is how naive scrapers silently return zero rows. This actor distinguishes a genuine zero-result from a soft block and retries with backoff + IP rotation instead of handing you an empty dataset.
- Paste-a-URL simplicity. Give it a Redfin city, ZIP, county or neighborhood URL — the region is parsed straight from the URL. No hunting for internal Redfin region IDs.
- Stable, versioned output (
_schemaVersion). Fields don't silently disappear between runs; schema changes are logged. - Fast patches. Open an issue and it gets answered. Reliability is the entire product.
If you've been burned by a "Redfin API" actor that returns nothing on a Monday morning, this is the fix.
What data you get
Each row is one property listing. Real fields emitted by the actor:
| Field | Type | Description |
|---|---|---|
listingId | number | Redfin internal listing ID |
propertyId | number | Redfin internal property ID |
mlsId | string | MLS number for the listing |
mlsStatus | string | MLS status (e.g. Active, Sold) |
address | string | Street line |
unit | string | Unit / apartment number (if any) |
city | string | City |
state | string | US state code |
zip | string | ZIP code |
price | number | List price (or sold price) in USD |
hoa | number | Monthly HOA dues, if reported |
beds | number | Bedrooms |
baths | number | Bathrooms |
sqft | number | Interior square footage |
lotSize | number | Lot size |
pricePerSqFt | number | Price per square foot |
yearBuilt | number | Year built |
propertyType | string | e.g. Single Family Residential, Condo/Co-op, Townhouse |
latitude | number | Latitude |
longitude | number | Longitude |
daysOnMarket | number | Days on Redfin |
soldDate | string | ISO date (sold listings) |
listingType | string | Listing type flag from Redfin |
url | string | Canonical Redfin listing URL |
_schemaVersion | string | Output schema version |
_scrapedAt | string | ISO timestamp of the scrape |
Two modes, set with listingType:
forSale— active for-sale listings (default).sold— recently sold homes (includessoldDate), for comps and sold-price analysis.
You can also choose the sort order (Redfin-recommended, price asc/desc, days-on-market asc/desc, or square-footage desc) and scrape multiple regions in a single run.
Use cases
- Real-estate investors & flippers building a deal pipeline. Search intent: "Redfin scraper", "scrape Redfin listings", "Redfin sold data export". Pull all for-sale homes in a metro, filter by
pricePerSqFtanddaysOnMarket, and surface underpriced inventory. - Proptech & CMA tools needing a Redfin API alternative. Search intent: "Redfin API", "Redfin data API no key". Feed
soldlistings withsoldDateandpriceinto your comparative-market-analysis or AVM model. - Data & analytics teams doing market research. Search intent: "how to scrape Redfin", "Redfin real estate data to CSV/JSON". Track median price, inventory and days-on-market across cities over time via scheduled runs.
- Lead-gen & local agents monitoring a farm area. Search intent: "Redfin listings scraper by ZIP". Watch a ZIP or neighborhood for new or price-dropped listings and trigger outreach.
Input
| Field | Type | Notes |
|---|---|---|
redfinUrls | string[] | Redfin city / ZIP / county / neighborhood URLs. The region is read from the URL. |
regions | object[] | Advanced alternative: { "region_id": "30818", "region_type": 6 } (6=city, 2=zip, 5=county, 1=neighborhood). |
listingType | string | forSale (default) or sold. |
sort | string | redfin-recommended-asc, price-asc, price-desc, days-on-redfin-asc, days-on-redfin-desc, square-footage-desc. |
maxListings | int | Cap total listings across all regions. Default 1000, max 17500. |
numHomesPerPage | int | Advanced — listings per request page. Default 350. Leave at default. |
For-sale by URL:
{"redfinUrls": ["https://www.redfin.com/city/30818/TX/Austin"],"listingType": "forSale","sort": "price-desc","maxListings": 500}
Sold comps by ZIP, using the advanced regions input:
{"regions": [{ "region_id": "78701", "region_type": 2 }],"listingType": "sold","sort": "days-on-redfin-asc","maxListings": 250}
Output sample
{"_type": "listing","_schemaVersion": "1.0","listingId": 216197035,"propertyId": 31845362,"mlsId": "2116358131372161577","mlsStatus": "Active","address": "4602 Indian Wells Dr","unit": null,"city": "Austin","state": "TX","zip": "78747","price": 560000,"hoa": 45,"beds": 3,"baths": 2,"sqft": 2097,"lotSize": 7405,"pricePerSqFt": 267,"yearBuilt": 2019,"propertyType": "Single Family Residential","latitude": 30.1327479,"longitude": -97.79,"daysOnMarket": 12,"soldDate": null,"listingType": null,"url": "https://www.redfin.com/TX/Austin/4602-Indian-Wells-Dr-78747/home/31845362","_scrapedAt": "2026-06-01T08:08:20.543Z"}
Pricing
Pay-per-result, no subscription. You're charged $0.002 per listing returned (the listing-fetched event) — that's it. You only pay for rows that actually land in your dataset.
How much does 100 results cost? 100 × $0.002 = $0.20.
A few more reference points:
- 500 listings → $1.00
- 1,000 listings → $2.00
- 10,000 listings → $20.00
Set maxListings to keep any single run within your budget.
FAQ
Is scraping Redfin (US real estate) legal? This actor collects publicly visible listing data. Scraping public data is broadly permitted in many jurisdictions, but you're responsible for complying with Redfin's terms and applicable laws. Note that some MLS listings are excluded from Redfin's public data per local MLS rules — Redfin itself flags this — so those won't appear.
Do I need an API key or a Redfin account? No. There's no Redfin account, login or API key. You paste a Redfin URL (or region IDs) and run the actor.
Is there an official Redfin API? Redfin doesn't offer a public listings API. This actor is the practical substitute: structured JSON with the fields most people want, callable from the Apify API/SDK.
How do I get sold listings instead of for-sale?
Set listingType to sold. Sold rows include a soldDate field, which is what you want for comps and sold-price trends.
How do I scrape a specific city or ZIP?
Paste the Redfin URL for it — e.g. https://www.redfin.com/city/30818/TX/Austin or https://www.redfin.com/zipcode/78701. The region is parsed from the URL automatically. For programmatic control, use the advanced regions input with region_id + region_type.
How many listings can I get per run?
Up to maxListings, which defaults to 1,000 and can go up to 17,500. You can also include multiple URLs/regions in one run; the cap applies across all of them.
How often is the data updated? The actor reads live from Redfin every time you run it, so data is as fresh as Redfin's own site at run time. Schedule runs (hourly/daily) for ongoing monitoring.
Why do some scrapers return zero results — does this one? Redfin's data endpoint returns a "Success" envelope even when it's quietly blocking bots, so naive scrapers return empty datasets. This actor detects that soft-block pattern and retries with backoff and IP rotation, so a real zero-result is distinguished from a block.
What's the difference between redfinUrls and regions?
redfinUrls is the easy path — paste any Redfin region page URL. regions is the advanced path for when you already know Redfin's internal region_id and region_type and want to script them directly.
Can I export to CSV or Excel? Yes. Results go to a standard Apify dataset, which you can export as JSON, CSV, Excel, or HTML, or pull via the API.
Other FreshActors tools
| FreshActors actor | What it scrapes |
|---|---|
| App Store Scraper | Apple App Store — app details, search, reviews |
| Google Play Scraper | Google Play — app details + reviews |
| Shopify App Store Scraper | Shopify App Store — app details, reviews, discovery |
| Redfin Scraper | Redfin — US real-estate listings |
| Greenhouse & Lever Jobs Scraper | Greenhouse + Lever — normalized job postings |
Reliability
A scheduled daily canary runs this actor against live Redfin and checks that listings still parse and the expected fields are present. When Redfin changes its data API or block behavior, we patch quickly and record it in the changelog below, then bump the "Last verified working" date at the top. That feedback loop — monitor, detect, patch, log — is the whole point of FreshActors: an actor you can build a pipeline on without it quietly going stale.
Changelog
- 2026-06-01 — v1.0 launch. For-sale + sold listings, URL-based region resolution, block-aware retry engine, daily canary monitoring.
Legal note. This actor scrapes public real-estate listing data. Some MLS listings are excluded per local MLS rules. Use the data responsibly and in line with Redfin's terms and applicable laws.
Found a problem? Open an issue — answered fast. Staying fresh is the whole point.