# Trulia Property Scraper 🏡 (`shahidirfan/trulia-property-scraper`) Actor

Extract detailed real estate listings directly from Trulia. This actor retrieves essential data on homes for sale, rentals, pricing trends, and neighborhood insights. Perfect for conducting market analysis, monitoring property values, and gathering comprehensive real estate datasets.

- **URL**: https://apify.com/shahidirfan/trulia-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Real estate, Developer tools, Automation
- **Stats:** 13 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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

## Trulia Real Estate Listings Scraper

Extract comprehensive Trulia property listings with rich pricing, status, media, and location details in one run. Collect cleaner, deeper real estate data for market analysis, monitoring, and lead workflows. Built for teams that need structured listing intelligence at scale.

---

### Features

- **Expanded listing coverage** — Collect far more listing attributes than basic property-card exports.
- **Sale and rental support** — Scrape both `buy` and `rent` inventory.
- **Location-first collection** — Run by location path or direct Trulia search URL.
- **Structured output fields** — Get normalized fields plus extended listing metadata.
- **Pagination support** — Automatically continues until your target result count is reached.
- **Ready for automation** — Output is compatible with dashboards, ETL jobs, and downstream tools.

---

### Use Cases

#### Real Estate Market Research
Track listing supply, pricing movement, and active/off-market status by city or region. Build recurring datasets for trend reports and neighborhood comparisons.

#### Investment Opportunity Screening
Filter listings by size, beds, baths, property status, and listing signals to shortlist potential deals faster. Monitor refreshed runs to detect newly active or changed listings.

#### Brokerage Intelligence
Analyze listing distribution and source/provider patterns across areas. Use enriched metadata fields to compare listing quality and positioning.

#### Rental Supply Monitoring
Track for-rent inventory in specific markets with consistent fields for occupancy and pricing analysis workflows. Combine recurring exports to watch market shifts over time.

#### Internal Data Products
Feed BI tools, custom APIs, CRM enrichment, or analytics pipelines with structured property listing records and detailed metadata.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `start_url` | String | No | — | Direct Trulia search URL to scrape. |
| `location` | String | No | `"NY"` | Location to build a search URL when `start_url` is not provided. |
| `listing_type` | String | No | `"buy"` | Listing mode: `buy` or `rent`. |
| `results_wanted` | Integer | No | `20` | Maximum listings to collect. |
| `proxyConfiguration` | Object | No | Residential Apify Proxy preset | Proxy settings for reliable extraction. |

---

### Output Data

Each dataset item includes legacy user-facing fields plus expanded listing metadata:

| Field | Type | Description |
|-------|------|-------------|
| `price` | String | Formatted listing price. |
| `beds` | String | Bedroom count. |
| `baths` | String | Bathroom count. |
| `sqft` | String | Square footage. |
| `lot_size` | String | Lot size when available. |
| `address` | String | Street address. |
| `city` | String | City name. |
| `state` | String | State code. |
| `zip_code` | String | ZIP code. |
| `full_address` | String | Full address line. |
| `latitude` | Number | Latitude coordinate. |
| `longitude` | Number | Longitude coordinate. |
| `listing_by` | String | Listing provider summary. |
| `feature_highlights` | String | Clean, human-readable highlights (for example `Year Built: 1920 | HOA: None`). |
| `review` | String | Short readable listing summary built from top fields. |
| `image_url` | String | Primary listing image URL. |
| `url` | String | Absolute Trulia listing URL. |
| `search_page` | Number | Page index that produced the listing. |
| `search_location_id` | String | Search-area location identifier. |

Expanded flattened metadata fields:

| Field | Type | Description |
|-------|------|-------------|
| `metadata_compositeId` | String | Composite internal listing/home identifier. |
| `metadata_typedHomeId` | String | Typed home ID. |
| `metadata_legacyIdForSave` | String | Legacy save identifier. |
| `metadata_unifiedListingType` | String | Unified listing type label. |
| `price_formattedPrice` | String | Display price string. |
| `price_calloutMarkerPrice` | String | Map marker price label. |
| `priceChange_priceChangeDirection` | String | Price change direction. |
| `currentStatus_isActiveForSale` | Boolean | Active for sale status. |
| `currentStatus_isActiveForRent` | Boolean | Active for rent status. |
| `currentStatus_isOffMarket` | Boolean | Off-market status. |
| `currentStatus_isForeclosure` | Boolean | Foreclosure flag. |
| `activeListing_dateListed` | String | Listing date. |
| `activeListing_provider_summary` | String | Active listing provider summary. |
| `floorSpace_formattedDimension` | String | Floor space dimension text. |
| `lotSize_formattedDimension` | String | Lot size dimension text. |
| `bedrooms_formattedValue` | String | Formatted bedrooms value. |
| `bathrooms_formattedValue` | String | Formatted bathrooms value. |
| `media_heroImage_url_medium` | String | Medium hero image URL. |
| `media_heroImage_webpUrl_medium` | String | Medium WEBP hero image URL. |
| `location_fullLocation` | String | Formatted location label. |
| `location_partialLocation` | String | Partial location label. |
| `location_coordinates_latitude` | Number | Nested latitude. |
| `location_coordinates_longitude` | Number | Nested longitude. |
| `tags` | String | Listing tags. |
| `fullTags` | String | Full tag set. |
| `typedHomeId` | String | Home ID. |

---

### Usage Examples

#### Basic State Collection

