Housesigma $1π° Property Listings, Sold History & Agents
Pricing
from $1.00 / 1,000 results
Housesigma $1π° Property Listings, Sold History & Agents
From $1/1K. Scrape housesigma.com listings across Ontario, BC, and Alberta. Search by city or paste URLs to extract prices, addresses, photos, room dimensions, school scores, price history, HouseSigma estimates, and sold statistics.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Share
HouseSigma Scraper (Canada Property Listings, Sold History & Agents)
Pull structured property data from HouseSigma across Ontario, British Columbia and Alberta. Search by city with full filters, or paste links, and get clean, structured records: addresses, prices, all photos, room dimensions, school scores, price history, the HouseSigma estimate and community sold statistics. No login, no cookies, no manual setup. Just run it.
Why this scraper?
- No login or cookies required. Other HouseSigma tools make you copy your own account cookies before they work. This one runs anonymously out of the box.
- Stable, structured output with far more fields than copy-paste tools, and it stays consistent even when the website layout changes.
- Five modes, not one: search by filters, scrape links, fetch details by ID, browse the agent directory, and pull community sold-price statistics.
- Rich detail per property: every photo, virtual tour link, all rooms with dimensions, key facts, property features, full price history, nearby school scores, the HouseSigma price estimate and community trends.
- Powerful filters: status (for sale, for rent, sold, leased, de-listed), property type, price, bedrooms, bathrooms, garage, size and sort order, applied at the source.
- Cheap and fast. Lightweight JSON requests over a standard datacenter connection. No heavy browser, so a typical run costs a fraction of a cent per listing.
Data you get
Sample shape, values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| idListing | 00000000000000AB |
| url | https://housesigma.com/on/toronto-real-estate/1-sample-st/home/00000000000000AB/ |
| address | 1 Sample Street |
| municipality | Toronto |
| community | Sample Community |
| status | For Sale |
| propertyType | Detached |
| priceListed | 1200000 |
| priceSold | (Sign-in required) |
| bedrooms | 3 |
| bathrooms | 2 |
| sizeText | 1500 ftΒ² |
| latitude | 43.6500 |
| longitude | -79.3800 |
| dateListed | 2026-01-01 |
| photos | ["https://cache16.housesigma.com/file/pix/00000000/0000_1.jpg", "..."] |
| keyFacts | { "Tax": "$0,000 / 2025", "Lot Size": "00 x 000 feet", "Parking": "2 garages" } |
| rooms | [{ "type": "Living", "level": "Main", "dimensions": "0.00 x 0.00" }] |
| priceHistory | [{ "price": "0,000,000", "status": "For Sale", "date_start": "2026-01-01" }] |
| communityStats | { "price_sold_median": null, "dom_avg": null } |
| estimate | { "priceInt": 0, "confidence": 0.0, "rentInt": 0 } |
Note: sold prices and MLS numbers are shown by HouseSigma only to signed-in users, so for sold and leased records those two fields come back as (Sign-in required). Every other field, including full address, photos, rooms, price history and community trends, is returned in full.
How to use
Search a city for properties on sale, with full details:
{"mode": "search","province": "ON","locations": ["Toronto"],"status": ["for-sale"],"fetchDetails": true,"maxItems": 50}
Search with filters (3 bedroom detached homes, 800k to 1.5M, sorted cheapest first):
{"mode": "search","locations": ["Mississauga", "Brampton"],"status": ["for-sale"],"propertyTypes": ["detached"],"minBedrooms": 3,"minPrice": 800000,"maxPrice": 1500000,"sortBy": "price-asc","maxItems": 100}
Recently sold homes in the last 30 days:
{"mode": "search","locations": ["Toronto"],"status": ["sold"],"soldDays": 30,"maxItems": 200}
Scrape specific links or IDs:
{"mode": "url","urls": ["https://housesigma.com/on/toronto-real-estate/1-sample-st/home/00000000000000AB/"]}
Paste an area link (a city page or map view) instead of searching by name - the same filters apply:
{"mode": "url","urls": ["https://housesigma.com/on/toronto-real-estate/"],"status": ["for-sale"],"minBedrooms": 3,"maxPrice": 1000000}
Community sold-price statistics:
{"mode": "community","province": "ON","locations": ["Danforth"]}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | search | search, url, detail, agent, or community. |
| province | string | ON | ON, BC, or AB. |
| locations | array | [] | City or community names. Empty searches the whole province. |
| status | array | [for-sale] | for-sale, for-rent, sold, leased, de-listed. |
| propertyTypes | array | [] | Detached, Semi-Detached, Townhouse, Condo, Link, Multiplex, Vacant Land, Other. |
| minPrice / maxPrice | integer | none | Price range in CAD. |
| minBedrooms / maxBedrooms | integer | none | Bedroom range (5 = 5+). |
| minBathrooms | integer | none | Minimum bathrooms. |
| minGarage | integer | none | Minimum garage spaces. |
| minSqft / maxSqft | integer | none | Interior size range in square feet. |
| soldDays | integer | 90 | For sold/leased/de-listed: only the last N days. |
| sortBy | string | newest | newest, price-asc, price-desc. |
| urls | array | [] | Listing links or area links (url mode). |
| listings | array | [] | Listing IDs or links (detail mode). |
| fetchDetails | boolean | true | Open each listing for the full detail payload. |
| maxItems | integer | 50 | Stop after this many records. 0 = no limit. |
| maxPages | integer | (empty) | Max pages (20 listings each) per location. Leave empty to walk every result page. |
| resumeFromRunId | string | (empty) | A previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Records already collected there (matched by listing/agent/community id) are skipped, so this run only saves the new ones. |
| incrementalMode | boolean | false | Turn on for daily/recurring monitoring of the same search. The first run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED records. |
| stateKey | string | (empty) | Optional. Name an incremental-mode monitoring campaign, or share state across differently-configured runs. Leave empty to derive a key automatically from the search mode, locations and filters. |
| emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) records that have not changed since the last run, marked UNCHANGED. |
| emitExpired | boolean | false | Incremental mode only. Also return (and bill) records present in a previous run but no longer found, marked EXPIRED. Only produced when a run fully scans the tracked search (not capped, not maxPages-truncated, not a resume). |
| proxy | object | Apify Proxy (CA) | Connection settings. |
For an unbounded pull (maxPages left empty), two things protect a long run:
- A KV-store checkpoint survives a platform migration or a killed/resurrected run: it remembers which records were already saved so a resumed container doesn't re-scrape or re-push them.
resumeFromRunIdlets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every record already saved there, appending only new ones.
Incremental mode (recurring monitoring)
resumeFromRunId and incrementalMode solve two different problems: Resume continues one specific interrupted run; Incremental mode is for scheduling this same search again and again (e.g. daily) and getting only what changed, without pasting any run/dataset id.
Turn on incrementalMode and each run classifies every record against the state from the last run on the same search (kept internally, keyed by search mode/locations/filters, or by your own stateKey):
NEWβ not seen before.UPDATEDβ seen before, and at least one field changed (changedFieldslists which).UNCHANGEDβ seen before, nothing changed. Suppressed (not returned or billed) unlessemitUnchangedis on.REAPPEAREDβ was previously markedEXPIRED, now found again.EXPIREDβ was previously seen, not found in a run that fully scanned the tracked search. Only emitted whenemitExpiredis on.
Every record also carries firstSeenAt / lastSeenAt in incremental mode. The detail-enrichment surcharge is billed only for records that actually reach the dataset β a suppressed UNCHANGED record's detail page may still be fetched (needed to compute the fingerprint) but is never charged.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record β not the full JSON. Each item becomes one entry with a title (the listing's name / address) and its key fields flattened to plain text (price, beds/baths, agent, URL, β¦). Nested objects are collapsed to their main value (e.g. an address object β its full-address text) and long lists are trimmed to the first few names. The complete, full-fidelity record always stays in the Apify dataset β the connector copy is a readable digest for browsing in your app.
- Notion β one page per item (title + a summary body), created under the page you set in
notionParentPageUrl. - Linear / Airtable / other β one record/issue per item with the same title + fields.
How to enable:
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip β the export only runs when a connector is selected.
Output example
Sample shape, values are illustrative placeholders, not from a live listing.
{"idListing": "00000000000000AB","url": "https://housesigma.com/on/toronto-real-estate/1-sample-st/home/00000000000000AB/","status": "For Sale","saleOrLease": "Sale","propertyType": "Detached","address": "1 Sample Street","municipality": "Toronto","community": "Sample Community","province": "Ontario","bedrooms": 3,"bathrooms": 2,"priceListed": 1200000,"priceListedText": "1,200,000","priceSold": "(Sign-in required)","latitude": 43.6500,"longitude": -79.3800,"sizeText": "1500 ftΒ²","dateListed": "2026-01-01","photos": ["https://cache16.housesigma.com/file/pix/00000000/0000_1.jpg"],"virtualTour": null,"keyFacts": { "Tax": "$0,000 / 2025", "Lot Size": "00 x 000 feet", "Parking": "2 garages" },"rooms": [{ "type": "Living", "level": "Main", "dimensions": "0.00 x 0.00" }],"priceHistory": [{ "price": "1,200,000", "status": "For Sale", "date_start": "2026-01-01" }],"estimate": { "priceInt": 1180000, "confidence": 0.8, "rentInt": 3500 }}
Plan requirement
This actor runs on any Apify plan. The default Apify Proxy (Canada) works on the free tier. Residential proxy is optional and not required. Pick a paid plan only if you want higher throughput or wish to route through residential connections.