# US Housing Market by ZIP Code: Prices, $/Sqft & Days on Market (`precious_bathmat/redfin-housing-market`) Actor

A US housing market report for any ZIP code from Redfin listings: median price, price per square foot, days on market, new and stale listings, HOA, property mix and best-value homes, plus every listing as CSV. No login, no proxy.

- **URL**: https://apify.com/precious\_bathmat/redfin-housing-market.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 area reports

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 Housing Market by ZIP Code: Prices, $/Sqft & Days on Market

A **US housing market report for any ZIP code**, built from the homes for sale on **Redfin** right now. For each ZIP it gives the **median list price** and price range, **median price per square foot**, **days on market**, how many listings are **new this week** and how many have **sat for 90+ days**, **HOA fees**, the **property and bedroom mix**, **price bands**, and the **best-value homes**, priced well under the area's typical $/sqft. **Every listing** comes as a CSV too.

No login, no API key, no proxy.

### What does this housing market scraper do?

```
ZIP 78704 · Austin, TX · 344 homes for sale

 median list price   $749,000   (middle half $444K to $1.2M)
 median $/sqft       $489       median days on market   77
 new this week       16         on market 90+ days      148
 HOA                 52% of homes, median $375 a month
 mix                 160 condos · 146 houses · 19 multi-family · 10 townhouses · 8 lots
```

1. Enter **US ZIP codes**, or Redfin area links for cities and neighbourhoods.
2. The Actor finds each area on Redfin and reads **every home for sale there** (active and coming soon).
3. You get **one market report per ZIP code**, plus **every listing** with address, price, beds, baths, square feet, $/sqft, days on market, HOA, year built and link.
4. Optional **filters**: property type (house, condo, townhouse, multi-family, land), price range and minimum bedrooms.

### Who is it for?

- **Real estate investors**: compare ZIP codes on price, $/sqft and how fast homes sell, and find listings priced under the local norm
- **Agents and brokers**: a market snapshot for a listing presentation or a client newsletter, in seconds
- **Home buyers and relocators**: see what money buys in each neighbourhood before you tour
- **Proptech, lenders and analysts**: fresh listing-level data for dashboards and models
- **Journalists and researchers**: current asking prices across US cities

### What data do you get?

**One report per ZIP code or area** (the dataset):

| Field | What it tells you |
|---|---|
| `listings`, `activeListings`, `comingSoon` | How many homes are for sale |
| `medianPrice`, `lowerQuartilePrice`, `upperQuartilePrice` | What homes are listed for |
| `medianPricePerSqft`, `medianSqft` | Price per square foot, the fairest comparison across areas |
| `medianDaysOnMarket`, `newLast7Days`, `over90DaysOnMarket` | How fast the market moves, what is new and what is stuck |
| `daysOnMarketShownPercent` | How many listings show days on market (see below) |
| `medianHoaPerMonth`, `withHoaPercent` | HOA costs |
| `medianYearBuilt`, `newConstructionPercent`, `openHouses` | Housing stock and activity |
| `propertyTypes`, `bedrooms`, `priceBands` | The mix of homes on offer |
| `bestValue` | Homes priced at least 20% under the area's median $/sqft |
| `newestListings`, `longestOnMarket` | The five newest listings and the five that have waited longest |

**Every listing** (`LISTINGS_CSV`): address, city, ZIP, price, beds, baths, square feet, $/sqft, lot size, year built, property type, status, days on market, HOA, new construction, open house, key features, coordinates and Redfin link. Descriptions are optional.

### Example: 21 US ZIP codes, 29 September 2026

One run, 22 ZIP codes in, **21 market reports and 2,880 listings out, in 4 minutes**:

| ZIP | Area | Homes for sale | Median price | $/sqft | Days on market |
|---|---|---|---|---|---|
| 10001 | New York, NY | 92 | $2,445,000 | **$1,795** | 79 |
| 94110 | San Francisco, CA | 100 | $1,499,500 | $881 | **23** |
| 90026 | Los Angeles, CA | 132 | $1,350,000 | $697 | 47 |
| 78704 | Austin, TX | 344 | $749,000 | $489 | 77 |
| 30306 | Atlanta, GA | 121 | $649,900 | $400 | 40 |
| 19103 | Philadelphia, PA | 194 | $499,000 | $490 | 89 |
| 70116 | New Orleans, LA | 271 | $349,000 | $341 | **109** |
| 55408 | Minneapolis, MN | 112 | $343,850 | **$200** | 54 |

