# Redfin Scraper - Homes for Sale, Prices, Photos $0.40/1K (`om_kh/redfin-scraper`) Actor

Scrape every Redfin home for sale in a city, county or neighborhood: price, beds, baths, sq ft, price per sq ft vs the area median, HOA, days on market, open houses, features, agent, GPS and photos. Price, size, ZIP and keyword filters. No login. $0.40 per 1,000 homes.

- **URL**: https://apify.com/om_kh/redfin-scraper.md
- **Developed by:** [Khandji Omar](https://apify.com/om_kh) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 homes

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?

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

## Redfin Scraper - Homes for Sale, Prices, Photos $0.40/1K

Get **every home for sale on Redfin** in any US city, county or neighborhood: price, beds, baths, square feet, **price per square foot compared with the area median**, HOA, days on market, open houses, badges, key facts, features, full description, broker, GPS and photos. **$0.40 per 1,000 homes**, no login.

- **Whole areas, not just the first page.** Paste a Redfin city, county or neighborhood link and get all of its homes for sale (Austin, TX: 5,796 homes in one run).
- **Deal finder built in.** Every home carries the area's median price and price per sq ft, and how far above or below that median it sits. Tick *Only homes below the area median* to get a ready list of possible deals.
- **Filters on the full list:** price, beds, baths, size, HOA, days on market, home type, ZIP codes, and keywords in the description (pool, garage, ADU...).
- **Photos ready to use:** the main photo and up to five full-size photo links per home.
- **Clean table, no code:** the Output tab shows a readable table; export it as CSV, Excel or JSON, or read it from the API.

### Free tier — 10 results free on every run

**The first 10 results of every run are free**, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

### Price

| | Price |
|---|---|
| Home | **$0.40 per 1,000** ($0.0004 each) |

Set **Max cost per run** and the run stops before it spends more. Links that fail and homes your filters drop are never charged.

### Compared with the most used Redfin scraper

Read on 2026-10-23 from tri_angle/redfin-search's own Store page; where it does better, it says so.

| | This Actor | tri_angle/redfin-search |
|---|---|---|
| Price per 1,000 homes | **$0.40**, no start fee | $0.50 + $0.0035 per run |
| Area median price and price per sq ft on every home | **Yes** | No |
| Gap to the area median (%) and a below-median flag | **Yes** | No |
| Filters in the form: price, beds, baths, size, HOA, days on market, ZIP, keywords | **Yes** | Through the Redfin link only |
| Flat columns (price, sqFt...) instead of nested objects | **Yes** | Nested |
| ZIP-code links and rentals | No | Yes |

### Input example

```json
{
  "searchUrls": ["https://www.redfin.com/city/30818/TX/Austin"],
  "maxHomesPerSearch": 500,
  "maxPrice": 450000,
  "minBeds": 3,
  "mustInclude": ["garage"],
  "belowMedianOnly": true
}
```

### Output example

One real row from a run on Apify (long texts and lists cut here). In the **Output** tab the same data shows as a table: address, price, beds, baths, sq ft, $ per sq ft and its gap to the area median, type, days on market, HOA, open house, ZIP, broker, photo and link.

A real row from this Actor's latest run on Apify (2026-10-23; long texts are cut and people's names hidden here, your dataset has them in full):

```json
{
  "status": "ok",
  "type": "home",
  "propertyId": 203587557,
  "listingId": 223427520,
  "mlsNumber": "4685752",
  "address": "802 Alexia Ln",
  "city": "Austin",
  "state": "TX",
  "zip": "78746",
  "neighborhood": "Addie Condos Ph 5",
  "price": 1699900,
  "beds": 4,
  "baths": 4.5,
  "sqFt": 3740,
  "pricePerSqFt": 455,
  "lotSizeSqFt": 15803,
  "yearBuilt": 2024,
  "hoaPerMonth": 805,
  "homeType": "house",
  "listingStatus": "Active",
  "daysOnMarket": 1,
  "daysOnRedfin": 0,
  "isNewConstruction": false,
  "isHotHome": false,
  "openHouse": "OPEN SUN, 12:30PM TO 3PM",
  "badges": [
    "Open House"
  ],
  "keyFacts": [
    "Designer upgrades",
    "Lock-and-leave home"
  ],
  "features": [
    "PRIVATE COURTYARD",
    "DESIGNER UPGRADES"
  ],
  "description": "Experience sophisticated luxury living near the heart of Westlake. Rare, swimming pool in your own private courtyard. $200k+ in designer...",
  "has3DTour": false,
  "hasVideoTour": false,
  "photoCount": 39,
  "latitude": 30.3120693,
  "longitude": -97.8284701,
  "areaMedianPrice": 537000,
  "areaMedianPricePerSqFt": 310,
  "pricePerSqFtVsAreaMedianPct": 46.8,
  "belowAreaMedianPricePerSqFt": false,
  "searchArea": "Austin, TX",
  "url": "https://www.redfin.com/TX/Austin/802-Alexia-Ln-78746/home/203587557"
}
```

#### Every field

