# 🏠 Redfin Rental Scraper - Apartments & Value Score (`benthepythondev/redfin-rental-scraper`) Actor

Extract Redfin rentals with filters for price, beds, baths, sqft, pets & amenities. Get apartments, houses, condos with full details, photos & availability. Filter by AC, parking, pool, furnished. Perfect for investors, property managers & relocation services.

- **URL**: https://apify.com/benthepythondev/redfin-rental-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $16.00 / 1,000 results

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Rental Scraper — apartments & rentals with a value score

Extract **rental listings from Redfin** — apartments, houses, condos and townhomes — as
clean, structured data with a **0–100 value score** on every listing. Get monthly rent,
beds, baths, square footage, address, amenities and photos in one row, so apartment
hunters, property managers and investors can spot the best-priced units instantly instead
of scrolling endless map pages. Export to JSON/CSV/Excel, run on a schedule, call via
API, or connect to Make, Zapier or n8n.

### 🏠 What is the Redfin Rental Scraper?

It turns any Redfin rental search into a structured dataset. Give it a city and state
(plus optional filters for price, beds, baths and pet policy) and it returns every
matching rental with full details, photos and a value score that ranks the best deals
first. You can also pass exact Redfin listing URLs to pull deep detail on specific
properties. It drives a real Chromium browser through Redfin's pages and paginates
automatically — no API key, no login.

#### What data does it extract?

- **Monthly rent** as a number (`price`) and as text (`price_text`, e.g. `$1,445/mo` or `Contact for Price`)
- **Bedrooms, bathrooms and square footage** (`bedrooms`, `bathrooms`, `sqft`)
- **Address** and **property name** (`address`, `property_name`)
- **Photos** (`photos`) and an **amenities preview** or full **amenities** list
- **Listing description** (on detail pages) and **property type**
- **Listing URL** (`url`), **source** and **scraped\_at** timestamp
- **AI value score (0–100)** (`value_score`) ranking price-per-bed, price-per-sqft, listing quality and completeness

### ⬇️ Input

Run it two ways — search a location with filters, or pass exact listing URLs:

| Field | Description |
|-------|-------------|
| `mode` | `search` (by location + filters) or `urls` (direct listing URLs) |
| `location` | City and state, e.g. `San Francisco, CA` |
| `propertyType` | `apartments`, `houses`, `condos` or `townhomes` |
| `minPrice` / `maxPrice` | Monthly rent range in USD |
| `minBeds` / `maxBeds` / `minBaths` | Bedroom and bathroom filters |
| `petsAllowed` | `any`, `dogs`, `cats` or `both` |
| `listingUrls` | Direct Redfin rental URLs (used in `urls` mode) |
| `maxListings` | Cap the run (1–500, default 100) |
| `includePhotos` / `includeAmenities` | Toggle photos and amenity details |

#### Example input

```json
{
  "mode": "search",
  "location": "San Francisco, CA",
  "propertyType": "apartments",
  "minPrice": 1500,
  "maxPrice": 3500,
  "minBeds": 1,
  "minBaths": 1,
  "petsAllowed": "dogs",
  "maxListings": 100,
  "includePhotos": true,
  "includeAmenities": true
}
```

### ⬆️ Output

Every listing is one clean row (view as a **table**, or export **JSON / CSV / Excel**):

```json
{
  "url": "https://www.redfin.com/apartment/12345/CA/San-Francisco/360-Hyde-St",
  "source": "redfin",
  "scraped_at": "2026-06-26T15:30:00.000Z",
  "price": 1445,
  "price_text": "$1,445/mo",
  "bedrooms": 0,
  "bathrooms": 1,
  "sqft": 425,
  "address": "360 Hyde St, San Francisco, CA, 94109",
  "property_name": "The Hyde",
  "photos": ["https://ssl.cdn-redfin.com/photo/..."],
  "amenities_preview": "Pets welcome • Parking • Laundry",
  "value_score": 78
}
```

### 💡 Use cases

- **🔑 Apartment hunters:** filter by budget, beds, baths and pet policy, then let the value score surface the best-priced units first.
- **🏢 Property managers & landlords:** benchmark asking rents, amenities and square footage against comparable units in any city.
- **💰 Real estate investors:** spot under-priced rentals (high value score) for buy-to-let and cash-flow analysis.
- **📊 Market research:** track rent levels and supply across neighborhoods and property types over time.

