# Real Estate Scraper for Redfin - Listings, Sold Comps & Leads (`scrapesage/redfin-scraper`) Actor

Scrape for-sale & sold homes on Redfin for any US city, ZIP, neighborhood or county: price, beds/baths/sqft, HOA, Redfin Estimate, rent estimate, price history, schools & agent leads. Independent tool - not affiliated with or endorsed by Redfin Corporation; all trademarks belong to their owners.

- **URL**: https://apify.com/scrapesage/redfin-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Real estate, Lead generation, Agents
- **Features:** Limited permissions
- **Stats:** 174 total users, 63 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 property scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Real Estate Scraper for Redfin - Listings, Sold Comps, Estimates, Price History & Agent Leads

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Redfin Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Redfin" is referenced only to describe the publicly available website this Actor collects data from.

Extract **complete Redfin real-estate data** for any US city, ZIP, neighborhood or county - including **the Redfin Estimate, rent estimate, full price/sale history, assigned schools with ratings, climate-risk factors, tax & public records, building permits, every photo, and the listing agent & brokerage**. Pull live **for-sale** listings or recent **sold comps**, and monitor a market for **new listings and price drops**.

> **Note (October 2026):** Redfin now answers its individual property pages with a bot check, so this actor reads each home's page through Apify's unblocking proxy. Runs with property details are slower than before: a page takes from a few seconds to about a minute, several at a time. The **Property detail enriched** fee is charged only for a home whose full page was read; a home whose page cannot be read still gets its search record and Redfin's estimate block (Redfin Estimate, last sale, comparables), and the run's status message says how many homes that was.

No login, no API key, no browser - fast JSON extraction straight from Redfin's public map/search data path.

### Why use this scraper for Redfin?

This actor opens each home's full record and ships **a complete dataset**:

| Data | This actor |
| --- | --- |
| Price, beds, baths, sqft, lot, year, HOA, $/sqft | ✅ |
| MLS #, status, source, days on market | ✅ |
| **Redfin Estimate** (home value AVM), last sale | ✅ |
| **Rent estimate** (monthly, low/high) | ✅ |
| **Full price & sale history** (with sources) | ✅ |
| **Assigned schools** + GreatSchools & parent ratings | ✅ |
| **Climate risk** (flood / fire / heat / wind) | ✅ |
| **Tax & public records** (assessed values, taxes, APN) | ✅ |
| **Building permits** | ✅ |
| **Listing agent + phone + email + license + brokerage** (where the MLS publishes them) | ✅ |
| **Buyer's agent + brokerage** on sold homes | ✅ |
| All photos, full description, features/amenities | ✅ |
| Sold comps (CMA) by recency window, plus Redfin's own comparables per home | ✅ |
| **Views, favorites, Walk Score, lifestyle scores, sun exposure** | ✅ |
| **Market context** (Redfin Compete Score, region price trends, zoning) | ✅ |
| New-listing & price-drop monitoring | ✅ |

### Use cases

