# Redfin Property Scraper — Sale + Sold · Market KPIs (`sian.agency/redfin-property-scraper`) Actor

Redfin scraper and US real estate data API. Search for-sale, for-rent, sold and coming-soon listings by region, coordinates or property URL; return price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.

- **URL**: https://apify.com/sian.agency/redfin-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Agents
- **Stats:** 52 total users, 16 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 extracted listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Redfin Property Scraper — Sale + Sold · Market KPIs 🏡

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Related Actor](https://img.shields.io/badge/Store-Zillow%20Scraper-006AFF)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![Related Actor](https://img.shields.io/badge/Store-Realtor.com%20Scraper-D92228)](https://apify.com/sian.agency/realtor-property-scraper?fpr=sian) [![Related Actor](https://img.shields.io/badge/Store-StreetEasy%20Scraper-3D5A80)](https://apify.com/sian.agency/streeteasy-property-scraper?fpr=sian)

#### 🎯 Extract Redfin US Property Listings With Market KPIs in Seconds

##### Investors, agents, market analysts, and prop-tech builders — get full Redfin listings plus price/sqft analytics, days-on-market, and optional Redfin Estimate + Walk Score

***

### 🔎 What is the Redfin Scraper — and when should you use it?

The **Redfin Scraper** turns US property listings from Redfin into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** for-sale, for-rent, sold and coming-soon US listings — price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.

**Use something else when:** you want Zillow and its Zestimate instead. Use [Zillow Scraper](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) for US listings with Zestimate, rent Zestimate and investor KPIs. Use [Centris Property Scraper](https://apify.com/sian.agency/centris-ca-property-scraper?fpr=sian) for Quebec and Montreal listings.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/redfin-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want US property data from Redfin using the Apify Actor `sian.agency/redfin-property-scraper`.

Use it when I need: for-sale, for-rent, sold and coming-soon US listings — price, price per sqft, beds, baths, address, MLS status, price history, schools, flood risk, Redfin Estimate and Walk Score.

Don't use it when: you want Zillow and its Zestimate instead — use zillow-property-scraper or centris-ca-property-scraper instead.

How to call it: start with `searchMode: autocomplete` to turn a place name into a `regionId`, then run `byRegionId` (or use `byCoordinates`, or `propertyDetails` for specific listing URLs).

Start with this input:
{
  "searchMode": "autocomplete",
  "autocompleteQuery": "Austin, TX"
}

Ask me which city or ZIP, and whether you want for-sale, sold or coming-soon, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Find coming-soon listings in Austin before they hit the wider market.*
- *Compare price per sqft by school district in Seattle.*
- *Flag listings with high flood risk in Tampa.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/redfin-property-scraper.md](https://apify.com/sian.agency/redfin-property-scraper.md).

### 📋 Overview

**Pull Redfin US property listings — for-sale, sold, and coming-soon — into clean structured data.** Search any US market by region (city, neighborhood, zip) or by lat/lng plus radius. Every listing comes back with calculated price-per-sqft, beds and baths, square footage, lot size, year built, days-on-market, listing agent, geo coordinates and full photo URLs.

**What investors and agents get:**

- 📊 **Analytics on every run** — the HTML report carries median price, the price/sqft and days-on-market spread, the city mix and an itemized charges statement. No spreadsheet work to see how a market reads.
- 🧮 **Calculated price/sqft on every listing** — comp sheets and CMAs are ready straight from the dataset
- 🌎 **Nationwide US coverage** — every Redfin region: cities, neighborhoods, zip codes, school districts
- ⭐ **Optional Redfin Estimate + Walk Score** — Redfin's AVM and Walk/Bike/Transit scores per listing for valuation and livability filtering (PAID)
- 🔎 **Built-in autocomplete** — type a city or zip, get back the region IDs you need to scrape — no manual lookup
- 🆓 **FREE tier with full feature parity** — 25 listings per run, no credit card, same KPIs and HTML report — just a smaller cap

***

### ✨ Features

- 🏷️ **For-sale, sold, or coming-soon** — single `listingStatus` toggle picks the side of the market
- 🧭 **Six search modes** — `autocomplete` (region-ID lookup), `byRegionId` (primary scrape mode), `byLocation` (free-text city/area), `byPolygon` (custom map boundary, PAID), `byCoordinates` (lat/lng + radius, PAID), `propertyDetails` (per-property dossier)
- 🔥 **Market-info enrichment (PAID)** — `includeMarketInfo` adds hot-market stats and mortgage cost inputs (rates, property tax, insurance) to every listing
- 🏠 **Property dossier mode** — pass Redfin home URLs or street addresses and get one deep row per home. It carries listing agent name and phone, marketing remarks, key facts, the full amenity breakdown, price history, schools with ratings, flood risk, popularity, the Redfin Estimate and Walk / Bike / Transit Scores.
- 📊 **Auto-calculated price/sqft** — for every listing with usable square footage
- 📈 **Market KPIs in HTML report** — median price, price/sqft distribution, days-on-market distribution, city + zip + property-type tallies
- 🏠 **Rich listing fields** — beds, baths (full + total), sqft, lot size, year built, HOA dues, MLS ID, listing agent name + ID, virtual-tour flag, 3D scan URL, full photo URLs (medium-res)
- ⭐ **Redfin Estimate + Walk Score enrichment** — bundled into one PAID toggle (`includeEnrichment`)
- 📦 **Bulk region search** — pass an array of region IDs in one run (PAID)
- 📱 **Standard Apify exports** — JSON, CSV, XLSX, RSS, HTML

***

### 🎬 Quick Start

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=[YOUR_TOKEN]' \
  -H 'Content-Type: application/json' \
  -d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":50}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Find Your Region ID

Run with `searchMode: "autocomplete"` and `autocompleteQuery: "Austin"` (or any city/zip/neighborhood). The dataset will list matching region IDs in `<type>_<id>` format (e.g. `2_30818` for Austin, TX).

#### Step 2: Scrape The Region

Switch to `searchMode: "byRegionId"`, paste the ID into `regionId`, pick `listingStatus` (`forSale` / `sold` / `comingSoon`), and set `maxResults`.

#### Step 3: Run & Export

Hit Run. Listings stream into the dataset; an HTML market report lands in the key-value store. Export as JSON, CSV, or Excel.

**That's it! In under 2 minutes you'll have:**

- Complete listings with address, specs, pricing, photos, geo, agent
- Auto-calculated price/sqft per listing
- Market-level KPIs (median price, distribution, days-on-market, city + zip + type breakdowns)
- An HTML market summary you can send on as-is

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchMode` | string | No | `autocomplete`, `byRegionId`, `byCoordinates`, or `propertyDetails` (default: `byRegionId`). |
| `listingStatus` | string | No | `forSale`, `sold`, or `comingSoon` (default: `forSale`). |
| `autocompleteQuery` | string | If `searchMode=autocomplete` | Free-text city / zip / neighborhood lookup. |
| `regionId` | string | If `searchMode=byRegionId` | Region ID in `<type>_<id>` format (e.g. `2_30818`). |
| `regionIds` | array | No | Multiple region IDs in one run (PAID only). |
| `lat`, `lng`, `radius` | number, number, integer | If `searchMode=byCoordinates` | Center lat/lng + radius in miles (1–50). PAID only. |
| `propertyUrls` | array | If `searchMode=propertyDetails` (or use `propertyAddresses`) | Redfin home URLs (`https://www.redfin.com/.../home/<id>`) — one full dossier per URL. |
| `propertyAddresses` | array | If `searchMode=propertyDetails` (or use `propertyUrls`) | Full US street addresses — one full dossier per address. |
| `maxResults` | integer | No | Listings per query, 1–350 (default: 100). Applies to `byRegionId` and `byCoordinates`. Ignored in `autocomplete` mode, which always returns the full match list as published on Redfin. FREE tier capped at 25 per run. |
| `includeEnrichment` | boolean | No | Fetch Redfin Estimate + Walk Score per listing — PAID only (default: false). |

**Example — Austin TX for-sale listings:**

```json
{
  "searchMode": "byRegionId",
  "listingStatus": "forSale",
  "regionId": "2_30818",
  "maxResults": 100
}
```

**Example — Look up a region ID:**

```json
{
  "searchMode": "autocomplete",
  "autocompleteQuery": "Park Slope"
}
```

**Example — Bulk regions, sold homes, with enrichment:**

```json
{
  "searchMode": "byRegionId",
  "listingStatus": "sold",
  "regionIds": ["2_30818", "2_29470", "2_17151"],
  "maxResults": 200,
  "includeEnrichment": true
}
```

**Example — Property dossiers by URL / address:**

```json
{
  "searchMode": "propertyDetails",
  "propertyUrls": ["https://www.redfin.com/TX/Austin/6702-Fireoak-Dr-78759/home/31327561"],
  "propertyAddresses": ["9201 La Siesta Bnd, Austin, TX 78749"]
}
```

**Example — Coordinates + radius (PAID):**

```json
{
  "searchMode": "byCoordinates",
  "listingStatus": "forSale",
  "lat": 30.27,
  "lng": -97.74,
  "radius": 5,
  "maxResults": 100
}
```

***

### 📤 Output

Results land in the Apify dataset. Common fields per listing:

| Field | Type | Description |
|-------|------|-------------|
| `propertyId` | string | Unique Redfin property ID |
| `listingId` | string | Unique Redfin MLS listing ID |
| `listingStatus` | string | `forSale`, `sold`, or `comingSoon` |
| `url` | string | Full listing URL on redfin.com |
| `listingTitle` | string | Formatted address |
| `address` | object | `street`, `unit` (condos/apartments only), `city`, `state`, `zip`, `neighborhood`, `full` |
| `pricing` | object | `price`, `pricePerSqft`, `hoaDues` |
| `specs` | object | `beds`, `baths`, `bathsFull`, `bathsTotal`, `sqft`, `lotSize`, `yearBuilt`, `propertyType`, `propertyTypeCode` (Redfin numeric code) |
| `market` | object | `daysOnMarket`, `timeOnRedfinSecs`, `listingAddedDate`, `lastSoldDate`, `mlsId` |
| `location` | object | `latitude`, `longitude`, `timezone` |
| `listingAgent` | object | `name`, `redfinAgentId` *(when available — only emitted when Redfin exposes the agent)* |
| `media` | object | `photoCount`, `hasVirtualTour`, `scanUrl`, `photos[]` |
| `redfinEstimate` | object | (Optional, PAID) AVM data |
| `walkScores` | object | (Optional, PAID) `walkScore`, `bikeScore`, `transitScore` |
| `scrapedAt` | string | ISO timestamp |

**Property dossier rows** (`searchMode: "propertyDetails"`) add another nine fields on top of the listing fields above:

| Field | What it holds |
|-------|---------------|
| `mlsStatus` | Human-readable MLS status — Active, Coming Soon, Sold |
| `remarks` | The listing agent's own marketing description |
| `keyFacts[]` | Headline label/value facts — community, county, lot size, parking |
| `listingAgent.phone` + `brokerName` | Agent contact and brokerage |
| `schools[]` | GreatSchools and parent ratings, grades, distance, enrollment |
| `priceHistory[]` | Listing and sale events with prices and dates |
| `popularity` | Views and favorites, plus the hot/popular flags |
| `floodRisk` | Flood factor, FEMA zones, insurance price range |
| `amenityDetails[]` | The full amenity breakdown, grouped by section |

`redfinEstimate` and `walkScores` come bundled with every dossier at no extra charge.

**Example listing:**

```json
{
  "propertyId": "31887455",
  "listingId": "214636605",
  "listingStatus": "forSale",
  "url": "https://www.redfin.com/TX/Austin/4159-Steck-Ave-78759/unit-267/home/31887455",
  "listingTitle": "4159 Steck Ave #267, Austin, TX 78759",
  "address": { "street": "4159 Steck Ave", "unit": "#267", "city": "Austin", "state": "TX", "zip": "78759", "neighborhood": "Mesa Village Condo Amd" },
  "pricing": { "price": 250000, "pricePerSqft": 302, "hoaDues": 271 },
  "specs": { "beds": 2, "baths": 1, "bathsFull": 1, "bathsTotal": 1, "sqft": 829, "lotSize": 2583, "yearBuilt": 1977, "propertyType": "Condo" },
  "market": { "daysOnMarket": 4, "listingAddedDate": "2026-05-01T18:51:42.660Z", "mlsId": "5826517" },
  "location": { "latitude": 30.375407, "longitude": -97.75824, "timezone": "US/Central" },
  "listingAgent": { "name": "Andrew Vallejo", "redfinAgentId": "4289" },
  "media": { "photoCount": 22, "hasVirtualTour": true, "scanUrl": "https://my.matterport.com/show/?m=eHpABi2Y4PB" },
  "imageUrls": ["https://…/photo-1.jpg", "https://…/photo-2.jpg"]
}
```

***

### 💼 Use Cases & Examples

#### 1. Investment Comps & Underwriting

**Investors comparing homes by price/sqft across markets**

- **Input**: Bulk region IDs for Austin, Nashville, Tampa
- **Output**: Listings with calculated price/sqft + median per market
- **Use**: Rank markets by entry-price-per-sqft; build comp sheets in minutes.

#### 2. Recently-Sold Comparable Sales

**Agents pulling sold comps for a CMA**

- **Input**: `listingStatus: "sold"` + neighborhood region ID
- **Output**: Sold homes with last-sale-date, beds/baths/sqft
- **Use**: Plug straight into CMAs and pricing strategy decks.

#### 3. Days-On-Market Velocity Tracking

**Brokers tracking how fast markets move**

- **Input**: Same region, weekly schedule
- **Output**: Median + p90 days-on-market per run
- **Use**: Spot when inventory starts to stale or accelerate.

#### 4. Redfin Estimate vs. List-Price Spread

**Investors hunting for under-priced inventory**

- **Input**: `includeEnrichment: true`
- **Output**: Each listing carries the Redfin Estimate (AVM)
- **Use**: Rank by AVM-vs-list-price spread to find mispriced homes.

#### 5. Walkability-Based Filtering

**Buyer-agents matching urban-buyer preferences**

- **Input**: `includeEnrichment: true`
- **Output**: Walk/Bike/Transit scores per listing
- **Use**: Surface walkable inventory in suburban markets.

#### 6. AVM / ML Training Data

**Data scientists building US-wide valuation models**

- **Input**: Bulk regions across multiple states
- **Output**: Comprehensive listings dataset with full specs + geo
- **Use**: Train and validate AVM and pricing models.

***

### 🔗 Integration Examples

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/redfin-property-scraper').call({
  searchMode: 'byRegionId',
  listingStatus: 'forSale',
  regionId: '2_30818',
  maxResults: 100,
  includeEnrichment: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/redfin-property-scraper').call(
    run_input={
        'searchMode': 'byRegionId',
        'listingStatus': 'sold',
        'regionId': '2_30818',
        'maxResults': 100
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":150}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (daily / weekly market refresh) or webhook
2. **HTTP Request**: Call Redfin scraper API with target region IDs
3. **Process**: Filter by price band, compute KPIs, dedupe against last run
4. **Action**: Push to DB, send Slack/email digest, update dashboard

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — full feature parity, same data quality
- 1 query per run (use Autocomplete + a single Region ID)
- No credit card required
- Perfect for testing and one-off analyses

#### PAID Tier (Production Ready)

- **Unlimited** listings and queries per run
- Bulk region arrays
- Coordinates + radius mode
- Redfin Estimate + Walk Score enrichment
- Pay-per-result: only charged for listings actually returned

💰 **Transparent per-result pricing** — $0.005 per listing extracted, $0.003 per listing enriched (only on success), $0.005 per actor start.

Property dossiers bill under their own event, `PropertyDossierExtracted`, at $0.008 per dossier returned (BRONZE; $0.024 FREE, down to $0.004 at DIAMOND). A dossier carries agent contact, price history, schools, flood risk and the Redfin Estimate, so it is priced as its own deliverable rather than as an enrichment.

**What you get for the price**: calculated price/sqft on every listing, plus an HTML report with the medians, the spread and the city breakdown already computed. The report also itemizes what the run cost you, event by event.

[🔗 View current pricing](https://apify.com/sian.agency/redfin-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How do I find a Redfin region ID?**
A: Run the actor with `searchMode: "autocomplete"` and the city or zip you want — the dataset returns matching IDs in `<type>_<id>` format. Plug the ID into `byRegionId` mode for the actual scrape.

**Q: Why does `pricePerSqft` come back null on some listings?**
A: Redfin records sometimes omit square footage, especially on land or new-construction listings. We only compute price/sqft when sqft is reported.

**Q: Does this cover sold homes?**
A: Yes — set `listingStatus: "sold"` to pull recently-sold comps with last-sold date.

**Q: What does the Redfin Estimate enrichment return?**
A: Redfin's AVM payload — when available. Some listings (off-market or in low-data areas) return a "not serviced" flag instead of a number; we surface that explicitly so you can filter.

**Q: Can I get full details for one specific home?**
A: Yes — use `searchMode: "propertyDetails"` with the home's Redfin URL (`propertyUrls`) or its street address (`propertyAddresses`). You get one deep dossier row per property: agent contact, remarks, amenities, price history, schools, flood risk, popularity stats, Redfin Estimate, and Walk Score.

**Q: How many listings can I extract per run?**
A: FREE tier: 25. PAID tier: unlimited. A single region search returns up to ~350 listings in one call.

**Q: What output formats are available?**
A: JSON, CSV, Excel — exported directly from the Apify dataset.

**Q: Is this legal?**
A: We only extract publicly available listings. See the legal section below.

***

### 🐛 Troubleshooting

**"Invalid regionId" error**

- The format is `<type>_<id>`, e.g. `2_30818` for a city, `6_<id>` for a neighborhood, `13_<zip>` for a zip code. Use `searchMode: "autocomplete"` to look it up.

**"Region ID not found" inside results**

- The ID format was right but Redfin doesn't have data for that exact slot. Try a parent region (city instead of neighborhood) or run autocomplete to see active alternatives.

**FREE tier hit at 25 listings**

- That's the FREE cap. Upgrade for unlimited.

**`byCoordinates` rejected on FREE**

- Coordinates mode is PAID-only. Use `byRegionId` or upgrade.

**No enrichment on a listing**

- Enrichment requires `includeEnrichment: true` on PAID. Some properties have no Redfin Estimate available; we still return the metadata so you can filter.

***

### ⚠️ Trademark Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Redfin Corporation, or any of its subsidiaries**. The name "Redfin" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `searchMode` (type: `string`):

How to find listings.

• **autocomplete** — look up a region ID from a city / ZIP / neighborhood name
• **byRegionId** — listings for one region (run Autocomplete first to get the ID)
• **byLocation** — free-text city or area name; 0 results means the name did not resolve, so use Autocomplete + By Region ID instead
• **byPolygon** — closed `lon lat` ring (PAID)
• **byCoordinates** — lat/lng + radius (PAID)
• **propertyDetails** — one deep dossier per home, by Redfin URL or street address

## `maxResults` (type: `integer`):

Hard cap on listings returned per query. Redfin returns up to ~350 per region in a single call. FREE tier is always capped at 25 listings per run.

## `listingStatus` (type: `string`):

Which listings to return.

• **forSale** — active for-sale listings
• **forRent** — rental listings
• **sold** — recently sold homes
• **comingSoon** — coming-soon listings

## `autocompleteQuery` (type: `string`):

Free-text place lookup — city, neighborhood, or 5-digit zip code. Returns a list of matching region IDs you can plug into the byRegionId mode. Example: `Austin`.

## `regionId` (type: `string`):

Redfin region identifier in '<type>\_<id>' format. Examples:
• 2\_30818 — Austin, TX (city)
• 2\_29470 — Seattle, WA (city)
• 6\_14462 — a specific neighborhood
• 13\_78641 — zip code 78641

Use Autocomplete mode first to discover region IDs.

## `regionIds` (type: `array`):

Array of region IDs (same '<type>\_<id>' format) — runs one search per ID. PAID tier only.

## `locationName` (type: `string`):

Free-text US location (e.g. "Seattle, WA", "Denver, CO"). If a location returns 0 results the name did not resolve — run Autocomplete on it, then use the region ID it returns with By Region ID mode.

## `locations` (type: `array`):

Multiple free-text locations in one run (PAID).

## `polygon` (type: `string`):

Closed polygon as `lon lat, lon lat, …` (at least 4 points, lon first). First and last point must match (auto-closed if not).

Example (central Seattle): `-122.44 47.70, -122.28 47.70, -122.28 47.58, -122.44 47.58, -122.44 47.70`

## `lat` (type: `number`):

Center latitude for a radial search. Example: `30.27`.

## `lng` (type: `number`):

Center longitude for a radial search. Example: `-97.74`.

## `radius` (type: `integer`):

Search radius in miles around the lat/lng center (1-50).

## `propertyUrls` (type: `array`):

Redfin home-detail URLs — one full dossier per URL. Format: https://www.redfin.com/TX/Austin/6702-Fireoak-Dr-78759/home/31327561

Each dossier includes: listing agent name + phone, marketing remarks, key facts, full amenity details, price history, schools with ratings, flood risk, view/favorite popularity stats, Redfin Estimate, and Walk / Bike / Transit Scores. FREE tier processes 1 property per run.

## `propertyAddresses` (type: `array`):

Full US street addresses — one full dossier per address. Example: "9201 La Siesta Bnd, Austin, TX 78749". Same dossier fields as Property URLs.

## `includeEnrichment` (type: `boolean`):

When ON, fetches the Redfin Estimate (AVM) and Walk Score / Bike Score / Transit Score for each listing (2 extra API calls per listing). Adds one ListingEnriched charge per listing where at least one enrichment fetch succeeds. Disabled on FREE tier.

## `includeMarketInfo` (type: `boolean`):

Add per-listing market context: hot-market stats (share of homes going under contract fast in the area) and mortgage cost inputs (current rate info, property tax rate, insurance rates, county). Charged as its own per-listing enrichment event (separate from the Redfin Estimate + Walk Score bundle's charge).

## Actor input object example

```json
{
  "searchMode": "byRegionId",
  "maxResults": 100,
  "listingStatus": "forSale",
  "autocompleteQuery": "Austin",
  "regionId": "2_30818",
  "lat": 30.27,
  "lng": -97.74,
  "radius": 5,
  "includeEnrichment": false,
  "includeMarketInfo": false
}
```

# Actor output Schema

## `results` (type: `string`):

Structured Redfin property listings with calculated price/sqft, days on market, and (optional) Redfin Estimate + Walk Score.

## `htmlReport` (type: `string`):

HTML summary with run stats, market KPIs (median price, price/sqft, days on market), city breakdowns, per-query totals, an itemized charges statement and a one-click retry input for any query that came back empty.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/redfin-property-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/redfin-property-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 '{}' |
apify call sian.agency/redfin-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/redfin-property-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/1eeJZgalCda3nUBkU/builds/kbOZvSGqWUq8qEt3m/openapi.json