### 🧮 How the value score works

A transparent 0–100 score combining **price per bedroom** (lower is better),
**price per square foot**, **listing quality** (photo count and amenities) and
**data completeness**. Higher scores flag the strongest-value rentals, so you can sort
and work the best options first instead of comparing every listing by hand.

### ❓ FAQ

**How do I scrape rentals from Redfin?** Pick a `location` and `propertyType`, add optional
filters (price, beds, baths, pets), then Run. You get structured listings with rent, beds,
baths, sqft, address, photos and a value score.

**Do I need an API key or a Redfin login?** No. It reads public Redfin rental pages
directly — just give it a location and filters.

**What property types are supported?** Apartments, houses, condos and townhomes — set the
`propertyType` field to choose.

**Can I scrape specific listings instead of searching?** Yes — set `mode` to `urls` and
paste Redfin rental URLs into `listingUrls` to pull detail on exactly those properties.

**Can I filter by price, bedrooms and pets?** Yes — use `minPrice`/`maxPrice`,
`minBeds`/`maxBeds`/`minBaths`, and `petsAllowed` (`dogs`, `cats` or `both`).

**What is the value score?** A 0–100 ranking built from price per bedroom, price per
square foot, listing quality and completeness, so the best-value rentals rise to the top.

**How many listings can it return?** Up to your `maxListings` cap (max 500); it paginates
through the search results automatically.

**Why are some prices shown as "Contact for Price"?** Some Redfin rentals don't publish a
number; the scraper records the `price_text` so you still capture those listings.

**Can I run it on a schedule or via API?** Yes — schedule recurring runs in Apify, call it
via the API/SDK, or connect it to Make, Zapier or n8n.

**Is scraping Redfin legal?** It extracts publicly available rental data. Use it
responsibly for research and rental search, and follow applicable laws and Redfin's terms
of service.

### 🔗 You might also like

- **[Redfin Scraper](https://apify.com/benthepythondev/redfin-scraper)** — homes for sale, rent & sold
- **[Zumper Rental Scraper](https://apify.com/benthepythondev/zumper-rental-scraper)** — Zumper rentals
- **[HotPads Rental Scraper](https://apify.com/benthepythondev/hotpads-rental-scraper)** — HotPads rental listings
- **[Craigslist Real Estate Scraper](https://apify.com/benthepythondev/craigslist-real-estate-scraper)** — FSBO & off-market rentals

***

**Keywords:** Redfin scraper, Redfin rental scraper, apartments for rent, rental listings scraper, rent data, apartment hunting, property management data, real estate investor leads, rental value score, Redfin API, rent comparison, condos for rent, houses for rent, townhomes for rent, rental market research.

# Actor input Schema

## `mode` (type: `string`):

Choose between search mode or direct listing URLs

## `location` (type: `string`):

City and state to search for rentals (e.g., 'San Francisco, CA')

## `propertyType` (type: `string`):

Type of rental property to search for

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

Minimum monthly rent in USD

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

Maximum monthly rent in USD

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

Minimum number of bedrooms

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

Maximum number of bedrooms

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

Minimum number of bathrooms

## `petsAllowed` (type: `string`):

Filter by pet policy

## `listingUrls` (type: `array`):

Direct Redfin rental listing URLs to scrape (used in 'urls' mode)

## `maxListings` (type: `integer`):

Maximum number of listings to scrape

## `includePhotos` (type: `boolean`):

Include photo URLs in the output

## `includeAmenities` (type: `boolean`):

Include detailed amenity information

## Actor input object example

```json
{
  "mode": "search",
  "location": "San Francisco, CA",
  "propertyType": "apartments",
  "petsAllowed": "any",
  "listingUrls": [],
  "maxListings": 100,
  "includePhotos": true,
  "includeAmenities": true
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/redfin-rental-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/redfin-rental-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 '{}' |
apify call benthepythondev/redfin-rental-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/fmfDQKdSl8uCYrrhG/builds/H6q8VzAsTltiCBT51/openapi.json
