Redfin Real Estate Listings & Agent Contacts Scraper
Pricing
from $20.80 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | object[] | no | Austin, TX region | Redfin search-region page URLs (city, zip, neighborhood, county) or individual /home/ property URLs. |
zipCodes | string[] | no | (empty) | US ZIP codes to search, for example ["78701","90210"]. Each is resolved to its Redfin region automatically. |
listingStatus | enum | no | for-sale | Which listings to return: for-sale or sold. |
soldWithinDays | integer | no | 90 | When status is sold, only include homes sold within this many days. |
propertyTypes | string[] | no | (all) | Filter by property type. One or more of house, condo, townhouse, multi-family, land, manufactured, other. |
minPrice | integer | no | (none) | Minimum list/sale price in USD. |
maxPrice | integer | no | (none) | Maximum list/sale price in USD. |
minBeds | integer | no | (none) | Minimum number of bedrooms. |
maxBeds | integer | no | (none) | Maximum number of bedrooms. |
minBaths | integer | no | (none) | Minimum number of bathrooms. |
maxDaysOnMarket | integer | no | (none) | Only include listings on the market at most this many days. |
fetchAgentContacts | boolean | no | true | Open each property page to capture listing-agent name and phone, brokerage, price history, and photos. Turn off for cheaper listing-only results. |
maxResults | integer | no | 50 | Maximum listings to collect. |
proxyConfiguration | object | no | US residential | Apify 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.
| Field | Type | Description |
|---|---|---|
propertyId | string | Redfin property id (unique per home). |
listingId | string | Redfin listing id for the current listing. |
mlsId | string | MLS number. |
address | string | Street address. |
unitNumber | string | Unit number when present. |
city | string | City. |
state | string | Two-letter state code. |
zip | string | ZIP code. |
price | number | List price, or sale price for sold homes. |
beds | number | Number of bedrooms. |
baths | number | Number of bathrooms. |
sqFt | integer | Interior square footage. |
lotSize | integer | Lot size in square feet. |
pricePerSqFt | integer | Price per square foot. |
yearBuilt | integer | Year the home was built. |
propertyType | string | Property type as shown on Redfin. |
status | string | Redfin status, for example Active, Coming Soon, Sold. |
mlsStatus | string | MLS status string. |
daysOnMarket | integer | Days the listing has been on the market. |
soldDate | string | Most recent sold date on record (YYYY-MM-DD), when present. |
hoaMonthly | number | Monthly HOA dues, or null. |
isNewConstruction | boolean | Whether the home is new construction. |
numPhotos | integer | Number of listing photos. |
keyFacts | string[] | Notable features highlighted on the listing. |
latitude | number | Latitude. |
longitude | number | Longitude. |
url | string | Redfin listing URL. |
listingAgentName | string | Listing-agent name (with agent contacts on). |
listingAgentPhone | string | Listing-agent phone (with agent contacts on). |
listingBrokerName | string | Brokerage name (with agent contacts on). |
listingBrokerPhone | string | Brokerage phone (with agent contacts on). |
priceHistory | object[] | List of price-history events (event, price, date). Some entries expose only the event label when Redfin does not publish the price or date. |
photos | string[] | Photo URLs (with agent contacts on). |
source | string | Data source, always redfin. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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
resultevent. See the pricing tab for the current per-result price. - Agent contacts billed separately. With
fetchAgentContactson, opening a property detail page bills thedetailsevent, 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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.
Related scrapers
- Zillow Rentals Scraper: Zillow US rental listings with price and details.
- Realtor.ca Listings Scraper: Realtor.ca Canadian listings, prices, and agent details.
- Arizona ADRE Real Estate Scraper: Arizona real estate licensee records.
- BizBuySell Businesses For Sale Scraper: US businesses listed for sale.
- Ohio Real Estate Licensees Scraper: Ohio real estate licensee records.
- Georgia GREC Real Estate Scraper: Georgia real estate licensee records.
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.
