Redfin Scraper — Real-Estate Listings & Sold Data avatar

Redfin Scraper — Real-Estate Listings & Sold Data

Pricing

$2.00 / 1,000 listing fetcheds

Go to Apify Store
Redfin Scraper — Real-Estate Listings & Sold Data

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

Martin Čech

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

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.

Redfin Scraper example output — 28 fields per listing

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:

FieldTypeDescription
listingIdnumberRedfin internal listing ID
propertyIdnumberRedfin internal property ID
mlsIdstringMLS number for the listing
mlsStatusstringMLS status (e.g. Active, Sold)
addressstringStreet line
unitstringUnit / apartment number (if any)
citystringCity
statestringUS state code
zipstringZIP code
pricenumberList price (or sold price) in USD
hoanumberMonthly HOA dues, if reported
bedsnumberBedrooms
bathsnumberBathrooms
sqftnumberInterior square footage
lotSizenumberLot size
pricePerSqFtnumberPrice per square foot
yearBuiltnumberYear built
propertyTypestringe.g. Single Family Residential, Condo/Co-op, Townhouse
latitudenumberLatitude
longitudenumberLongitude
daysOnMarketnumberDays on Redfin
soldDatestringISO date (sold listings)
listingTypestringListing type flag from Redfin
urlstringCanonical Redfin listing URL
_schemaVersionstringOutput schema version
_scrapedAtstringISO timestamp of the scrape

Two modes, set with listingType:

  • forSale — active for-sale listings (default).
  • sold — recently sold homes (includes soldDate), 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 pricePerSqFt and daysOnMarket, and surface underpriced inventory.
  • Proptech & CMA tools needing a Redfin API alternative. Search intent: "Redfin API", "Redfin data API no key". Feed sold listings with soldDate and price into 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

FieldTypeNotes
redfinUrlsstring[]Redfin city / ZIP / county / neighborhood URLs. The region is read from the URL.
regionsobject[]Advanced alternative: { "region_id": "30818", "region_type": 6 } (6=city, 2=zip, 5=county, 1=neighborhood).
listingTypestringforSale (default) or sold.
sortstringredfin-recommended-asc, price-asc, price-desc, days-on-redfin-asc, days-on-redfin-desc, square-footage-desc.
maxListingsintCap total listings across all regions. Default 1000, max 17500.
numHomesPerPageintAdvanced — 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 actorWhat it scrapes
App Store ScraperApple App Store — app details, search, reviews
Google Play ScraperGoogle Play — app details + reviews
Shopify App Store ScraperShopify App Store — app details, reviews, discovery
Redfin ScraperRedfin — US real-estate listings
Greenhouse & Lever Jobs ScraperGreenhouse + 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.