```json
{
    "location": "NY",
    "listing_type": "buy",
    "results_wanted": 20
}
````

#### Rental Listings by City

```json
{
    "location": "Los Angeles",
    "listing_type": "rent",
    "results_wanted": 50
}
```

#### Direct Search URL

```json
{
    "start_url": "https://www.trulia.com/CA/San_Leandro/",
    "results_wanted": 30
}
```

***

### Sample Output

```json
{
    "url": "https://www.trulia.com/home/123-example-st-san-leandro-ca-94577-12345678",
    "price": "$559,000",
    "beds": "3",
    "baths": "2",
    "sqft": "1405",
    "lot_size": "5,400 sqft",
    "property_type": "SINGLE_FAMILY_HOME",
    "address": "123 Example St",
    "city": "San Leandro",
    "state": "CA",
    "zip_code": "94577",
    "listing_by": "Listing provided by ABC Realty",
    "feature_highlights": "Year Built: 1920 | HOA: None | Pool: No",
    "review": "$559,000 | 3 Beds, 2 Baths, 1405 sqft | 123 Example St, San Leandro, CA | Year Built: 1920 | HOA: None | Pool: No",
    "image_url": "https://www.trulia.com/pictures/thumbs/example.jpg",
    "search_page": 1,
    "search_location_id": "abc123",
    "full_address": "123 Example St, San Leandro, CA 94577",
    "latitude": 37.7242,
    "longitude": -122.1561,
    "metadata_compositeId": "7012345678-2012345678",
    "metadata_typedHomeId": "HOME_12345678",
    "price_formattedPrice": "$559,000",
    "currentStatus_isActiveForSale": true,
    "activeListing_dateListed": "2026-02-18T00:00:00Z",
    "floorSpace_formattedDimension": "1,405 sqft",
    "media_heroImage_url_medium": "https://...",
    "location_coordinates_latitude": 37.7242,
    "location_coordinates_longitude": -122.1561,
    "tags": "OPEN_HOUSE, NEW"
}
```

***

### Tips for Best Results

#### Start with a Small Batch

- Use `results_wanted: 20` for quick validation.
- Increase only after confirming output quality for your target market.

#### Use Precise Location Inputs

- For broad coverage, use state-level values like `"NY"`.
- For focused coverage, use city-specific inputs or a direct `start_url`.

#### Keep Data Fresh

- Schedule recurring runs for market tracking.
- Compare current runs against historical datasets to detect movement.

#### Proxy Configuration

```json
{
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### Integrations

Connect your data with:

- **Google Sheets** — Build live market tracking sheets.
- **Airtable** — Create searchable listing databases.
- **Make** — Trigger automations after each completed run.
- **Zapier** — Route fresh listing data into CRM and ops workflows.
- **Webhooks** — Send listing events to your own backend services.

#### Export Formats

- **JSON** — Best for developers and APIs.
- **CSV** — Spreadsheet and BI-ready tabular exports.
- **Excel** — Business reporting and stakeholder sharing.
- **XML** — Compatible with legacy integrations.

***

### Frequently Asked Questions

#### How many listings can I collect in one run?

You control this with `results_wanted`. Start with small values for testing, then scale up.

#### Can I scrape both for-sale and rental listings?

Yes. Use `listing_type: "buy"` for sale listings and `listing_type: "rent"` for rental listings.

#### Do I need a direct URL?

No. You can run by `location`, or provide `start_url` for precise targeting.

#### Why are some fields empty?

Some listings do not expose every attribute. Empty fields are omitted or unavailable when the source does not provide them.

#### How can I improve reliability?

Use residential proxies and run moderate request volumes per run.

#### Can I schedule this scraper?

Yes. Use Apify scheduling to run daily, hourly, or on custom intervals.

***

### Support

For issues or feature requests, use support channels available in the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Apify Scheduling](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for legitimate data collection use cases. You are responsible for complying with website terms, applicable laws, and responsible usage practices.

# Actor input Schema

## `start_url` (type: `string`):

Direct Trulia search URL. If provided, this will be used instead of location.

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

State code or city name to search (e.g., 'NY', 'Los Angeles'). Used if Start URL is not provided.

## `listing_type` (type: `string`):

Type of listings to scrape.

## `results_wanted` (type: `integer`):

Maximum number of listings to collect. Pagination is calculated automatically.

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

Proxy settings. Residential proxies recommended for Trulia.

## Actor input object example

```json
{
  "start_url": "https://www.trulia.com/NY/",
  "location": "NY",
  "listing_type": "buy",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": 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 = {
    "start_url": "https://www.trulia.com/NY/",
    "location": "NY",
    "listing_type": "buy",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/trulia-property-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 = {
    "start_url": "https://www.trulia.com/NY/",
    "location": "NY",
    "listing_type": "buy",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/trulia-property-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 '{
  "start_url": "https://www.trulia.com/NY/",
  "location": "NY",
  "listing_type": "buy",
  "results_wanted": 20
}' |
apify call shahidirfan/trulia-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trulia Property Scraper 🏡",
        "description": "Extract detailed real estate listings directly from Trulia. This actor retrieves essential data on homes for sale, rentals, pricing trends, and neighborhood insights. Perfect for conducting market analysis, monitoring property values, and gathering comprehensive real estate datasets.",
        "version": "0.0",
        "x-build-id": "RS1Al98ARoL2CPN6C"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~trulia-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-trulia-property-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/shahidirfan~trulia-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-trulia-property-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/shahidirfan~trulia-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-trulia-property-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",
                "properties": {
                    "start_url": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Direct Trulia search URL. If provided, this will be used instead of location."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "State code or city name to search (e.g., 'NY', 'Los Angeles'). Used if Start URL is not provided."
                    },
                    "listing_type": {
                        "title": "Listing Type",
                        "enum": [
                            "buy",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Type of listings to scrape.",
                        "default": "buy"
                    },
                    "results_wanted": {
                        "title": "Results Wanted",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to collect. Pagination is calculated automatically.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies recommended for Trulia.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
