# HouseSigma.com | Search | Detail(s) | Agent(s) \[/w EMAILS] (`memo23/apify-housesigma-cheerio`) Actor

Unlock Canada’s real estate market with the HouseSigma Scraper! Extract detailed property listings, historical sales, and market trends effortlessly. Save time, gain insights, and make smarter investments—all with structured, analysis-ready data at your fingertips.

- **URL**: https://apify.com/memo23/apify-housesigma-cheerio.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 149 total users, 3 monthly users, 99.7% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## HouseSigma.com Scraper

### Overview

The **HouseSigma.com Scraper** extracts detailed real estate data from [HouseSigma.com](https://www.housesigma.com/), Canada’s leading property marketplace. Designed for investors, agents, and researchers, this tool automates the collection of property listings, historical sales, and market trends. Whether you're analyzing neighborhoods, tracking price changes, or identifying investment opportunities, this scraper delivers structured, actionable data.

***

### Features

- **City search without a URL**: Type Toronto / Vancouver / Calgary plus status, price, beds, sold-days - the actor builds the HouseSigma map request.
- **Map and feed URLs still work**: map views, listing details, curated feeds (`just-sold`, `best-for-schools`, `best-for-rental-investment`, precon assignment, and the rest), market-trends, agent list and agent profiles.
- **Incremental runs**: skip listing and agent IDs already pushed so a daily schedule only returns new rows.
- **Agent emails**: optional `enrichEmails` (billed only when an email is found).
- **Sold / leased details**: auto sign-in is built in. Cookies are optional. Street addresses on sold/leased rows still need a current TRREB/PropTx agreement on the service account (see FAQ).
- **Proxy + limits**: residential proxy default, `maxItems`, concurrency, retries.

***

### How to Use

1. Open the actor on Apify and either:
   - type cities in **Search locations** (e.g. `Toronto`) and set **Listing status**, or
   - paste HouseSigma URLs into **Start URLs** (map, listing, `/on/agents/`, market-trends, curated feeds).
2. Cookies are **optional**. The actor signs in with a service session. Paste your own HouseSigma cookies only if you want to use your account instead.
3. Turn on **Incremental** for scheduled watches so later runs skip IDs already delivered.
4. Set `maxItems`, run, export JSON / CSV / Excel.

***

### Input Configuration

#### Example Input - city search (no URL)

```json
{
    "searchLocations": ["Toronto", "Mississauga"],
    "province": "ON",
    "status": "sold",
    "soldDays": 30,
    "priceMin": 400000,
    "priceMax": 1200000,
    "bedrooms": 3,
    "houseType": "condo",
    "incremental": true,
    "maxItems": 100
}
```

#### Example Input - URLs

```json
{
    "startUrls": [
        { "url": "https://housesigma.com/on/toronto-real-estate/map/?status=for-sale" },
        { "url": "https://housesigma.com/listings/just-sold" },
        { "url": "https://housesigma.com/best-for-schools" },
        { "url": "https://housesigma.com/on/agents/" },
        { "url": "https://housesigma.com/on/agents/maja-curic" }
    ],
    "maxItems": 100,
    "enrichEmails": false,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

#### Input Fields Explained

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| **startUrls** | `array` | Map, listing, agent, market-trends, or curated-feed URLs. Optional if you set cities. | `[]` |
| **searchLocations** | `array` | City names. Each becomes a HouseSigma map search. | `[]` |
| **city** | `string` | Single-city fallback when `searchLocations` is empty. | |
| **province** | `string` | `ON`, `BC`, or `AB`. | `ON` |
| **status** | `string` | `for-sale`, `sold`, `for-lease`, `leased`, `sale-delisted`, `lease-delisted`. Comma-mix allowed. | `for-sale` |
| **houseType** | `string` | `all`, `detached`, `semi`, `townhouse`, `condo`, `link`, `land`. | `all` |
| **priceMin / priceMax** | `integer` | CAD bounds applied on the map payload. | |
| **bedrooms / bathrooms / garageMin** | `integer` | Minimums. | |
| **soldDays / listingDays** | `integer` | Recency windows. Sold default on HouseSigma is 90. | |
| **scrapeAgents** | `boolean` | Also enqueue `/{province}/agents/`. | `false` |
| **communityStats** | `boolean` | Also enqueue market-trends / just-sold for each city. | `false` |
| **feed** | `string` | Curated list: `just-sold`, `best-for-schools`, `best-for-rental-investment`, etc. | |
| **incremental** | `boolean` | Skip IDs already pushed on later runs. | `false` |
| **incrementalStoreName** | `string` | Named KV store for seen IDs. | `housesigma-incremental` |
| **enrichEmails** | `boolean` | Find a contact email per result. Charged only on hits. | `false` |
| **qualifyByPayment** | `boolean` | With email enrich, flag sites that take online payment. | `false` |
| **maxItems** | `integer` | Cap on listings or agents per run. | `100` |
| **cookies** | `array` | Optional HouseSigma cookies if you want your own session. | `[]` |
| **proxy** | `object` | Default residential Apify proxy. | residential |

***

### Output Structure for Listing(s)

Detail rows include the HouseSigma listing object plus `addressGated` (true/false) and `addressGate` (`agreement`, `revalidate`, `signin` or null) when a VOW listing's street address is hidden.

The scraper returns structured property data. Below is an example output:

```json
{
    "show_consumer_questionnaire": 0,
    "assessment": null,
    "listing_price_change": [],
    "touring_activities": [],
    "picture": {
        "photo_url": "https://cache15.housesigma.com/file/pix-itso/152220668/5534c_1.jpg?c073d892",
        "photo_list": [
            "https://cache15.housesigma.com/file/pix-itso/152220668/5534c_1.jpg?c073d892",
            "https://cache08.housesigma.com/file/pix-itso/152220668/5534c_2.jpg?c073d892"
        ]
    },
    "house": {
        "id_listing": "JKdOYr0knRj754lW",
        "id_address": "eQp5yO8RwrG7d0ZE",
        "seo_municipality": "norwich-real-estate",
        "seo_address": "35-meadowlands-drive",
        "ml_num": "********",
        "ml_num_merge": "********",
        "hash_id": "pv2YagNt5rdz7nJD",
        "seo_suffix": "35-Meadowlands-Drive-Norwich-N0J1R0-40621881-X10745108-X10745108",
        "house_type_name": "Single Family Residence",
        "house_type": "D.",
        "address": "(Address display requires Agreement)",
        "address_seo": "(Address display requires Agreement)",
        "address_navigation": null,
        "list_status": {
            "public": -5,
            "live": 1,
            "flg_idx": 1,
            "sold": 0,
            "s_r": "Sale",
            "text": "For Sale",
            "status": "A",
            "feature": null,
            "precon": null,
            "agent_available": true,
            "premium": 1,
            "archive": 0,
            "watched": 0,
            "watched_text": "Sold Watch",
            "community_watched": 0,
            "community_watch_types": []
        },
        "list_dates": {
            "date_added": null,
            "date_added_days": null,
            "date_start": "Agreement required",
            "date_start_days": null,
            "date_start_month": 6,
            "date_update": null,
            "date_end": null,
            "date_end_days": null,
            "date_list_days": null,
            "date_sold_report": null
        },
        "id_community": 5474,
        "id_municipality": 10237,
        "community_name": "-",
        "municipality_name": "Norwich",
        "municipality_area": null,
        "country": "CA",
        "province": "ON",
        "province_name": "Ontario",
        "cross_street": "",
        "bedroom": 0,
        "bedroom_plus": null,
        "bedroom_string": 0,
        "washroom": 0,
        "parking": {
            "total": 0,
            "garage_type": "",
            "garage": 0,
            "parking_type": "",
            "parking": 0,
            "text": ""
        },
        "price": "(Agreement required)",
        "price_int": null,
        "price_abbr": null,
        "price_sold": "(Agreement required)",
        "price_sold_int": null,
        "price_origin": null,
        "price_tag": "For Sale",
        "map": {
            "lat": 42.921703,
            "lon": -80.597969
        },
        "tax_int": 0,
        "maintenance_int": null,
        "brokerage": "*****************************************",
        "text": {
            "list_date_short": "Agreement required",
            "list_date_long": "Agreement required",
            "dom_short": "For Sale - days ago",
            "dom_short_v2": "- days ago",
            "dom_long": "Agreement required",
            "rooms_short": "",
            "rooms_long": "",
            "status_chg_date": "1 week ago",
            "hs_exclusive_tag": null
        },
        "house_area": {
            "area": "****",
            "area_note": null,
            "unit": "feet²",
            "estimate": 0
        },
        "land": null,
        "open_house_date": null,
        "tos_source": "ITSO",
        "data_source_raw": "ITSO",
        "data_source_text": "<style>\n   ul.data_source_ul{\n        line-height: 20px;\n   }\n    ul.data_source_ul li{\n        list-style-type: '*';\n        padding-left: 10px;\n    }\n</style>\n<ul class=\"data_source_ul\">\n    <li> Data is provided courtesy of ITSO</li>\n    <li> © 2021 ITSO (https://www.itsosystems.ca/)</li>\n    <li> The information provided herein must only be used by consumers that have a bona fide interest in the purchase, sale, or lease of real estate and may not be used for any commercial purpose or any other purpose.</li> \n    <li> Information deemed reliable but not guaranteed.</li>\n</ul>",
        "copyright_text": {
            "copyright": "<p>Copyright: © 2025 HouseSigma Inc. All rights reserved. HouseSigma Inc. is a registered real estate brokerage in the Province of Ontario.</p>",
            "housesigmaInc": "HouseSigma Inc. Brokerage",
            "disclaimer_img": null,
            "disclaimer_url": null
        },
        "agent_user": {
            "id": 1,
            "name": "System API",
            "phone": "2894695060",
            "picture": "",
            "created": "2018-06-29 13:58:10"
        },
        "bind_agent_user": null,
        "contact_message": "I'd like to buy/sell something similar to: [********], (Address display requires Agreement), Norwich",
        "postal_code": "",
        "postal_code_seo": "",
        "pending_review_text": "",
        "list_agent_name": null,
        "brokerage_text": null,
        "schedule_message": "I want to book an appointment to view: [********], (Address display requires Agreement), Norwich",
        "direct_contact_message": "I want to know more about your toured listing: [********], (Address display requires Agreement), Norwich",
        "direct_contact_trreb_questionnaire_message": ""
    },
    "key_facts": null,
    "key_facts_v2": {
        "tax": {
            "name": "Tax",
            "value": "*********",
            "public": 0
        },
        "property_type": {
            "name": "Property Type",
            "value": "*********************************",
            "public": 0
        },
        "maintenance": {
            "name": "Maintenance",
            "value": null,
            "public": 0
        },
        "included_utility": {
            "name": "Included Utility",
            "value": null,
            "public": 0
        },
        "build_year": {
            "name": "Building Age",
            "value": "*",
            "public": 0
        },
        "size_without_area_note": {
            "name": "Size",
            "value": "**********",
            "public": 0
        },
        "size_with_area_note": {
            "name": "Size",
            "value": null,
            "public": 0
        },
        "lot_size": {
            "name": "Lot Size",
            "value": "**************",
            "public": 0
        },
        "locker": {
            "name": "Locker",
            "value": null,
            "public": 0
        },
        "irregular": {
            "name": "Lot Irregularities",
            "value": null,
            "public": 0
        },
        "condo_exposure": {
            "name": "Exposure",
            "value": null,
            "public": 0
        },
        "parking": {
            "name": "Parking",
            "value": "*********************",
            "public": 0
        },
        "basement": {
            "name": "Basement",
            "value": "**********",
            "public": 0
        },
        "coop_commission": {
            "name": "Coop Commission",
            "value": null,
            "public": 0
        },
        "ml_num_merge": {
            "name": "Listing #",
            "value": "********",
            "public": 0
        },
        "data_source": {
            "name": "Data Source",
            "value": "ITSO",
            "public": 1
        },
        "days_on_site_or_market": {
            "name": "Days on Market",
            "value": "193 days",
            "public": 1
        },
        "status_chg_date": {
            "name": "Status Change",
            "value": "1 week ago",
            "public": 1
        },
        "listed_on": {
            "name": "Listed on",
            "value": "2024-07-24",
            "public": 1
        },
        "updated_on": {
            "name": "Updated on",
            "value": "2025-01-23",
            "public": 1
        },
        "description2": {
            "name": "Description",
            "value": null,
            "public": 0
        },
        "summary": {
            "name": "Summary",
            "value": [
                "Introducing 35 Meadowlands Drive, a Canadian Craftsman home in Otterville by Everest Estate.",
                "The to-be-built home features 2,193 finished square feet, including 3 spacious bedrooms and 3 well-appointed bathrooms.",
                "A triple car garage is included, making it suitable for families seeking modern living in a serene setting.",
                "The home is designed with high-quality finishes and superior craftsmanship, reflecting Everest Estate's reputation.",
                "An open-concept layout promotes fluidity between living, dining, and kitchen areas, perfect for entertaining.",
                "The tranquil bedrooms and contemporary bathrooms enhance comfort and style within the home.",
                "The property includes a potential for a detached shop/garage, paved driveway, and in-ground irrigation, with a fully renovated adjacent farm home available for interim use during construction."
            ],
            "public": 0
        },
        "project_name": {
            "name": "Project Name",
            "value": null,
            "public": 0
        },
        "builders": {
            "name": "Builder(s)",
            "value": null,
            "public": 0
        },
        "occupancy_date": {
            "name": "Occupancy Date",
            "value": null,
            "public": 0
        },
        "aggregated_dom": {
            "name": "Property Days on Market",
            "value": "********",
            "public": 0
        }
    },
    "school": [],
    "property_detail": {
        "property": {
            "name": "Property",
            "value": [
                {
                    "name": "Property Type",
                    "value": "***********************",
                    "public": 0
                },
                {
                    "name": "Style",
                    "value": "********",
                    "public": 0
                },
                {
                    "name": "Frontage Type",
                    "value": "****",
                    "public": 0
                },
                {
                    "name": "Community",
                    "value": "**********",
                    "public": 0
                },
                {
                    "name": "Municipality",
                    "value": "*******",
                    "public": 0
                }
            ]
        },
        "inside": {
            "name": "Inside",
            "value": [
                {
                    "name": "Rooms",
                    "value": "**",
                    "public": 0
                },
                {
                    "name": "Bedrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Bedrooms Above Ground",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Bedrooms Below Ground",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Full Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Half Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "2 Piece Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "3 Piece Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "4 Piece Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "5 Plus Piece Bathrooms",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Kitchens",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Kitchens Above Ground",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Kitchens Below Ground",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Laundry",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Laundries on Level Main",
                    "value": "*",
                    "public": 0
                }
            ]
        },
        "utilities": {
            "name": "Utilities",
            "value": [
                {
                    "name": "Cooling",
                    "value": "***********",
                    "public": 0
                },
                {
                    "name": "Heating",
                    "value": "************************",
                    "public": 0
                },
                {
                    "name": "Water",
                    "value": "*****************",
                    "public": 0
                }
            ]
        },
        "parking": {
            "name": "Parking",
            "value": [
                {
                    "name": "Driveway Parking",
                    "value": "*************************",
                    "public": 0
                },
                {
                    "name": "Garage",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Total Parking Space",
                    "value": "*",
                    "public": 0
                },
                {
                    "name": "Parking Features",
                    "value": "************************************",
                    "public": 0
                }
            ]
        },
        "highlights": {
            "name": "Highlights",
            "value": [
                {
                    "name": "Lot Features",
                    "value": "**************************************************************************************************************************************************************************************************",
                    "public": 0
                }
            ]
        },
        "land": {
            "name": "Land",
            "value": [
                {
                    "name": "Sewer",
                    "value": "***************",
                    "public": 0
                },
                {
                    "name": "Frontage Length",
                    "value": "******",
                    "public": 0
                },
                {
                    "name": "Depth",
                    "value": "******",
                    "public": 0
                },
                {
                    "name": "Lot Size",
                    "value": "**************",
                    "public": 0
                },
                {
                    "name": "Acreage",
                    "value": "*****",
                    "public": 0
                },
                {
                    "name": "Zoning",
                    "value": "*",
                    "public": 0
                }
            ]
        },
        "farm": {
            "name": "Farm",
            "value": [
                {
                    "name": "Farm Land Area Units",
                    "value": "***********",
                    "public": 0
                }
            ]
        }
    },
    "listing_history": [
        {
            "id_listing": "JKdOYr0knRj754lW",
            "ml_num": "********",
            "seo_suffix": "35-Meadowlands-Drive-Norwich-N0J1R0-40621881-X10745108-X10745108",
            "price": "(Agreement required)",
            "price_note": null,
            "price_sold": "(Agreement required)",
            "date_start": null,
            "date_end": null,
            "data_source": "ITSO",
            "status": "For Sale",
            "public": -5,
            "button": 0,
            "show_contact_agent": false,
            "blur_price": false
        }
    ],
    "rooms": [
        {
            "size": "*********",
            "size_feet": "**********",
            "dc": "",
            "type": "*****",
            "lv": "***********"
        }
    ],
    "rooms_public": 0,
    "community_stats": {
        "house_type": "D.",
        "period": "2025-01-01",
        "price_sold_median": 655000,
        "price_sold_growth_yoy": 0.039,
        "price_sold_growth_yoy_percentile": 53,
        "sold_count": 1,
        "sold_count_30": 1,
        "dom_avg": 65,
        "new_listing_count": 6,
        "rent_180_ratio": 7.1,
        "active_listing_count": 14,
        "absorption_rate": 0.06,
        "price_sold_growth_5y": 59,
        "price_sold_growth_10y": "-",
        "temperature_text": "Very Cold",
        "period_name": "January 2025",
        "growth_year": 3.9
    },
    "community_stats_all": {
        "house_type": "all",
        "period": "2025-01-01",
        "price_sold_median": 655000,
        "price_sold_growth_yoy": -0.016,
        "price_sold_growth_yoy_percentile": 34,
        "sold_count": 1,
        "sold_count_30": 1,
        "dom_avg": 65,
        "new_listing_count": 8,
        "rent_180_ratio": 7,
        "active_listing_count": 16,
        "absorption_rate": "0.05",
        "price_sold_growth_5y": 59,
        "price_sold_growth_10y": "-",
        "period_name": "January 2025",
        "growth_year": -1.6
    },
    "analytics": {
        "estimate_price": "1,408,400",
        "estimate_price_int": 1408400,
        "estimate_price_confident": 2.05,
        "estimate_price_display_directly": 1,
        "estimate_price_display": 1,
        "estimate_price_display_top": 1,
        "estimate_price_date": "2025-02-01",
        "estimate_price_age": 1,
        "price_diff": -5,
        "rent_base": 0,
        "estimate_price_range": null,
        "estimate_dom": null,
        "estimate_dom_bar": null,
        "estimate_rent": "3,059",
        "estimate_rent_int": 3059,
        "estimate_rent_days": 25,
        "estimate_rent_yearreturn": 2.01,
        "school": {
            "highschool_score": 0,
            "belowhighschool_score": 5
        },
        "stars": {
            "school": null,
            "growth": 2.5,
            "rent": 0.5
        },
        "scores": {
            "school": null,
            "growth": 5,
            "rent": 1
        }
    },
    "virtual_open_house": [],
    "public_open_house": [],
    "community_stats_public": 1,
    "premium_stats_display": 0,
    "premium_stats": null,
    "deposit": null,
    "province_abbr": "ON",
    "meta": {
        "title": "(Address display requires Agreement), Norwich, Ontario For Sale | HouseSigma",
        "title_share": "(Address display requires Agreement), Norwich, Ontario For Sale | HouseSigma",
        "description": "Discover the perfect starter home or investment opportunity at (Address display requires Agreement), Norwich, Ontario with HouseSigma today.",
        "image": "https://cache15.housesigma.com/file/pix-itso/152220668/5534c_1.jpg?c073d892",
        "canonical_url": "https://housesigma.com/on/norwich-real-estate/35-meadowlands-drive/home/eQp5yO8RwrG7d0ZE/",
        "robots": "all"
    },
    "component_display": {
        "my_note": 1,
        "agent_touring_activities": 1,
        "not_interested": 1,
        "community_popularity_index": 1
    },
    "show_agent_recruit": 0,
    "show_trustpilot": false,
    "banner_top": {
        "src": "https://static.housesigma.com/images/banner/join_housesigma_v2_750_204.png",
        "url": "https://team.housesigma.com/join-us/",
        "inner": false
    },
    "banner_bottom": null,
    "show_premium_unlock": 0,
    "user_referral_code": "",
    "premium_share_text": ""
}
```

#### Property Output Fields Explained

| Field / Property                | Type      | Description                                                                                   |
|---------------------------------|-----------|-----------------------------------------------------------------------------------------------|
| `show_consumer_questionnaire`   | number    | Indicates if a consumer questionnaire is shown (0 = no, 1 = yes)                              |
| `assessment`                    | any       | Assessment data, if available                                                                 |
| `listing_price_change`          | array     | List of price change events for the listing                                                   |
| `touring_activities`            | array     | List of touring activities or open house events                                               |
| `picture.photo_url`             | string    | Main photo URL for the property                                                              |
| `picture.photo_list`            | array     | List of all photo URLs for the property                                                      |
| `house.id_listing`              | string    | Unique HouseSigma listing ID                                                                 |
| `house.id_address`              | string    | Internal address ID                                                                          |
| `house.seo_municipality`        | string    | SEO-friendly municipality identifier                                                         |
| `house.seo_address`             | string    | SEO-friendly address identifier                                                              |
| `house.ml_num`                  | string    | MLS number (may be masked)                                                                   |
| `house.hash_id`                 | string    | Internal hash ID                                                                             |
| `house.seo_suffix`              | string    | SEO-friendly URL suffix                                                                      |
| `house.house_type_name`         | string    | Full property type name (e.g., "Single Family Residence")                                    |
| `house.house_type`              | string    | Short property type code                                                                     |
| `house.address`                 | string    | Property address (may require agreement for full display)                                    |
| `house.list_status`             | object    | Listing status details (sold, for sale, etc.)                                                |
| `house.list_dates`              | object    | Listing date details (added, updated, sold, etc.)                                            |
| `house.id_community`            | number    | Community ID                                                                                 |
| `house.id_municipality`         | number    | Municipality ID                                                                              |
| `house.community_name`          | string    | Community name                                                                               |
| `house.municipality_name`       | string    | Municipality name                                                                            |
| `house.country`                 | string    | Country code (e.g., "CA")                                                                   |
| `house.province`                | string    | Province code (e.g., "ON")                                                                  |
| `house.province_name`           | string    | Province name (e.g., "Ontario")                                                             |
| `house.cross_street`            | string    | Cross street info                                                                            |
| `house.bedroom`                 | number    | Number of bedrooms                                                                           |
| `house.washroom`                | number    | Number of bathrooms                                                                          |
| `house.parking`                 | object    | Parking details (total, garage, type, etc.)                                                  |
| `house.price`                   | string    | Current asking price (may be masked)                                                         |
| `house.price_int`               | number    | Current asking price as integer (if available)                                               |
| `house.price_sold`              | string    | Last sold price (may be masked)                                                              |
| `house.price_sold_int`          | number    | Last sold price as integer (if available)                                                    |
| `house.map.lat`                 | number    | Latitude                                                                                    |
| `house.map.lon`                 | number    | Longitude                                                                                   |
| `house.tax_int`                 | number    | Annual property tax (integer)                                                                |
| `house.maintenance_int`         | number    | Maintenance fee (if applicable)                                                              |
| `house.brokerage`               | string    | Brokerage name (may be masked)                                                               |
| `house.text`                    | object    | Various display texts (dates, status, etc.)                                                  |
| `house.house_area`              | object    | Area details (size, unit, estimate)                                                          |
| `house.land`                    | object    | Land details (if available)                                                                  |
| `house.open_house_date`         | any       | Open house date (if available)                                                               |
| `house.tos_source`              | string    | Source of listing data (e.g., "ITSO")                                                        |
| `house.agent_user`              | object    | Agent details (ID, name, phone, etc.)                                                        |
| `house.bind_agent_user`         | any       | Additional agent info (if available)                                                         |
| `house.contact_message`         | string    | Default contact message                                                                      |
| `house.postal_code`             | string    | Postal code                                                                                  |
| `house.list_agent_name`         | string    | Listing agent name (if available)                                                            |
| `house.schedule_message`        | string    | Default schedule message                                                                     |
| `house.direct_contact_message`  | string    | Default direct contact message                                                               |
| `key_facts`                     | object    | Key facts (legacy, may be null)                                                              |
| `key_facts_v2`                  | object    | Key facts (modern, see below for subfields)                                                  |
| `school`                        | array     | School information (if available)                                                            |
| `property_detail`               | object    | Detailed property attributes (see below for subfields)                                       |
| `listing_history`               | array     | Historical listing data (price, status, etc.)                                                |
| `rooms`                         | array     | Room details (size, type, level, etc.)                                                       |
| `community_stats`               | object    | Community market statistics for this property type                                           |
| `community_stats_all`           | object    | Community market statistics for all property types                                           |
| `analytics`                     | object    | HouseSigma analytics (price/rent estimates, scores, etc.)                                    |
| `virtual_open_house`            | array     | Virtual open house info (if available)                                                       |
| `public_open_house`             | array     | Public open house info (if available)                                                        |
| `component_display`             | object    | UI component flags (notes, popularity, etc.)                                                 |
| `show_agent_recruit`            | number    | Show agent recruitment banner flag                                                           |
| `show_trustpilot`               | boolean   | Show Trustpilot reviews flag                                                                 |
| `banner_top`                    | object    | Top banner info (if available)                                                               |
| `banner_bottom`                 | object    | Bottom banner info (if available)                                                            |
| `show_premium_unlock`           | number    | Show premium unlock flag                                                                     |
| `user_referral_code`            | string    | User referral code (if available)                                                            |
| `premium_share_text`            | string    | Premium share text (if available)                                                            |
| `province_abbr`                 | string    | Province abbreviation (e.g., "ON")                                                          |
| `meta`                          | object    | Metadata for SEO/sharing (title, description, image, etc.)                                   |

##### Notable Nested Fields

- `key_facts_v2`: Contains key property facts, such as taxes, property type, maintenance, size, lot size, parking, basement, days on market, status change date, listed/updated dates, summary, etc.
- `property_detail`: Contains detailed sections: property, inside (rooms, bedrooms, bathrooms, kitchens, laundry), utilities (cooling, heating, water), parking, highlights, land, farm.
- `community_stats` / `community_stats_all`: Market stats for the community (median price, growth, sales count, DOM, etc.).
- `analytics`: HouseSigma's price/rent estimates, confidence, scores, and school/rent/growth ratings.

> **Note:** Some fields may be masked or require agreement/login to view.

***

### Output Structure for Agent(s)

The scraper returns structured property data. Below is an example output:

```json
{
    "agent": {
        "id": 319,
        "name": "Maja Curic",
        "avatar": "https://cache16.housesigma.com/hs-teams/2023/02/Headshots-4-300x300.png",
        "designation": "Sales Representative",
        "about": "Real estate is my passion. Buying or selling a home can be a complex process. Having a real estate agent is paramount to helping work through the process. As a top real estate agent, I take the time to listen to the needs and desires of each person looking to purchase or sell a home. For those who are buying, I strive to make sure they get a home that meets their needs and matches their lifestyle. For those selling a home, I feel it is my obligation to help navigate the complicated paperwork and process so that the transition goes as smoothly as possible. In a nutshell, I am here to help.",
        "language_text": "English, Croatian"
    },
    "homes_text": [
        {
            "text": "10 homes bought or listed",
            "category": "bought-listed",
            "show": 1
        },
        {
            "text": "111 homes toured",
            "category": "toured",
            "show": 1
        }
    ],
    "bind_agent_user": null,
    "contact_message": "I have questions about real estate. Please contact me.",
    "show_experience": 1,
    "list_top_city": {
        "title": "Top cities (by transactions)",
        "list": [
            {
                "municipality": "Toronto",
                "listing_count": 8,
                "listing_percent": 0.8
            },
            {
                "municipality": "Mississauga",
                "listing_count": 1,
                "listing_percent": 0.1
            }
        ],
        "show": 1
    },
    "list_house_type": {
        "title": "Property type distribution",
        "list": [
            {
                "house_type": "C.",
                "house_type_name": "Condo Apt",
                "listing_count": 7,
                "listing_percent": 0.7
            },
            {
                "house_type": "A.",
                "house_type_name": "Att/Row/Twnhouse",
                "listing_count": 2,
                "listing_percent": 0.2
            },
            {
                "house_type": "Other",
                "house_type_name": "Other",
                "listing_count": 1,
                "listing_percent": 0.1
            }
        ],
        "show": 1
    },
    "meta": {
        "h1": "Real Estate Agent in Ontario - Maja Curic",
        "description": "Meet Maja Curic, a real estate agent in Ontario with HouseSigma. Explore past transactions, and contact Maja Curic for expert real estate services.",
        "title": "Maja Curic - ON  Real Estate Agent | HouseSigma"
    }
}
```

#### Agent Output Fields Explained

| Field / Property         | Type      | Description                                                                                      |
|-------------------------|-----------|--------------------------------------------------------------------------------------------------|
| `agent.id`              | number    | Unique agent ID                                                                                  |
| `agent.name`            | string    | Agent's full name                                                                                |
| `agent.avatar`          | string    | URL to agent's profile photo                                                                     |
| `agent.designation`     | string    | Agent's title or designation (e.g., "Sales Representative")                                      |
| `agent.about`           | string    | Agent's biography or about text                                                                  |
| `agent.language_text`   | string    | Languages spoken by the agent (comma-separated)                                                  |
| `homes_text`            | array     | Array of agent's activity summaries (e.g., homes bought/listed, homes toured)                    |
| `homes_text[].text`     | string    | Description of the activity (e.g., "10 homes bought or listed")                                  |
| `homes_text[].category` | string    | Activity category (e.g., "bought-listed", "toured")                                              |
| `homes_text[].show`     | number    | Whether to show this activity (1 = show, 0 = hide)                                               |
| `bind_agent_user`       | any       | Additional agent info (if available)                                                             |
| `contact_message`       | string    | Default contact message for the agent                                                            |
| `show_experience`       | number    | Whether to show experience section (1 = show, 0 = hide)                                          |
| `list_top_city`         | object    | Top cities by agent's transaction count                                                          |
| `list_top_city.title`   | string    | Title for the top cities section                                                                 |
| `list_top_city.list`    | array     | Array of city stats                                                                              |
| `list_top_city.list[].municipality`     | string    | City/municipality name                                                                          |
| `list_top_city.list[].listing_count`    | number    | Number of listings/transactions in this city                                                    |
| `list_top_city.list[].listing_percent`  | number    | Percentage of total transactions in this city (0-1)                                             |
| `list_top_city.show`    | number    | Whether to show this section (1 = show, 0 = hide)                                                |
| `list_house_type`       | object    | Property type distribution for the agent's transactions                                          |
| `list_house_type.title` | string    | Title for the property type section                                                              |
| `list_house_type.list`  | array     | Array of property type stats                                                                     |
| `list_house_type.list[].house_type`     | string    | Property type code (e.g., "C.", "A.", "Other")                                                  |
| `list_house_type.list[].house_type_name`| string    | Property type name (e.g., "Condo Apt")                                                          |
| `list_house_type.list[].listing_count`  | number    | Number of transactions for this property type                                                   |
| `list_house_type.list[].listing_percent`| number    | Percentage of total transactions for this property type (0-1)                                   |
| `list_house_type.show`  | number    | Whether to show this section (1 = show, 0 = hide)                                                |
| `meta`                  | object    | Metadata for SEO/sharing (h1, description, title)                                                |

> **Note:** Some fields may be missing or empty depending on the agent's profile and available data.

***

### Benefits

- **Market Insights**: Track price trends and identify undervalued properties.
- **Investment Analysis**: Use historical sales and community stats for informed decisions.
- **Time Savings**: Automate data extraction instead of manual copying.
- **Scalable**: Scrape thousands of listings across cities in hours.

***

### Why Use This Scraper?

HouseSigma’s map-based interface makes it ideal for geographic research, but manual data collection is tedious. This scraper:

- **Scales Effortlessly**: Scrape hundreds of listings across cities.
- **Avoids Blocks**: Residential proxies ensure uninterrupted scraping.
- **Delivers Structure**: Clean, analysis-ready data in JSON/CSV.

***

### FAQ

**Do I have to paste a HouseSigma URL?**\
No. `searchLocations` / `city` plus status/price/beds is enough. URLs still work and can be mixed with city search.

**Do I have to paste cookies?**\
No. The actor refreshes a service sign-in each run. Cookies are only if you want your own HouseSigma session.

**Why is an address `(Address display requires Agreement)`?**\
Listings in the public IDX feed always show their address. VOW-only listings (sold, leased, and some for-sale listings) sit behind the TRREB/PropTx VOW agreement, which HouseSigma expires periodically. Sign-in is automatic; the legal agreement is not something the actor can accept for you. Those rows still include price, beds, status, and an `addressGated` / `addressGate` flag.

**How does incremental work?**\
Seen listing IDs and agent slugs are stored in the named key-value store `housesigma-incremental` (or `incrementalStoreName`). The next run skips them. Use a different store name per watch if you run Toronto-sold and Vancouver-lease on separate schedules.

**Can this click through the HouseSigma agreement?**\
No. That is a legal VOW acceptance, not a login wall.

### Support

- **Issues**: Report via [Apify Actor Issues](https://console.apify.com/actors/3suW93yHEJdAsg0aw/issues).
- **Contact**:
  - Email: <muhamed.didovic@gmail.com>
  - Portfolio: <https://muhamed-didovic.github.io/>

***

### Custom Services

Need modifications? Contact me for:

- Custom fields (e.g., school districts, commute times).
- Bulk historical sales data.
- Integration with analytics tools (Tableau, Power BI).

Email: <muhamed.didovic@gmail.com>

# Actor input Schema

## `startUrls` (type: `array`):

HouseSigma map, listing, agent, market-trends, or curated-feed URLs. Optional if you set Search locations / city below. Example: https://housesigma.com/on/toronto-real-estate/map/?status=for-sale

## `searchLocations` (type: `array`):

City names to scrape without building a HouseSigma URL. Each city becomes a map search. Example: Toronto, Ottawa, Vancouver. Combine with Status / price / beds below.

## `city` (type: `string`):

Single city fallback when Search locations is empty. Example: Toronto

## `province` (type: `string`):

ON, BC, or AB. Default ON.

## `status` (type: `string`):

for-sale, sold, for-lease, leased, sale-delisted, lease-delisted. Comma-separate to mix (e.g. for-sale,sold). Default for-sale.

## `houseType` (type: `string`):

all, detached/house, semi, townhouse, condo, link, land. Comma-separate to mix. Mapped to HouseSigma codes (D., S., T., C.).

## `priceMin` (type: `integer`):

Minimum list or sold price. Example: 400000

## `priceMax` (type: `integer`):

Maximum list or sold price. Example: 900000

## `bedrooms` (type: `integer`):

Minimum bedrooms. Example: 3

## `bathrooms` (type: `integer`):

Minimum bathrooms. Example: 2

## `garageMin` (type: `integer`):

Minimum garage count. Example: 1

## `soldDays` (type: `integer`):

Only used when status includes sold or leased. HouseSigma default is 90. Example: 30

## `listingDays` (type: `integer`):

0 means any age. Example: 7

## `squareFootageMin` (type: `integer`):

Example: 800

## `squareFootageMax` (type: `integer`):

Example: 2500

## `listingType` (type: `string`):

all, or HouseSigma listing_type values such as assignment vs resale. Default all.

## `scrapeAgents` (type: `boolean`):

Adds https://housesigma.com/{province}/agents/ so you do not need a separate agent URL.

## `communityStats` (type: `boolean`):

Adds a market-trends/just-sold request for each city (community sold-price stats).

## `community` (type: `string`):

HouseSigma community slug, or all. Used only when community sold-stats is on.

## `feed` (type: `string`):

Optional HouseSigma curated list. Leave empty to skip.

## `incremental` (type: `boolean`):

On later runs, skip listing/agent IDs already pushed. State lives in a named key-value store (housesigma-incremental by default) so scheduled watches only return new rows.

## `incrementalStoreName` (type: `string`):

Named Apify key-value store for seen IDs. Change this if you run separate watches (e.g. toronto-sold vs vancouver-lease).

## `maxItems` (type: `integer`):

Maximum number of Listings/Items to scrape per crawl. If not defined, all items will be scraped.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `cookies` (type: `array`):

<p>Cookie used to authorize actor with site. Install <a rel="noopener noreferrer nofollow" target="_blank" href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" previewlistener="true">EditThisCookie</a> chrome extension. Login to your account. Click on the extension and export the cookies from the site. Insert the contents here</p>
## `proxy` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; only charged when an email is returned, never for misses.

## `qualifyByPayment` (type: `boolean`):

Requires "Enrich with contact emails". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments (is this a real paying business?), paymentProcessors (which stack), stripeLiveKey (the public key if exposed) and paymentConfidence. Turn raw contacts into monetization-qualified leads. No extra charge — included with each enriched company.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://housesigma.com/on/otterville-real-estate/map/?center_marker=42.9264829,-80.6033821&view=map&municipality=12397&status=for-sale&lat=42.9264829&lon=-80.6033821&zoom=12"
    }
  ],
  "province": "ON",
  "status": "for-sale",
  "houseType": "all",
  "listingType": "all",
  "scrapeAgents": false,
  "communityStats": false,
  "community": "all",
  "incremental": false,
  "incrementalStoreName": "housesigma-incremental",
  "maxItems": 100,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 100,
  "cookies": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "enrichEmails": false,
  "qualifyByPayment": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://housesigma.com/on/otterville-real-estate/map/?center_marker=42.9264829,-80.6033821&view=map&municipality=12397&status=for-sale&lat=42.9264829&lon=-80.6033821&zoom=12"
        }
    ],
    "cookies": [],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/apify-housesigma-cheerio").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://housesigma.com/on/otterville-real-estate/map/?center_marker=42.9264829,-80.6033821&view=map&municipality=12397&status=for-sale&lat=42.9264829&lon=-80.6033821&zoom=12" }],
    "cookies": [],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/apify-housesigma-cheerio").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://housesigma.com/on/otterville-real-estate/map/?center_marker=42.9264829,-80.6033821&view=map&municipality=12397&status=for-sale&lat=42.9264829&lon=-80.6033821&zoom=12"
    }
  ],
  "cookies": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/apify-housesigma-cheerio --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/apify-housesigma-cheerio"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3suW93yHEJdAsg0aw/builds/3oIGuGI7FFUPbJOzE/openapi.json