| Field | What it holds |
|---|---|
| `propertyId` | Redfin property ID |
| `listingId` | Redfin listing ID |
| `mlsNumber` | MLS number |
| `address` | street address |
| `city` | city |
| `state` | state |
| `zip` | ZIP code |
| `neighborhood` | neighborhood or building |
| `price` | list price ($) |
| `beds` | bedrooms |
| `baths` | bathrooms |
| `sqFt` | living area (sq ft) |
| `pricePerSqFt` | price per sq ft ($) |
| `lotSizeSqFt` | lot size (sq ft) |
| `yearBuilt` | year built |
| `hoaPerMonth` | HOA fee per month ($) |
| `homeType` | house, condo, townhouse, multi-family, land... |
| `listingStatus` | Active, Coming Soon... |
| `daysOnMarket` | days on the market |
| `daysOnRedfin` | days listed on Redfin |
| `isNewConstruction` | new construction |
| `isHotHome` | Redfin Hot Home badge |
| `openHouse` | next open house, as Redfin shows it |
| `badges` | badges on the listing (New, 3D Walkthrough...) |
| `keyFacts` | key facts Redfin highlights |
| `features` | features from the listing |
| `description` | full listing description |
| `lastSoldDate` | date the home last sold |
| `has3DTour` | has a 3D tour |
| `hasVideoTour` | has a video tour |
| `photoCount` | number of photos |
| `mainPhoto` | main photo, full size |
| `photos` | up to 5 full-size photo links |
| `latitude` | latitude |
| `longitude` | longitude |
| `areaMedianPrice` | median list price of the area you searched |
| `areaMedianPricePerSqFt` | median price per sq ft of the area |
| `pricePerSqFtVsAreaMedianPct` | how far this home's price per sq ft is above (+) or below (-) the area median, in % |
| `belowAreaMedianPricePerSqFt` | true when cheaper per sq ft than the area median |
| `searchArea` | the area of your link |
| `url` | home page on Redfin |

### Use cases

- **Investors:** homes priced below the area's median per square foot, refreshed every morning on a schedule.
- **Agents and brokers:** fresh listings (days on market under 7), open houses of the weekend, competitor brokers per ZIP.
- **Market research:** price, size and price per sq ft across a whole city, ready for a spreadsheet or BI tool.
- **Proptech and AI apps:** clean, structured listings with GPS and photos for maps, valuation models and alerts.

### Why use it

1. **Try before you pay.** The first 10 results of every run are free.
2. **Pay only for data delivered.** Failed links and filtered-out homes are never billed.
3. **Hard cost cap.** Set `maxTotalChargeUsd` and a run never costs more than you allow.
4. **Ready to use.** JSON, CSV or Excel, the Apify API, n8n, Make, Zapier, or as an MCP tool for AI agents.

### How to use it in 3 steps

1. Click **Try for free**; the form opens with Austin, TX ready.
2. On redfin.com, search your city, county or neighborhood, copy the link from the address bar and paste it. Add filters if you want.
3. Click **Start** and download the results as JSON, CSV or Excel, or read them from the API.

### FAQ

**Which links work?** Redfin city (`/city/...`), county (`/county/...`) and neighborhood (`/neighborhood/...`) links. ZIP-code links are not supported yet: search the city and use the **Only these ZIP codes** filter.

**Does it include sold homes or rentals?** No. It returns homes currently for sale (active and coming soon). `lastSoldDate` gives the date a home last sold.

**Does it include the Redfin Estimate or price history?** No. Those sit on each home's page, which Redfin protects; this Actor does not try to get around that protection.

**Do I need a Redfin account?** No.

**Can I call it from code?** Yes: Apify API, Python and JavaScript clients, Make, Zapier, n8n, or as an MCP tool.

# Actor input Schema

## `searchUrls` (type: `array`):

Open Redfin, search a city, county or neighborhood and paste the link, for example https://www.redfin.com/city/30818/TX/Austin. Up to 50 links per run.

## `maxHomesPerSearch` (type: `integer`):

Stops after this many homes per link (after your filters). A whole city can hold several thousand homes.

## `sort` (type: `string`):

Order Redfin returns the homes in. With a max per link, it decides which homes you get.

## `minPrice` (type: `integer`):

Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Leave empty for no maximum.

## `minBeds` (type: `integer`):

Leave empty for any number of bedrooms.

## `minBaths` (type: `integer`):

Leave empty for any number of bathrooms.

## `minSqFt` (type: `integer`):

Leave empty for any size.

## `maxHoaPerMonth` (type: `integer`):

Homes without HOA always pass.

## `maxDaysOnMarket` (type: `integer`):

For example 7 to keep only fresh listings.

## `homeTypes` (type: `array`):

Leave empty for every type.

## `zipCodes` (type: `array`):

Keep only homes in these ZIP codes (inside the areas of your links).

## `mustInclude` (type: `array`):

Keep only homes whose description, features or key facts mention every word, for example pool or garage.

## `belowMedianOnly` (type: `boolean`):

Keep only homes cheaper per sq ft than the median of the area you searched: a quick list of possible deals.

## `maxTotalChargeUsd` (type: `number`):

The run stops before it spends more than this.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.redfin.com/city/30818/TX/Austin"
  ],
  "maxHomesPerSearch": 200,
  "sort": "recommended",
  "belowMedianOnly": false
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, changes, and source issues.

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

Business-ready results in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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 = {
    "searchUrls": [
        "https://www.redfin.com/city/30818/TX/Austin"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/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 = { "searchUrls": ["https://www.redfin.com/city/30818/TX/Austin"] }

# Run the Actor and wait for it to finish
run = client.actor("om_kh/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 '{
  "searchUrls": [
    "https://www.redfin.com/city/30818/TX/Austin"
  ]
}' |
apify call om_kh/redfin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,om_kh/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/ffiaU6bdNhIhP0Iad/builds/fwx4GfpMMZijqvUhe/openapi.json
