Houski versus the MLS: a different shape of property data

Photo of Alex Wilkinson
Alex Wilkinson
CEO of Houski
2026-01-22

A common question is whether Houski is "like the Multiple Listing Service (MLS), but for developers." It is not. The two products exist for different reasons, hold different data, and gate access differently. This post lays out the actual differences so you can decide which one fits the problem you are trying to solve.

Houski holds more than 220 million properties across 16 countries, from Canada and the United States to much of Europe and South Korea, with more than 400 fields available on each, sourced from public, government, and crowdsourced data. The MLS is a network of regional listing systems operated by real estate boards, used by their members to share active inventory and historical transactional data among themselves. Both are useful. They are not substitutes.

What each system actually contains

The MLS, at its core, is an inventory system for active and recently active listings, including private transactional data its members share with each other. Active listings on the MLS feed through to portals like realtor.ca, which mirror the inventory side. The deepest value of the MLS is internal: recorded sale prices, days on market history, agent-only remarks, and similar fields are available to board members but are not in any general-access dataset in Canada.

Houski is a normalized property dataset built from public, government, and crowdsourced sources. Properties are in it whether or not they have ever been listed. The fields lean toward the physical and contextual rather than the transactional. Construction year, interior area, lot dimensions, roof age estimates, heating type, basement type, assessment values, listing history, permit history, zoning, neighbourhood context, and our own model-based valuation estimates.

The two datasets overlap on listings. Houski ingests publicly available listing information, so list prices, days on market, and listing history are present. Recorded sale prices appear as Sold events in the listing history where a jurisdiction publishes its sales, which covers much of the United States and some Canadian provinces. Where a province publishes no sale prices, as in Ontario and Quebec, they sit behind the MLS and the land-titles registries, and the listing history ends at Unlisted instead. Houski never claims a sale it has no record of.

If your workflow depends on recorded sales in a province that publishes none, the MLS or a land-titles pull is the right tool. If your workflow depends on physical property characteristics across the full housing stock in either country, Houski is the right tool. A lot of work needs both.

Access shape

The MLS is access-controlled. You join a real estate board, you abide by its rules, and you get access through approved software. The Canadian Real Estate Association (CREA) runs a Data Distribution Facility that offers a feed for technology partners, but it is built around active listings and its members.

Houski is a property data API. You sign up, you get an API key, you pay per usage. There is no membership and no licensing requirement. The whole product is designed around the idea that someone building a flood-risk tool, a relocation calculator, an investment underwriter, or a city-planning dashboard should not have to become a board member to read public data.

This is the part that most people are actually asking about when they ask "MLS or Houski." If the question is "I want to build software that needs to read property data," the access model is usually the deciding factor.

Coverage shape

The MLS shows you the slice of the market that is currently listed, plus historical listings that its members have logged. Houski shows you the whole housing stock, most of which is not listed in any given year. A typical year sees only a few percent of Canadian housing stock change hands. The other ninety-five-plus percent is invisible to the MLS but is right there in Houski.

That matters or it does not depending on what you are doing. A buyer's agent shopping for inventory wants the active-listings view. A municipal planner wants the whole-stock view. A short-term rental operator scoring potential acquisitions wants the whole-stock view with listing context layered on top.

Where the two work well together

If you have MLS access through your brokerage and you want to enrich it, Houski is useful. You take an address from a listing, you call our API, and you get back physical characteristics, assessment values, permit history, listing history beyond what your local board carries, and an automated valuation as a sanity check. Same address, broader context.

The reverse also works. If you are building on Houski and you need a recorded sale price in a province that publishes none, that data exists behind MLS access or behind a provincial land-titles pull, and you can layer it on top of the Houski record for that one address.

A quick technical look

Most of what people want from a property dataset is "give me an address and tell me what is there." The block below is a live call against the real API, the request code and the JSON response are generated every time this page is rendered:

API request
TypeScript code
const houski_data = async (): Promise<PropertiesResponse> => {

    // You must copy the PropertiesResponse type declarations from the 
    // Houski API documentation to strongly type the response

    const url = new URL('https://api.houski.ca/properties');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('city', 'calgary');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('province_abbreviation', 'ab');
    url.searchParams.set('select', 'interior_sq_m,bedroom,bathroom_full,construction_year,property_type,assessment_value,latitude,longitude');

    const response = await fetch(url);
    const data = await response.json();

    return data;
}

(async () => {
let data: PropertiesResponse = await houski_data();

// Log the response
console.log(data);
})();
API response
JSON
{
  "cache_hit": false,
  "cost_cents": 3.2999997,
  "data": [
    {
      "address": "518 Rochester Terrace NW",
      "assessment_value": 1300000,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2023,
      "interior_sq_m": 169.45374,
      "latitude": 51.11072,
      "longitude": -114.2748,
      "property_id": "103f92f6cf7bbdd9",
      "property_type": "Land"
    },
    {
      "address": "36 Crimson Ridge Heights NW",
      "assessment_value": 194000,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2024,
      "interior_sq_m": 169.45374,
      "latitude": 51.107574,
      "longitude": -114.25946,
      "property_id": "104fb85a9c002e5d",
      "property_type": "Commercial"
    },
    {
      "address": "54 Rowmont Link NW",
      "assessment_value": 853500,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2023,
      "interior_sq_m": 169.45374,
      "latitude": 51.106037,
      "longitude": -114.275,
      "property_id": "1055f97323e53f25",
      "property_type": "House"
    },
    {
      "address": "499 Rochester Terrace NW",
      "assessment_value": 888000,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2023,
      "interior_sq_m": 169.45374,
      "latitude": 51.111366,
      "longitude": -114.27512,
      "property_id": "1106094a42c3757d",
      "property_type": "Land"
    },
    {
      "address": "304 30 Rochester View NW",
      "assessment_value": 105000,
      "bathroom_full": 2,
      "bedroom": 2,
      "construction_year": 1800,
      "interior_sq_m": 121.70197,
      "latitude": 51.109074,
      "longitude": -114.26745,
      "property_id": "1198b011e799062c",
      "property_type": "Townhouse"
    },
    {
      "address": "95 Royston He NW",
      "assessment_value": 918500,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2023,
      "interior_sq_m": 169.45374,
      "latitude": 51.107533,
      "longitude": -114.272934,
      "property_id": "11aa161875771a70",
      "property_type": "Land"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 110113
  },
  "price_quote": false,
  "result_total": 660677,
  "time_ms": 29,
  "ui_info": {
    "city": "Calgary",
    "city_id": "6ec95b53075d062c",
    "city_link": "ca/ab/calgary",
    "city_slug": "calgary",
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Alberta",
    "province_abbreviation": "AB",
    "province_abbreviation_id": "aae1f05a0f89d2c7",
    "province_abbreviation_link": "ca/ab",
    "province_slug": "alberta"
  }
}

One API key, one endpoint, the same field names across every state, province and country. No regional integrations and no field-name reconciliation.

How to choose

If the question is which one to use, the honest answer is what kind of data your problem actually needs.

Reach for the MLS when you need recorded sale prices a province does not publish, agent-side remarks, or the transactional history that boards share among their members.

Reach for Houski when you need the full housing stock, physical characteristics standardized across states, provinces and countries, assessment values, listing context, permit data, or a model-based valuation. Reach for Houski when you are building software and the access model of a real estate board is the wrong shape for what you are doing.

A lot of teams end up using both. They are not really competitors. They are different cuts through the same housing stock.

The quick start guide walks through your first Houski call. The field list shows you every field we carry.