Trulia APItrulia.com ↗
Access Trulia property listings, price history, photos, nearby schools, and local amenities via a structured API. Search for-sale, rental, and sold homes by location.
What is the Trulia API?
This API exposes 10 endpoints covering Trulia's real estate data, from paginated property searches to detailed listing records. search_for_sale_listings and search_for_rent_listings return up to 40 properties per page filtered by city and state, while get_listing_details delivers a single property's price, coordinates, floor space, features, media, and full price history in one response.
curl -X GET 'https://api.parse.bot/scraper/f436db0a-1bb1-4689-87b4-8f9e3d5e8993/search_for_sale_listings?page=1&location=New+York%2C+NY' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace trulia-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Trulia Real Estate API — bounded, re-runnable; every call capped."""
from parse_apis.trulia_real_estate_api import Trulia, Listing, ListingNotFound
trulia = Trulia()
# Search for-sale listings in New York — limit caps total items fetched.
ny = trulia.location("New York, NY")
for listing in ny.for_sale(limit=3):
print(listing.url, listing.location.city, listing.price.formatted_price)
# Drill-down: take ONE listing, then walk its sub-resources.
listing = ny.for_sale(limit=1).first()
if listing:
# Get price history
history = listing.price_history()
for event in history.history[:3]:
print(event.formatted_date, event.event, event.formatted_price)
# Get photos
photos = listing.photos()
for photo in photos.photos[:2]:
print(photo.url, photo.caption)
# Get neighborhood data
neighborhood = listing.local_amenities()
print(neighborhood.ndp_active, neighborhood.ndp_url, neighborhood.location_id)
# Get full listing details by URL — typed error handling
try:
detail = trulia.listings.get(url="/home/8334-116th-st-richmond-hill-ny-11418-32005834")
print(detail.location.street_address, detail.price.formatted_price)
except ListingNotFound as exc:
print(f"listing not found: {exc}")
# Mortgage estimate calculation
estimate = trulia.mortgageestimates.calculate(price=500000, down_payment=100000, term=30, rate=7.0)
print(estimate.monthly_payment, estimate.total_payment, estimate.total_interest)
# Search rentals in Chicago
chicago = trulia.location("Chicago, IL")
for rental in chicago.for_rent(limit=2):
print(rental.url, rental.price.formatted_price)
print("exercised: for_sale / for_rent / listings.get / price_history / photos / local_amenities / mortgageestimates.calculate")
Search properties for sale by city and state. Returns up to 40 listings per page with price, bedrooms, bathrooms, floor space, and listing status. Pagination via integer page number. Results include property URLs that can be passed to detail endpoints.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based) |
| locationrequired | string | City and state in the format 'City, ST' (e.g. 'New York, NY', 'Los Angeles, CA') |
{
"type": "object",
"fields": {
"page": "integer current page number",
"homes": "array of property listing objects with url, location, price, bedrooms, bathrooms, floorSpace, currentStatus, propertyType",
"totalHomes": "integer total number of matching listings"
},
"sample": {
"data": {
"page": 1,
"homes": [
{
"url": "/home/8334-116th-st-richmond-hill-ny-11418-32005834",
"price": {
"price": 1988888,
"currencyCode": "USD",
"formattedPrice": "$1,988,888"
},
"bedrooms": {
"value": 6,
"formattedValue": "6 Beds"
},
"location": {
"city": "Richmond Hill",
"zipCode": "11418",
"stateCode": "NY",
"streetAddress": "83-34 116th Street"
},
"bathrooms": {
"value": 4.5,
"formattedValue": "4.5 Baths"
},
"floorSpace": {
"formattedDimension": "2,072 sqft"
},
"propertyType": {
"value": "SINGLE_FAMILY_HOME"
},
"currentStatus": {
"isActiveForSale": true
}
}
],
"totalHomes": 23207
},
"status": "success"
}
}About the Trulia API
Search and Listing Endpoints
Three search endpoints — search_for_sale_listings, search_for_rent_listings, and search_sold_listings — accept a location string (city and state, e.g. 'Austin, TX') and an optional page integer for pagination. Each returns a data object with a searchResultMap containing a homes array, alongside totalHomes so you can calculate how many pages to walk. Each page contains up to 40 listings with price, bedroom and bathroom counts, and listing status.
Property Detail Endpoints
get_listing_details takes a Trulia URL path (e.g. /home/<address-slug-and-id>) and returns the most complete record: price with formattedPrice and currencyCode, location with street address, city, state, ZIP, and coordinates, floorSpace with formattedDimension, a features object with categorized home attributes, a media object with photos and map images, and a priceHistory array of dated events. If you only need photos, get_listing_photos returns an array of photo objects with multiple resolution URLs in both JPEG and WebP formats with captions. get_property_price_history returns the same history as a standalone array, with each entry carrying formattedDate, event type, source, and a price object.
Neighborhood and Utility Endpoints
get_local_amenities returns resident-survey data tied to a property's neighborhood: a localUGC object with a formattedQuestionAnswers array covering walkability, safety, and community topics, plus an ndpUrl linking to the full neighborhood detail page and a boolean ndpActive flag. get_nearby_schools and get_similar_homes are also available via property URL path. The get_mortgage_calculator endpoint takes price, down_payment, and optional rate and term parameters and returns monthly_payment, total_interest, and total_payment calculated via standard amortization.
Pagination and Input Notes
All three search endpoints use the same pagination pattern: omit page or pass 1 for the first page, then increment using totalHomes divided by 40 to find the ceiling. Location input must be city and state in plain text — ZIP code or coordinate-based search is not supported by the current endpoints.
The Trulia API is a managed, monitored endpoint for trulia.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when trulia.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official trulia.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate for-sale and rental listings by city to build a real estate search feed
- Track price history events from
get_property_price_historyto chart how a listing's price changed over time - Pull
get_listing_photosfor all resolutions to populate a property image gallery or comparison tool - Use
get_local_amenitiessurvey data to surface neighborhood safety and walkability scores alongside listings - Feed
get_mortgage_calculatorwith a property's price to show buyers estimated monthly payments at different rates and terms - Compare recently sold prices via
search_sold_listingsagainst active listings to build a comparative market analysis tool - Retrieve
get_nearby_schoolsdata to filter or rank properties for families with school-age children
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Trulia have an official developer API?+
What does `get_listing_details` return beyond basic price and address?+
get_listing_details returns a features object with categorized home attributes, a media object containing photos and map images, a floorSpace object with a formattedDimension field, a priceHistory array of dated listing events, and a location object that includes latitude/longitude coordinates alongside the street address, ZIP code, and state code.Can I search by ZIP code or geographic coordinates instead of city and state?+
search_for_sale_listings, search_for_rent_listings, and search_sold_listings — require a city-and-state string as the location parameter. You can fork this API on Parse and revise it to add a ZIP-code or coordinate-based search endpoint.Does the API expose listing agent contact details or open house schedules?+
How does pagination work across the search endpoints?+
totalHomes integer representing the full result count. Divide totalHomes by 40 and round up to get the total number of pages, then pass the page integer parameter to walk through them sequentially.