Redfin Property Scraper — For Sale, Sold & Rentals avatar

Redfin Property Scraper — For Sale, Sold & Rentals

Pricing

from $1.50 / 1,000 dataset items

Go to Apify Store
Redfin Property Scraper — For Sale, Sold & Rentals

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

axly

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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

CapabilityThis actor
Sold searchYes — real sold prices and sold dates, even in non-disclosure states like Texas
Listing agent direct phoneYes, on every listing (via includeDetails)
Redfin Estimate + 60-month historyYes, plus city and county comparison series
Rent estimate + gross yieldYes, computed per property
RentalsYes — dedicated rental index with leasing phone numbers
InputPlain city/ZIP names — no need to hand-craft map URLs

Output fields

Always returned

FieldTypeDescription
property_idintegerRedfin property ID
listing_idintegerRedfin listing ID
mls_idstringMLS identifier
urlstringFull Redfin listing URL
statusstringACTIVE, PRE_ON_MARKET, SOLD, PENDING, …
property_typestringSINGLE_FAMILY, CONDO_COOP, TOWNHOUSE, …
address, unit_number, city, state, zip, neighborhoodstringLocation
latitude, longitudenumberCoordinates
priceintegerList price (or sold price for sold listings)
price_per_sqftnumberComputed
beds, baths, sqft, lot_size, year_builtnumberCore attributes
days_on_market, listed_datenumber / stringAbsent on pre-market listings
hoa_duesintegerMonthly HOA dues
last_sold_date, last_sold_pricestring / integerPrevious sale
sashesarrayRedfin badges ("HOT HOME", "EARLY ACCESS", …)
photo_countintegerNumber of photos
is_soldbooleanConvenience flag
search_location, scraped_atstringProvenance

With includeDetails

FieldTypeDescription
listing_agent_namestringListing agent
listing_agent_phonestringAgent's direct phone
listing_broker_namestringBrokerage
listing_broker_phonestringBrokerage phone
is_redfin_agentbooleanIn-house Redfin agent
descriptionstringFull marketing remarks
total_views, favorite_countintegerRedfin popularity signals
mls_statusstringRaw MLS status
property_historyarrayListed / price-changed / sold events with prices
schoolsarrayName, type, grades, GreatSchools rating, distance
open_housesarrayUpcoming open-house times
stories, total_sqft, finished_sqft, apn, countymixedPublic records
tax_year, taxes_due, taxable_land_value, taxable_improvement_valuenumberTax record

With includeValuation

FieldTypeDescription
redfin_estimateintegerCurrent Redfin Estimate
redfin_estimate_updatedstringISO date the estimate was last refreshed
estimate_historyarray60 monthly {month, value} points
estimate_history_city, estimate_history_countyarrayComparison series
estimate_change_1y_pctnumber1-year change
rent_estimate, rent_estimate_low, rent_estimate_highintegerMonthly rent estimate
gross_rent_yield_pctnumberrent × 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: 1 and schedule it hourly to catch inventory the moment it hits the market.
  • Automated comps — listingType: "sold" with soldWithinDays: 90 and a tight minSqft/maxSqft/minBeds band gives you a defensible comp set.
  • Rental yield screening — enable includeValuation and sort your dataset by gross_rent_yield_pct to surface cash-flow candidates.
  • Agent outreach lists — enable includeDetails and use listing_agent_phone / listing_broker_name.
  • Market trend dashboards — estimate_history vs estimate_history_city shows whether a property is beating or lagging its market.
  • Portfolio monitoring — schedule a run over your ZIP codes and diff price and redfin_estimate week over week.

Input parameters

ParameterTypeDefaultDescription
locationsarray—Cities, ZIPs, neighborhoods or counties
searchUrlsarray—Redfin search URLs (alternative to locations)
listingTypeenumfor_salefor_sale, sold, rentals
maxItemsinteger100Result cap
includeDetailsbooleanfalseAgent contact, history, schools, tax
includeValuationbooleanfalseRedfin Estimate, rent estimate, yield
propertyTypesarrayallhouse, condo, townhouse, multifamily, land, other, manufactured, co-op
minPrice, maxPriceinteger—Price band (monthly rent for rentals)
minBeds, maxBeds, minBathsinteger—Room filters
minSqft, maxSqft, minYearBuiltinteger—Size and age filters
maxDaysOnMarketinteger—Only listings newer than N days
soldWithinDaysinteger90For listingType: "sold"
sortByenumrecommendedSort order
includeRawDatabooleanfalseAttach the full decoded payload
proxyConfigurationobjectdisabledOptional 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.