# Redfin Scraper — US Homes for Sale, Sold & Rentals, No Phones (`highbrow_fame/redfin-properties`) Actor

US homes from Redfin: for sale, sold or for rent — price, beds, baths, sq ft, lot, year built, HOA, days on market, address, map point, MLS id, broker. No agent names or phones.

- **URL**: https://apify.com/highbrow\_fame/redfin-properties.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.50 / 1,000 property delivereds

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

## Redfin Scraper — US Homes for Sale, Sold & Rentals, No Phones

Get US property listings from Redfin: homes for sale, sold homes and rentals. Price (or rent), beds, baths, square feet, lot size, year built, property type, HOA fee, price per square foot, days on market, full address with ZIP code and map point, MLS number, sold date, and the listing brokerage. Paste your Redfin search links — or just type a city, a ZIP code, a county or a neighborhood.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on redfin.com — price, beds, home type, sold within 3 months, rentals — and paste the link. Or type a place here (Austin, TX · 98101 · King County, WA) and set the filters below.
- ⚡ **Fast, and no start fee.** A live test run read four searches — Los Angeles for sale, Seattle sold, Chicago rentals and Austin houses — 7,998 homes in 153 seconds. You pay per home delivered, nothing per run.
- 🏷️ **For sale, sold and for rent in one tool.** Sold homes come with the sale date and, where the MLS shares them, the listing and the buyer's brokerage. Rentals come with the rent range, the building name, available units and move-in specials.
- 🔒 **No agent names, no phone numbers.** Brokerages and builders are named by their company only. Phone numbers and e-mail addresses written into a description are replaced with `[phone removed]` / `[e-mail removed]`. Homes for sale by owner and rentals from private landlords keep their town and ZIP code, not their street or map point.
- 💸 **You pay only for homes delivered.** A link that is not a Redfin search, or a place Redfin does not know, comes back as a free record with the reason.

### What you get

For every home:

| Field | What it is |
|---|---|
| `searchType`, `listingStatus` | `for-sale`, `sold` or `for-rent`, and Redfin's status (Active, Coming Soon, Pending, Closed…) |
| `price`, `pricePerSqft`, `hoaPerMonth` | the asking price, the sale price for sold homes, or the rent per month |
| `soldDate`, `lastListPrice` | for sold homes; `lastListPrice` where the sale price is not public (Texas and other non-disclosure states) |
| `beds`, `baths`, `fullBaths`, `partialBaths`, `sqft`, `lotSizeSqft`, `yearBuilt`, `stories` | the home |
| `propertyType`, `homeType` | Single Family Residential, Condo/Co-op, Townhouse, Multi-Family, Vacant Land… |
| `address`, `unit`, `city`, `state`, `zip`, `neighborhood`, `fullAddress`, `latitude`, `longitude` | where it is |
| `daysOnMarket`, `daysOnRedfin`, `openHouseStart`, `openHouseEnd` | timing, where Redfin shows it |
| `mlsId`, `listingType`, `sellerType`, `listingBroker`, `buyersBroker`, `builder`, `community` | who sells it — companies only |
| `remarks`, `tags`, `keyFacts`, `badges` | the listing's text, its highlights and Redfin's labels (Open House, Short Sale, 1 MONTH FREE…) |
| `image`, `photoCount`, `has3DTour`, `hasVideoTour`, `url`, `propertyId`, `listingId` | the listing |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