San Francisco's Mission District sells in about three weeks; half of New Orleans' 271 listings in 70116 have been on the market over 90 days. Manhattan's 10001 costs nine times Minneapolis per square foot, and 92% of its listings carry HOA or common charges (median $2,728 a month).

### How to use it

1. Add **ZIP codes** (or Redfin city and neighbourhood links).
2. Optionally set **filters** for property type, price and bedrooms.
3. Run it, then download the reports and listings as **JSON, CSV or Excel**.

### Pricing

**$0.02 per area report** and **$0.001 per listing** saved.

A ZIP code with 150 homes for sale costs **$0.17**. The 21-ZIP run above cost **$3.30** with all 2,880 listings, or **$0.42** for the reports alone.

### Good to know

- **Homes for sale only.** Redfin no longer returns sold homes to its search, so these are **asking prices**, not sale prices.
- **Up to 350 homes per area.** That covers almost every ZIP code completely (Austin 78704 has 344). A larger area, such as a whole city, returns its newest 350: the report flags it `listingsCapped` and leaves out the days-on-market figures, which would describe new listings rather than the market. Use ZIP codes for complete coverage.
- **Days on market is hidden in some areas.** A few MLS regions (Seattle, Nashville and parts of Chicago in our tests) show it only to signed-in Redfin users. `daysOnMarketShownPercent` tells you how many listings show it, and below 60% the time-on-market figures are left out rather than guessed.
- **ZIP codes with very few listings** can occasionally not be matched (1 of 22 in testing: Honolulu 96815, with about three homes for sale). The run summary lists any ZIP it could not read.
- **Filters are applied by the Actor**, after Redfin sends the listings, because Redfin's own search filters no longer take effect.
- **Redfin's terms of use restrict automated access.** This Actor reads only public listing data, at a gentle pace.
- **No personal data.** Listings only: no agent, seller or contact details.

### Input

| Field | Meaning |
|---|---|
| **ZIP codes** | US ZIP codes, one report each |
| **Redfin area links** | Optional city, neighbourhood or county pages |
| **Property types** | House, condo, townhouse, multi-family, land, manufactured, other |
| **Minimum / maximum price**, **minimum bedrooms** | Optional filters |
| **Also save every listing** | Adds the listings file; charged per listing |
| **Include listing descriptions** | Adds each listing's description text |

### Integrations

Export to JSON, CSV, Excel or Google Sheets, or connect through the Apify API, webhooks, Make, Zapier and n8n. **Schedule it weekly** to track asking prices, new listings and stale inventory in the ZIP codes you care about.

# Actor input Schema

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

US ZIP codes to report on, e.g. 78704, 10001, 94110. One market report per ZIP code.

## `areaUrls` (type: `array`):

Optional Redfin area pages instead of ZIP codes: city, neighborhood or county, e.g. https://www.redfin.com/city/30818/TX/Austin. Large areas return their first 350 listings.

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

Leave empty for every type.

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

Optional.

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

Optional.

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

Optional.

## `includeListings` (type: `boolean`):

Saves every listing behind the reports as CSV and JSON: address, price, beds, baths, square feet, $/sqft, days on market, HOA, year built and link. Charged per listing.

## `includeDescriptions` (type: `boolean`):

Adds each listing's description text to the listings file. Makes it much larger.

## Actor input object example

```json
{
  "zipCodes": [
    "78704",
    "94110"
  ],
  "includeListings": true,
  "includeDescriptions": false
}
```

# Actor output Schema

## `areas` (type: `string`):

One row per area: median price, $/sqft, days on market, new and stale listings, HOA, property mix and best-value homes.

## `listings` (type: `string`):

Every listing behind the reports: address, price, beds, baths, square feet, $/sqft, days on market, HOA, year built and link.

## `summary` (type: `string`):

Requests, problems and the limits of the data.

# 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 = {
    "zipCodes": [
        "78704",
        "94110"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/redfin-housing-market").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 = { "zipCodes": [
        "78704",
        "94110",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/redfin-housing-market").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 '{
  "zipCodes": [
    "78704",
    "94110"
  ]
}' |
apify call precious_bathmat/redfin-housing-market --silent --output-dataset

```

## MCP server setup

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

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/uilcPkFIB9gAID81K/builds/0vq598aM1Ep6NTOpw/openapi.json
