Redfin Real Estate Listings & Agent Contacts Scraper avatar

Redfin Real Estate Listings & Agent Contacts Scraper

Pricing

from $20.80 / 1,000 results

Go to Apify Store
Redfin Real Estate Listings & Agent Contacts Scraper

Redfin Real Estate Listings & Agent Contacts Scraper

Scrape Redfin US for-sale and sold homes: price, beds, baths, sqft, HOA, year built, MLS#, geo, photos plus listing-agent name, phone and brokerage. Filter by location, price, beds and status.

Pricing

from $20.80 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Redfin Real Estate Listings & Agent Contacts Scraper

Redfin Real Estate Listings & Agent Contacts Scraper

Here is one real result, with every field the actor returns:

{
"propertyId": "31287514",
"listingId": "222356069",
"mlsId": "9124446",
"address": "6700 Lakewood Dr",
"unitNumber": null,
"city": "Austin",
"state": "TX",
"zip": "78731",
"price": 2895000,
"beds": 4,
"baths": 4,
"sqFt": 3812,
"lotSize": 43464,
"pricePerSqFt": 759,
"yearBuilt": 1971,
"propertyType": "Single Family",
"status": "Active",
"mlsStatus": "Active",
"daysOnMarket": 1,
"soldDate": "2014-05-09",
"hoaMonthly": null,
"isNewConstruction": false,
"numPhotos": 40,
"keyFacts": ["Screened porch", "Steam shower", "Active waterfalls"],
"latitude": 30.3667137,
"longitude": -97.7874345,
"url": "https://www.redfin.com/TX/Austin/6700-Lakewood-Dr-78731/home/31287514",
"listingAgentName": "Emily Waldmann",
"listingAgentPhone": "425-442-0727",
"listingBrokerName": "Douglas Elliman Real Estate",
"listingBrokerPhone": "512-866-3795",
"priceHistory": [
{"event": "Listed", "price": null, "date": null},
{"event": "Sold (MLS)", "price": null, "date": null},
{"event": "Relisted", "price": null, "date": null}
],
"photos": [
"https://ssl.cdn-redfin.com/photo/92/mbpaddedwide/446/genMid.9124446_0.jpg",
"https://ssl.cdn-redfin.com/photo/92/mbpaddedwide/446/genMid.9124446_1_0.jpg"
],
"source": "redfin",
"observedAt": "2026-08-14T04:09:16.079Z",
"error": null
}

The most complete Redfin scraper available. It returns every listing field Redfin exposes, from price, beds, baths, and square footage to HOA, year built, MLS number, and geocoordinates, plus listing-agent name, phone, and brokerage captured from each property page, and gives you location, price, bed, and status filters to target exactly the homes you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor reads Redfin search-region pages (city, ZIP, neighborhood, county) or individual property URLs, applies the filters you pass, paginates through matching homes, and writes one normalized record per listing to the run's dataset. Each record carries price, beds, baths, square footage, lot size, price per square foot, HOA, year built, property type, MLS number and status, days on market, geocoordinates, and photo URLs.

With agent contacts enabled (the default), the actor also opens each property page to capture the listing-agent name and phone, the brokerage name and phone, price history, and the full photo set. You can pull for-sale or recently sold homes.

Redfin blocks datacenter IPs, so the actor routes through US residential proxy by default.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 50 for-sale homes in Austin, TX with agent contacts.

{
"startUrls": [{ "url": "https://www.redfin.com/city/30818/TX/Austin" }],
"listingStatus": "for-sale",
"fetchAgentContacts": true,
"maxResults": 50
}

Provide startUrls (copy a Redfin search or listing URL from your browser) or zipCodes, or both. Every filter is optional. Set listingStatus to sold for recent sales.

Input reference

FieldTypeRequiredDefaultDescription
startUrlsobject[]noAustin, TX regionRedfin search-region page URLs (city, zip, neighborhood, county) or individual /home/ property URLs.
zipCodesstring[]no(empty)US ZIP codes to search, for example ["78701","90210"]. Each is resolved to its Redfin region automatically.
listingStatusenumnofor-saleWhich listings to return: for-sale or sold.
soldWithinDaysintegerno90When status is sold, only include homes sold within this many days.
propertyTypesstring[]no(all)Filter by property type. One or more of house, condo, townhouse, multi-family, land, manufactured, other.
minPriceintegerno(none)Minimum list/sale price in USD.
maxPriceintegerno(none)Maximum list/sale price in USD.
minBedsintegerno(none)Minimum number of bedrooms.
maxBedsintegerno(none)Maximum number of bedrooms.
minBathsintegerno(none)Minimum number of bathrooms.
maxDaysOnMarketintegerno(none)Only include listings on the market at most this many days.
fetchAgentContactsbooleannotrueOpen each property page to capture listing-agent name and phone, brokerage, price history, and photos. Turn off for cheaper listing-only results.
maxResultsintegerno50Maximum listings to collect.
proxyConfigurationobjectnoUS residentialApify proxy configuration. Redfin blocks datacenter IPs, so US residential proxy is used by default.