Rentals also: `priceMax`, `bedsMax`, `bathsMax`, `sqftMax` (a building's range), `buildingName`, `availableUnits`, `availableFrom`, `updatedAt`, `landlordType` (property manager, agent (MLS) or private landlord), `listingSource`, `isIncomeRestricted`, `isSeniorLiving`, `isStudent`.

#### Examples

Real records from a live run, 25 September 2026 (shortened) — a sold condo in Seattle:

```json
{
  "propertyId": 15748,
  "listingId": 216820014,
  "mlsId": "2537345",
  "url": "https://www.redfin.com/WA/Seattle/2419-E-Madison-St-98112/unit-2467/home/15748",
  "searchType": "sold",
  "listingStatus": "Closed",
  "price": 460000,
  "soldDate": "2026-07-09",
  "pricePerSqft": 476,
  "beds": 2,
  "baths": 1,
  "sqft": 967,
  "yearBuilt": 1980,
  "propertyType": "Condo/Co-op",
  "homeType": "condo",
  "hoaPerMonth": 1003,
  "address": "2419 E Madison St #2467",
  "unit": "#2467",
  "city": "Seattle",
  "state": "WA",
  "zip": "98112",
  "latitude": 47.6204917,
  "longitude": -122.3002576,
  "listingType": "MLS listing",
  "sellerType": "broker",
  "listingBroker": "Redfin",
  "buyersBroker": "RE/MAX Metro Realty, Inc.",
  "tags": ["FULLY RENOVATED", "NATURAL LIGHT", "REMODELED KITCHEN", "REFRESHED BATHROOM", "WOOD-BURNING FIREPLACE", "CASCADE MOUNTAIN VIEWS"],
  "remarks": "Fully renovated 2-bedroom top floor SE corner condo situated on the quiet side of the building. Flooded with natural light through large windows…",
  "photoCount": 20,
  "image": "https://ssl.cdn-redfin.com/photo/1/bigphoto/345/2537345_0.jpg",
  "status": "OK"
}
```

An apartment building for rent in Chicago:

```json
{
  "propertyId": 52593194,
  "url": "https://www.redfin.com/IL/Chicago/3423-S-Cottage-Grove-Ave-60616/home/52593194",
  "searchType": "for-rent",
  "price": 2335,
  "priceMax": 2395,
  "beds": 2,
  "baths": 2,
  "sqft": 1039,
  "propertyType": "Multi-Family (5+ Unit)",
  "buildingName": "Woodland Park by the Lake",
  "address": "3423 S Cottage Grove Ave",
  "city": "Chicago",
  "state": "IL",
  "zip": "60616",
  "latitude": 41.8322665,
  "longitude": -87.6108413,
  "availableUnits": 4,
  "availableFrom": "2026-09-25",
  "landlordType": "property manager",
  "remarks": "Welcome to the Estate Homes of Woodland Park by the Lake, a truly unique luxury rental community in the heart of Chicago.  We invite you to …",
  "status": "OK"
}
```

### How to use it

1. Paste **Search links** from redfin.com — a city, ZIP code, county or neighborhood page, for sale, sold (`include=sold-3mo` in the link) or for rent (`…/apartments-for-rent`) — one per line. Or type **Places** and choose **For sale, sold or for rent** and the optional filters.
2. Set **Max results per search**.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new listings in an area, type the place, set **On the market up to (days)** to 1, save the input as a task and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per home delivered** — see the price on this page. There is no start fee. Links that are not Redfin searches and places Redfin does not know are free.

### FAQ

**How many homes per search?** All that Redfin finds — a live run read every one of the 1,998 Los Angeles homes that matched its filters, and 2,000 of 2,228 Seattle homes sold in 3 months (stopped by the limit). Set **Max results per search** as high as you need.

**Which filters of my link are used?** Price, beds, baths, square feet, lot size, year built, HOA, price per square foot, days on market, home type, status (active, coming soon, pending), sold within, stories, garage, view, waterfront, fixer-upper, keyword, sort, and several regions at once. A live run checked them: Seattle and Bellevue, 1,500–3,000 sq ft, lot up to ¼ acre, built 1990 or later, HOA up to $300, cheapest first — 241 homes, every one inside the filters and in price order. For rentals: rent, beds, baths, home type and square feet. Other filters (such as pets allowed, or an area drawn on the map) are left out and named in the run log.

**A whole state?** Redfin cannot list a whole state in one search; such a link or place comes back as a free record with the reason. Use its counties or cities.

**Why is the listing broker empty for some cities?** Redfin shows the brokerage in search results only where the local MLS allows it: in the live runs Seattle had it for 1,873 of 2,000 sold homes, Los Angeles, Houston and Austin for none. Days on market work the other way round: shown in Los Angeles and Austin, hidden in Seattle.

**Why no sale price for sold homes in Texas?** Texas does not make sale prices public; Redfin shows the last list price instead, which comes as `lastListPrice` (298 of 300 Houston sales in a live run).

**Why no street for some rentals?** They are offered by private landlords (no building name, not an agent's MLS listing): their town and ZIP code are included, the street and map point are not, and `url` is a link Redfin forwards to the listing. In a live run this was 1,222 of 2,000 Chicago rentals.

**Why no agent names or phone numbers?** Every home has its `url`; buyers and renters contact the agent on Redfin.

**Is this affiliated with Redfin?** No. This is an independent tool that reads public Redfin listings.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

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

Set up a search on redfin.com — a city, ZIP code, county or neighborhood, for sale, sold or for rent, with the filters you want — and paste the address of the results page. One per line.

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

Or search here without a link: a city with its state (Austin, TX), a ZIP code (98101), a county (King County, WA) or a neighborhood (Capitol Hill, Seattle). The filters below apply.

## `searchType` (type: `string`):

For the places above.

## `soldWithinDays` (type: `string`):

For sold homes.

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

Optional: any of these. Empty means all.

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

Optional. For rentals: per month.

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

Optional. For rentals: per month.

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

Optional.

## `maxBeds` (type: `integer`):

Optional. 0 means studios.

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

Optional.

## `minSqft` (type: `integer`):

Optional.

## `maxSqft` (type: `integer`):

Optional.

## `minYearBuilt` (type: `integer`):

Optional. For sale and sold.

## `maxYearBuilt` (type: `integer`):

Optional. For sale and sold.

## `maxHoa` (type: `integer`):

Optional. For sale and sold. 0 means no HOA.

## `listedWithinDays` (type: `integer`):

Optional, for sale: only homes listed in the last N days — 1 to follow new listings daily.

## `includePending` (type: `boolean`):

For sale: Redfin shows active and coming-soon homes by default; tick to add contingent and pending ones.

## `keyword` (type: `string`):

Optional, for sale and sold: a word the listing must mention, such as pool, waterfront or ADU.

## `sortBy` (type: `string`):

For the places above.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many homes.

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

How many searches to work on at the same time.

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

Used only when Redfin turns a request down: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.redfin.com/city/16163/WA/Seattle/filter/property-type=house,min-price=500k,max-price=1.2M,min-beds=3"
  ],
  "searchType": "forSale",
  "soldWithinDays": "90",
  "includePending": false,
  "sortBy": "recommended",
  "maxListingsPerSearch": 30,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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/16163/WA/Seattle/filter/property-type=house,min-price=500k,max-price=1.2M,min-beds=3"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/redfin-properties").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/16163/WA/Seattle/filter/property-type=house,min-price=500k,max-price=1.2M,min-beds=3"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/redfin-properties").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/16163/WA/Seattle/filter/property-type=house,min-price=500k,max-price=1.2M,min-beds=3"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/redfin-properties --silent --output-dataset

```

## MCP server setup

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

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/HbXT7VzAwCLeoJajr/builds/6R6aajvHHtu3f0egz/openapi.json