- **Real-estate investing & analysis** - pull active listings *and* recent sold comps (CMA) for a ZIP, compare list price to the **Redfin Estimate** and **rent estimate**, screen by $/sqft, cap-rate inputs, lot size and year built.
- **Lead generation** - with property details on, every listing carries the **listing agent, phone and brokerage** (where the MLS publishes them) and sold homes the **buyer's agent and brokerage**. Build agent/brokerage prospect lists by market, price band, and volume.
- **Market & pricing intelligence** - track median price, days-on-market, price cuts and sell-through for any city, neighborhood or ZIP over time.
- **New-listing & price-drop alerts** - run in monitoring mode on a schedule to capture only homes that are new or whose price/status changed since the last run.
- **Proptech & valuation models** - feed clean, structured listings, sale history, tax records and climate risk into your own models, dashboards or CRM.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) - the free plan is enough to try this actor.
2. Open this Actor, paste a Redfin city/ZIP/neighborhood/county URL (or just a list of ZIP codes), pick **For sale** or **Sold**, and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS - or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "listingType": "for_sale",
    "searchUrls": ["https://www.redfin.com/city/11203/CA/Los-Angeles"],
    "zipCodes": ["90210", "78701"],
    "minPrice": 500000,
    "maxPrice": 2000000,
    "minBeds": 3,
    "propertyTypes": ["house", "condo"],
    "includePropertyDetails": true,
    "maxResults": 200
}
```

- **listingType** - `for_sale` (active, coming-soon & pending) or `sold` (recent comparable sales).
- **searchUrls** - Redfin **city / ZIP / neighborhood / county** page URLs. Browse Redfin, apply filters, copy the URL from your address bar - every home in that region is scraped.
- **zipCodes** - shortcut: a list of 5-digit US ZIP codes, each resolved to its Redfin region.
- **propertyUrls** - individual Redfin home URLs to scrape just those homes' full detail (price, status, MLS #, Redfin Estimate, price history, schools, climate risk, agent & brokerage). If a home's page cannot be read, it still gets its Redfin search record (when it is for sale or sold in the last 5 years) and Redfin's estimate block, without the detail fee. A URL Redfin does not know is named in the run's status message and not billed.
- **minPrice / maxPrice / minBeds / maxBeds / minBaths / propertyTypes** - listing filters.
- **soldWithinDays** *(sold only)* - 7 / 30 / 90 / 180 / 365 / 1095 days of comps.
- **sort** - recommended, newest, most-recently-sold, price, sqft, lot size, $/sqft.
- **includePropertyDetails** *(default true)* - open each home for the Redfin Estimate, rent estimate, price history, schools, climate risk, tax/public records, permits, photos and listing agent/brokerage (one extra page fetch per home, through Apify's unblocking proxy while Redfin shows its bot check: a few seconds to about a minute per page, several at a time). A home whose page cannot be read gets Redfin's estimate block instead (Redfin Estimate, last sale, comparables) and is not charged the detail fee.
- **maxResults / maxResultsPerSearch** - global and per-region caps.
- **monitorMode** *(default false)* - emit ONLY new or changed (price/status) listings vs. the previous run; pairs with [Schedules](https://docs.apify.com/platform/schedules).

### Output

One record per property:

```json
{
    "propertyId": 6824442,
    "url": "https://www.redfin.com/CA/Beverly-Hills/324-N-Palm-Dr-90210/unit-204/home/6824442",
    "fullAddress": "324 N Palm Dr #204, Beverly Hills, CA 90210",
    "price": 1395000,
    "beds": 3,
    "baths": 2,
    "sqFt": 1766,
    "pricePerSqFt": 790,
    "lotSizeSqFt": null,
    "yearBuilt": 1980,
    "hoaMonthly": 850,
    "propertyType": "Condo/Co-op",
    "mlsStatus": "Active",
    "mlsNumber": "26848017",
    "listingSource": "TheMLS",
    "saleType": "For sale",
    "daysOnMarket": 1,
    "city": "Beverly Hills",
    "state": "CA",
    "zip": "90210",
    "latitude": 34.0731,
    "longitude": -118.4004,
    "redfinEstimate": 1384281,
    "rentEstimate": 7168,
    "rentEstimateLow": 6900,
    "rentEstimateHigh": 7500,
    "listingAgentName": "Dustin Nicholas",
    "listingAgentPhone": "310-770-1847",
    "listingBrokerName": "Nicholas Property Group",
    "priceHistory": [
        { "date": "2026-06-15T07:00:00.000Z", "event": "Listed", "price": 1395000, "source": "TheMLS" }
    ],
    "schools": [
        { "name": "Beverly Vista", "type": "Public", "grades": "K-8", "rating": 8, "parentRating": 4, "distanceMiles": 0.6 }
    ],
    "climateRisk": { "floodFactor": 1, "fireFactor": 1, "heatFactor": 6, "windFactor": null },
    "publicRecords": { "yearBuilt": 1980, "totalSqFt": 1766, "apn": "4342003095", "propertyTaxes": 14817.27, "rollYear": 2025 },
    "photoCount": 35,
    "primaryPhoto": "https://ssl.cdn-redfin.com/photo/...",
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

In monitoring mode each record also carries `changeType` (`new` / `price_drop` / `price_increase` / `status_change`) and `previousPrice`.

Every record also includes `listingSource` (the MLS name, e.g. *Unlock MLS*) and `dataSourceId` - populated in **both** grid-only and full-detail runs.

**More on every record:** `fullBaths`, `partialBaths`, `stories`, `garageSpaces`, `parkingSpaces`, the listing's `keyFacts[]` and `listingTags[]` (also as one line of text, `listingTagsText`), machine-readable open-house times (`openHouseStart`, `openHouseEnd`, `openHouseEventName`), `hasInteractiveFloorplan`, `isRedfinListing` and `isSalePriceHidden`; and from the same search record, where the MLS shows them: `listingAgentName`, `listingBrokerName`, `listingCoBrokerName`, the buyer's brokerage on sold homes (`buyerBrokerName`) and the 3D tour link (`virtualTourUrl`).

`redfinEstimate` is Redfin's own estimate and is empty when Redfin shows none for the home (often the case for active listings); it is never the list price.

**With property details on, each home also carries:** the buyer's agent and brokerage on sold homes (`buyerAgentName`, `buyerBrokerName`); `viewCount`, `favoriteCount` and `isPopular`; `cumulativeDaysOnMarket`; `streetNumber` / `streetName`; `listingUpdatedAt`; `openHouses[]`; `keyDetails` (style, view, community, county as Redfin lists them); `isComingSoon`, `hasOfferDeadline`, `isLikelyUnderContract`; the listing agent's `listingAgentEmail` and `listingAgentLicense` plus `listingBrokerPhone`; `highlightTags[]`; `airFactor` and flood / fire insurance estimates; `schoolDistricts[]`; `walkScore` (with `walkScoreLabel`), `transitScore`, `bikeScore` and `locationScores` (fourteen lifestyle scores from quiet to nightlife); `sunExposure`; `marketCompetition` (Redfin Compete Score, sale-to-list ratio, days to pending); `regionTrends` (median list and sale prices, $/sqft, days on market, homes on market); `comparables[]` (Redfin's own recent sold comps with price, date, beds, baths and sqft); `zoning`; `publicRecordPropertyType` and `yearRenovated`.

### Pricing - pay per result, no start or subscription fee

You pay only for the depth you use:

| Event | Charged | Price |
|---|---|---|
| **Property scraped** | Every listing written to the dataset (grid record). | **$0.004** |
| **Property detail enriched** | Once per home whose full detail page was read (`includePropertyDetails` on, or any `propertyUrls`). A home whose page could not be read is not charged. | **$0.004** |

- **Grid-only** run (`includePropertyDetails: false`) → **$0.004 / home**
- **Full-detail** run (default) → **$0.008 / home** (listing + enrichment) for homes whose page was read, **$0.004** for the rest

Example: 1,000 homes with full details = **$8.00**; the same 1,000 grid-only = **$4.00**. You are charged only for the events above; the run's platform usage is not billed to you on top.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** - start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** - official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** - run it hourly/daily to monitor a market for new listings and price drops.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** - trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/redfin-scraper').call({
    listingType: 'for_sale',
    zipCodes: ['78701'],
    minPrice: 400000,
    includePropertyDetails: true,
    monitorMode: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Redfin properties`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps - no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** - multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** - push new listings or agent leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** - get notified when a monitored market gets new listings or price cuts.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** - auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** - pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** - trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** - ask your assistant to "find 3-bed houses under $800k in Austin and list the agents" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **property & local-market intelligence stack**:

- **[Rent.com Scraper](https://apify.com/scrapesage/rent-com-scraper)** - US apartment & rental listings with property-management leads.
- **[Craigslist Scraper](https://apify.com/scrapesage/craigslist-scraper)** - FSBO housing, real estate & classifieds with phone/email leads.
- **[Houzz Scraper](https://apify.com/scrapesage/houzz-scraper)** - home-improvement pros, contacts and reviews.
- **[Hipages Scraper](https://apify.com/scrapesage/hipages-scraper)** - Australian home-services trades with phone, ABN & licence.
- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** - UK companies, directors & PSCs.
- **[Insurance Agent Scraper](https://apify.com/scrapesage/insurance-agent-scraper)** - multi-carrier insurance-agent leads.
- **[Financial Advisor Scraper](https://apify.com/scrapesage/financial-advisor-scraper)** - FINRA & SEC adviser/firm leads.

### Tips

- **Big cities**: Redfin's map API returns up to ~350 homes per region. To exhaust a large market, scrape by **ZIP or neighborhood** (smaller regions) and/or narrow with price/beds - the actor caps per region and tells you when a region is maxed out.
- **Sold comps**: set `listingType: "sold"` and `soldWithinDays` for a comparable-sales (CMA) pull. The actor resolves each region's `market` automatically so sold results are accurate.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to track only new listings and price drops.
- **Proxies**: keep the default **US residential** proxy - Redfin's CDN blocks datacenter IPs, so residential is required (and is the default). A fully blocked run says so in its status message instead of ending silently empty, and bills nothing.
- **Cost control**: turn off `includePropertyDetails` for a fast, listing-grid-only run - no per-home page fetch, and you pay only the base **$0.004/home** with no enrichment fee (see **Pricing** above).

### FAQ

**How do I scrape Redfin listings for a specific city or ZIP?** Paste the Redfin city/ZIP/neighborhood/county page URL into `searchUrls`, or just add the 5-digit ZIP to `zipCodes`. Combine with filters to narrow by price, beds or property type.

**Can I get recently sold homes (comps)?** Yes - set `listingType` to `sold` and choose a `soldWithinDays` window (7 days to 3 years). Each comp includes sale price, sale date, beds/baths/sqft and, with details on, the Redfin Estimate, the full sale history and the buyer's agent and brokerage where the page names them.

**Where does the Redfin Estimate and rent estimate come from?** They are Redfin's own published estimates, read from the home's page and Redfin's estimate block - the same numbers a visitor sees.

**Does it include the listing agent's contact?** Yes - with property details on, the listing agent's name, phone and email and the brokerage come from the home's page (where the MLS publishes them; Seattle's MLS, for example, does not show the agent's phone). The listing agent and brokerage also come with every search record where the MLS shows them there. Fields are blank when Redfin or the MLS does not publish them.

**Can I export to Google Sheets, CSV, or Excel?** Yes - one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new listings automatically?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules). Each run emits only homes that are new or changed since the last run, tagged with `changeType`.

**Is scraping Redfin legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws and Redfin's terms. See the **Disclaimer** below.

**Is this an official Redfin tool?** No. This is an independent, third-party Actor with no affiliation to, endorsement by, or sponsorship from Redfin Corporation. See the **Disclaimer** below.

**A field is null - why?** Some homes genuinely don't publish an HOA, lot size, agent phone or estimate. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Data & lawful use

This Actor reads business and professional listings that the professionals themselves published to be found: names, roles, firms, ratings and the contact details shown on the public listing. Because those details belong to identifiable people, treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for B2B prospecting or market research), keep any outreach relevant to the professional's line of work, honour opt-outs and deletion requests, and do not use the output for spam.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Redfin Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"Redfin", "Redfin Estimate" and any related marks are trademarks of Redfin Corporation and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Redfin product, is not authorised or certified by Redfin Corporation, and does not distribute Redfin software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome - this actor is actively maintained.

# Actor input Schema

## `listingType` (type: `string`):

Scrape homes currently `For sale` (active, coming-soon & pending) or recently `Sold` (comparable sales for CMA / investor analysis).

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

Paste Redfin **city, ZIP, neighborhood or county** page URLs, e.g. `https://www.redfin.com/city/11203/CA/Los-Angeles`, `https://www.redfin.com/zipcode/90210`, `https://www.redfin.com/neighborhood/9719/CA/Los-Angeles/Hollywood`. Browse Redfin, apply any filters you like, then copy the URL from your address bar. Every listing in that region is scraped.

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

Optional shortcut: a list of 5-digit US ZIP codes (e.g. `78701`, `90210`). Each is resolved to its Redfin region and scraped. Use this instead of, or in addition to, Search URLs.

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

Optional. Paste individual Redfin home URLs (e.g. `https://www.redfin.com/WA/Seattle/9545-Interlake-Ave-N-98103/home/104682`) to scrape the full detail for just those homes (price, status, MLS #, Redfin Estimate, price history, schools, climate risk, agent & brokerage). Redfin currently answers property pages with a bot check, so pages are read through Apify's unblocking proxy (slower); a home whose page cannot be read still gets its search record and Redfin's estimate block, without the detail fee.

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

Only keep homes priced at least this much (USD). Leave empty for no filter.

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

Only keep homes priced at most this much (USD). Leave empty for no filter.

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

Minimum number of bedrooms. Leave empty for no filter.

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

Maximum number of bedrooms. Leave empty for no filter.

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

Minimum number of bathrooms. Leave empty for no filter.

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

Limit to specific property types. Leave empty to include all.

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

For `Sold` listing type only: how far back to pull comparable sales.

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

Order in which listings are pulled (also controls which appear first when capped).

## `includePropertyDetails` (type: `boolean`):

Open each home's page for the rich detail layer: **Redfin Estimate, rent estimate, full price/sale history, assigned schools (with ratings), climate-risk factors, tax & public records, building permits, all photos, full description, and the listing agent & brokerage**. Turn off for a faster, listing-grid-only run (address, price, beds/baths/sqft, lot, year, status, MLS#, geo). Adds one page fetch per home. Redfin currently answers its property pages with a bot check, so the pages are read through Apify's unblocking proxy (a few seconds to about a minute each, several at a time); a home whose page cannot be read gets Redfin's estimate block instead (Redfin Estimate, last sale, comparables) and is not charged the detail fee.

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

Global cap on the total number of properties emitted in this run.

## `maxResultsPerSearch` (type: `integer`):

Cap per region (city/ZIP/neighborhood/county). Redfin's map API returns at most ~350 homes per region; narrow with price, beds or a smaller region (ZIP/neighborhood) for deeper coverage of large markets.

## `monitorMode` (type: `boolean`):

Remember listings already returned and emit ONLY homes that are **new** or whose **price/status changed** since the last run (tagged `changeType`: new / price_drop / price_increase / status_change). Perfect for new-listing alerts and price-drop tracking. Pairs with Apify Schedules.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' listings for monitoring mode. Use a different name per tracked market to keep histories separate (lowercase letters, digits and hyphens).

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

Maximum parallel requests. Keep it moderate to stay friendly to Redfin's servers.

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

Proxy settings. Redfin's CDN (CloudFront) blocks datacenter IPs and returns nothing, so **US residential proxies are required**: this is the default and should not be changed unless you supply your own US residential proxy. Datacenter proxies will produce empty runs.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "listingType": "for_sale",
  "searchUrls": [
    "https://www.redfin.com/zipcode/90210"
  ],
  "propertyTypes": [],
  "soldWithinDays": "90",
  "sort": "recommended",
  "includePropertyDetails": true,
  "maxResults": 200,
  "maxResultsPerSearch": 350,
  "monitorMode": false,
  "monitorStoreName": "redfin-monitor",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "urlsFromFile": ""
}
```

# Actor output Schema

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

All scraped Redfin properties in the default dataset. Use the Listings / Investor / Leads dataset views to filter the columns.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [
        "https://www.redfin.com/zipcode/90210"
    ],
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/redfin-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": ["https://www.redfin.com/zipcode/90210"],
    "urlsFromFile": "",
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.redfin.com/zipcode/90210"
  ],
  "urlsFromFile": ""
}' |
apify call scrapesage/redfin-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/I8QdP3hK8gG9pwBFg/builds/cJtXSbxBurAZueHFX/openapi.json