Filters combine with logical AND.

Output reference

One dataset item per listing. Types: string, number, integer, boolean, string[], object[], or null when the source value is absent.

FieldTypeDescription
propertyIdstringRedfin property id (unique per home).
listingIdstringRedfin listing id for the current listing.
mlsIdstringMLS number.
addressstringStreet address.
unitNumberstringUnit number when present.
citystringCity.
statestringTwo-letter state code.
zipstringZIP code.
pricenumberList price, or sale price for sold homes.
bedsnumberNumber of bedrooms.
bathsnumberNumber of bathrooms.
sqFtintegerInterior square footage.
lotSizeintegerLot size in square feet.
pricePerSqFtintegerPrice per square foot.
yearBuiltintegerYear the home was built.
propertyTypestringProperty type as shown on Redfin.
statusstringRedfin status, for example Active, Coming Soon, Sold.
mlsStatusstringMLS status string.
daysOnMarketintegerDays the listing has been on the market.
soldDatestringMost recent sold date on record (YYYY-MM-DD), when present.
hoaMonthlynumberMonthly HOA dues, or null.
isNewConstructionbooleanWhether the home is new construction.
numPhotosintegerNumber of listing photos.
keyFactsstring[]Notable features highlighted on the listing.
latitudenumberLatitude.
longitudenumberLongitude.
urlstringRedfin listing URL.
listingAgentNamestringListing-agent name (with agent contacts on).
listingAgentPhonestringListing-agent phone (with agent contacts on).
listingBrokerNamestringBrokerage name (with agent contacts on).
listingBrokerPhonestringBrokerage phone (with agent contacts on).
priceHistoryobject[]List of price-history events (event, price, date). Some entries expose only the event label when Redfin does not publish the price or date.
photosstring[]Photo URLs (with agent contacts on).
sourcestringData source, always redfin.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Detail-page fields (listingAgentName, listingAgentPhone, listingBrokerName, listingBrokerPhone, priceHistory, photos) are populated only when fetchAgentContacts is enabled.

Example output record

Real record from a live run (input {"startUrls":[{"url":"https://www.redfin.com/city/30818/TX/Austin"}]}), a Coming Soon listing:

{
"propertyId": "30962218",
"listingId": "222359839",
"mlsId": "2171370960963145041",
"address": "1309 Horseback Holw",
"city": "Austin",
"state": "TX",
"zip": "78732",
"price": 639000,
"beds": 4,
"baths": 2,
"sqFt": 1975,
"pricePerSqFt": 324,
"yearBuilt": 2005,
"propertyType": "Single Family",
"status": "Coming Soon",
"daysOnMarket": 1,
"hoaMonthly": null,
"numPhotos": 39,
"latitude": 30.3566723,
"longitude": -97.9059119,
"url": "https://www.redfin.com/TX/Austin/1309-Horseback-Holw-78732/home/30962218",
"listingAgentName": "Mahshid Caras",
"listingAgentPhone": "512-825-8483",
"listingBrokerName": "Compass",
"source": "redfin",
"observedAt": "2026-08-14T04:09:16.079Z",
"error": null
}

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~redfin-real-estate-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"zipCodes":["78701"],"listingStatus":"for-sale","minPrice":400000,"minBeds":3,"maxResults":50}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~redfin-real-estate-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.redfin.com/city/30818/TX/Austin"}],"listingStatus":"sold","soldWithinDays":30}'

Apify CLI:

apify call scrapers_lat/redfin-real-estate-scraper \
--input '{"zipCodes":["90210"],"fetchAgentContacts":true}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. Each listing record bills on the result event. See the pricing tab for the current per-result price.
  • Agent contacts billed separately. With fetchAgentContacts on, opening a property detail page bills the details event, charged per property only when a detail page is actually fetched. Turn it off for cheaper listing-only results.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxResults.
  • Residential proxy required. Redfin blocks datacenter IPs. The actor uses US residential proxy by default; keep it enabled.

FAQ and troubleshooting

How do I scrape a specific city or ZIP? Paste the Redfin search-region URL into startUrls, or list ZIP codes in zipCodes. Both resolve to Redfin regions automatically.

Can I get recently sold comps? Yes. Set listingStatus to sold and use soldWithinDays to bound the window.

Why are agent name and phone empty? They come from the property detail page. Enable fetchAgentContacts (on by default). With it off, only listing-grid fields are returned.

Why do some priceHistory entries have null price and date? Redfin does not always publish the price or date for every history event. The actor returns the event label with null for the missing values rather than inventing them.

A run returned 0 records. Why? The region had no matching listings, or the filters excluded everything. Loosen the filters or verify the region URL. Zero-result runs are not charged.

Is this an official Redfin tool? No. This actor is independent and is not affiliated with Redfin. It reads only publicly visible listing data. Agent names, phones, and brokerages are public business-contact details shown on the listing; you are responsible for using them in compliance with Redfin's terms, the TCPA, the GDPR where applicable, and other laws.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Redfin. Accesses only publicly visible Redfin listing data. Use in accordance with Redfin's terms of service.