# Trulia Asking Price Comps | Local Market Benchmarks (`jpmarketdata/trulia-asking-price-comps`) Actor

Compare current Trulia asking prices in one US city. Get bounded-sample medians, quartiles and property-type/bedroom segments. Asking prices only: not sold comps or property valuations. $0.05 per completed market report.

- **URL**: https://apify.com/jpmarketdata/trulia-asking-price-comps.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 market report completeds

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

## Trulia Asking Price Comps

Compare current asking-price distributions in one US city. This is a bounded listing sample, not sold comps, a valuation, a city census or a loan-decision tool.

**Price:** $0.05 per successful market report (`market-analyzed`).

### Input

Set `locationUrl` to one canonical `https://www.trulia.com/STATE/City/` for-sale page. `maxPages` defaults to 1 and is capped at 3. `maxListings` defaults to 40 and is capped at 120. Search/API, rental/sold, property-detail, query, fragment and cross-host URLs are rejected. Listing pages use the same city plus `/2_p/` or `/3_p/` only.

### Output

One `asking_price_market` row contains the market, source URL, UTC observation time, USD currency, asking-price basis, pages fetched, sampled/priced/excluded counts and `coverage=bounded-listing-sample`. `reportedTotalListings` is optional source-reported inventory, not our sample count. `askingPrice` contains count, min, p25, median, p75 and max. Quartiles use linear interpolation at index `(n-1)*p` on sorted valid values. Optional `askingPricePerSqft` uses only positive explicit floor area; no lot area or inferred dimensions. `segments` groups valid records by property type and bedroom count; omit unknown segments. `warnings` explains sampling and data gaps. Stats are calculated from unique sampled listings, not nearby or promoted off-query payloads. Dataset examples are synthetic contracts, not live price evidence.

### Pricing

One `market-analyzed` event costs $0.05 for a successfully emitted market report, regardless of listing or page count. One input market produces at most one event. Failed fetches, blocked pages and source listing rows are not separately charged. No actor-specific free trial is promised. Apify platform credits may apply; respect the run's maximum charge budget before emitting a billable report.

### Limits

At most 3 source requests with no retries, and a 180-second run budget; 30-second request timeout, sequential requests with at least 3 seconds between them, 5 MB decoded body cap. Pagination follows only an explicit next-page link and stops at the source's last page, `maxPages`, or `maxListings`. HTTP/JSON only, 256 MB target. Redirects are rejected. Rate limits, authentication/challenges, structural changes and timeouts fail explicitly. Listings with no valid current prices cause failure. A structurally valid matching city response with an empty `homes` list and explicit `totalHomes=0` produces a billable negative report with zero counts, an explanatory warning and no price statistics. A 200 response or missing cards alone does not establish an empty market. No raw page or contact-data persistence.

### Privacy

Only aggregate market data is returned. No property street addresses, detail URLs, agent/owner names, phones, emails, coordinates, photos, descriptions, review text, raw source payloads or session identifiers are stored or logged. Exact internal listing IDs may be used transiently for deduplication and then discarded.

# Actor input Schema

## `locationUrl` (type: `string`):

One canonical HTTPS Trulia /STATE/City/ for-sale URL. No search, sold, rental, query or detail URLs.

## `maxPages` (type: `integer`):

Fetch at most this many source listing pages, from 1 to 3.

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

Use at most this many unique listing records in the market sample.

## Actor input object example

```json
{
  "locationUrl": "https://www.trulia.com/CA/San_Francisco/",
  "maxPages": 1,
  "maxListings": 40
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/trulia-asking-price-comps").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("jpmarketdata/trulia-asking-price-comps").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 '{}' |
apify call jpmarketdata/trulia-asking-price-comps --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/trulia-asking-price-comps"
        }
    }
}
```

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/yXqYjOzfSImA9K2Zy/builds/QgVdxqCZzhVAKeYa9/openapi.json
