Redfin Property Scraper — For Sale, Sold & Rentals
Pricing
from $1.50 / 1,000 dataset items
Redfin Property Scraper — For Sale, Sold & Rentals
Scrape Redfin listings for sale, sold and rentals by city, ZIP or search URL. Get price, beds, baths, sqft, photos and coordinates — plus optional listing-agent phone, price and tax history, schools, Redfin Estimate with 60-month history and rent yield. Pay only for results.
Pricing
from $1.50 / 1,000 dataset items
Rating
0.0
(0)
Developer
axly
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Turn any US city, ZIP or Redfin search URL into a clean, structured property dataset — including the data most Redfin scrapers can't reach: the listing agent's direct phone, real sold prices, the Redfin Estimate with 60 months of history, and a rent estimate with computed gross yield.
Built directly on Redfin's own mobile API. No browsers, no CAPTCHA solving, no proxies required.
Who it's for
- Investors & analysts — sold comps with real sold prices and dates, Redfin Estimate history, rent estimate and gross rental yield in a single row.
- Agencies & lead-gen — the listing agent's name and direct mobile number on every listing.
- PropTech & SaaS developers — a stable, documented listing feed you can schedule and pipe straight into your product.
- Researchers & journalists — market-wide inventory snapshots with price history, tax and school data.
What makes it different
| Capability | This actor |
|---|---|
| Sold search | Yes — real sold prices and sold dates, even in non-disclosure states like Texas |
| Listing agent direct phone | Yes, on every listing (via includeDetails) |
| Redfin Estimate + 60-month history | Yes, plus city and county comparison series |
| Rent estimate + gross yield | Yes, computed per property |
| Rentals | Yes — dedicated rental index with leasing phone numbers |
| Input | Plain city/ZIP names — no need to hand-craft map URLs |
Output fields
Always returned
| Field | Type | Description |
|---|---|---|
property_id | integer | Redfin property ID |
listing_id | integer | Redfin listing ID |
mls_id | string | MLS identifier |
url | string | Full Redfin listing URL |
status | string | ACTIVE, PRE_ON_MARKET, SOLD, PENDING, … |
property_type | string | SINGLE_FAMILY, CONDO_COOP, TOWNHOUSE, … |
address, unit_number, city, state, zip, neighborhood | string | Location |
latitude, longitude | number | Coordinates |
price | integer | List price (or sold price for sold listings) |
price_per_sqft | number | Computed |
beds, baths, sqft, lot_size, year_built | number | Core attributes |
days_on_market, listed_date | number / string | Absent on pre-market listings |
hoa_dues | integer | Monthly HOA dues |
last_sold_date, last_sold_price | string / integer | Previous sale |
sashes | array | Redfin badges ("HOT HOME", "EARLY ACCESS", …) |
photo_count | integer | Number of photos |
is_sold | boolean | Convenience flag |
search_location, scraped_at | string | Provenance |
With includeDetails
| Field | Type | Description |
|---|---|---|
listing_agent_name | string | Listing agent |
listing_agent_phone | string | Agent's direct phone |
listing_broker_name | string | Brokerage |
listing_broker_phone | string | Brokerage phone |
is_redfin_agent | boolean | In-house Redfin agent |
description | string | Full marketing remarks |
total_views, favorite_count | integer | Redfin popularity signals |
mls_status | string | Raw MLS status |
property_history | array | Listed / price-changed / sold events with prices |
schools | array | Name, type, grades, GreatSchools rating, distance |
open_houses | array | Upcoming open-house times |
stories, total_sqft, finished_sqft, apn, county | mixed | Public records |
tax_year, taxes_due, taxable_land_value, taxable_improvement_value | number | Tax record |
With includeValuation
| Field | Type | Description |
|---|---|---|
redfin_estimate | integer | Current Redfin Estimate |
redfin_estimate_updated | string | ISO date the estimate was last refreshed |
estimate_history | array | 60 monthly {month, value} points |
estimate_history_city, estimate_history_county | array | Comparison series |
estimate_change_1y_pct | number | 1-year change |
rent_estimate, rent_estimate_low, rent_estimate_high | integer | Monthly rent estimate |
gross_rent_yield_pct | number | rent × 12 / price, computed |
Rentals (listingType: "rentals")
Rental rows describe a building, so rent, beds, baths and sqft are ranges, and each row carries property_name, unit_count, the leasing phone, contact_email and feed_source.
Use cases
- Daily new-listing alerts — set
maxDaysOnMarket: 1and schedule it hourly to catch inventory the moment it hits the market. - Automated comps —
listingType: "sold"withsoldWithinDays: 90and a tightminSqft/maxSqft/minBedsband gives you a defensible comp set. - Rental yield screening — enable
includeValuationand sort your dataset bygross_rent_yield_pctto surface cash-flow candidates. - Agent outreach lists — enable
includeDetailsand uselisting_agent_phone/listing_broker_name. - Market trend dashboards —
estimate_historyvsestimate_history_cityshows whether a property is beating or lagging its market. - Portfolio monitoring — schedule a run over your ZIP codes and diff
priceandredfin_estimateweek over week.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
locations | array | — | Cities, ZIPs, neighborhoods or counties |
searchUrls | array | — | Redfin search URLs (alternative to locations) |
listingType | enum | for_sale | for_sale, sold, rentals |
maxItems | integer | 100 | Result cap |
includeDetails | boolean | false | Agent contact, history, schools, tax |
includeValuation | boolean | false | Redfin Estimate, rent estimate, yield |
propertyTypes | array | all | house, condo, townhouse, multifamily, land, other, manufactured, co-op |
minPrice, maxPrice | integer | — | Price band (monthly rent for rentals) |
minBeds, maxBeds, minBaths | integer | — | Room filters |
minSqft, maxSqft, minYearBuilt | integer | — | Size and age filters |
maxDaysOnMarket | integer | — | Only listings newer than N days |
soldWithinDays | integer | 90 | For listingType: "sold" |
sortBy | enum | recommended | Sort order |
includeRawData | boolean | false | Attach the full decoded payload |
proxyConfiguration | object | disabled | Optional proxy |
Example input
{"locations": ["Austin, TX", "78704"],"listingType": "for_sale","maxItems": 250,"includeDetails": true,"includeValuation": true,"propertyTypes": ["house", "condo"],"minPrice": 300000,"maxPrice": 900000,"minBeds": 3,"sortBy": "newest"}
Example output
{"property_id": 31286343,"listing_id": 223692122,"url": "https://www.redfin.com/TX/Austin/8000-Forest-Mesa-Dr-78759/unit-B/home/31286343","status": "ACTIVE","property_type": "CONDO_COOP","address": "8000 Forest Mesa Dr Unit B","city": "Austin","state": "TX","zip": "78759","neighborhood": "Northwest Hills","latitude": 30.3667322,"longitude": -97.7509303,"price": 525000,"price_per_sqft": 404.47,"beds": 2,"baths": 2.0,"sqft": 1298,"year_built": 1981,"days_on_market": 2,"listed_date": "2026-09-18T19:19:28.350Z","listing_agent_name": "Lili Maliner","listing_agent_phone": "512-657-1957","listing_broker_name": "Coldwell Banker Realty","total_views": 229,"favorite_count": 4,"schools": [{ "name": "Hill Elementary School", "type": "Public", "grades": "K-5", "rating": 9, "distance_miles": "0.4" }],"redfin_estimate": 452245,"estimate_change_1y_pct": -13.74,"rent_estimate": 2540,"gross_rent_yield_pct": 5.81,"scraped_at": "2026-09-21T09:14:03Z"}
Scheduling & webhooks
Use Apify Schedules to run this actor on a cron (e.g. every morning for new listings), and Webhooks to POST each finished run to your own endpoint, Zapier or Make. Results are available as JSON, CSV, Excel, XML or RSS from the dataset API.
Use with AI assistants (MCP)
This actor works with the Apify MCP server, so Claude, ChatGPT and other MCP-capable assistants can call it directly — for example "find 3-bed houses under $600k in Austin that sold in the last 30 days and show me the listing agents". Add the actor to your MCP server configuration and it becomes a callable tool.
FAQ
Do I need a proxy? No. The actor talks to Redfin's mobile API, which does not require proxies, cookies or CAPTCHA solving. A proxy option is available if you want geo control or higher parallelism.
How fresh is the data? It is fetched live from Redfin on every run — there is no cached database behind this actor.
How many results can I get?
Redfin returns up to 350 listings per request and the actor paginates automatically. Pass multiple locations (or tighter price bands) to cover large metros exhaustively.
Why is days_on_market empty on some rows?
Pre-market ("Coming Soon" / "Early Access") listings have not started their market clock yet, so Redfin does not publish the value. Those rows are flagged status: "PRE_ON_MARKET".
Why are tax and last-sold values missing for some properties? Texas and other non-disclosure states do not publish sale prices or tax detail. This is a limitation of the public record, not of the scraper.
Is every property covered by the Redfin Estimate?
No — Redfin does not publish an estimate for every property. When absent, redfin_estimate is null rather than guessed.
Is scraping Redfin legal? This actor collects publicly available listing information. You are responsible for how you use the data, including compliance with Redfin's terms, MLS rules, and applicable privacy and marketing laws (e.g. TCPA when contacting agents).
Something broke — what now? Open an issue on the actor's Issues tab. Runtime errors are reported automatically to the maintainer, so regressions are usually noticed quickly.