# Redfin Scraper with Contacts | Enterprise Grade (`fatihtahta/redfin-scraper`) Actor

Extract Redfin listings at scale with deep property detail, sold comps, rental data, agents, valuation signals, parcel history, schools, climate risks, and rich media. Built for enterprise-grade real estate intelligence, market monitoring, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/redfin-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Lead generation, Agents
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.70 / 1,000 property 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper | All-In-One

**Slug:** `fatihtahta/redfin-scraper`

### Overview

Redfin Scraper | All-In-One collects structured Redfin listing intelligence, including for-sale homes, rental listings, sold comparables, prices, property facts, listing status, location details, media metadata, agents, amenities, history, valuation signals, parcel context, schools, and climate-related attributes when available. [Redfin](https://www.redfin.com) is a major residential real estate marketplace, and its public listing data is useful for market analysis, inventory monitoring, acquisition research, rental screening, and comparable-sales workflows. The actor converts public listing pages and market searches into repeatable JSON records that can be used in analytics tools, data warehouses, CRMs, and operational reporting systems. It is designed for consistent recurring data acquisition, with configurable geography, transaction type, filters, output volume, and optional detail enrichment. Use it when you need structured, automation-ready Redfin data without manually copying listing information into spreadsheets or internal systems.

### Why Use This Actor

- **Market research and analytics teams:** collect normalized listing, pricing, location, amenity, and comparable-sale data for market intelligence, underwriting, and trend analysis.
- **Product and content teams:** populate internal tools, maps, directories, market pages, and editorial datasets with structured public real estate attributes.
- **Developers and data engineering teams:** feed repeatable collection jobs into downstream systems, ETL pipelines, warehouses, search indexes, and monitoring workflows.
- **Lead generation and enrichment teams:** build targeted property, owner-adjacent, broker, listing, and agent-context datasets for qualification and enrichment pipelines.
- **Monitoring and competitive tracking teams:** schedule recurring runs to watch inventory movement, price changes, listing freshness, sale status, and geographic coverage.

### Common Use Cases

- **Market intelligence:** monitor active supply, sold comparables, rental availability, pricing bands, lot sizes, property types, and neighborhood signals.
- **Lead generation:** build targeted prospect lists from public listings using location, price, asset profile, listing status, keyword, and amenity filters.
- **Competitive monitoring:** track changes across markets, listing categories, price segments, new construction, foreclosure inventory, or Redfin-only listings.
- **Catalog and directory building:** populate internal property databases with structured public listing records and consistent identifiers.
- **Data enrichment:** add current public listing, valuation, school, climate, parcel, media, and agent attributes to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, underwriting queues, market briefs, and trend analysis.

### Quick Start

1. Choose the listing mode with `deal_type`: `buy`, `rent`, or `sold`.
2. Enter one or more supported Redfin `location` values, such as city plus state, ZIP code, neighborhood, county, or market name. State-wide searches are not supported.
3. Add only the filters needed for the first validation run, such as price range, bedrooms, property type, listing freshness, or sale status.
4. Set a small `limit` to confirm that the dataset shape matches your use case.
5. Run the actor in Apify Console and inspect the first dataset records.
6. Increase coverage, enable `enrich_data`, add filters, or schedule recurring runs after the output is validated.

### Input Parameters

The actor accepts one required geography list and optional controls for listing mode, price, size, property type, amenities, freshness, ownership costs, output volume, and enrichment.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `location` | array of strings | Required. One or more city plus state, ZIP code, neighborhood, county, or market name values, for example `Austin, TX`, `90210`, `Brooklyn Heights, NY`, or `Orange County, CA`. State-wide searches such as `California` are not supported. | – |
| `deal_type` | string | Listing mode. Allowed values: `buy`, `rent`, `sold`. | `buy` |
| `sale_status` | array of strings | For-sale listing statuses to include. Allowed values: `coming_soon`, `active`, `under_contract`. | `["coming_soon", "active"]` |
| `sold_date_range` | string | Sold-comparable lookback window. Used only when `deal_type` is `sold`; ignored for `buy` and `rent`. Allowed values: `last_1_week`, `last_1_month`, `last_3_months`, `last_6_months`, `last_1_year`, `last_2_years`, `last_3_years`, `last_5_years`. | `last_3_months` |
| `min_price` | integer | Minimum listing price in USD. | – |
| `max_price` | integer | Maximum listing price in USD. | – |
| `min_bedroom` | string | Minimum bedroom count. Allowed values: `Studio`, `1`, `2`, `3`, `4`, `5+`. | – |
| `max_bedroom` | string | Maximum bedroom count. Allowed values: `Studio`, `1`, `2`, `3`, `4`, `5+`. | – |
| `min_bathroom` | string | Minimum bathroom count. Allowed values: `1+`, `1.5+`, `2+`, `2.5+`, `3+`, `4+`. | – |
| `min_parking` | string | Minimum parking spaces. Allowed values: `1+`, `2+`, `3+`, `4+`, `5+`. | – |
| `include_outdoor_parking` | boolean | Whether outdoor parking should count toward the parking requirement. | `false` |
| `min_building_area` | integer | Minimum interior area in square feet. | – |
| `max_building_area` | integer | Maximum interior area in square feet. | – |
| `min_land_area` | string | Minimum lot size. Allowed values: `no_min`, `2000_sqft`, `4500_sqft`, `6500_sqft`, `8000_sqft`, `9500_sqft`, `0.25_acres`, `0.5_acres`, `1_acres`, `2_acres`, `3_acres`, `4_acres`, `5_acres`, `10_acres`, `20_acres`, `40_acres`, `100_acres`. | `no_min` |
| `max_land_area` | string | Maximum lot size. Allowed values: `no_min`, `2000_sqft`, `4500_sqft`, `6500_sqft`, `8000_sqft`, `9500_sqft`, `0.25_acres`, `0.5_acres`, `1_acres`, `2_acres`, `3_acres`, `4_acres`, `5_acres`, `10_acres`, `20_acres`, `40_acres`, `100_acres`. | `no_min` |
| `min_building_year` | string | Earliest acceptable year built. Allowed values: `2026`, `2025`, `2024`, `2023`, `2022`, `2021`, `2020`, `2019`, `2018`, `2017`, `2016`, `2015`, `2010`, `2005`, `2000`, `1990`, `1980`, `1970`, `1960`, `1950`, `1940`, `1920`, `1900`. | – |
| `max_building_year` | string | Latest acceptable year built. Allowed values: `2026`, `2025`, `2024`, `2023`, `2022`, `2021`, `2020`, `2019`, `2018`, `2017`, `2016`, `2015`, `2010`, `2005`, `2000`, `1990`, `1980`, `1970`, `1960`, `1950`, `1940`, `1920`, `1900`. | – |
| `min_stories` | string | Minimum story count. Allowed values: `1`, `2`, `3`, `4`, `5`, `10`, `15`, `20`. | – |
| `max_stories` | string | Maximum story count. Allowed values: `1`, `2`, `3`, `4`, `5`, `10`, `15`, `20`. | – |
| `property_type` | array of strings | Property classes to include. Allowed values: `house`, `townhouse`, `condo`, `land`, `multi_family`, `mobile`, `co_op`, `other`. | – |
| `pool` | string | Pool preference. Allowed values: `private_pool`, `community_pool`, `private_or_community_pool`, `no_private_pool`. | – |
| `tour_options` | array of strings | Tour and open-house requirements. Allowed values: `open_house_this_weekend`, `open_house_anytime`, `3d_tour`. | – |
| `publication_date` | string | Time-on-market window. Allowed values: `last_24_hours`, `last_3_days`, `last_7_days`, `last_14_days`, `last_30_days`, `over_7_days`, `over_14_days`, `over_30_days`, `over_45_days`, `over_60_days`, `over_90_days`, `over_180_days`. | – |
| `keyword` | string | Text to search for in listing remarks, such as `ADU`, `waterfront`, `fixer`, or `seller credit`. | – |
| `listing_type` | array of strings | For-sale listing categories. Allowed values: `by_agent`, `foreclosures`, `by_owner`, `exclude_short_sales`, `new_construction`, `redfin_listings_only`. | `["by_agent", "foreclosures", "by_owner", "new_construction"]` |
| `amenities` | array of strings | Home-feature requirements. Allowed values: `air_conditioning`, `basement_finished`, `basement_unfinished`, `waterfront`, `washer_dryer_hookup`, `has_view`, `pets_allowed`, `fireplace`, `primary_bedroom_on_main_floor`, `fixer_upper`, `rv_parking`, `guest_house`, `green_home`, `elevator`, `accessible_home`. | – |
| `min_walk_score` | integer | Minimum Walk Score from 1 to 100. | – |
| `min_transit_score` | integer | Minimum Transit Score from 1 to 100. | – |
| `min_bike_score` | integer | Minimum Bike Score from 1 to 100. | – |
| `min_greatschools_score` | integer | Minimum GreatSchools rating from 1 to 10. | – |
| `max_hoa_fee` | string | Maximum monthly HOA fee in USD. Allowed values: `no_fee`, `25`, `50`, `75`, `100`, `150`, `200`, `250`, `300`, `400`, `500`, `600`, `700`, `800`, `900`, `1000`, `1250`, `1500`, `1750`, `2000`, `2500`, `3000`, `3500`, `4000`, `4500`, `5000`. | – |
| `max_property_tax` | string | Maximum annual property tax in USD. Allowed values: `no_tax`, `250`, `500`, `750`, `1000`, `1250`, `1500`, `1750`, `2000`, `2500`, `3000`, `3500`, `4000`, `4500`, `5000`, `5500`, `6000`, `6500`, `7000`, `8000`, `10000`, `12000`, `14000`, `16000`, `20000`, `24000`. | – |
| `enrich_data` | boolean | Collect richer listing details when available, including remarks, amenities, schools, neighborhood scores, climate context, parcel metadata, valuation signals, and summaries. | `true` |
| `limit` | integer | Maximum number of listings to save. Minimum: `1`. Leave empty when completeness is more important than a predictable output size. | – |

### Choosing Inputs

Start with `deal_type` and `location`; together they define the baseline listing universe. Add multiple locations when you want the same mode and filters applied across several markets in one run. Use narrower filters such as `property_type`, price range, bedroom count, lot size, listing freshness, sale status, amenities, and score thresholds when you need a targeted dataset. Leave optional filters empty when the goal is discovery or market coverage. Use `limit` for validation and sampling first, then increase it after confirming that the output quality and field coverage match your workflow. Enable `enrich_data` when downstream systems need a fuller diligence record rather than a lightweight search-result export.

### Example Inputs

#### Active for-sale inventory sample

```json
{
  "deal_type": "buy",
  "location": ["Chicago, IL"],
  "sale_status": ["active"],
  "property_type": ["house", "townhouse"],
  "min_price": 250000,
  "max_price": 750000,
  "limit": 25
}
````

#### Rental supply monitor

```json
{
  "deal_type": "rent",
  "location": ["Austin, TX", "Dallas, TX"],
  "min_bedroom": "2",
  "max_price": 3500,
  "tour_options": ["3d_tour"],
  "limit": 30
}
```

#### Recently listed comp-focused run

```json
{
  "deal_type": "buy",
  "location": ["90210"],
  "publication_date": "last_7_days",
  "property_type": ["condo"],
  "min_bathroom": "2+",
  "enrich_data": true,
  "limit": 15
}
```

### Output

#### Output destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, the README documents each shape separately based on the provided Example Output. The provided output contains a single Redfin listing record shape.

#### Record envelope and stable identifiers

Each record represents one public Redfin listing or property result. The strongest recommended idempotency key is `id`; use `url` or the composite `identifiers.property_id + identifiers.listing_id` as a fallback when needed. For repeated runs, deduplicate and upsert records using the idempotency key before syncing data into a warehouse, CRM, search index, or reporting table. Stable identifiers make records easier to merge, deduplicate, and sync across recurring runs.

The `source_context.fingerprint` field is useful as a run-context fingerprint for tracing where a record came from. The `source_context.source_url` and `source_context.detail_url` fields document the source context and public listing destination associated with the record when available.

#### Examples

##### Example: Redfin listing record

```json
{
  "id": "215957479",
  "url": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
  "title": "6602 W Montrose Ave Harwood Heights IL 60706",
  "status": "Active",
  "source_context": {
    "fingerprint": "f3c6c5e5f80f60b3708c",
    "source_url": "https://www.redfin.com/stingray/api/gis?al=1&include_nearby_homes=true&mpt=99&num_homes=350&ord=redfin-recommended-asc&page_number=1&region_id=29470&region_type=6&sf=1%2C2%2C3%2C5%2C6%2C7&start=0&status=1&uipt=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8&v=8",
    "detail_url": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
    "domain": "www.redfin.com",
    "seed_id": "37324f8303afa29e0bc0",
    "seed_type": "search",
    "seed_value": "Chicago, IL",
    "resolved_location": "Chicago",
    "resolved_location_url": "https://www.redfin.com/city/29470/IL/Chicago",
    "page_index": 1,
    "search": {
      "sale_status": ["active"],
      "sort_by": "recommended",
      "listing_type": ["by_agent", "foreclosures", "by_owner", "new_construction"],
      "deal_type": "buy"
    }
  },
  "identifiers": {
    "property_id": "13471557",
    "listing_id": "215957479",
    "mls_id": "12656480",
    "data_source_id": "68",
    "market_id": "6",
    "business_market_id": "12",
    "fips": "17031",
    "apn": "13184040130000"
  },
  "location": {
    "address": "6602 W Montrose Ave, Harwood Heights, IL 60706",
    "street": "6602 W Montrose Ave",
    "city": "Harwood Heights",
    "state": "IL",
    "postal_code": "60706",
    "country_code": "US",
    "area": "Harwood Heights",
    "coordinates": {
      "latitude": 41.960325,
      "longitude": -87.7919485
    },
    "show_address_on_map": true,
    "timezone": "US/Central"
  },
  "pricing": {
    "price": 395000,
    "sold_price": 77500,
    "price_per_sqft": 294,
    "hide_sale_price": false,
    "is_hoa_frequency_known": true,
    "price_info": {
      "amount": 395000,
      "label": "Price",
      "display_level": 1,
      "data_source_id": 68
    },
    "latest_price_info": {
      "amount": 395000,
      "label": "Price",
      "display_level": 1,
      "data_source_id": 68
    }
  },
  "property": {
    "beds": 3,
    "baths": 2.0,
    "full_baths": 2,
    "raw_full_baths": 2,
    "raw_half_baths": 0,
    "stories": 1.0,
    "sqft": 1343,
    "property_type_id": 6,
    "ui_property_type_id": 1,
    "listing_type_id": 1,
    "garage_spaces": 2,
    "parking_spaces": 2,
    "pool_type_id": 5,
    "public_facts": {
      "beds": 3,
      "baths": 1.0,
      "property_type_name": "Single Family Residential",
      "num_stories": 1.5,
      "year_built": 1939,
      "sq_ft_finished": 1207,
      "total_sq_ft": 1207,
      "lot_sq_ft": 2500,
      "apn": "13184040130000",
      "property_last_updated_date": 1776979072250,
      "display_time_zone": "US/Central"
    },
    "key_facts": ["Newer kitchen", "Recessed lighting", "Hardwood floors"],
    "key_facts_detailed": [
      {
        "description": "Newer kitchen",
        "rank": 0
      },
      {
        "description": "Recessed lighting",
        "rank": 1
      },
      {
        "description": "Hardwood floors",
        "rank": 2
      }
    ]
  },
  "transaction": {
    "deal_type": "buy",
    "mls_status": "Active",
    "search_status_id": 1,
    "property_status": {
      "display_value": "Active",
      "definition": "This listing is for sale and the sellers are accepting offers.",
      "longer_definition_token": "active"
    },
    "mls_status_display": {
      "display_value": "Active",
      "definition": "This listing is for sale and the sellers are accepting offers.",
      "longer_definition_token": "active"
    },
    "sold_at": "1992-07-10T07:00:00+00:00",
    "sold_date": "Jul 10, 1992",
    "sold_date_timezone": "US/Central",
    "days_on_market": 1,
    "time_on_redfin": 21919287,
    "original_time_on_redfin": 21919299
  },
  "media": {
    "photos": "0-37:0",
    "photo_count": 38,
    "photo_format": "webp",
    "primary_photo_url": "https://ssl.cdn-redfin.com/photo/68/bigphoto/480/12656480_0.jpg",
    "static_map_url": "https://maps.google.com/maps/api/staticmap?center=41.960325%2C-87.7919485&channel=desktop_xdp_above_fold_static_preview&client=gme-redfin&format=jpg&scale=1&sensor=false&signature=OGfS_twObntwXQ3cFn17EknRGDY%3D&size=200x200&style=feature%3Aadministrative.land_parcel%7Cvisibility%3Aoff&style=feature%3Alandscape.man_made%7Cvisibility%3Aoff&style=feature%3Atransit.station%7Chue%3A0xffa200&zoom=11",
    "photo_captions": [
      {
        "photo_id": 3218173074,
        "photo_url": "https://ssl.cdn-redfin.com/photo/68/bigphoto/480/12656480_29_0.jpg",
        "thumbnail_url": "https://ssl.cdn-redfin.com/photo/68/midphoto/480/genMid.12656480_29_0.jpg",
        "tags": ["All"],
        "short_caption": "Covered patio with furniture",
        "long_caption": "A covered patio with a table, chairs, and a grill."
      },
      {
        "photo_id": 3218173013,
        "photo_url": "https://ssl.cdn-redfin.com/photo/68/bigphoto/480/12656480_0.jpg",
        "thumbnail_url": "https://ssl.cdn-redfin.com/photo/68/midphoto/480/genMid.12656480_0.jpg",
        "tags": ["All", "Exterior"],
        "short_caption": "Charming Cape Cod home",
        "long_caption": "A Cape Cod-style home with a brown roof and white siding, featuring a front porch with a black railing and potted plants."
      },
      {
        "photo_id": 3218173077,
        "photo_url": "https://ssl.cdn-redfin.com/photo/68/bigphoto/480/12656480_30_0.jpg",
        "thumbnail_url": "https://ssl.cdn-redfin.com/photo/68/midphoto/480/genMid.12656480_30_0.jpg",
        "tags": ["All"],
        "short_caption": "Outdoor patio with grill",
        "long_caption": "An outdoor patio with a couch, table, and grill."
      }
    ],
    "badges": [
      {
        "sash_type": 7,
        "sash_type_id": 7,
        "sash_type_name": "New",
        "sash_type_color": "#2E7E36",
        "is_redfin": false,
        "is_active_key_listing": false,
        "time_on_redfin": 21919770
      }
    ],
    "has_virtual_tour": false,
    "has_video_tour": false,
    "has_3d_tour": false
  },
  "description": {
    "listing_remarks": "Desirable close-to-everything location in wonderful Harwood Heights! Charming and beautifully updated Cape Cod-style home with Tudor-inspired architectural details and outstanding curb appeal. Proudly maintained by the same owners for the past 29 years, this impressive move-in-ready home offers 3 bedrooms, 2 full bathrooms, and countless updates throughout the years of ownership. Step inside to a bright and inviting open-concept main level featuring hardwood floors, recessed lighting, and a newer kitchen designed for both everyday living and entertaining. This truly turn-key home is perfect as a starter home, downsizing opportunity, or investment property. Major improvements include roof and gutters only 7 years old, furnace approximately 10 years old, newer front yard sod installed 2 years ago, and a whole-house water filtration system that will stay with the property and newer windows. Enjoy the fully fenced private patio area-perfect for entertaining, relaxing, and family gatherings-along with a detached 2-car garage and side driveway access. Fantastic location close to parks, shopping, restaurants, public transportation, Metra, major highways, and O'Hare Airport, making commuting a breeze. A rare opportunity to own in one of the area's most desirable residential communities! Sold As-Is Condition. Truly an exceptional home - schedule your showing today before it's gone!",
    "marketing_remarks": [
      "Desirable close-to-everything location in wonderful Harwood Heights! Charming and beautifully updated Cape Cod-style home with Tudor-inspired architectural details and outstanding curb appeal. Proudly maintained by the same owners for the past 29 years, this impressive move-in-ready home offers 3 bedrooms, 2 full bathrooms, and countless updates throughout the years of ownership. Step inside to a bright and inviting open-concept main level featuring hardwood floors, recessed lighting, and a newer kitchen designed for both everyday living and entertaining. This truly turn-key home is perfect as a starter home, downsizing opportunity, or investment property. Major improvements include roof and gutters only 7 years old, furnace approximately 10 years old, newer front yard sod installed 2 years ago, and a whole-house water filtration system that will stay with the property and newer windows. Enjoy the fully fenced private patio area-perfect for entertaining, relaxing, and family gatherings-along with a detached 2-car garage and side driveway access. Fantastic location close to parks, shopping, restaurants, public transportation, Metra, major highways, and O'Hare Airport, making commuting a breeze. A rare opportunity to own in one of the area's most desirable residential communities! Sold As-Is Condition. Truly an exceptional home - schedule your showing today before it's gone!"
    ],
    "ai_summary": "- Cape Cod-style home with Tudor-inspired details and strong curb appeal. - Open-concept main level with hardwood floors, recessed lighting, and a newer kitchen. - Fully fenced private patio for entertaining with a detached 2-car garage and side driveway. - Updates include roof and gutters 7 years old, newer windows, and whole-house water filtration. - Prime location near parks, transit, Metra, and O'Hare access.",
    "meta_description": "For Sale: 3 beds, 2 baths ∙ 1343 sq. ft. ∙ 6602 W Montrose Ave, Harwood Heights, IL 60706 ∙ $395,000 ∙ MLS## 12656480 ∙ Desirable close-to-everything location in wonderful Harwood Heights! Charming ...",
    "short_description": "Desirable close-to-everything location in wonderful Harwood Heights! Charming and beautifully updated Cape Cod-style home with Tudor-inspired architectural details and outstanding curb appeal. Prou...",
    "meta_tags": {
      "icbm": "41.960325, -87.7919485",
      "geo.position": "41.960325;-87.7919485",
      "geo.placename": "Harwood Heights, IL",
      "geo.region": "US-IL",
      "description": "For Sale: 3 beds, 2 baths ∙ 1343 sq. ft. ∙ 6602 W Montrose Ave, Harwood Heights, IL 60706 ∙ $395,000 ∙ MLS## 12656480 ∙ Desirable close-to-everything location in wonderful Harwood Heights! Charming ...",
      "twitter:card": "summary_large_image",
      "twitter:title": "6602 W Montrose Ave, Harwood Heights, IL 60706 - 3 beds/2 baths",
      "twitter:description": "(MRED as Distributed by MLS Grid) For Sale: 3 beds, 2 baths ∙ 1343 sq. ft. ∙ 6602 W Montrose Ave, Harwood Heights, IL 60706 ∙ $395,000 ∙ MLS## 12656480 ∙ Desirable close-to-everything location in wonderful Harwood Heights! Charming ...",
      "twitter:image": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_0.jpg",
      "twitter:image:alt": "6602 W Montrose Ave, Harwood Heights, IL 60706 - 3 beds/2 baths",
      "twitter:site": "@redfin",
      "twitter:text:title": "6602 W Montrose Ave, Harwood Heights, IL 60706 - 3 beds/2 baths",
      "twitter:text:description": "(MRED as Distributed by MLS Grid) For Sale: 3 beds, 2 baths ∙ 1343 sq. ft. ∙ 6602 W Montrose Ave, Harwood Heights, IL 60706 ∙ $395,000 ∙ MLS## 12656480 ∙ Desirable close-to-everything location in wonderful Harwood Heights! Charming ...",
      "twitter:text:description_simple": "Desirable close-to-everything location in wonderful Harwood Heights! Charming and beautifully updated Cape Cod-style home with Tudor-inspired architectural details and outstanding curb appeal. Prou...",
      "twitter:image:src": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_0.jpg",
      "twitter:text:street_address": "6602 W Montrose Ave",
      "twitter:text:city": "Harwood Heights",
      "twitter:text:state_code": "IL",
      "twitter:text:zip": "60706",
      "twitter:text:listing_source": "MRED as Distributed by MLS Grid",
      "twitter:text:price": "$395,000",
      "twitter:text:beds": "3",
      "twitter:text:baths": "2",
      "twitter:text:sqft": "1,343",
      "twitter:image:sash": "http://ssl.cdn-redfin.com/vLATEST/images/search/details/twitterCards/twitter-card-corner-forsale.png",
      "twitter:image:home": "http://ssl.cdn-redfin.com/vLATEST/images/search/details/twitterCards/twitter-card-icon-home.png",
      "twitter:image:photo0": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_0.jpg",
      "twitter:image:photo1": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_1_0.jpg",
      "twitter:image:photo2": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_2_0.jpg",
      "twitter:image:photo3": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_3_0.jpg",
      "twitter:image:camera": "http://ssl.cdn-redfin.com/vLATEST/images/search/details/twitterCards/twitter-card-camera-160x160.png",
      "twitter:image:camera_wide": "http://ssl.cdn-redfin.com/vLATEST/images/search/details/twitterCards/twitter-card-camera-preview-wide.png",
      "twitter:url:landing_url": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
      "twitter:phone:number": "8779733346",
      "twitter:app:name:iphone": "Redfin Real Estate",
      "twitter:app:id:iphone": "327962480",
      "twitter:app:url:iphone": "redfin://home/13471557",
      "twitter:app:name:ipad": "Redfin Real Estate",
      "twitter:app:id:ipad": "327962480",
      "twitter:app:url:ipad": "redfin://home/13471557",
      "twitter:app:name:googleplay": "Redfin Real Estate",
      "twitter:app:id:googleplay": "com.redfin.android",
      "twitter:app:url:googleplay": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
      "og:title": "6602 W Montrose Ave, Harwood Heights, IL 60706 - 3 beds/2 baths",
      "og:type": "redfinrealestate:home",
      "og:url": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
      "og:image": "https://ssl.cdn-redfin.com/photo/68/mbpaddedwide/480/genMid.12656480_0.jpg",
      "og:image:width": "1621",
      "og:image:height": "1080",
      "og:site_name": "Redfin",
      "og:description": "(MRED as Distributed by MLS Grid) For Sale: 3 beds, 2 baths ∙ 1343 sq. ft. ∙ 6602 W Montrose Ave, Harwood Heights, IL 60706 ∙ $395,000 ∙ MLS## 12656480 ∙ Desirable close-to-everything location in wonderful Harwood Heights! Charming ...",
      "fb:app_id": "161006757273279",
      "al:ios:url": "redfin://home/13471557",
      "al:ios:app_store_id": "327962480",
      "al:ios:app_name": "Redfin Real Estate",
      "al:android:url": "https://www.redfin.com/IL/Harwood-Heights/6602-W-Montrose-Ave-60706/home/13471557",
      "al:android:package": "com.redfin.android",
      "al:android:app_name": "Redfin Real Estate"
    }
  },
  "agents": {
    "listing_agents": [
      {
        "agent_name": "Gerard Scheffler",
        "broker_name": "Home Gallery Realty Corp."
      }
    ],
    "listing_source": {
      "data_source_id": 68,
      "data_source_description": "Midwest Real Estate Data LLC (MRED)",
      "data_source_name": "MRED as Distributed by MLS Grid",
      "should_show_larger_logo": false
    },
    "contact_phone": "(224) 507-5311",
    "contact_phone_url": "tel:+12245075311",
    "recommended_agent": {
      "full_name": "BJ Tregoning",
      "name": "BJ Tregoning",
      "first_name": "BJ",
      "last_name": "Tregoning",
      "job_title": "Redfin Agent",
      "brokerage_name": "Redfin",
      "team_name": "Northwest Suburbs Team",
      "team_email": "northwest-suburbs-all@redfin.com",
      "phone_number": "773-733-0425",
      "client_displayable_phone_number": "(773) 733-0425",
      "twilio_contact_box_phone": "(224) 507-5311",
      "phone_url": "tel:+17737330425",
      "phone_type": "Office",
      "profile_url": "/real-estate-agents/bj-tregoning",
      "license_number": "475118019",
      "average_rating": 9.95,
      "average_rating_for_customer_display": 5.0,
      "num_reviews": 21,
      "agent_average_response_minutes": 16,
      "total_deals_in_past_year": 24,
      "business_market": "Chicago"
    },
    "recommended_agent_phone": "(773) 733-0425",
    "recommended_agent_phone_url": "tel:+17737330425"
  },
  "amenities": {
    "selected": {
      "Style": "Cape Cod",
      "Community": "Harwood Heights",
      "County": "Cook",
      "MLS#": "12656480",
      "Property Type": "Single-family",
      "Heating & cooling": "Has A/C",
      "Laundry": "In-unit laundry (washer and dryer)",
      "Parking": "2 car garage"
    },
    "groups": {
      "parking": {
        "parking__information": [
          "## of Garage Spaces: 2",
          "## of Parking (Total): 2",
          "Parking Features: Garage Owned, Detached, Garage"
        ]
      },
      "interior": {
        "bathroom__information": ["## of Baths (Full): 2"],
        "bedroom__information": ["## of Bedrooms: 3", "## of Bedrooms Possible: 3"],
        "room__information": [
          "Room Type: Walk In Closet",
          "Level: Main",
          "Dimensions: 6 x 10",
          "Room Type: Foyer",
          "Level: Main",
          "Dimensions: 5 x 12",
          "Flooring: Hardwood",
          "Room Type: Bedroom 2",
          "Level: Main",
          "Dimensions: 9 x 11",
          "Flooring: Hardwood",
          "Room Type: Bedroom 3",
          "Level: Second",
          "Dimensions: 10 x 14",
          "Flooring: Hardwood",
          "Room Type: Bedroom 4",
          "Room Type: Dining Room",
          "Level: Main",
          "Dimensions: 10 x 12",
          "Room Type: Family Room",
          "Room Type: Kitchen",
          "Level: Main",
          "Dimensions: 10 x 19",
          "Flooring: Hardwood",
          "Room Type: Laundry",
          "Level: Main",
          "Dimensions: 6 x 10",
          "Room Type: Living Room",
          "Level: Main",
          "Dimensions: 13 x 17",
          "Flooring: Hardwood",
          "Room Type: Master Bedroom",
          "Level: Second",
          "Dimensions: 15 x 18",
          "Flooring: Hardwood",
          "Bath: None"
        ],
        "additional__rooms__information": ["Basement: Crawl Space"],
        "interior__features": ["Interior Features: Open Floorplan, Granite Counters", "## of Rooms: 6", "Flooring: Hardwood"],
        "equipment": ["Appliances: Range, Dishwasher, Refrigerator, Washer, Dryer"]
      },
      "exterior": {
        "building__information": ["Living Area Source: Taped", "Age: 81-90 Years", "Built Before 1978 (Y/N): No", "Construction Materials: Vinyl Siding, Frame"],
        "property__information": ["Property Type: Detached Single", "Property Type: 1 Story", "Ownership: Fee Simple", "Rebuilt (Y/N): No", "Rehab (Y/N): No", "Parcel Number: 13184040130000"],
        "lot__information": ["Dimensions: 3125", "Lot Size: Less Than .25 Acre"]
      },
      "financial": {
        "tax__information": ["Tax Annual Amount: $4,910.88", "Tax Year: 2024", "Tax Exemptions: Homeowner,Senior"],
        "financial__information": ["Special Service Area: N"]
      },
      "utilities": {
        "utility__information": ["Water Source: Public", "Sewer: Public Sewer"],
        "heating_&__cooling": ["Heating: Natural Gas", "Cooling: Central Air"]
      },
      "location": {
        "homeowners__association__information": ["Master Association Fee Frequency: Not Required"],
        "school__information": ["Elementary School District: 86", "Middle Or Junior School District: 86", "High School District: 234"],
        "location__information": ["Township: Norwood Park", "Corporate Limits: Harwood Heights", "Directions: Harlem to montrose east to property"]
      },
      "public_facts": {
        "details": [
          "Beds: 3",
          "Baths: 1.0",
          "Finished Sq. Ft.: 1,207",
          "Unfinished Sq. Ft.: —",
          "Total Sq. Ft.: 1,207",
          "Stories: 1.5",
          "Lot Size: 2,500 square feet",
          "Style: Single Family Residential",
          "Year Built: 1939",
          "Year Renovated: —",
          "County: Cook County",
          "APN: 13184040130000"
        ]
      },
      "other": {
        "listing__information": ["Holds Earnest Money: No", "Possession: Closing", "Some Photos Virtually Staged?: No"]
      }
    },
    "highlight_tags": ["HARDWOOD FLOORS", "UPDATED CAPE COD-STYLE HOME", "RECESSED LIGHTING", "NEWER KITCHEN", "DETACHED 2-CAR GARAGE", "OPEN-CONCEPT MAIN LEVEL"]
  },
  "history": {
    "property": [
      {
        "is_event_admin_only": false,
        "price": 395000,
        "is_price_admin_only": false,
        "event_description": "Listed",
        "mls_description": "Active",
        "source": "MRED as Distributed by MLS Grid",
        "source_id": "12656480",
        "data_source_display": {
          "data_source_id": 68,
          "data_source_description": "Midwest Real Estate Data LLC (MRED)",
          "data_source_name": "MRED as Distributed by MLS Grid",
          "data_source_image": "br_small.png",
          "should_show_larger_logo": false
        },
        "price_display_level": 1,
        "history_event_type": 1,
        "event_date": 1779519600000
      },
      {
        "is_event_admin_only": false,
        "price": 77500,
        "is_price_admin_only": false,
        "event_description": "Sold (Public Records)",
        "source": "Public Records",
        "data_source_display": {
          "should_show_larger_logo": false
        },
        "price_display_level": 1,
        "history_event_type": 2,
        "event_date": 710751600000,
        "event_date_string": "Jul 10, 1992"
      }
    ],
    "tax": [
      {
        "taxable_land_value": 3250,
        "taxable_improvement_value": 19750,
        "roll_year": 2023,
        "taxes_due": 4275.94
      },
      {
        "taxable_land_value": 3250,
        "taxable_improvement_value": 19750,
        "roll_year": 2022,
        "taxes_due": 4102.11
      },
      {
        "taxable_land_value": 2875,
        "taxable_improvement_value": 14975,
        "roll_year": 2021,
        "taxes_due": 3989.22
      }
    ],
    "tax_info": {
      "taxable_land_value": 3250,
      "taxable_improvement_value": 19750,
      "roll_year": 2023,
      "taxes_due": 4275.94
    }
  },
  "valuation": {
    "automated_valuation": {
      "property_id": 13471557,
      "predicted_value": 395162.12,
      "display_level": 1,
      "section_preview_text": "$395,162"
    },
    "rental_estimate": {
      "property_id": 13471557,
      "predicted_value": 2330,
      "predicted_value_low": 2292,
      "predicted_value_high": 2392,
      "display_level": 1,
      "should_show": true,
      "preview_text": "$2,292 - $2,392 / mo"
    }
  },
  "parcel": {
    "info": {
      "section_preview_text": "Map and directions",
      "fips_code": "17031",
      "apn": "13184040130000",
      "parcel_lid": "0200NKHYYF34ST91J8LDX5",
      "map_location_display_level": 1,
      "time_zone": "US/Central",
      "coordinates": {
        "latitude": 41.960325,
        "longitude": -87.7919485
      },
      "bounds": [
        {
          "latitude": 41.9602210718952,
          "longitude": -87.7919960872439
        },
        {
          "latitude": 41.9604971329964,
          "longitude": -87.7920061789784
        },
        {
          "latitude": 41.9604988400084,
          "longitude": -87.7919142449267
        },
        {
          "latitude": 41.9602227789071,
          "longitude": -87.7919041551922
        },
        {
          "latitude": 41.9602210718952,
          "longitude": -87.7919960872439
        }
      ]
    },
    "boundary": {
      "parcel_lid": "0200NKHYYF34ST91J8LDX5",
      "fips_code": "17031"
    }
  },
  "scores": {
    "neighborhood_stats": {
      "section_preview_text": "Walk Score: 70 | Very Walkable"
    },
    "climate_risks": {
      "fsid": "170839223",
      "risk_factor_property_url": "https://firststreet.org/property/170839223/170839223_fsid/0",
      "risks": {
        "flood": {
          "score": 1,
          "score_description": "This property's flood risk is not significantly changing over time.",
          "heading": "1/10 Flood Factor",
          "summary": "Minimal risk of a flood reaching the building in the next 30 years",
          "current_graph_value": 0.0,
          "thirty_year_graph_value": 0.0
        },
        "fire": {
          "score": 1,
          "score_description": "This property's fire risk is not significantly changing over time.",
          "heading": "1/10 Fire Factor",
          "summary": "Unlikely to be in a wildfire in next 30 years"
        },
        "heat": {
          "score": 3,
          "score_description": "This property's heat risk is increasing as weather patterns change.",
          "heading": "3/10 Heat Factor",
          "summary": "7 days above 99° expected this year, 14 days in 30 years",
          "current_graph_value": 7.0,
          "thirty_year_graph_value": 14.0
        },
        "wind": {
          "score": 2,
          "score_description": "This property's wind risk is not significantly changing over time.",
          "heading": "2/10 Wind Factor",
          "summary": "0% chance of strong winds in next 30 years",
          "current_graph_value": 0.0,
          "thirty_year_graph_value": 0.0
        },
        "air": {
          "score": 4,
          "score_description": "This property's air risk is increasing as weather patterns change.",
          "heading": "4/10 Air Factor",
          "summary": "6 unhealthy days expected this year, 7 days in 30 years",
          "current_graph_value": 6.0,
          "thirty_year_graph_value": 7.0
        }
      }
    },
    "schools": {
      "serving_schools": [
        {
          "name": "Union Ridge Elementary School",
          "rating": 7,
          "parent_rating": 4,
          "grades": "PreK-8",
          "type": "Public",
          "distance_miles": 0.5,
          "students": 651,
          "student_teacher_ratio": 13,
          "address": "4600 N Oak Park Ave, Harwood Heights, IL 60706",
          "url": "https://www.greatschools.org/illinois/harwood-heights/3974-Union-Ridge-Elementary-School/"
        },
        {
          "name": "Ridgewood Community High School",
          "rating": 8,
          "parent_rating": 3,
          "grades": "9-12",
          "type": "Public",
          "distance_miles": 1.2,
          "students": 965,
          "student_teacher_ratio": 15,
          "address": "7500 W Montrose Ave, Norridge, IL 60706",
          "url": "https://www.greatschools.org/illinois/norridge/3487-Ridgewood-Community-High-School/"
        }
      ],
      "districts": [
        {
          "name": "Ridgewood Chsd 234 School District",
          "url": "http://www.d234.org",
          "district_id": "13043",
          "has_choice_schools": false
        },
        {
          "name": "Union Ridge School District 86",
          "url": "http://www.urs86.org",
          "district_id": "13786",
          "has_choice_schools": false
        }
      ],
      "total_schools_serviced": 0,
      "section_preview_text": "Average rating 7 out of 10"
    }
  },
  "rental": {
    "page_route": {
      "response_code": 404
    }
  },
  "flags": {
    "is_hot": false,
    "is_redfin": false,
    "is_new_construction": false,
    "is_shortlisted": false,
    "is_viewed_listing": false,
    "show_mls_id": false,
    "show_datasource_logo": false,
    "remarks_access_level": 1
  },
  "attributes": {
    "listing_tags": ["UPDATED CAPE COD-STYLE HOME", "OPEN-CONCEPT MAIN LEVEL", "HARDWOOD FLOORS", "RECESSED LIGHTING", "NEWER KITCHEN", "DETACHED 2-CAR GARAGE"]
  }
}
```

### Field Reference

#### Redfin listing record

**id** *(string, required)*: Stable listing identifier; recommended primary idempotency key.

**url** *(string, required)*: Public Redfin listing URL.

**title** *(string, optional)*: Listing title or address-style label.

**status** *(string, optional)*: Human-readable listing status.

**source\_context.fingerprint** *(string, optional)*: Source-context fingerprint for traceability.

**source\_context.source\_url** *(string, optional)*: Source context associated with the collected record.

**source\_context.detail\_url** *(string, optional)*: Public detail URL for the listing.

**source\_context.domain** *(string, optional)*: Source domain.

**source\_context.seed\_id / seed\_type / seed\_value** *(string, optional)*: Input seed metadata for the run.

**source\_context.resolved\_location / resolved\_location\_url** *(string, optional)*: Redfin-recognized geography used for the search.

**source\_context.page\_index** *(integer, optional)*: Result page index associated with the record.

**source\_context.search.sale\_status / sort\_by / listing\_type / deal\_type** *(array/string, optional)*: Search criteria reflected in the record context.

**identifiers.property\_id** *(string, optional)*: Redfin property identifier.

**identifiers.listing\_id** *(string, optional)*: Redfin listing identifier.

**identifiers.mls\_id** *(string, optional)*: MLS identifier when provided.

**identifiers.data\_source\_id / market\_id / business\_market\_id / fips / apn** *(string, optional)*: Market, source, jurisdiction, and parcel identifiers.

**location.address / street / city / state / postal\_code / country\_code / area** *(string, optional)*: Structured address and geographic labels.

**location.coordinates.latitude / longitude** *(number, optional)*: Geographic coordinates.

**location.show\_address\_on\_map** *(boolean, optional)*: Whether the address is displayed on the map.

**location.timezone** *(string, optional)*: Listing timezone.

**pricing.price / sold\_price / price\_per\_sqft** *(number, optional)*: Current price, historical sold price, and price per square foot in USD.

**pricing.hide\_sale\_price / is\_hoa\_frequency\_known** *(boolean, optional)*: Sale-price and HOA-display indicators.

**pricing.price\_info.amount / label / display\_level / data\_source\_id** *(number/string, optional)*: Display price metadata.

**pricing.latest\_price\_info.amount / label / display\_level / data\_source\_id** *(number/string, optional)*: Latest display price metadata.

**property.beds / baths / full\_baths / raw\_full\_baths / raw\_half\_baths** *(number, optional)*: Bedroom and bathroom counts.

**property.stories / sqft / garage\_spaces / parking\_spaces** *(number, optional)*: Physical property size and parking facts.

**property.property\_type\_id / ui\_property\_type\_id / listing\_type\_id / pool\_type\_id** *(number, optional)*: Property classification identifiers.

**property.public\_facts.\*** *(object, optional)*: Public facts such as beds, baths, property type name, stories, year built, finished area, total area, lot area, APN, update timestamp, and timezone.

**property.key\_facts** *(array, optional)*: Highlight facts for the listing.

**property.key\_facts\_detailed.description / rank** *(string/number, optional)*: Ranked highlight facts.

**transaction.deal\_type / mls\_status / search\_status\_id** *(string/number, optional)*: Transaction mode and status identifiers.

**transaction.property\_status.\*** *(object, optional)*: Public property-status label and definition.

**transaction.mls\_status\_display.\*** *(object, optional)*: MLS status label and definition.

**transaction.sold\_at / sold\_date / sold\_date\_timezone** *(string, optional)*: Sold-date fields when available.

**transaction.days\_on\_market / time\_on\_redfin / original\_time\_on\_redfin** *(number, optional)*: Listing recency and exposure metrics.

**media.photos / photo\_count / photo\_format** *(string/number, optional)*: Photo inventory metadata.

**media.primary\_photo\_url / static\_map\_url** *(string, optional)*: Primary image and map image URLs.

**media.photo\_captions.photo\_id / photo\_url / thumbnail\_url / tags / short\_caption / long\_caption** *(number/string/array, optional)*: Photo caption and media details.

**media.badges.\*** *(array, optional)*: Listing badges such as new-listing labels and badge display attributes.

**media.has\_virtual\_tour / has\_video\_tour / has\_3d\_tour** *(boolean, optional)*: Media availability flags.

**description.listing\_remarks / marketing\_remarks / ai\_summary / meta\_description / short\_description** *(string/array, optional)*: Listing remarks and summaries.

**description.meta\_tags.\*** *(object, optional)*: Public page metadata when available.

**agents.listing\_agents.agent\_name / broker\_name** *(string, optional)*: Listing agent and broker names.

**agents.listing\_source.\*** *(object, optional)*: Listing-source metadata.

**agents.contact\_phone / contact\_phone\_url** *(string, optional)*: Contact phone fields.

**agents.recommended\_agent.\*** *(object, optional)*: Recommended-agent profile, contact, rating, review, response-time, and team fields.

**agents.recommended\_agent\_phone / recommended\_agent\_phone\_url** *(string, optional)*: Recommended-agent phone fields.

**amenities.selected.\*** *(object, optional)*: Selected amenity and listing-fact labels.

**amenities.groups.\*** *(object, optional)*: Grouped property details such as parking, interior, exterior, financial, utilities, location, public facts, and other listing information.

**amenities.highlight\_tags** *(array, optional)*: Highlighted listing tags.

**history.property.\*** *(array, optional)*: Listing and sale history events with prices, event labels, sources, dates, and display metadata.

**history.tax.\*** *(array, optional)*: Tax history by roll year.

**history.tax\_info.\*** *(object, optional)*: Current or latest tax summary.

**valuation.automated\_valuation.\*** *(object, optional)*: Automated valuation estimate and display text.

**valuation.rental\_estimate.\*** *(object, optional)*: Rental estimate range and display text.

**parcel.info.\*** *(object, optional)*: Parcel identifiers, map display fields, timezone, coordinates, and boundary points.

**parcel.boundary.parcel\_lid / fips\_code** *(string, optional)*: Parcel boundary identifiers.

**scores.neighborhood\_stats.section\_preview\_text** *(string, optional)*: Neighborhood score summary text.

**scores.climate\_risks.fsid / risk\_factor\_property\_url** *(string, optional)*: Climate-risk identifiers and reference URL.

**scores.climate\_risks.risks.\*** *(object, optional)*: Flood, fire, heat, wind, and air risk scores, descriptions, headings, summaries, and graph values.

**scores.schools.serving\_schools.\*** *(array, optional)*: School names, ratings, grades, type, distance, enrollment, ratios, addresses, and URLs.

**scores.schools.districts.\*** *(array, optional)*: School district names, URLs, identifiers, and choice-school indicators.

**scores.schools.total\_schools\_serviced / section\_preview\_text** *(number/string, optional)*: School summary fields.

**rental.page\_route.response\_code** *(number, optional)*: Rental-page availability indicator when present.

**flags.is\_hot / is\_redfin / is\_new\_construction / is\_shortlisted / is\_viewed\_listing / show\_mls\_id / show\_datasource\_logo** *(boolean, optional)*: Listing display and classification flags.

**flags.remarks\_access\_level** *(number, optional)*: Remarks availability level.

**attributes.listing\_tags** *(array, optional)*: Listing tags suitable for filtering, search, or reporting.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, and Redfin interface changes.
- **Optional fields:** null-check optional fields in downstream code, especially detailed amenities, media, schools, tax, parcel, valuation, and climate data.
- **Deduplication:** use `id` as the primary idempotency key, with `url` or `identifiers.property_id + identifiers.listing_id` as fallbacks.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or other systems.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one `location` item and one `deal_type` per run when you need cleaner segmentation, or add several `location` items when the same filters should apply across multiple markets.
- Leave optional filters empty when the goal is broad discovery.
- Add price, bedroom, property type, listing freshness, and amenity filters gradually to understand how each field changes coverage.
- Enable `enrich_data` for diligence, comp analysis, enrichment, or listing-detail workflows.
- Schedule recurring runs for monitoring workflows instead of relying on manual one-off jobs.
- Use `id` or `url` for deduplication when storing results over time.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target location, listing mode, filters, and enrichment needs.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and review the first records.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep Redfin market, listing, and comparable-sale datasets fresh without manually starting each collection. Use recurring schedules for dashboards, alerts, enrichment jobs, and monitoring workflows.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor pricing, inventory, availability, listing freshness, property type mix, and geographic coverage over time.
- **Data warehouses:** store normalized Redfin records for historical trend analysis, comp modeling, and operational reporting.
- **CRM enrichment:** sync public listing, agent, location, property, and valuation attributes into account or lead records.
- **Google Sheets or Airtable:** review sampled listings, enrichment queues, or market segments in lightweight operational workflows.
- **Webhooks:** trigger validation, notification, ingestion, or alert workflows after each completed run.
- **Data enrichment pipelines:** join Redfin records with internal property, lead, CRM, or investment datasets using stable identifiers and addresses.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for operational and analytical workflows.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what <https://www.redfin.com> publicly exposes at run time.
- Some optional fields may be missing on sparse records, rental records, sold records, or listings with limited public detail.
- Very broad searches may take longer or require higher `limit` values.
- Target-side changes can affect field availability, labels, or naming.
- Regional, account, source, or availability differences may change visible results.
- Detail-rich records depend on the public information available for each listing.

### Troubleshooting

- **No results returned:** check filter strictness, `location` spelling, `deal_type`, sale status, and whether Redfin has matching public records.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the target location contains enough matching listings.
- **Some fields are empty:** optional fields depend on what each record publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller locations or segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Redfin listing data, including listing identifiers, URLs, prices, property facts, addresses, media metadata, transaction status, amenities, agents, history, valuation, parcel context, schools, and climate-related attributes when available.

#### Can I filter by location, date, price, or other criteria?

Yes. The schema supports `location`, `deal_type`, price range, bedrooms, bathrooms, parking, area, lot size, year built, stories, property type, pool preference, tour options, listing freshness, keywords, listing type, amenities, neighborhood score thresholds, HOA fees, property taxes, `limit`, and enrichment.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. The final count depends on matching public listings, filters, listing mode, geography, and data availability at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule for monitoring, reporting, and enrichment workflows.

#### How do I avoid duplicates across runs?

Use `id` as the primary idempotency key. If needed, use `url` or a composite key such as `identifiers.property_id + identifiers.listing_id`.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets can be downloaded in JSON, CSV, Excel, and other supported formats, or consumed programmatically through API access.

#### Does this actor collect private data?

No. The actor is intended for publicly available Redfin listing information. Users are responsible for ensuring their use of the data complies with applicable laws, regulations, and terms.

#### Should I enable `enrich_data`?

Enable `enrich_data` when you need richer listing-level context such as remarks, amenities, media captions, schools, parcel details, valuation, or climate-risk context. Leave it disabled for faster sampling or high-level market review.

#### What should I include when reporting an issue?

Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available **real estate listing** information from **https://www.redfin.com** for legitimate business purposes, including:

- **Real estate** research and market analysis
- Property, listing, and comparable-sales monitoring
- Data enrichment, operational reporting, and internal analytics

This section is informational and not legal advice. Users are responsible for evaluating whether their collection and use of the data complies with applicable laws, regulations, contracts, and platform terms.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site’s terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, including GDPR and CCPA

### Support

For help, use the Issues tab or the actor page. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when it is useful for diagnosis.

# Actor input Schema

## `deal_type` (type: `string`):

Select the market lens for the run. Use For Sale for active acquisition or listing surveillance, For Rent for rental supply analysis, and Sold for comparable-sales review or historical pricing context.

## `location` (type: `array`):

Enter one or more supported Redfin locations. Each item can be a city plus state, ZIP code, neighborhood, county, or market name, for example Austin, TX, 90210, Brooklyn Heights, NY, or Orange County, CA. State-wide searches such as California are not supported.

## `min_price` (type: `integer`):

Set the floor for the price band. Use this to remove low-value inventory, non-comparable assets, or listings outside the minimum transaction size you care about.

## `max_price` (type: `integer`):

Set the ceiling for the price band. Use this to constrain the export to an underwriting range, buyer budget, rental benchmark, or comp universe that excludes luxury outliers.

## `min_bedroom` (type: `string`):

Set the minimum sleeping-area profile for the search. Studio represents zero bedrooms; 5+ focuses the run on larger household formats and leaves smaller layouts out of scope.

## `max_bedroom` (type: `string`):

Set the upper bedroom boundary when you need a tighter product class. Studio represents zero bedrooms; 5+ keeps the upper end open for larger assets.

## `min_bathroom` (type: `string`):

Set the minimum bathroom threshold for functional comparability. Higher values generally narrow the dataset toward larger, newer, or more amenitized properties.

## `min_parking` (type: `string`):

Require a minimum parking allocation when vehicle storage is material to buyer demand, rental positioning, suburban comparability, or development feasibility.

## `include_outdoor_parking` (type: `boolean`):

Count outdoor parking toward the parking requirement. Enable this when uncovered spaces are acceptable in your market model; leave it off when the screen should emphasize garage or covered capacity.

## `property_type` (type: `array`):

Select the property classes that belong in the analysis. Leave empty only when you intentionally want mixed inventory for broad market discovery.

## `min_building_area` (type: `integer`):

Set the minimum interior square footage. Use this to exclude undersized assets that would weaken a comp set or fall below your target occupancy, valuation, or rental-use profile.

## `max_building_area` (type: `integer`):

Set the maximum interior square footage. Use this to keep the dataset inside a comparable product band and avoid oversized homes that distort price-per-square-foot analysis.

## `min_land_area` (type: `string`):

Set the minimum parcel size. This is useful for land-value analysis, redevelopment feasibility, privacy-oriented buyer profiles, or separating standard residential lots from larger acreage.

## `max_land_area` (type: `string`):

Set the maximum parcel size. Use this to exclude acreage, estate lots, or land-heavy assets when the analysis should remain focused on conventional residential parcels.

## `sale_status` (type: `array`):

Choose which for-sale listing statuses should remain in scope. Include Coming Soon for listings Redfin marks as upcoming, Active for currently marketed homes, and Pending when under-contract properties are still useful to your inventory review.

## `sold_date_range` (type: `string`):

Choose how far back Redfin should look for sold comparable properties. Shorter windows keep comps closer to current market conditions; longer windows expand historical coverage. This setting only applies to Sold mode and is ignored for For Sale or For Rent runs.

## `listing_type` (type: `array`):

Select the for-sale categories that should remain eligible. This setting only applies to For Sale mode and is useful when the analysis depends on seller type, distress profile, or new-build exposure.

## `publication_date` (type: `string`):

Choose the time-on-market window for the search. Short windows favor new supply and alerting workflows; longer exposure windows can surface listings with pricing friction, negotiation potential, or weaker demand signals.

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

Search listing remarks for a specific term or phrase. Use targeted language such as ADU, assumable, fixer, waterfront, seller credit, permitted, or investment to surface qualitative signals that structured filters may miss.

## `pool` (type: `string`):

Filter by pool configuration when outdoor amenity value is material to the market thesis. Leave empty when pool presence should not affect eligibility.

## `amenities` (type: `array`):

Select home-feature requirements for more opinionated inventory screening. These filters apply to for-sale and sold searches and are useful for amenity-adjusted comps, lifestyle segmentation, or renovation/opportunity targeting.

## `tour_options` (type: `array`):

Require listings with open-house availability or immersive tour media. Use this for lead workflows that prioritize immediately viewable inventory; if both open-house windows are selected, the broader anytime option governs.

## `min_walk_score` (type: `integer`):

Enter the minimum Walk Score from 1 to 100. Use higher thresholds for urban convenience screens, car-light household profiles, or pedestrian-accessible comp sets.

## `min_transit_score` (type: `integer`):

Enter the minimum Transit Score from 1 to 100. Higher thresholds bias the dataset toward stronger public-transit access and can support commuter-oriented or transit-adjacent market analysis.

## `min_bike_score` (type: `integer`):

Enter the minimum Bike Score from 1 to 100. Use this when bike infrastructure and non-car mobility are part of the demand profile.

## `min_greatschools_score` (type: `integer`):

Enter the minimum GreatSchools rating from 1 to 10. Use this as a school-quality screen for family-oriented demand, suburban comps, or education-sensitive buyer segments.

## `max_hoa_fee` (type: `string`):

Set the maximum monthly HOA burden. Use this to exclude high-assessment properties, normalize total housing cost, or separate fee-heavy communities from lower-carry assets.

## `max_property_tax` (type: `string`):

Set the maximum annual property-tax burden. Use this to keep carrying costs within underwriting assumptions or to avoid assets whose tax profile makes them poor comparables.

## `min_building_year` (type: `string`):

Set the oldest acceptable year built. Use a newer threshold to bias the dataset toward more modern systems, layouts, and compliance assumptions.

## `max_building_year` (type: `string`):

Set the newest acceptable year built. Use this when the target universe is older housing stock, vintage assets, or properties with potential renovation upside.

## `min_stories` (type: `string`):

Set the minimum story count when verticality is part of the asset definition, such as multi-level homes, taller buildings, or denser residential formats.

## `max_stories` (type: `string`):

Set the maximum story count to exclude taller structures or keep the dataset aligned with low-rise, mid-rise, or accessibility-sensitive product requirements.

## `sort_by` (type: `string`):

Select how Redfin should order the search results before collection. Use Recommended for Redfin's default ranking, Newest for fresh inventory, price sorts for budget or comp scans, size sorts for larger physical assets, and lowest price per square foot for value-oriented screening.

## `enrich_data` (type: `boolean`):

Enable enrichment when you need a more complete diligence record: remarks, amenity detail, climate-risk context, schools, neighborhood scores, zoning, parcel metadata, and summaries when Redfin provides them. Disable it for faster reconnaissance runs, QA smoke tests, or high-level market counts where the standard result fields are sufficient.

## `limit` (type: `integer`):

Enter the maximum number of listings to save. Set a low value for validation or sampling, and leave empty when completeness is more important than a predictable output size.

## Actor input object example

```json
{
  "deal_type": "buy",
  "location": [
    "Austin, TX",
    "Chicago, IL",
    "90210"
  ],
  "include_outdoor_parking": false,
  "min_land_area": "no_min",
  "max_land_area": "no_min",
  "sale_status": [
    "coming_soon",
    "active"
  ],
  "sold_date_range": "last_3_months",
  "listing_type": [
    "by_agent",
    "foreclosures",
    "by_owner",
    "new_construction"
  ],
  "sort_by": "recommended",
  "enrich_data": true,
  "limit": 100
}
```

# Actor output Schema

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

No description

# 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 = {
    "location": [
        "Austin, TX",
        "Chicago, IL",
        "90210"
    ],
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/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 = {
    "location": [
        "Austin, TX",
        "Chicago, IL",
        "90210",
    ],
    "limit": 100,
}

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

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

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

```

## CLI example

```bash
echo '{
  "location": [
    "Austin, TX",
    "Chicago, IL",
    "90210"
  ],
  "limit": 100
}' |
apify call fatihtahta/redfin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/redfin-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Redfin Scraper with Contacts | Enterprise Grade",
        "description": "Extract Redfin listings at scale with deep property detail, sold comps, rental data, agents, valuation signals, parcel history, schools, climate risks, and rich media. Built for enterprise-grade real estate intelligence, market monitoring, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "fVdCieSrnJ8bKa3E7"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~redfin-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-redfin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~redfin-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-redfin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~redfin-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-redfin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "location"
                ],
                "properties": {
                    "deal_type": {
                        "title": "Choose Listing Mode",
                        "enum": [
                            "buy",
                            "rent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "Select the market lens for the run. Use For Sale for active acquisition or listing surveillance, For Rent for rental supply analysis, and Sold for comparable-sales review or historical pricing context.",
                        "default": "buy"
                    },
                    "location": {
                        "title": "Enter Search Locations",
                        "minItems": 1,
                        "type": "array",
                        "description": "Enter one or more supported Redfin locations. Each item can be a city plus state, ZIP code, neighborhood, county, or market name, for example Austin, TX, 90210, Brooklyn Heights, NY, or Orange County, CA. State-wide searches such as California are not supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Set the floor for the price band. Use this to remove low-value inventory, non-comparable assets, or listings outside the minimum transaction size you care about."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Set the ceiling for the price band. Use this to constrain the export to an underwriting range, buyer budget, rental benchmark, or comp universe that excludes luxury outliers."
                    },
                    "min_bedroom": {
                        "title": "Set Minimum Bedrooms",
                        "enum": [
                            "Studio",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Set the minimum sleeping-area profile for the search. Studio represents zero bedrooms; 5+ focuses the run on larger household formats and leaves smaller layouts out of scope."
                    },
                    "max_bedroom": {
                        "title": "Set Maximum Bedrooms",
                        "enum": [
                            "Studio",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Set the upper bedroom boundary when you need a tighter product class. Studio represents zero bedrooms; 5+ keeps the upper end open for larger assets."
                    },
                    "min_bathroom": {
                        "title": "Set Minimum Bathrooms",
                        "enum": [
                            "1+",
                            "1.5+",
                            "2+",
                            "2.5+",
                            "3+",
                            "4+"
                        ],
                        "type": "string",
                        "description": "Set the minimum bathroom threshold for functional comparability. Higher values generally narrow the dataset toward larger, newer, or more amenitized properties."
                    },
                    "min_parking": {
                        "title": "Set Minimum Parking Spaces",
                        "enum": [
                            "1+",
                            "2+",
                            "3+",
                            "4+",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Require a minimum parking allocation when vehicle storage is material to buyer demand, rental positioning, suburban comparability, or development feasibility."
                    },
                    "include_outdoor_parking": {
                        "title": "Include Outdoor Parking",
                        "type": "boolean",
                        "description": "Count outdoor parking toward the parking requirement. Enable this when uncovered spaces are acceptable in your market model; leave it off when the screen should emphasize garage or covered capacity.",
                        "default": false
                    },
                    "property_type": {
                        "title": "Choose Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select the property classes that belong in the analysis. Leave empty only when you intentionally want mixed inventory for broad market discovery.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "house",
                                "townhouse",
                                "condo",
                                "land",
                                "multi_family",
                                "mobile",
                                "co_op",
                                "other"
                            ],
                            "enumTitles": [
                                "House | single-family homes",
                                "Townhouse | attached homes",
                                "Condo | condominium units",
                                "Land | lots and parcels",
                                "Multi-Family | multi-unit properties",
                                "Mobile Home | manufactured homes",
                                "Co-op | cooperative units",
                                "Other | additional property types"
                            ]
                        }
                    },
                    "min_building_area": {
                        "title": "Set Minimum Interior Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Set the minimum interior square footage. Use this to exclude undersized assets that would weaken a comp set or fall below your target occupancy, valuation, or rental-use profile."
                    },
                    "max_building_area": {
                        "title": "Set Maximum Interior Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Set the maximum interior square footage. Use this to keep the dataset inside a comparable product band and avoid oversized homes that distort price-per-square-foot analysis."
                    },
                    "min_land_area": {
                        "title": "Set Minimum Lot Size",
                        "enum": [
                            "no_min",
                            "2000_sqft",
                            "4500_sqft",
                            "6500_sqft",
                            "8000_sqft",
                            "9500_sqft",
                            "0.25_acres",
                            "0.5_acres",
                            "1_acres",
                            "2_acres",
                            "3_acres",
                            "4_acres",
                            "5_acres",
                            "10_acres",
                            "20_acres",
                            "40_acres",
                            "100_acres"
                        ],
                        "type": "string",
                        "description": "Set the minimum parcel size. This is useful for land-value analysis, redevelopment feasibility, privacy-oriented buyer profiles, or separating standard residential lots from larger acreage.",
                        "default": "no_min"
                    },
                    "max_land_area": {
                        "title": "Set Maximum Lot Size",
                        "enum": [
                            "no_min",
                            "2000_sqft",
                            "4500_sqft",
                            "6500_sqft",
                            "8000_sqft",
                            "9500_sqft",
                            "0.25_acres",
                            "0.5_acres",
                            "1_acres",
                            "2_acres",
                            "3_acres",
                            "4_acres",
                            "5_acres",
                            "10_acres",
                            "20_acres",
                            "40_acres",
                            "100_acres"
                        ],
                        "type": "string",
                        "description": "Set the maximum parcel size. Use this to exclude acreage, estate lots, or land-heavy assets when the analysis should remain focused on conventional residential parcels.",
                        "default": "no_min"
                    },
                    "sale_status": {
                        "title": "Select Sale Statuses",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose which for-sale listing statuses should remain in scope. Include Coming Soon for listings Redfin marks as upcoming, Active for currently marketed homes, and Pending when under-contract properties are still useful to your inventory review.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "coming_soon",
                                "active",
                                "under_contract"
                            ],
                            "enumTitles": [
                                "Coming Soon | upcoming listings",
                                "Active | currently listed",
                                "Pending | under contract"
                            ]
                        },
                        "default": [
                            "coming_soon",
                            "active"
                        ]
                    },
                    "sold_date_range": {
                        "title": "Choose Sold Date Range",
                        "enum": [
                            "last_1_week",
                            "last_1_month",
                            "last_3_months",
                            "last_6_months",
                            "last_1_year",
                            "last_2_years",
                            "last_3_years",
                            "last_5_years"
                        ],
                        "type": "string",
                        "description": "Choose how far back Redfin should look for sold comparable properties. Shorter windows keep comps closer to current market conditions; longer windows expand historical coverage. This setting only applies to Sold mode and is ignored for For Sale or For Rent runs.",
                        "default": "last_3_months"
                    },
                    "listing_type": {
                        "title": "Choose Sale Listing Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select the for-sale categories that should remain eligible. This setting only applies to For Sale mode and is useful when the analysis depends on seller type, distress profile, or new-build exposure.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "by_agent",
                                "foreclosures",
                                "by_owner",
                                "exclude_short_sales",
                                "new_construction",
                                "redfin_listings_only"
                            ],
                            "enumTitles": [
                                "By Agent | agent-listed homes",
                                "Foreclosures | distressed inventory",
                                "By Owner | FSBO listings",
                                "Exclude Short Sales | remove short sales",
                                "New Construction | newly built homes",
                                "Redfin Only | Redfin listings"
                            ]
                        },
                        "default": [
                            "by_agent",
                            "foreclosures",
                            "by_owner",
                            "new_construction"
                        ]
                    },
                    "publication_date": {
                        "title": "Choose Time on Market",
                        "enum": [
                            "last_24_hours",
                            "last_3_days",
                            "last_7_days",
                            "last_14_days",
                            "last_30_days",
                            "over_7_days",
                            "over_14_days",
                            "over_30_days",
                            "over_45_days",
                            "over_60_days",
                            "over_90_days",
                            "over_180_days"
                        ],
                        "type": "string",
                        "description": "Choose the time-on-market window for the search. Short windows favor new supply and alerting workflows; longer exposure windows can surface listings with pricing friction, negotiation potential, or weaker demand signals."
                    },
                    "keyword": {
                        "title": "Search Listing Remarks",
                        "type": "string",
                        "description": "Search listing remarks for a specific term or phrase. Use targeted language such as ADU, assumable, fixer, waterfront, seller credit, permitted, or investment to surface qualitative signals that structured filters may miss."
                    },
                    "pool": {
                        "title": "Choose Pool Preference",
                        "enum": [
                            "private_pool",
                            "community_pool",
                            "private_or_community_pool",
                            "no_private_pool"
                        ],
                        "type": "string",
                        "description": "Filter by pool configuration when outdoor amenity value is material to the market thesis. Leave empty when pool presence should not affect eligibility."
                    },
                    "amenities": {
                        "title": "Choose Home Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select home-feature requirements for more opinionated inventory screening. These filters apply to for-sale and sold searches and are useful for amenity-adjusted comps, lifestyle segmentation, or renovation/opportunity targeting.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "air_conditioning",
                                "basement_finished",
                                "basement_unfinished",
                                "waterfront",
                                "washer_dryer_hookup",
                                "has_view",
                                "pets_allowed",
                                "fireplace",
                                "primary_bedroom_on_main_floor",
                                "fixer_upper",
                                "rv_parking",
                                "guest_house",
                                "green_home",
                                "elevator",
                                "accessible_home"
                            ],
                            "enumTitles": [
                                "Air Conditioning",
                                "Finished Basement",
                                "Unfinished Basement",
                                "Waterfront",
                                "Washer/Dryer Hookup",
                                "View",
                                "Pets Allowed",
                                "Fireplace",
                                "Primary Bedroom on Main Floor",
                                "Fixer-Upper",
                                "RV Parking",
                                "Guest House",
                                "Green Home",
                                "Elevator",
                                "Accessible Home"
                            ]
                        }
                    },
                    "tour_options": {
                        "title": "Choose Tour and Open-House Options",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Require listings with open-house availability or immersive tour media. Use this for lead workflows that prioritize immediately viewable inventory; if both open-house windows are selected, the broader anytime option governs.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "open_house_this_weekend",
                                "open_house_anytime",
                                "3d_tour"
                            ],
                            "enumTitles": [
                                "Open House | this weekend",
                                "Open House | anytime",
                                "3D Tour | walkthrough or video"
                            ]
                        }
                    },
                    "min_walk_score": {
                        "title": "Set Minimum Walk Score",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Enter the minimum Walk Score from 1 to 100. Use higher thresholds for urban convenience screens, car-light household profiles, or pedestrian-accessible comp sets."
                    },
                    "min_transit_score": {
                        "title": "Set Minimum Transit Score",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Enter the minimum Transit Score from 1 to 100. Higher thresholds bias the dataset toward stronger public-transit access and can support commuter-oriented or transit-adjacent market analysis."
                    },
                    "min_bike_score": {
                        "title": "Set Minimum Bike Score",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Enter the minimum Bike Score from 1 to 100. Use this when bike infrastructure and non-car mobility are part of the demand profile."
                    },
                    "min_greatschools_score": {
                        "title": "Set Minimum GreatSchools Rating",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Enter the minimum GreatSchools rating from 1 to 10. Use this as a school-quality screen for family-oriented demand, suburban comps, or education-sensitive buyer segments."
                    },
                    "max_hoa_fee": {
                        "title": "Set Maximum HOA Fee",
                        "enum": [
                            "no_fee",
                            "25",
                            "50",
                            "75",
                            "100",
                            "150",
                            "200",
                            "250",
                            "300",
                            "400",
                            "500",
                            "600",
                            "700",
                            "800",
                            "900",
                            "1000",
                            "1250",
                            "1500",
                            "1750",
                            "2000",
                            "2500",
                            "3000",
                            "3500",
                            "4000",
                            "4500",
                            "5000"
                        ],
                        "type": "string",
                        "description": "Set the maximum monthly HOA burden. Use this to exclude high-assessment properties, normalize total housing cost, or separate fee-heavy communities from lower-carry assets."
                    },
                    "max_property_tax": {
                        "title": "Set Maximum Property Tax",
                        "enum": [
                            "no_tax",
                            "250",
                            "500",
                            "750",
                            "1000",
                            "1250",
                            "1500",
                            "1750",
                            "2000",
                            "2500",
                            "3000",
                            "3500",
                            "4000",
                            "4500",
                            "5000",
                            "5500",
                            "6000",
                            "6500",
                            "7000",
                            "8000",
                            "10000",
                            "12000",
                            "14000",
                            "16000",
                            "20000",
                            "24000"
                        ],
                        "type": "string",
                        "description": "Set the maximum annual property-tax burden. Use this to keep carrying costs within underwriting assumptions or to avoid assets whose tax profile makes them poor comparables."
                    },
                    "min_building_year": {
                        "title": "Set Earliest Year Built",
                        "enum": [
                            "2026",
                            "2025",
                            "2024",
                            "2023",
                            "2022",
                            "2021",
                            "2020",
                            "2019",
                            "2018",
                            "2017",
                            "2016",
                            "2015",
                            "2010",
                            "2005",
                            "2000",
                            "1990",
                            "1980",
                            "1970",
                            "1960",
                            "1950",
                            "1940",
                            "1920",
                            "1900"
                        ],
                        "type": "string",
                        "description": "Set the oldest acceptable year built. Use a newer threshold to bias the dataset toward more modern systems, layouts, and compliance assumptions."
                    },
                    "max_building_year": {
                        "title": "Set Latest Year Built",
                        "enum": [
                            "2026",
                            "2025",
                            "2024",
                            "2023",
                            "2022",
                            "2021",
                            "2020",
                            "2019",
                            "2018",
                            "2017",
                            "2016",
                            "2015",
                            "2010",
                            "2005",
                            "2000",
                            "1990",
                            "1980",
                            "1970",
                            "1960",
                            "1950",
                            "1940",
                            "1920",
                            "1900"
                        ],
                        "type": "string",
                        "description": "Set the newest acceptable year built. Use this when the target universe is older housing stock, vintage assets, or properties with potential renovation upside."
                    },
                    "min_stories": {
                        "title": "Set Minimum Stories",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "10",
                            "15",
                            "20"
                        ],
                        "type": "string",
                        "description": "Set the minimum story count when verticality is part of the asset definition, such as multi-level homes, taller buildings, or denser residential formats."
                    },
                    "max_stories": {
                        "title": "Set Maximum Stories",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "10",
                            "15",
                            "20"
                        ],
                        "type": "string",
                        "description": "Set the maximum story count to exclude taller structures or keep the dataset aligned with low-rise, mid-rise, or accessibility-sensitive product requirements."
                    },
                    "sort_by": {
                        "title": "Choose Result Sort",
                        "enum": [
                            "recommended",
                            "newest",
                            "lowest_price",
                            "highest_price",
                            "highest_lot_size",
                            "highest_building_size",
                            "lowest_price_sqft"
                        ],
                        "type": "string",
                        "description": "Select how Redfin should order the search results before collection. Use Recommended for Redfin's default ranking, Newest for fresh inventory, price sorts for budget or comp scans, size sorts for larger physical assets, and lowest price per square foot for value-oriented screening.",
                        "default": "recommended"
                    },
                    "enrich_data": {
                        "title": "Collect Richer Listing Details",
                        "type": "boolean",
                        "description": "Enable enrichment when you need a more complete diligence record: remarks, amenity detail, climate-risk context, schools, neighborhood scores, zoning, parcel metadata, and summaries when Redfin provides them. Disable it for faster reconnaissance runs, QA smoke tests, or high-level market counts where the standard result fields are sufficient.",
                        "default": true
                    },
                    "limit": {
                        "title": "Set Maximum Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of listings to save. Set a low value for validation or sampling, and leave empty when completeness is more important than a predictable output size."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
