Trulia Property Scraper (US)
Pricing
from $1.26 / 1,000 results
Trulia Property Scraper (US)
Scrapes homes for sale, for rent and recently sold from Trulia — Zillow Group's US portal. Search any US city with price, bedroom and property-type filters; returns price, address, coordinates, beds/baths, photos, full descriptions, features, price history, taxes and Trulia's value estimate.
Pricing
from $1.26 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrapes homes for sale, for rent and recently sold from Trulia — Zillow Group's US portal.
Public data only. No login, no cookies, no browser.
The two things you need to know before using this
1. A misspelled city returns the whole STATE, silently
Trulia does not reject an unknown city. /CA/Not_A_Real_City_Xyz/ answers
HTTP 200 carrying all 126,601 California listings — real homes, correct
schema, completely the wrong place. Nothing in the rows themselves would
ever reveal it.
This actor checks Trulia's own canonicalUrl echo before paging: if the
site resolved your city to a state (or anything else), it stops
immediately, emits a single SEARCH_SUMMARY with
locationApplied: falseupstreamResolvedLocation showing what Trulia actually
searched. A typo costs you one row, not a dataset full of wrong-city
listings.
The same applies to property type — an unrecognised type segment returns the unfiltered baseline rather than an error, so only the nine verified values are accepted and anything else is refused before the run starts.
2. Each query is capped at 1,000 rows, and past the cap it repeats
Page 25 is the last genuine page. Page 26 re-serves page 1 verbatim — not an empty list, not a 404. A crawler that stops on "empty page" would loop forever collecting duplicates.
This actor stops when a page contributes no new listing ids, and reports
paginationClamped: true when that happens. If upstream claims more
matches than 1,000, resultCapReached is set and a warning tells you to
split the area up. Several narrow cities return far more data than one
broad one.
What you get
Three record types share one dataset, told apart by recordType.
PROPERTY — one row per listing
Search rows already carry price, full street address with coordinates,
beds, baths, floor space, lot size, tags and photos. With
Fetch full property details on (the default), each row also gets
propertyDetails: full description, every feature, price history, tax
history, schools, neighbourhood info, all photos and Trulia's own value
estimate — typically 150–600 KB per home.
SEARCH_SUMMARY — one row per location searched
Trulia's own totalHomes, how deep this run paged, the filters requested,
and the three honesty flags: locationApplied, resultCapReached,
paginationClamped.
ERROR — one row per input that could not be processed
Every input maps to at least one row, so nothing disappears silently.
Input
| Field | What it does |
|---|---|
| Market side | for_sale, for_rent or sold — each uses a different Trulia path grammar, built for you |
| Locations | City, ST — the state is required (a bare city is ambiguous and Trulia resolves it arbitrarily) |
| Property type | one of nine verified values, or any |
| Min beds / min price / max price | verified to actually move the result count |
| Property URLs | scrape specific listings directly, skipping search |
| Max properties per location | 0 = unlimited, meaning up to Trulia's own 1,000 cap |
Example
{"searchType": "for_sale","locations": ["Austin, TX", "Boise, ID"],"propertyType": "SINGLE-FAMILY_HOME","minBeds": 3,"minPrice": 300000,"maxPrice": 600000,"maxItems": 200,"includePropertyDetails": true}
Notes on reliability
- Active WAF: PerimeterX (
_pxAppId: PXYO6YjwLb, behind CloudFront). It is a strict TLS allowlist, not a solvable challenge — a non-allowlisted fingerprint gets a flat 403 every time, forever. - The allowlist differs per surface. Of 17 profiles tried,
chrome120andchrome123pass search and/home/but are deterministically blocked on/building/(where rental communities live). This actor's pool is the intersection that passes all three surfaces:chrome99_android,safari17_0,safari17_2_ios,safari18_0. - Residential proxy pinned to the US is the default. Trulia is a US-only portal; a geo-mismatched exit IP is exactly the signal such a site scores against.
- De-listed homes answer HTTP 410 Gone, not 404. That is handled as a
normal outcome (
_detailError), so one home going off-market mid-crawl never costs the rest of the run. - Retries rotate both the exit IP and the fingerprint before giving up.
Known limits
- 1,000 rows per query, whatever the match count says. Split by city, price band or property type to go deeper.
soldlistings frequently have no public sale price (HOME_EmptySoldPrice) — that is Trulia's data, not a scrape failure.- Rental communities (
/building/) carry nopriceHistoryortaxes; they are buildings with a rent range, not individual homes.