# US Real Estate Listings & Sold Homes Scraper for Redfin (`haketa/redfin-scraper`) Actor

Scrape US real estate from Redfin.com: homes for sale & rent — address, price, beds, baths, sqft, lot size, property type, MLS, agent, photos & coordinates. Fast, no login. Independent tool, not affiliated with or endorsed by Redfin; all trademarks belong to their respective owners.

- **URL**: https://apify.com/haketa/redfin-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Real estate, Lead generation, E-commerce
- **Features:** Limited permissions
- **Stats:** 23 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## US Real Estate Listings & Sold Homes Scraper for Redfin — Prices, Beds/Baths, $/sqft, MLS & GPS

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-00C853?style=for-the-badge\&logo=apify\&logoColor=white)](https://apify.com/haketa/redfin-scraper)
[![US Real Estate](https://img.shields.io/badge/Market-US_Real_Estate_%26_MLS-1E88E5?style=for-the-badge)](https://www.redfin.com)
[![Export Formats](https://img.shields.io/badge/Export-JSON_%7C_CSV_%7C_Excel_%7C_API-FF6F00?style=for-the-badge)](https://apify.com/haketa/redfin-scraper)
[![Pagination](https://img.shields.io/badge/Scale-1,000%2B_Listings_Unlocked-8E24AA?style=for-the-badge)](https://apify.com/haketa/redfin-scraper)

**This is a fast, no-code scraper for [Redfin](https://www.redfin.com) that turns one of the largest US real estate marketplaces into clean, structured data.** Use it to **scrape Redfin.com** listings by city, ZIP code, neighborhood or county and pull **price, beds, baths, square footage, price per sqft, lot size, HOA, year built, listing status, MLS number, days on market, GPS coordinates and full descriptions** — with **no login, no API key and no coding**.

Bulk export every listing to **JSON, CSV, Excel, or API** for **real estate lead generation**, comparative market analysis (CMA), and **B2B property intelligence**.

> 🏠 **Built for** real estate investors, flippers, agents, brokers, appraisers, proptech startups, mortgage/insurance teams, data analysts and lead-generation teams who need bulk, structured **Redfin data** instead of copy-pasting listings by hand.

> ℹ️ **Disclaimer:** This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Redfin Corporation** or any of its subsidiaries. "Redfin" and all related names and logos are trademarks of their respective owners and are used here only to describe the data source. Please use this Actor in compliance with Redfin's Terms of Service and all applicable laws.

***

### ⚡ At a glance

| Feature | Details |
|---|---|
| **Data source** | [Redfin.com](https://www.redfin.com) — US residential real estate listings across all 50 states |
| **Core property fields** | `price`, `pricePerSqFt`, `beds`, `baths`, `sqFt`, `lotSize`, `yearBuilt`, `propertyType`, `hoaMonthly` |
| **MLS & status signals** | `mlsId`, `status` (`Active`, `Coming Soon`), `daysOnMarket`, `soldDate` (last sale), `isHot`, `isNewConstruction` |
| **Geo & address** | Full `address`, `unitNumber`, `city`, `state`, `zip`, `latitude`, `longitude`, `description`, `url` |
| **24 built-in US markets** | NYC, LA, Chicago, Houston, Phoenix, Austin, Miami, Dallas, Seattle, Denver, Boston, SF, Atlanta & more + custom URLs |
| **Scale & pagination** | **1,000+ listings per run** via automatic metro spatial grid expansion & multi-area deduplication (`propertyId`) |
| **Export formats** | JSON, CSV, Excel (XLSX), HTML Table, XML & direct **Apify REST API** |

***

### 📋 Table of contents

- [At a glance](#-at-a-glance)
- [Why scrape Redfin?](#-why-scrape-redfin)
- [What this Redfin scraper does](#-what-this-redfin-scraper-does)
- [Use cases](#-use-cases)
- [Built-in US metro markets](#-built-in-us-metro-markets)
- [Input](#-input)
- [Output](#-output)
- [Pagination & scale (1,000+ listings unlocked)](#-pagination--scale-1000-listings-unlocked)
- [How to use](#️-how-to-use)
- [Integrations & automation](#-integrations--automation)
- [Tips](#-tips)
- [FAQ](#-faq)
- [Related scrapers](#-related-scrapers)
- [Troubleshooting](#-troubleshooting)
- [Changelog](#-changelog)

***

### 🔎 Why scrape Redfin?

[Redfin](https://www.redfin.com) is a leading US real estate platform with rich, MLS-backed property data — asking prices, square footage, price per square foot, year built, HOA fees, listing status and precise map coordinates — that investors, agents and analysts rely on every day. The catch: Redfin offers **no public API** for bulk data, and copy-pasting listings one by one simply doesn't scale when you need a whole city, ZIP or county.

This **Redfin scraper** bridges that gap. It reads Redfin's own structured JSON data layer (the same one that powers the map search), normalizes it into one tidy row per home, and hands you a spreadsheet-ready dataset in seconds. No browser automation, no fragile HTML parsing, no manual region lookups.

Because each record ships with coordinates, status and the full listing description, you get a dataset that's immediately useful for comps, valuation models, deal sourcing, market dashboards and lead lists.

**Common reasons people scrape Redfin:**

- 📊 Build **US housing datasets** for market research, affordability studies and trend dashboards.
- 🏦 Source investment **deals** — find underpriced homes by **price per sqft** and stale inventory by **days on market**.
- 🧑‍💼 Run a **comparative market analysis (CMA)** for any neighborhood in minutes.
- 🗺️ Power a proptech product, map or valuation model with a continuously refreshed **Redfin listings feed**.
- 📣 Build targeted **real estate lead lists** by city and property type.
- 🏛️ Enrich mortgage, insurance and relocation workflows with up-to-date property attributes.
- 📈 Track asking prices, inventory and **$/sqft** across cities and ZIP codes over time.

***

### ✨ What this Redfin scraper does

- ✅ **No login & no API key** — start scraping Redfin instantly, right out of the box.
- ✅ **Pick a city from a dropdown** — 24 major US markets (New York, Los Angeles, Chicago, Houston, Austin, Miami, Seattle, San Francisco and more). No URL typing required.
- ✅ **Or paste any Redfin search URL** — **city, ZIP code, neighborhood or county** pages all work, including filtered searches you build on redfin.com.
- ✅ **Complete property data** — `price`, `pricePerSqFt`, `beds`, `baths`, `sqFt`, `lotSize`, `yearBuilt`, `status`, `mlsId`, `daysOnMarket`, `hoaMonthly`, `latitude`/`longitude`, `description` and more.
- ✅ **Property-type filtering** — houses, condos/co-ops, townhouses, multi-family, land and other/mobile.
- ✅ **Automatic de-duplication** — every home is unique by Redfin `propertyId`, so you never get the same listing twice.
- ✅ **Fast & low-cost** — powered by Redfin's own JSON data layer, not a slow headless browser.
- ✅ **Bulk export** — JSON, CSV, Excel (XLSX), HTML and XML, or pull straight from the **Apify API**.
- ✅ **Automation-ready** — schedule daily/weekly runs and connect to Google Sheets, Slack, Zapier, Make, n8n, webhooks, or use it as an AI-agent tool.

**Keywords this tool covers:** Redfin scraper, Redfin.com scraper, scrape Redfin, Redfin data extraction, Redfin API alternative, US real estate scraper, real estate listings scraper, MLS data, property data scraper, comps tool, CMA data, $/sqft data, housing market analytics, real estate lead generation, proptech data feed.

***

### 🎯 Use cases

- 🏦 **Investors & house flippers** — pull every listing in a target city/ZIP, sort by **$/sqft**, filter by type, and spot underpriced homes and aging inventory fast.
- 🧑‍💼 **Agents, brokers & appraisers** — export comparable listings (price, $/sqft, beds, baths, sqft, year built) for a data-backed **CMA** and monitor your farm area.
- 🏗️ **Proptech & real estate startups** — feed maps, valuation models, search portals and CRMs with a fresh **Redfin listings feed** including coordinates and descriptions.
- 📊 **Data analysts & researchers** — build structured **US housing datasets** and track prices, inventory and $/sqft across markets over time.
- 🏛️ **Mortgage, insurance & relocation** — enrich underwriting, valuation and relocation packages with property size, year built, HOA, type and location.
- 📣 **Marketers & lead-gen teams** — build targeted lists by location and property type for ABM, direct mail and neighborhood outreach.
- 🏠 **Buyers & relocators** — snapshot an entire market into a spreadsheet to compare homes side by side.

***

### 🏙️ Built-in US metro markets

Select any combination of these 24 major US markets directly from the `searchLocations` dropdown (or paste any custom Redfin city, ZIP, county, or neighborhood URL into `startUrls`):

| Region | Built-in `searchLocations` Options |
|---|---|
| **Northeast & Mid-Atlantic** | `New York, NY`, `Boston, MA`, `Washington, DC` |
| **Texas & South** | `Austin, TX`, `Dallas, TX`, `Houston, TX`, `San Antonio, TX`, `Fort Worth, TX`, `Miami, FL`, `Tampa, FL`, `Jacksonville, FL`, `Atlanta, GA`, `Charlotte, NC`, `Nashville, TN` |
| **West Coast & Mountain** | `Los Angeles, CA`, `San Francisco, CA`, `San Diego, CA`, `San Jose, CA`, `Sacramento, CA`, `Seattle, WA`, `Portland, OR`, `Phoenix, AZ`, `Denver, CO` |
| **Midwest** | `Chicago, IL` |

***

### 📥 Input

You don't need any technical skills. Pick cities from the dropdown, or paste Redfin URLs for full control. All inputs are optional — leave everything empty to auto-scrape a diverse sample of popular US markets.

| Field | Type | Description |
|---|---|---|
| `searchLocations` | array (select) | Pick one or more of 24 popular US cities from the dropdown — no URL needed. Leave empty to auto-scrape a diverse sample of major markets. |
| `propertyTypes` | array (select) | Which property types to include: `house`, `condo`, `townhouse`, `multifamily`, `land`, `other`. Leave all selected for everything. |
| `startUrls` | array of URLs | **Advanced.** Paste Redfin.com **city / ZIP / neighborhood / county** search URLs to scrape exactly the filtered results you built on redfin.com. Each search returns up to ~350 homes. |
| `maxItems` | integer | Maximum listings to scrape across the whole run. Use it to control cost. `0` = no limit (up to ~350 per area). Default `0`. |
| `maxConcurrency` | integer | Maximum searches processed in parallel. Default `5`. |
| `maxRequestRetries` | integer | Retries per failed request before it's marked failed. Default `3`. |
| `proxyConfiguration` | object | Proxy settings. **Apify Proxy (US)** is enabled by default and recommended for Redfin. |

#### Example input — easy mode (pick cities)

```json
{
  "searchLocations": ["Austin, TX", "Miami, FL"],
  "propertyTypes": ["house", "condo", "townhouse"],
  "maxItems": 300
}
```

#### Example input — advanced (paste Redfin URLs)

```json
{
  "startUrls": [
    { "url": "https://www.redfin.com/city/30749/NY/New-York" },
    { "url": "https://www.redfin.com/zipcode/78731" },
    { "url": "https://www.redfin.com/county/321/TX/Travis-County" }
  ],
  "propertyTypes": ["house", "condo"],
  "maxItems": 500
}
```

***

### 📤 Output

Each home is saved as one clean, flat record. Below is a **real record from a live run** (New York, NY):

```json
{
  "url": "https://www.redfin.com/NY/Arverne/6702-Almeda-Ave-11692/home/20672836",
  "mlsId": "1068016",
  "status": "Active",
  "listingType": 1,
  "price": 519000,
  "pricePerSqFt": 492,
  "beds": 3,
  "baths": 2,
  "sqFt": 1054,
  "lotSize": 1350,
  "yearBuilt": 1930,
  "propertyType": "House",
  "hoaMonthly": null,
  "address": "67-02 Almeda Ave",
  "unitNumber": null,
  "city": "Arverne",
  "state": "NY",
  "zip": "11692",
  "latitude": 40.5971215,
  "longitude": -73.7968017,
  "daysOnMarket": 1,
  "timeOnRedfinMs": 3665486,
  "soldDate": "2026-02-17T08:00:00.000Z",
  "isNewConstruction": false,
  "hasVirtualTour": false,
  "has3DTour": false,
  "isHot": false,
  "photoCount": 32,
  "photo": null,
  "description": "Renovated in 2026 and move in ready: 3 bedroom, 2 full bath detached corner bungalow with hardwood floors...",
  "propertyId": 20672836,
  "listingId": 215615566,
  "scrapedAt": "2026-11-01T23:47:07.000Z"
}
```

#### Field reference & coverage

##### 🏡 Property Pricing & Specs

| Field | Coverage | Description |
|---|---|---|
| `price` | 🟢 High (100%) | Current list price in USD. |
| `pricePerSqFt` | 🟢 High (~84%) | Price per interior square foot in USD (populated whenever `sqFt` is published). |
| `beds` / `baths` | 🟢 High (97–99%) | Number of bedrooms and bathrooms. |
| `sqFt` | 🟢 High (~84%) | Interior livable square footage. |
| `lotSize` | 🟡 Conditional (~57%) | Lot size in square feet (present for single-family homes and land; typically `null` for condos). |
| `yearBuilt` | 🟢 High (~92%) | Year the property was constructed. |
| `propertyType` | 🟢 High (100%) | Normalized label: `House`, `Condo/Co-op`, `Townhouse`, `Multi-family`, `Land`, `Other`. |
| `hoaMonthly` | 🟡 Conditional (~41%) | Monthly HOA fee in USD (populated for HOA/condo properties). |

##### 📍 Address & Geo Coordinates

| Field | Coverage | Description |
|---|---|---|
| `address` | 🟢 High (100%) | Street address line. |
| `unitNumber` | 🟡 Conditional (~54%) | Apartment / condo / suite unit number when applicable. |
| `city`, `state`, `zip` | 🟢 High (100%) | City name, 2-letter US state code, and 5-digit postal ZIP code. |
| `latitude` / `longitude` | 🟢 High (100%) | Exact WGS84 GPS coordinates for mapping and spatial joins. |

##### 📋 MLS, Listing Status & Media

| Field | Coverage | Description |
|---|---|---|
| `url` | 🟢 High (100%) | Direct absolute URL to the listing on Redfin.com. |
| `mlsId` | 🟢 High (~95%) | Official MLS listing identifier. |
| `status` | 🟢 High (100%) | Current market status (`Active`, `Coming Soon`, etc.). |
| `listingType` | 🟢 High (100%) | Listing classification code. |
| `daysOnMarket` | 🟢 High (~95%) | Days the property has been listed on the market. |
| `timeOnRedfinMs` | 🟢 High (~95%) | Duration the listing has been active on Redfin in milliseconds. |
| `soldDate` | 🟡 Conditional (~54%) | **Last recorded historical sale date** in ISO 8601 format (from property history). |
| `isNewConstruction`, `hasVirtualTour`, `has3DTour`, `isHot` | 🟢 High (100%) | Boolean flags for new construction, 3D/virtual tours, and Redfin "Hot Home" status. |
| `photoCount` / `photo` | 🟢 High / 🟡 Cond. | Total number of listing photos and primary photo URL (when exposed). |
| `description` | 🟢 High (~94%) | Full MLS listing remarks / property description text. |
| `propertyId` / `listingId` | 🟢 High (100%) | Unique property ID (used for 100% deduplication) and listing ID. |
| `scrapedAt` | 🟢 High (100%) | Extraction timestamp in ISO 8601 format. |

> **Fill rates (from a fresh 350-home run):** core fields are rich — `url`, `price`, `address`, `city`, `state`, `propertyType`, `status`, `latitude`, `longitude` all **100%**; `beds` 99%, `baths` 97%, `sqFt`/`pricePerSqFt` 84%. Data-dependent fields vary honestly: `hoaMonthly` ~41% (only HOA homes), `lotSize` ~57% (rare for condos), `soldDate` ~54% (only homes with prior sale history), `unitNumber` ~54% (only multi-unit buildings). Missing values are returned as `null` — never a guessed value.

***

### 🔁 Pagination & scale (1,000+ listings unlocked)

Redfin caps a single region query at **~350 homes per area**. To unlock **1,000+ results pagination** seamlessly without manual work, this scraper uses a **3-stage discovery & expansion pipeline**:

1. **Direct Region Resolution** — Resolves each selected city or `startUrls` entry (city, ZIP, county, or neighborhood) and fetches up to ~350 listings per region while recording the geographic centroid of the market.
2. **Automatic Metro Spatial Grid Expansion (`maxItems > 350`)** — When your requested `maxItems` exceeds what the initial region call returns (for example, `maxItems: 1000` on Austin or Miami), the scraper automatically steps across surrounding spatial grid tiles around the market's coordinates, pulling up to 350 additional homes per sub-region and **de-duplicating every home by `propertyId`** so a single metro can yield **1,000 to 3,500+ unique listings**.
3. **Multi-Market Fallback** — If a run still needs more listings to reach an explicit `maxItems` target, it expands across additional major US markets until `maxItems` is satisfied.

***

### ⚙️ How to use

1. **Open the Actor** on the [Apify Console](https://console.apify.com).
2. **Pick cities** from the **Cities / markets to scrape** dropdown — or paste Redfin URLs in the **Redfin search URLs (advanced)** field. (Leave both empty to auto-scrape a diverse sample.)
3. **(Optional)** choose **property types** and set a **Max items** limit to control cost.
4. Click **Start** ▶️ and let it run.
5. When finished, open **Storage → Dataset** and **export** as JSON, CSV, Excel, HTML or XML — or pull via the **Apify API**.
6. **Automate:** schedule daily/weekly runs and connect via webhook to **Make, Zapier, n8n, Google Sheets or Slack**, or call the Actor as an **MCP / AI-agent** tool.

#### Run via API (Node.js)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const input = {
  startUrls: [{ url: 'https://www.redfin.com/zipcode/78731' }],
  propertyTypes: ['house', 'condo'],
  maxItems: 300,
};
const run = await client.actor('haketa/redfin-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'listings');
```

#### Run via API (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
    "startUrls": [{"url": "https://www.redfin.com/city/30818/TX/Austin"}],
    "propertyTypes": ["house"],
    "maxItems": 300,
}
run = client.actor("haketa/redfin-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["address"], "-", item.get("price"), "-", item.get("sqFt"), "sqft")
```

***

### 🔌 Integrations & automation

Connect this **US Real Estate Scraper for Redfin** directly into your investment, analytics, or CRM stack:

- **Google Sheets & Airtable** — sync fresh MLS listings, prices, and `$/sqft` metrics into live deal-underwriting spreadsheets.
- **Make, Zapier & n8n** — trigger automated workflows when new listings appear below target `pricePerSqFt` thresholds or with high `daysOnMarket`.
- **GIS, PostGIS & BigQuery** — ingest `latitude` and `longitude` coordinates directly into spatial databases and Tableau / PowerBI map layers.
- **Slack & Email notifications** — receive daily digests of newly listed properties in your target ZIP codes or counties.

***

### 💡 Tips

- **Control cost with `maxItems`.** Start with 50–100 to preview, then scale up.
- **Scrape ZIP codes for full metro coverage** — each city page is capped at ~350 homes, so a list of ZIP/neighborhood URLs is the most reliable way to capture an entire metro.
- **Mix URL types in one run** — city, ZIP, county and neighborhood URLs can all go in `startUrls` together; results are combined and de-duplicated.
- **Filter by property type** to keep datasets focused (e.g. only `condo` for a rental study).
- **Use coordinates** (`latitude`/`longitude`) to map listings or join with other geo datasets.
- **Track `price` + `daysOnMarket` over time** to spot price drops and stale inventory.
- **Keep US proxies on** — Redfin is a US site and serves best from US IPs (enabled by default).

***

### ❓ FAQ

#### Is it legal to scrape Redfin?

This Actor collects only **publicly available information** that anyone can view on redfin.com without logging in. Scraping public data is generally legal, but **how you use the data is your responsibility** — respect Redfin's Terms of Service, MLS rules and privacy laws (GDPR, CCPA), and don't republish copyrighted photos or descriptions in infringing ways. If unsure, consult a legal professional.

#### Do I need a Redfin account or API key?

No. No login, cookies or Redfin API key required — this is a true **Redfin API alternative** built on public data.

#### How many listings can I scrape, and how fast?

Each search area (city/ZIP/county/neighborhood) returns up to **~350 homes**. Runs are fast because the scraper uses Redfin's JSON data layer, not a browser — a single city of 350 homes completes in well under a minute. Use multiple ZIP/neighborhood URLs and `maxItems` to scale to thousands.

#### Do I need proxies?

US-based proxies are recommended and **Apify Proxy (US) is on by default**. You generally don't need to change anything.

#### In what formats can I export the data?

JSON, CSV, Microsoft Excel (XLSX), HTML table and XML — plus direct **Apify API** access and dataset views.

#### Is there a Redfin API?

Redfin has no public bulk API. This scraper is the practical **Redfin API alternative**: call it via the Apify API and get clean JSON back.

#### How fresh is the data?

Every run fetches **live data** from Redfin.com, so results reflect the site's current state. Schedule the Actor to keep your dataset up to date.

#### Can I filter by property type?

Yes — choose any combination of house, condo/co-op, townhouse, multi-family, land or other. The filter is applied to each area's results.

#### What does `soldDate` mean?

It's the property's **last recorded sale date** (price history), which can appear on an active listing from a previous sale. Always use `status` for the current state (Active, Coming Soon, …).

#### Why are some fields `null`?

Redfin doesn't publish every field for every listing (e.g. lot size for condos, HOA for non-HOA homes), and occasionally restricts a field on pre-market listings. Missing values are returned as `null` rather than a guessed/wrong value.

#### Can I scrape sold homes?

This version focuses on active and coming-soon listings (the most reliable data). Each listing still includes its last `soldDate` (price history). Need full sold-history coverage? Open an issue and let us know.

***

### 🔗 Related scrapers

Building a cross-border real estate dataset? Pair this **Redfin scraper** with our other property and listings scrapers:

- [Yad2 Scraper](https://apify.com/haketa/yad2-scraper) — real estate & classifieds listings from Yad2 (Israel).
- [ZAP Imóveis Scraper](https://apify.com/haketa/zapimoveis-scraper) — Brazilian property listings with price, area and location.
- [Boliga Scraper](https://apify.com/haketa/boliga-scraper) — Danish homes for sale and sold-price history.
- [Realtor.ca Scraper](https://apify.com/haketa/realtor-ca-scraper) — Canadian MLS real estate listings.
- [Domain.com.au Scraper](https://apify.com/haketa/domain-com-au-scraper) — Australian property listings and prices.
- [ImmobilienScout24 Scraper](https://apify.com/haketa/immobilienscout24-scraper) — German real estate listings (buy & rent).

Explore more on the [Haketa Apify profile](https://apify.com/haketa).

***

### 🧰 Troubleshooting

- **"Could not resolve region"** — make sure the URL is a real Redfin **search** page (city/ZIP/neighborhood/county), not a single listing or account page.
- **Want 1,000+ listings from one city?** — simply set `maxItems: 1000` (or higher); the scraper automatically expands across spatial grid sub-regions around the city to break past Redfin's 350-home per-region ceiling.
- **Getting blocked or empty results** — keep **US-based Apify Proxy** enabled and avoid setting concurrency too high.
- **A field is `null`** — it may simply not be published for that listing.

***

### 📋 Changelog

- **v1.2 (2026-11)** — Unlocked **1,000+ listings deep pagination** via automatic metro spatial grid (`poly`) expansion and multi-market fallback when `maxItems > 350`, fixed ZIP-code URL region resolution, and expanded README with `⚡ At a glance` and field coverage tables.
- **v1.1 (2026-08)** — Updated descriptive title and nominative trademark disclaimer for compliance; added 24 built-in US city dropdown options and zero-config default sample run.
- **v1.0 (2026-05)** — Initial release with city/ZIP/county/neighborhood search URL support, client-side property-type filtering, and `propertyId` deduplication.

***

*This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Redfin Corporation. "Redfin" is a trademark of its respective owner.*

👉 **Ready to turn Redfin into a spreadsheet?** Pick a city (or paste a URL), press **Start**, and export your US real estate dataset in seconds.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/redfin-scraper/changelog.md

# Actor input Schema

## `searchLocations` (type: `array`):

Choose one or more US cities to pull homes from. Leave empty to scrape a diverse sample of popular markets automatically.

## `propertyTypes` (type: `array`):

Which property types to include. Leave all selected for everything.

## `startUrls` (type: `array`):

Optional. Power users can paste Redfin.com search URLs — by city, ZIP, neighborhood or county — to scrape exactly the filtered results you built on redfin.com. Examples: https://www.redfin.com/city/30749/NY/New-York or https://www.redfin.com/zipcode/78731. Each search returns up to ~350 homes.

## `maxItems` (type: `integer`):

Maximum number of listings to scrape across the whole run. Set 0 for no limit, or set 1,000+ to automatically expand across sub-regions and metro grid tiles.

## `maxConcurrency` (type: `integer`):

Maximum number of searches processed in parallel.

## `maxRequestRetries` (type: `integer`):

How many times a failed request is retried before being marked as failed.

## `proxyConfiguration` (type: `object`):

Proxy settings. US-based proxies are recommended for the best results. Apify Proxy is enabled by default.

## Actor input object example

```json
{
  "searchLocations": [
    "Austin, TX",
    "Miami, FL"
  ],
  "propertyTypes": [
    "house",
    "condo",
    "townhouse",
    "multifamily",
    "land",
    "other"
  ],
  "maxItems": 100,
  "maxConcurrency": 5,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All extracted property listings for this run.

## `overviewTable` (type: `string`):

A clean, human-readable table view of the scraped listings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchLocations": [
        "Austin, TX",
        "Miami, FL"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/redfin-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchLocations": [
        "Austin, TX",
        "Miami, FL",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/redfin-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchLocations": [
    "Austin, TX",
    "Miami, FL"
  ],
  "maxItems": 100
}' |
apify call haketa/redfin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/redfin-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XE7VAuOyOqwWb5lpH/builds/gmzF4xBGqYdb0as6V/openapi.json
