# Rental Listing Scraper - Rental Property Data (`coder_zoro/rental-listing-scraper---rental-property-data`) Actor

Extract comprehensive rental property data from multiple locations with advanced filtering. Get detailed listings including prices, photos, amenities, and unit details. Perfect for real estate investors, property managers, and market researchers.

- **URL**: https://apify.com/coder_zoro/rental-listing-scraper---rental-property-data.md
- **Developed by:** [Zoro](https://apify.com/coder_zoro) (community)
- **Categories:** Real estate
- **Stats:** 111 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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/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

## 🏠 Rental Listing Scraper - Rental Property Data

**Extract comprehensive rental property listings with advanced filtering and sorting options. Perfect for real estate professionals, property managers, investors, and market researchers.**

### ✨ Key Features

- 🚀 **Lightning Fast** - Concurrent scraping of multiple locations simultaneously
- 🎯 **Advanced Filtering** - Filter by property type, price, pet policies, and special offers
- 📊 **Rich Data** - Get detailed property information including photos, virtual tours, and unit details
- 🌍 **Multi-Location Support** - Scrape multiple cities or states in a single run
- 💎 **High Quality** - Clean, structured data ready for analysis or integration
- 🔄 **Pagination Support** - Extract up to 100 pages per location (4,200 properties)

### 🎯 Perfect For

- **Real Estate Investors** - Find investment opportunities and analyze market trends
- **Property Managers** - Monitor competitor pricing and availability
- **Market Researchers** - Gather comprehensive rental market data
- **Data Analysts** - Build datasets for rental price analysis and forecasting
- **Relocation Services** - Help clients find suitable rental properties
- **Real Estate Agencies** - Keep track of market inventory

### 📋 What Data You'll Get

Each property listing includes:

#### 🏘️ Property Details

- Property ID and Listing ID
- Property name and type (apartment, condo, townhome, single family)
- Bedrooms and bathrooms (min/max)
- Square footage (min/max)
- Price range (min/max)

#### 📍 Location Information

- Complete address (street, city, state, ZIP)
- GPS coordinates (latitude/longitude)
- County name

#### 💰 Pricing & Availability

- List price or price range
- Price reduction information
- Special offers and promotions
- Available date

#### 🖼️ Media

- Primary photo URL
- Additional property photos (up to 3)
- Virtual tour links
- Matterport 3D tours

#### 🐾 Amenities & Policies

- Pet policy (cats, dogs, size restrictions)
- Special features and amenities
- Application eligibility status

#### 🏢 Management Info

- Property management company
- Advertiser information
- Contact details

#### 📦 Unit Information

- Individual unit details
- Availability dates per unit
- Pricing per unit
- Specifications per unit

### 🚀 Quick Start

#### Basic Usage

```json
{
  "locations": ["Miami", "Orlando"],
  "property_type": "apartment",
  "page_count": 2
}
```

#### Advanced Filtering

```json
{
  "locations": ["Florida", "Georgia", "Texas"],
  "property_type": "single family",
  "sort_by": "lowest price",
  "page_count": 5,
  "pet_friendly": true,
  "rent_specials": true
}
```

### 📝 Input Parameters

| Parameter | Type | Required | Description | Options |
|-----------|------|----------|-------------|---------|
| `locations` | Array | ✅ Yes | List of locations to search | Any city, state, or region |
| `property_type` | String | No | Type of property | `any`, `apartment`, `townhome`, `condo`, `single family` |
| `sort_by` | String | No | How to sort results | `best match`, `recently added`, `highest price`, `lowest price` |
| `page_count` | Integer | No | Number of pages to scrape | 1-100 (default: 1) |
| `rent_specials` | Boolean | No | Filter for special offers | `true` / `false` |
| `apply_now` | Boolean | No | Filter for online applications | `true` / `false` |
| `pet_friendly` | Boolean | No | Filter for pet-friendly properties | `true` / `false` |

#### 📌 Notes

- Each page contains up to 42 property listings
- Maximum 100 pages per location (4,200 properties)
- Filters can be combined for precise results

### 💡 Usage Examples

#### Example 1: Budget-Friendly Apartments

Find affordable apartments with special offers:

```json
{
  "locations": ["Phoenix", "Las Vegas"],
  "property_type": "apartment",
  "sort_by": "lowest price",
  "page_count": 3,
  "rent_specials": true
}
```

#### Example 2: Pet-Friendly Homes

Search for pet-friendly single-family homes:

```json
{
  "locations": ["Austin", "Denver", "Portland"],
  "property_type": "single family",
  "sort_by": "recently added",
  "page_count": 5,
  "pet_friendly": true
}
```

#### Example 3: Market Research

Comprehensive data collection for market analysis:

```json
{
  "locations": ["New York", "Los Angeles", "Chicago", "Houston", "Miami"],
  "property_type": "any",
  "sort_by": "best match",
  "page_count": 10
}
```

#### Example 4: Luxury Rentals

Find high-end rental properties:

```json
{
  "locations": ["Manhattan", "Beverly Hills", "Miami Beach"],
  "property_type": "condo",
  "sort_by": "highest price",
  "page_count": 5,
  "apply_now": true
}
```

### 📊 Output Format

The scraper outputs clean, structured JSON data:

```json
{
  "property_id": "9816250601",
  "listing_id": "2977153881",
  "list_price_min": 1070,
  "list_price_max": 1350,
  "permalink": "121-NW-7th-Ave_Miami_FL_33128_M98162-50601",
  "has_specials": true,
  "status": "for_rent",
  "list_date": "2025-01-03T15:16:41.000000Z",
  "primary_photo": "https://...",
  "photos": ["https://...", "https://..."],
  "pet_policy": {
    "cats": false,
    "dogs": false
  },
  "description": {
    "name": "AERIE Apartments",
    "type": "apartment",
    "beds_min": 1,
    "beds_max": 1,
    "baths_min": 1,
    "baths_max": 1,
    "sqft_min": 650,
    "sqft_max": 740
  },
  "location": {
    "address": "121 NW 7th Ave",
    "city": "Miami",
    "state_code": "FL",
    "postal_code": "33128",
    "coordinate": {
      "lat": 25.774916,
      "lon": -80.205933
    },
    "county": "Miami-Dade"
  },
  "units": [
    {
      "availability": {"date": "2025-08-25"},
      "description": {"beds": 1, "baths": 1, "sqft": 650},
      "list_price": 1150
    }
  ],
  "search_location": "Miami",
  "search_page": 1
}
```

### ⚡ Performance

- **Speed**: Processes multiple locations concurrently
- **Efficiency**: ~42 properties per page
- **Scalability**: Handle hundreds of locations in one run
- **Reliability**: Automatic error handling and retry logic

### 🔧 Best Practices

1. **Start Small**: Test with 1-2 locations and few pages first
2. **Use Specific Locations**: City names work better than broad regions
3. **Combine Filters**: Use multiple filters for precise targeting
4. **Monitor Costs**: More pages = more compute units
5. **Export Options**: Download results as JSON, CSV, or Excel

### 📈 Use Cases

#### Real Estate Investment

- Identify undervalued properties
- Analyze rental yields by location
- Track market trends over time
- Compare pricing across neighborhoods

#### Property Management

- Competitive analysis
- Market rate research
- Vacancy monitoring
- Amenity benchmarking

#### Market Research

- Rental price analysis
- Supply and demand studies
- Geographic market comparison
- Trend forecasting

#### Relocation Services

- Client property matching
- Budget-appropriate options
- Pet-friendly searches
- Amenity-based filtering

### 🛡️ Data Quality

- ✅ Real-time data extraction
- ✅ Verified property information
- ✅ Complete address details
- ✅ High-resolution photos
- ✅ Accurate pricing data
- ✅ Up-to-date availability

### 🌟 Why Choose This Scraper?

✅ **Reliable** - Built with robust error handling\
✅ **Fast** - Concurrent processing for maximum speed\
✅ **Complete** - Comprehensive property data\
✅ **Easy** - Simple input, structured output\
✅ **Scalable** - Handle any volume of data\
✅ **Maintained** - Regular updates and improvements

***

**Ready to extract rental property data?** Start scraping now and gain valuable insights into the rental market! 🚀

# Actor input Schema

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

List of locations to search (e.g., Florida, Miami, Orlando)

## `property_type` (type: `string`):

Type of property to search for

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

Sort option for results

## `page_count` (type: `integer`):

Number of pages to scrape (42 results per page)

## `rent_specials` (type: `boolean`):

Filter for properties with rent specials

## `apply_now` (type: `boolean`):

Filter for properties with online application

## `pet_friendly` (type: `boolean`):

Filter for pet-friendly properties

## Actor input object example

```json
{
  "locations": [
    "Florida",
    "Miami",
    "Orlando"
  ],
  "property_type": "any",
  "sort_by": "best match",
  "page_count": 1,
  "rent_specials": false,
  "apply_now": false,
  "pet_friendly": false
}
```

# Actor output Schema

## `overview` (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 = {
    "locations": [
        "Florida"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("coder_zoro/rental-listing-scraper---rental-property-data").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 = { "locations": ["Florida"] }

# Run the Actor and wait for it to finish
run = client.actor("coder_zoro/rental-listing-scraper---rental-property-data").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 '{
  "locations": [
    "Florida"
  ]
}' |
apify call coder_zoro/rental-listing-scraper---rental-property-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,coder_zoro/rental-listing-scraper---rental-property-data"
        }
    }
}
```

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/FRZSdiLOgDnnEohlY/builds/xS1ITau08LYXiecK0/openapi.json
