How to scrape Trulia and HouseSigma for real estate comps
Key Takeaways
Why scrape Trulia instead of going straight to Zillow?
Trulia's listing data includes a zpid field — Zillow's own property ID — directly in the output, since Trulia and Zillow are both owned by Zillow Group and share the same underlying listing data. That means a Trulia scrape gets you Zillow's own identifier for free, useful for cross-referencing without a separate Zillow lookup.
Does HouseSigma cover the same US markets as Trulia? No — HouseSigma is Canada-only, covering Ontario, British Columbia, and Alberta specifically. It's the complementary source for Canadian comps, not an alternative to Trulia for US markets.
What's the difference between HouseSigma's "feeds" and a normal property search? HouseSigma structures data around curated feeds — Newly Listed, Just Sold, Best for Schools, High Growth — rather than an open keyword search. You point the scraper at a feed URL and a province, not a search query.
Two Markets, Two Data Shapes
| Trulia | HouseSigma | |
|---|---|---|
| Coverage | United States | Ontario, British Columbia, Alberta |
| Input | Search URL or location + buy/rent | Feed URL (newly-listed, just-sold, etc.) |
| Cross-reference ID | zpid (Zillow property ID) | mlsNumber (when public) |
Trulia: US Listings With a Zillow Cross-Reference Built In
The Trulia Property Scraper walks Trulia's search results for a state, city, or a pasted search URL:
{
"price": "$559,000",
"priceValue": 559000,
"listing_status": "Active for sale",
"property_type": "SINGLE_FAMILY_HOME",
"beds": 3,
"baths": 2,
"sqft": 1450,
"city": "San Leandro",
"state": "CA",
"latitude": 37.6851,
"longitude": -122.156,
"zpid": "12345678",
"tags": ["NEW", "OPEN SAT"]
}
listing_type set to "buy" or "rent" — a single toggle covers both for-sale and rental comps from the same actor. feature_highlights and tags surface Trulia's own callouts (FORECLOSURE, OPEN SAT, NEW) directly in the data, which is faster than re-deriving distress signals from price history alone. zpid is worth keeping even if you never call Zillow directly — it's a stable cross-platform key if you ever need to reconcile a Trulia dataset against a Zillow-sourced one later.
HouseSigma: Canadian Feeds, Province by Province
The HouseSigma Scraper reads the province and feed straight from the URL path you give it — housesigma.com/on/listings/newly-listed/ for Ontario's newest listings, for example:
{
"address": "42 Example St, Toronto, ON",
"price": "$899,000",
"priceValue": 899000,
"bedrooms": "3+1",
"bathrooms": "2",
"propertyType": "Detached",
"propertyStyle": "2-Storey",
"municipality": "Toronto",
"daysOnMarket": 4,
"mlsNumber": "C1234567"
}
Supported feeds go beyond plain search: newly-listed, just-sold, sold-below-bought (homes that sold for less than the owner originally paid — a distress signal Trulia's tags don't have an equivalent for), best-for-schools, and high-growth. Scheduling the newly-listed feed daily catches every new listing in a province the day it posts, which matters in fast-moving Canadian markets where a good comp can be gone within days.
Building a Cross-Border Comp Set
async function getComps(usCity, canProvince) {
const [usListings, canListings] = await Promise.all([
runActor("trulia-property-scraper", { location: usCity, listing_type: "buy", results_wanted: 50 }),
runActor("housesigma-scraper", { startUrl: `https://housesigma.com/${canProvince}/listings/newly-listed/`, results_wanted: 50 }),
]);
return {
usMedianPrice: median(usListings.map((l) => l.priceValue)),
canMedianPrice: median(canListings.map((l) => l.priceValue)),
};
}
Useful for anyone benchmarking a cross-border portfolio, or a relocation service comparing cost of living between, say, Buffalo and nearby Ontario markets across the border.
FAQ
Do either of these require an MLS login or real estate license? No — both read publicly listed data from Trulia's and HouseSigma's own consumer-facing pages, no login or license required.
Can you get sold (closed) prices, not just active listings, from either?
Yes for HouseSigma directly via its just-sold and sold-below-bought feeds. Trulia's listing_status field distinguishes active from other statuses when present, but its main strength is active inventory rather than a dedicated sold-comps feed.
For US distressed-property and skip-tracing data specifically, see Finding Distressed Property Leads Before They Hit the MLS and How to Find Skip Tracing Data for Real Estate Wholesaling.