Trulia Property Scraper (US) avatar

Trulia Property Scraper (US)

Pricing

from $1.26 / 1,000 results

Go to Apify Store
Trulia Property Scraper (US)

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

Ibnu Adzim

Maintained by Community

Actor 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: false
and upstreamResolvedLocation 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

FieldWhat it does
Market sidefor_sale, for_rent or sold — each uses a different Trulia path grammar, built for you
LocationsCity, ST — the state is required (a bare city is ambiguous and Trulia resolves it arbitrarily)
Property typeone of nine verified values, or any
Min beds / min price / max priceverified to actually move the result count
Property URLsscrape specific listings directly, skipping search
Max properties per location0 = 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, chrome120 and chrome123 pass 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.
  • sold listings frequently have no public sale price (HOME_EmptySoldPrice) — that is Trulia's data, not a scrape failure.
  • Rental communities (/building/) carry no priceHistory or taxes; they are buildings with a rent range, not individual homes.