# Trulia Rental Scraper (`silentflow/trulia-rental-scraper`) Actor

Extract Trulia rental listings — addresses, prices, beds, baths, sqft, photos, pet policy, parking, utilities and more. Search by city, ZIP or URL. Filter by price, bedrooms and listing type.

- **URL**: https://apify.com/silentflow/trulia-rental-scraper.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$14.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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

## Trulia Rental Scraper

by [SilentFlow](https://apify.com/silentflow)

Extract rental listings from Trulia with addresses, prices, beds, baths, square footage, coordinates, photos, and rental-specific features like pet policy, utilities, parking, heating, cooling, and laundry.

### ✨ Why use this scraper?

- 🏠 **Rental-focused data**: Pet policy, utilities included, parking, heating, cooling, laundry, fields that matter for rental decisions
- 📍 **Full location data**: Coordinates, neighborhood, community name, ZIP code, ready for mapping and geo-analysis
- 💰 **Price range support**: Min/max prices and bedroom ranges for communities listing multiple unit types
- 🖼️ **Full photo sets**: All listing photos at full resolution, street view image, and 3D virtual tours
- 📊 **More data than competitors**: Price history, HOA fee, tax records, local protections, MLS attribution, cross-reference IDs

### 🎯 Use cases

| Industry | Application |
|----------|-------------|
| **Rental market research** | Compare prices across neighborhoods, track rent trends over time |
| **Investment analysis** | Identify undervalued properties, analyze yield by area |
| **Tenant tools** | Bulk-search apartments matching specific criteria (pets, budget, size) |
| **Property management** | Monitor competing listings and pricing |
| **Real estate data pipelines** | Feed pricing databases, BI dashboards, or ML models |
| **Relocation assistance** | Compare cost of living between cities |

### 📥 Input parameters

#### Location

| Parameter | Type | Description |
|-----------|------|-------------|
| `location` | string | City + state (`New York, NY`), state (`TX`), or ZIP code (`78701`) |
| `startUrls` | array | Trulia search or listing detail page URLs |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `listingType` | string | `for_rent` | `for_rent`, `for_sale`, or `sold` |
| `minPrice` | integer |, | Minimum monthly rent in USD |
| `maxPrice` | integer |, | Maximum monthly rent in USD |
| `minBeds` | integer |, | Minimum number of bedrooms |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxItems` | integer | 100 | Maximum number of listings to return |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDetails` | boolean | false | Fetch each listing's detail page for full amenity list, description, price history, taxes, and more |

### 📊 Output data

#### Rental unit example

```json
{
  "id": "7448842386",
  "url": "https://www.trulia.com/home/714-w-22nd-st-austin-tx-78705-448842386",
  "listingType": "HOME_RentalUnit",
  "price": "$2,400/mo",
  "priceValue": 2400,
  "priceMin": 2400,
  "priceMax": 2400,
  "priceFormatted": "$2,400/mo",
  "hoaFee": "",
  "bedrooms": "2 Beds",
  "bedroomsMin": 2,
  "bedroomsMax": 2,
  "bathrooms": "2 Baths",
  "bathroomsMin": 2,
  "bathroomsMax": 2,
  "floorSpace": "1,050 sqft",
  "floorSpaceMin": 850,
  "floorSpaceMax": 1200,
  "streetAddress": "714 W 22nd St",
  "city": "Austin",
  "stateCode": "TX",
  "zipCode": "78705",
  "fullAddress": "714 W 22nd St, Austin, TX 78705",
  "communityName": "The Grove at Shoal Creek",
  "neighborhood": "West Campus",
  "latitude": 30.285513,
  "longitude": -97.746315,
  "description": "Spacious 2BR/2BA apartment in the heart of West Campus...",
  "petsAllowed": "Cats and Dogs OK",
  "utilitiesInfo": "Water included",
  "parkingInfo": "Garage available",
  "heatingInfo": "Central",
  "coolingInfo": "Central AC",
  "laundryInfo": "In Unit",
  "tags": ["PET FRIENDLY", "NEW"],
  "amenities": [
    { "name": "Building", "attributes": ["Pool", "Gym", "Concierge"] },
    { "name": "Unit", "attributes": ["Dishwasher", "In-unit Laundry"] }
  ],
  "heroImage": "https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/abc123-full.jpg",
  "photos": [
    "https://www.trulia.com/pictures/thumbs_5/zillowstatic/fp/abc123-full.jpg",
    "https://www.trulia.com/pictures/thumbs_5/zillowstatic/fp/def456-full.jpg"
  ],
  "photoCount": 18,
  "streetViewImage": "https://maps.googleapis.com/maps/api/streetview?...",
  "hasStreetView": true,
  "virtualTourUrl": "https://www.trulia.com/virtual-tour/...",
  "virtualTours": [{ "url": "https://my.matterport.com/show/?m=abc123", "heading": "3D Tour" }],
  "priceHistory": [
    { "date": "2024-11-01", "event": "Listed", "price": "$2,500/mo", "source": "MLS" },
    { "date": "2025-01-15", "event": "Price Drop", "price": "$2,400/mo", "source": "MLS" }
  ],
  "taxes": [
    { "year": "2023", "amount": "$4,820" },
    { "year": "2022", "amount": "$4,650" }
  ],
  "lastSold": { "agent": "John Smith", "broker": "Realty Austin", "source": "MLS" },
  "localProtections": [
    { "name": "Austin Renter Protection", "description": "72-hour notice required before entry" }
  ],
  "provider": "Zillow",
  "listingId": "448842386",
  "zPID": "448842386",
  "ssid": "X1Y2Z3",
  "isAvailable": true,
  "scrapedAt": "2025-02-28T10:30:00Z"
}
```

### 🗂️ Data fields

| Category | Fields |
|----------|--------|
| **Identity** | id, typedHomeId, url, dataType, listingType |
| **Price** | price, priceValue, priceMin, priceMax, priceFormatted, priceRange, hoaFee |
| **Property specs** | bedrooms, bedroomsMin, bedroomsMax, bathrooms, bathroomsMin, bathroomsMax, floorSpace, floorSpaceMin, floorSpaceMax, lotSize |
| **Location** | streetAddress, city, stateCode, zipCode, fullAddress, communityName, neighborhood, latitude, longitude |
| **Rental features** | petsAllowed, utilitiesInfo, parkingInfo, heatingInfo, coolingInfo, laundryInfo, amenities |
| **Media** | heroImage, photos, photoCount, streetViewImage, hasStreetView, virtualTourUrl, virtualTours |
| **History** | priceHistory, taxes, lastSold, localProtections |
| **Other** | tags, description, provider, isAvailable, scrapedAt |
| **Identifiers** | listingId, maloneId, zPID, ssid |

### 🚀 Examples

#### Search rentals in Austin, TX

```json
{
  "location": "Austin, TX",
  "listingType": "for_rent",
  "maxItems": 200
}
```

#### Filter by price and bedrooms

```json
{
  "location": "Seattle, WA",
  "listingType": "for_rent",
  "minPrice": 1500,
  "maxPrice": 3000,
  "minBeds": 2,
  "maxItems": 100
}
```

#### Scrape a specific search URL

```json
{
  "startUrls": [
    { "url": "https://www.trulia.com/for_rent/Los_Angeles,CA/2000-4000_price/2-3_beds/" }
  ],
  "maxItems": 500
}
```

#### Full data with amenities and price history

```json
{
  "location": "New York, NY",
  "listingType": "for_rent",
  "maxItems": 50,
  "includeDetails": true
}
```

### 💻 Integrations

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("silentflow/trulia-rental-scraper").call(run_input={
    "location": "Austin, TX",
    "listingType": "for_rent",
    "minPrice": 1500,
    "maxPrice": 3500,
    "minBeds": 2,
    "maxItems": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['fullAddress']}, {item['price']}, {item['petsAllowed']}")
```

#### JavaScript

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

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

const run = await client.actor('silentflow/trulia-rental-scraper').call({
    location: 'Austin, TX',
    listingType: 'for_rent',
    minPrice: 1500,
    maxPrice: 3500,
    minBeds: 2,
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    console.log(`${item.fullAddress}, ${item.price}, ${item.petsAllowed}`);
});
```

### 📈 Performance & limits

| Metric | Value |
|--------|-------|
| Listings per page | 40 |
| Default max items | 100 |
| Trulia search limit | ~4,000 results per search |
| Speed (search only) | ~100 listings in under 2 minutes |
| Speed (with details) | ~2s extra per listing |

### 💡 Tips for best results

1. **Use price and bedroom filters**: Narrow results to relevant listings before hitting the 4,000 result cap
2. **Combine location + URL**: Pass a pre-filtered Trulia URL via `startUrls` for precise targeting
3. **Enable `includeDetails`**: Required for amenities list, description, price history, taxes, and virtual tours
4. **Scrape by ZIP code**: More precise than city-level searches for dense markets
5. **Scale with multiple URLs**: Pass several filtered search URLs to cover full inventory in large cities

### ❓ FAQ

**Q: Do I need a Trulia account?**
A: No. The scraper accesses only publicly available listing data, no login required.

**Q: Why are some fields empty?**
A: Fields like `description`, `amenities`, `priceHistory`, and `taxes` require `includeDetails: true`. Fields like `neighborhood` or `communityName` are only present when Trulia includes them in the listing.

**Q: Can I scrape for-sale listings too?**
A: Yes. Set `listingType` to `for_sale` or `sold`. All fields apply to sale listings as well.

**Q: How many listings can I get per search?**
A: Trulia returns up to 4,000 results per search. Use price and bedroom filters to segment large markets and access the full inventory.

**Q: What happens if a listing is no longer available?**
A: The scraper captures `isAvailable: false` for inactive listings encountered during scraping.

### 📬 Support

Need help? We're here for you:

- **Feature requests**: Let us know what you need
- **Custom solutions**: Contact us for enterprise integrations or high-volume needs

Check out our other scrapers: [SilentFlow on Apify](https://apify.com/silentflow)

# Actor input Schema

## `startUrls` (type: `array`):

Trulia search or detail URLs to scrape. Supports search pages (e.g. https://www.trulia.com/for\_rent/Austin,TX/), building pages, and individual rental listings.

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

City and state (e.g. 'Austin, TX'), state only (e.g. 'TX'), or ZIP code (e.g. '78701'). Leave empty if using Start URLs.

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

Type of listings to scrape.

## `minPrice` (type: `string`):

Minimum monthly rent in USD (e.g. '1000'). Leave empty for no minimum.

## `maxPrice` (type: `string`):

Maximum monthly rent in USD (e.g. '3000'). Leave empty for no maximum.

## `minBeds` (type: `string`):

Minimum number of bedrooms (e.g. '2'). Leave empty for no minimum.

## `maxItems` (type: `integer`):

Maximum number of listings to scrape.

## `includeDetails` (type: `boolean`):

Fetch each listing's detail page for complete amenities, description, and more photos.

## `proxy` (type: `object`):

Proxy settings. Residential proxies are recommended for best results.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.trulia.com/for_rent/Austin,TX/"
    }
  ],
  "location": "Austin, TX",
  "listingType": "for_rent",
  "maxItems": 100,
  "includeDetails": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Complete listing data including: id, fullAddress, price, bedrooms, bathrooms, floorSpace, petsAllowed, city, stateCode, zipCode, photos, features, url, and more.

## `resultsCSV` (type: `string`):

Rental listings in CSV format.

## `resultsExcel` (type: `string`):

Rental listings in Excel format.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.trulia.com/for_rent/Austin,TX/"
        }
    ],
    "location": "Austin, TX",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/trulia-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 = {
    "startUrls": [{ "url": "https://www.trulia.com/for_rent/Austin,TX/" }],
    "location": "Austin, TX",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("silentflow/trulia-rental-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 '{
  "startUrls": [
    {
      "url": "https://www.trulia.com/for_rent/Austin,TX/"
    }
  ],
  "location": "Austin, TX",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call silentflow/trulia-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,silentflow/trulia-rental-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/JxOCeh51aLmyeB3Mj/builds/AgfjqdzQbKbJ5RO4Z/openapi.json
