!

Property data for proptech builders: The API stack powering the next generation of real estate apps

Photo of Alex Wilkinson
Alex Wilkinson
CEO of Houski
2026-02-23

Every successful proptech company has the same foundation: comprehensive, reliable property data. Whether you're building a home valuation tool, investment platform, mortgage comparison site, or AI-powered assistant, the quality and depth of your data determines what you can build.

The challenge? Getting Canadian property data has historically been expensive, complicated, and locked behind Multiple Listing Service (MLS) board memberships with restrictive usage terms.

Houski's property data API changes this. With 19+ million Canadian properties, 200+ data fields per property, and developer-friendly pricing, we provide the infrastructure layer proptech builders need to ship faster.

Why property data is the proptech foundation

Consider what today's leading platforms do:

  • Zillow: Property search, automated valuations, market trends
  • Redfin: Real-time listings, price estimates, neighborhood data
  • Opendoor: Instant offers, condition assessment, market timing
  • Compass: Agent tools, market analytics, client matching

Strip away the user experience (UX) layer and branding, and these are all property data products. They collect, process, and present property information in ways that create value.

Building a competitive product requires the same foundational data layer:

TypeScript code
// The data stack behind every proptech app
interface ProptechDataLayer {
  // Core property data
  properties: {
    physical: 'bedrooms, bathrooms, sq footage, lot size';
    financial: 'assessments, taxes, valuations';
    location: 'coordinates, neighborhoods';
    history: 'listings, permits, assessments';
  };

  // Derived analytics
  analytics: {
    valuations: 'automated valuation estimates with confidence scores';
    trends: 'historical valuation trajectories, area benchmarks';
    comparables: 'similar properties, recent listings';
    predictions: 'date-conditioned valuations across past dates';
  };

  // Integration capabilities
  apis: {
    search: 'fuzzy address lookup';
    properties: 'filter by any combination of fields, plus bounding box and polygon';
    geocoding: 'coordinates to nearby properties';
    aggregation: 'one aggregation per location, batchable in a single call';
    bulk: 'CSV dataset exports for entire provinces';
  };
}

What you can build with Houski's API

Home valuation tools

Build instant home value estimators that rival established players. We would first resolve the address with /search, then call /avm with the resulting property_id. The block below is a live call against the real automated valuation model (AVM) endpoint:

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

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

    const url = new URL('https://api.houski.ca/avm');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('property_id', 'bd9c6fb24c31c772');

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

    return data;
}

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

// Log the response
console.log(data);
})();
API response
JSON
{
  "cache_hit": true,
  "cost_cents": 500.0,
  "data": {
    "address": "302 610 17 Avenue SW",
    "bathroom_full": 1,
    "bathroom_half": 1,
    "bedroom": 2,
    "city": "Calgary",
    "comparable_properties": [
      {
        "address": "402 610 17 Avenue SW",
        "distance_km": 0.0,
        "estimate_sale_date_sold": "2025-02-07",
        "image": "589c5b211ab31176_46d18d02",
        "interior_sq_m": 91.88034057617188,
        "latitude": 51.03819274902344,
        "list_price": 295000,
        "longitude": -114.07510375976562
      },
      {
        "address": "101 523 15 Avenue SW",
        "distance_km": 0.15573714673519137,
        "estimate_sale_date_sold": "2023-08-29",
        "image": "6d3f02fca68d547e_b6f2526e",
        "interior_sq_m": 91.9732437133789,
        "latitude": 51.0385856628418,
        "list_price": 288888,
        "longitude": -114.07293701171876
      },
      {
        "address": "1105 1209 6 Street SW",
        "distance_km": 0.39864420890808105,
        "estimate_sale_date_sold": "2023-08-23",
        "image": "59eb4d7ffd625770_807d4658",
        "interior_sq_m": 92.99517059326172,
        "latitude": 51.04155349731445,
        "list_price": 299900,
        "longitude": -114.07714080810548
      },
      {
        "address": "109 545 18 Avenue SW",
        "distance_km": 0.19652090966701508,
        "estimate_sale_date_sold": "2025-09-03",
        "image": "703794262c3f0a6f_ae0e2846",
        "interior_sq_m": 94.10999298095705,
        "latitude": 51.03668594360352,
        "list_price": 319900,
        "longitude": -114.0736083984375
      },
      {
        "address": "401 1209 6 Street SW",
        "distance_km": 0.39864420890808105,
        "estimate_sale_date_sold": "2024-01-18",
        "image": "add60c129cc174c8_15dc7a7e",
        "interior_sq_m": 92.90226745605467,
        "latitude": 51.04155349731445,
        "list_price": 294000,
        "longitude": -114.07714080810548
      },
      {
        "address": "500 610 17 Avenue SW",
        "distance_km": 0.0,
        "estimate_sale_date_sold": "2023-05-17",
        "image": "fb81bd27e5d3b319_860c3dd6",
        "interior_sq_m": 93.36677551269533,
        "latitude": 51.03819274902344,
        "list_price": 324900,
        "longitude": -114.07510375976562
      },
      {
        "address": "701 1209 6 Street SW",
        "distance_km": 0.39864420890808105,
        "estimate_sale_date_sold": "2024-04-04",
        "image": "27170c00d68d56c5_a08329a3",
        "interior_sq_m": 94.48160552978516,
        "latitude": 51.04155349731445,
        "list_price": 314900,
        "longitude": -114.07714080810548
      },
      {
        "address": "504 616 15 Avenue SW",
        "distance_km": 0.11205749213695526,
        "estimate_sale_date_sold": "2025-07-04",
        "image": "e731e220553c9548_88738769",
        "interior_sq_m": 87.79264068603516,
        "latitude": 51.03919219970703,
        "list_price": 289900,
        "longitude": -114.07533264160156
      },
      {
        "address": "203 330 15 Avenue SW",
        "distance_km": 0.35846400260925293,
        "estimate_sale_date_sold": "2024-05-13",
        "image": "9bfb40e46e0da97_57c6d01e",
        "interior_sq_m": 90.20809936523438,
        "latitude": 51.039058685302734,
        "list_price": 318800,
        "longitude": -114.07009887695312
      },
      {
        "address": "305 1209 6 Street SW",
        "distance_km": 0.39864420890808105,
        "estimate_sale_date_sold": "2024-08-04",
        "image": "1119eb5e5c0e6dd6_9dfcbaf5",
        "interior_sq_m": 94.2957992553711,
        "latitude": 51.04155349731445,
        "list_price": 290000,
        "longitude": -114.07714080810548
      }
    ],
    "comparable_properties_total": 26446,
    "construction_year": 1979,
    "country": "Canada",
    "den": 0,
    "estimate_list_price": {
      "confidence_score": 95.37734985351562,
      "model_metrics": {
        "coefficient_of_variation": 21.297779888460052,
        "error_10th_percentile": 3827.418701171875,
        "error_25th_percentile": 9674.828125,
        "error_50th_percentile": 23070.7421875,
        "error_75th_percentile": 47898.9296875,
        "error_90th_percentile": 92634.5625,
        "error_95th_percentile": 148044.328125,
        "forecast_std_dev": 128036.875,
        "mae": 47591.03125,
        "mape": 6.9191975593566895,
        "mean_bias": -5065.5068359375,
        "median_bias": 430.265625,
        "median_mape": 4.622647285461426,
        "mse": 16419014656.0,
        "over_prediction_rate": 50.56352952509392,
        "pct_error_10th": 0.825827956199646,
        "pct_error_90th": 14.368406295776367,
        "rmse": 128136.703125,
        "testing_r_squared": 0.95,
        "training_r_squared": 0.98,
        "under_prediction_rate": 49.43647047490608,
        "within_10_pct": 80.1416048550236,
        "within_15_pct": 90.8823812734804,
        "within_20_pct": 95.21722377420288,
        "within_5_pct": 53.00067430883345
      },
      "value": 304696.46875
    },
    "estimate_rent_monthly": {
      "confidence_score": 84.40579986572266,
      "model_metrics": {
        "coefficient_of_variation": 74.19626193400119,
        "error_10th_percentile": 11197.140625,
        "error_25th_percentile": 29858.390625,
        "error_50th_percentile": 73107.78125,
        "error_75th_percentile": 163402.125,
        "error_90th_percentile": 341056.21875,
        "error_95th_percentile": 550266.6875,
        "forecast_std_dev": 451020.15625,
        "mae": 168982.734375,
        "mape": 33.335357666015625,
        "mean_bias": -57108.90234375,
        "median_bias": -1695.578125,
        "median_mape": 15.594200134277344,
        "mse": 206676312064.0,
        "over_prediction_rate": 49.18625,
        "pct_error_10th": 2.5083909034729004,
        "pct_error_90th": 66.41152954101562,
        "rmse": 454616.65625,
        "testing_r_squared": 0.72,
        "training_r_squared": 0.82,
        "under_prediction_rate": 50.81375,
        "within_10_pct": 36.0375,
        "within_15_pct": 48.791250000000005,
        "within_20_pct": 58.3375,
        "within_5_pct": 19.635
      },
      "value": 2113.846923828125
    },
    "estimate_sale_price": {
      "confidence_score": 95.3768310546875,
      "model_metrics": {
        "coefficient_of_variation": 21.802883473823258,
        "error_10th_percentile": 3706.49365234375,
        "error_25th_percentile": 9493.46875,
        "error_50th_percentile": 22532.15625,
        "error_75th_percentile": 47268.0703125,
        "error_90th_percentile": 93783.46875,
        "error_95th_percentile": 150844.203125,
        "forecast_std_dev": 127978.265625,
        "mae": 47541.25,
        "mape": 7.054271221160889,
        "mean_bias": -4664.0380859375,
        "median_bias": 475.828125,
        "median_mape": 4.623165130615234,
        "mse": 16400123904.0,
        "over_prediction_rate": 50.63577690010597,
        "pct_error_10th": 0.8310901522636414,
        "pct_error_90th": 14.612176895141602,
        "rmse": 128062.96875,
        "testing_r_squared": 0.95,
        "training_r_squared": 0.99,
        "under_prediction_rate": 49.36422309989404,
        "within_10_pct": 79.77555148829593,
        "within_15_pct": 90.50187843175031,
        "within_20_pct": 94.70185916578365,
        "within_5_pct": 53.04402273384067
      },
      "value": 293364.59375
    },
    "image": "bd9c6fb24c31c772_7e931788",
    "interior_sq_m": 92.43848419189452,
    "latitude": 51.03819274902344,
    "longitude": -114.07510375976562,
    "price_history": [
      {
        "date": "2025-02-18",
        "estimate_list_price": 328939.625,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 303350.5625
      },
      {
        "date": "2025-03-20",
        "estimate_list_price": 329062.625,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 304171.25
      },
      {
        "date": "2025-04-19",
        "estimate_list_price": 329062.625,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 304964.21875
      },
      {
        "date": "2025-05-19",
        "estimate_list_price": 335027.4375,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 311037.21875
      },
      {
        "date": "2025-06-18",
        "estimate_list_price": 333825.6875,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 314355.09375
      },
      {
        "date": "2025-07-18",
        "estimate_list_price": 332129.96875,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 315810.03125
      },
      {
        "date": "2025-08-17",
        "estimate_list_price": 331247.09375,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 313273.1875
      },
      {
        "date": "2025-09-16",
        "estimate_list_price": 322242.5,
        "estimate_rent_monthly": 2109.8994140625,
        "estimate_sale_price": 307987.21875
      },
      {
        "date": "2025-10-16",
        "estimate_list_price": 310982.65625,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 304819.40625
      },
      {
        "date": "2025-11-15",
        "estimate_list_price": 310966.9375,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 309683.09375
      },
      {
        "date": "2025-12-15",
        "estimate_list_price": 310966.9375,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 308561.96875
      },
      {
        "date": "2026-01-14",
        "estimate_list_price": 303210.59375,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 304967.40625
      },
      {
        "date": "2026-02-13",
        "estimate_list_price": 302817.875,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 298701.09375
      },
      {
        "date": "2026-03-15",
        "estimate_list_price": 303162.3125,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 298037.53125
      },
      {
        "date": "2026-04-14",
        "estimate_list_price": 302872.15625,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 297308.53125
      },
      {
        "date": "2026-05-14",
        "estimate_list_price": 302872.15625,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 292016.375
      },
      {
        "date": "2026-06-13",
        "estimate_list_price": 302610.59375,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 292016.375
      },
      {
        "date": "2026-07-13",
        "estimate_list_price": 304696.46875,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 293364.59375
      },
      {
        "date": "2026-08-12",
        "estimate_list_price": 304696.46875,
        "estimate_rent_monthly": 2113.846923828125,
        "estimate_sale_price": 293364.59375
      }
    ],
    "property_id": "bd9c6fb24c31c772",
    "property_type": "Apartment",
    "property_warning_flags": [
      {
        "description": "Monthly fees run about 4% of the estimated value each year, above the typical range. High fees can weigh on resale.",
        "warning": "High monthly fees"
      },
      {
        "description": "This property appears to have been converted between residential and commercial use. Conversions can carry permit, zoning, and insurance complications worth confirming.",
        "warning": "Use conversion"
      }
    ],
    "province": "Alberta",
    "score_air_quality": 6,
    "score_bicycle": 9,
    "score_cell_coverage": 10,
    "score_curb_appeal": 4,
    "score_earthquake": 9,
    "score_education": 9,
    "score_entertainment": 10,
    "score_family": 0,
    "score_fire": 9,
    "score_flood": 9,
    "score_food_and_drink": 10,
    "score_hurricane": 10,
    "score_internet": 10,
    "score_nature": 6,
    "score_parking": 8,
    "score_quiet": 2,
    "score_retirement": 0,
    "score_safety": 6,
    "score_shopping": 9,
    "score_smell": 4,
    "score_tornado": 8,
    "score_total": 7,
    "score_total_percent": 0.6960000395774841,
    "score_traffic": 0,
    "score_transit": 9,
    "score_walkability": 10,
    "score_water_quality": 7,
    "valuation_date": "2026-08-12"
  },
  "error": "",
  "price_quote": false,
  "time_ms": 656,
  "url": "https://www.houski.ca/avm-report/bd9c6fb24c31c772_a49b86c7"
}

The AVM endpoint returns estimates, confidence scores, and model metrics (R-squared, median percentage error, hit rates within accuracy bands) so you can build transparent valuation products.

See our Search API docs and AVM API docs.

Investment analysis platforms

Help investors identify opportunities and analyze deals. The block below is a live /properties call returning the fields an investment screener needs to compute cap rate, cash-on-cash, and price per square metre:

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('bedroom_gte', '3');
    url.searchParams.set('city', 'calgary');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('property_type_eq', 'House');
    url.searchParams.set('province_abbreviation', 'ab');
    url.searchParams.set('results_per_page', '10');
    url.searchParams.set('select', 'address,property_type,bedroom,bathroom_full,interior_sq_m,construction_year,estimate_sale_price,estimate_rent_monthly,assessment_value,property_taxes,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": 8.5,
  "data": [
    {
      "address": "6 1744 7 Street SW",
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2006,
      "estimate_rent_monthly": 3259,
      "estimate_sale_price": 826706,
      "interior_sq_m": 125.882568359375,
      "latitude": 51.03611755371094,
      "longitude": -114.0792007446289,
      "property_id": "10004f7afe0c1946",
      "property_type": "House"
    },
    {
      "address": "384 Copperpond Landng SE",
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2006,
      "estimate_rent_monthly": 2571,
      "estimate_sale_price": 441172,
      "interior_sq_m": 125.882568359375,
      "latitude": 50.925743103027344,
      "longitude": -113.92975616455078,
      "property_id": "10007f9761f49940",
      "property_type": "House"
    },
    {
      "address": "239 Dalhurst Way NW",
      "assessment_value": 1110000,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 1971,
      "estimate_rent_monthly": 3270,
      "estimate_sale_price": 1012722,
      "interior_sq_m": 108.46339416503906,
      "latitude": 51.110740661621094,
      "longitude": -114.1513900756836,
      "property_id": "100086f6bc064d3f",
      "property_taxes": 6860,
      "property_type": "House"
    },
    {
      "address": "52 Cedargrove Way SW",
      "assessment_value": 662000,
      "bathroom_full": 1,
      "bedroom": 3,
      "construction_year": 1984,
      "estimate_rent_monthly": 2561,
      "estimate_sale_price": 614848,
      "interior_sq_m": 136.4734344482422,
      "latitude": 50.95145034790039,
      "longitude": -114.12571716308594,
      "property_id": "1000c277cd905d3b",
      "property_taxes": 4091,
      "property_type": "House"
    },
    {
      "address": "28 Sundown Gr SE",
      "assessment_value": 692500,
      "bathroom_full": 3,
      "bedroom": 3,
      "construction_year": 1988,
      "estimate_rent_monthly": 3173,
      "estimate_sale_price": 781636,
      "interior_sq_m": 172.61241149902344,
      "latitude": 50.899044036865234,
      "longitude": -114.04895782470705,
      "property_id": "1001109ab2aebbc0",
      "property_taxes": 4280,
      "property_type": "House"
    },
    {
      "address": "117 Sandpiper Place NW",
      "assessment_value": 764500,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 1988,
      "estimate_rent_monthly": 2774,
      "estimate_sale_price": 712601,
      "interior_sq_m": 142.6978759765625,
      "latitude": 51.13548278808594,
      "longitude": -114.09813690185548,
      "property_id": "1001217184d8717b",
      "property_taxes": 4725,
      "property_type": "House"
    },
    {
      "address": "7237 California Boulevard NE",
      "assessment_value": 671500,
      "bathroom_full": 3,
      "bedroom": 4,
      "construction_year": 1995,
      "estimate_rent_monthly": 3214,
      "estimate_sale_price": 671900,
      "interior_sq_m": 200.01858520507812,
      "latitude": 51.07606506347656,
      "longitude": -113.92584991455078,
      "property_id": "1001392d95458fc1",
      "property_taxes": 4150,
      "property_type": "House"
    },
    {
      "address": "C304 4501 37 Street NW",
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 2006,
      "estimate_rent_monthly": 3405,
      "estimate_sale_price": 963101,
      "interior_sq_m": 125.882568359375,
      "latitude": 51.09214782714844,
      "longitude": -114.1414566040039,
      "property_id": "10013b5e28e0c630",
      "property_type": "House"
    },
    {
      "address": "6619 34 Street SW",
      "assessment_value": 868500,
      "bathroom_full": 3,
      "bedroom": 3,
      "construction_year": 1964,
      "estimate_rent_monthly": 4025,
      "estimate_sale_price": 1009562,
      "interior_sq_m": 139.35450744628906,
      "latitude": 50.99509048461914,
      "longitude": -114.13599395751952,
      "property_id": "10014f3c7e5bfad9",
      "property_taxes": 5368,
      "property_type": "House"
    },
    {
      "address": "188 Mount Aberdeen Close SE",
      "assessment_value": 467500,
      "bathroom_full": 2,
      "bedroom": 3,
      "construction_year": 1999,
      "estimate_rent_monthly": 2790,
      "estimate_sale_price": 486121,
      "interior_sq_m": 125.23225402832033,
      "latitude": 50.93125915527344,
      "longitude": -113.97802734375,
      "property_id": "1001894d82aeeb0c",
      "property_taxes": 2889,
      "property_type": "House"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 39182
  },
  "price_quote": false,
  "result_total": 391815,
  "time_ms": 179,
  "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"
  }
}

For the full list of filterable fields, see Properties API docs and Filtering guide.

Neighborhood intelligence

Power location-based features with aggregate market data. The block below is a live /aggregate call returning the median estimated sale price for a Calgary community:

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

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

    const url = new URL('https://api.houski.ca/aggregate');
    url.searchParams.set('aggregation', 'median');
    url.searchParams.set('api_key', 'YOUR_API_KEY');
    url.searchParams.set('city', 'calgary');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('field', 'estimate_sale_price');
    url.searchParams.set('province_abbreviation', 'ab');

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

    return data;
}

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

// Log the response
console.log(data);
})();
API response
JSON
{
  "cache_hit": false,
  "cost_cents": 1.0,
  "data": [
    {
      "aggregation": "median",
      "field": "estimate_sale_price",
      "value": "612104"
    }
  ],
  "error": "",
  "price_quote": false,
  "time_ms": 79
}

See Aggregate API docs.

Property search and filtering

Build powerful search experiences with flexible filtering. The block below is a live /properties call combining city, property type, size, and price filters with sorting:

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('bathroom_full_gte', '2');
    url.searchParams.set('bedroom_gte', '2');
    url.searchParams.set('city', 'toronto');
    url.searchParams.set('construction_year_gte', '2010');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('estimate_sale_price_lte', '800000');
    url.searchParams.set('estimate_sale_price_sort', 'asc');
    url.searchParams.set('interior_sq_m_gte', '80');
    url.searchParams.set('property_type_eq', 'Apartment');
    url.searchParams.set('province_abbreviation', 'on');
    url.searchParams.set('results_per_page', '10');
    url.searchParams.set('select', 'address,bedroom,bathroom_full,interior_sq_m,estimate_sale_price,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": 4.399999618530273,
  "data": [
    {
      "address": "50 311 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 224927,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79967498779297,
      "longitude": -79.29924774169922,
      "property_id": "66bf2e6c33d743d7"
    },
    {
      "address": "36 311 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 224927,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79967498779297,
      "longitude": -79.29924774169922,
      "property_id": "804c83ad1732fbcc"
    },
    {
      "address": "1 Adirondack Gt",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 248454,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.7999382019043,
      "longitude": -79.29908752441406,
      "property_id": "4c789ce773b89be6"
    },
    {
      "address": "18 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 248454,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79997634887695,
      "longitude": -79.29910278320312,
      "property_id": "cd2fc3bc6de3e69f"
    },
    {
      "address": "22 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 253935,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.800052642822266,
      "longitude": -79.29869079589844,
      "property_id": "dddb62c4c932ce17"
    },
    {
      "address": "20 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 253935,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79998779296875,
      "longitude": -79.29891204833984,
      "property_id": "f64a1711351c6f39"
    },
    {
      "address": "1 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 260271,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.7993049621582,
      "longitude": -79.29991912841797,
      "property_id": "7060d6fa620debcb"
    },
    {
      "address": "5 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 262186,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79938507080078,
      "longitude": -79.29936981201172,
      "property_id": "b35d93276429be5c"
    },
    {
      "address": "7 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 270164,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.799468994140625,
      "longitude": -79.29912567138672,
      "property_id": "4cb92860ee586002"
    },
    {
      "address": "3 Cross Hill Road",
      "bathroom_full": 2,
      "bedroom": 2,
      "estimate_sale_price": 270164,
      "interior_sq_m": 111.38981628417967,
      "latitude": 43.79928970336914,
      "longitude": -79.29955291748047,
      "property_id": "e2ee1d9250207a49"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 8900
  },
  "price_quote": false,
  "result_total": 88999,
  "time_ms": 263,
  "ui_info": {
    "city": "Toronto",
    "city_id": "6cdbdee2492718ed",
    "city_link": "ca/on/toronto",
    "city_slug": "toronto",
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Ontario",
    "province_abbreviation": "ON",
    "province_abbreviation_id": "146699ee774499d3",
    "province_abbreviation_link": "ca/on",
    "province_slug": "ontario"
  }
}

AI and LLM integration

Build AI-powered property assistants with our Model Context Protocol (MCP) server:

JSON
// Claude Desktop MCP configuration
{
  "mcpServers": {
    "houski-property-data": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://www.houski.ca/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

AI assistants can answer natural language questions:

  • "What's the average price of 3-bedroom houses in Kitsilano?"
  • "Find me condos under $500k near downtown Calgary with good transit scores"
  • "Compare investment potential between Edmonton and Calgary duplexes"

Technical architecture for proptech

Recommended stack

┌─────────────────────────────────────────────────┐
│              Your Application UI                 │
├─────────────────────────────────────────────────┤
│           Application Backend (API)              │
├──────────────┬──────────────┬───────────────────┤
│   Caching    │  Rate Limit  │  Error Handling   │
│   (Redis)    │   Manager    │    & Retry        │
├──────────────┴──────────────┴───────────────────┤
│              Houski API Client                   │
├─────────────────────────────────────────────────┤
│              Houski Property API                 │
│  /properties  /avm  /search  /location  /map    │
└─────────────────────────────────────────────────┘

Best practices

Cache aggressively: Property data is stable. Cache for 24+ hours to reduce API calls and improve response times.

TypeScript code
const getCachedProperty = async (propertyId) => {
  const cacheKey = `property:${propertyId}`;
  const cached = await redis.get(cacheKey);

  if (cached) {
    return JSON.parse(cached);
  }

  const data = await fetchFromHouski(propertyId);
  await redis.setex(cacheKey, 86400, JSON.stringify(data)); // 24 hour TTL

  return data;
};

Select only needed fields: The API charges per field. Request only what you need.

TypeScript code
// Good: Select specific fields
url.searchParams.set('select', 'address,bedroom,estimate_sale_price');

// Avoid: Requesting all fields when you only need a few

Handle pagination properly: Use the pagination.has_next_page flag in the response to decide whether to fetch the next page. We would loop through pages something like this, bumping the page parameter each iteration until has_next_page is false:

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', 'toronto');
    url.searchParams.set('country_abbreviation', 'ca');
    url.searchParams.set('page', '1');
    url.searchParams.set('province_abbreviation', 'on');
    url.searchParams.set('results_per_page', '20');

    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": 0.3999999761581421,
  "data": [
    {
      "address": "2202 62 Forest Manor Road",
      "property_id": "10000a939ca95e87"
    },
    {
      "address": "504 35 Walmer Road",
      "property_id": "100016a8f4f4f1a9"
    },
    {
      "address": "1108 2261 Lake Shore Boulevard W",
      "property_id": "10002ea98a9d7121"
    },
    {
      "address": "546 Indian Grove",
      "property_id": "1000336e22bf06cc"
    },
    {
      "address": "53 Sellers Avenue",
      "property_id": "10005963503d7807"
    },
    {
      "address": "89 Deanscroft Square",
      "property_id": "1000800c144981c8"
    },
    {
      "address": "316 8 Mondeo Drive",
      "property_id": "1000841363d7b830"
    },
    {
      "address": "508 88 Alton Towers Circle",
      "property_id": "100088b5dbf53712"
    },
    {
      "address": "109 Goldhawk Trail",
      "property_id": "10008b3d850d74ab"
    },
    {
      "address": "9 5318 Finch Avenue E",
      "property_id": "10009dadef91119"
    },
    {
      "address": "1506 500 Sherbourne Street",
      "property_id": "1000a73372f69138"
    },
    {
      "address": "201 2932 Yonge Street",
      "property_id": "1000b196f0c5c29b"
    },
    {
      "address": "1 40 Lambton Avenue",
      "property_id": "1000c39c4f3d8b69"
    },
    {
      "address": "3304 70 Annie Craig Drive",
      "property_id": "1000c6acd9ac7241"
    },
    {
      "address": "313 451 Rosewell Avenue",
      "property_id": "1000dd50c9d3883d"
    },
    {
      "address": "1411 55 Livingston Road",
      "property_id": "1000f3a60b6f1843"
    },
    {
      "address": "228 11 Ruttan Street",
      "property_id": "1000f503083588ff"
    },
    {
      "address": "32 Salamander Street",
      "property_id": "1000f9e7b02dcdfa"
    },
    {
      "address": "78 Northey Drive",
      "property_id": "100109271a96670"
    },
    {
      "address": "2 209 Wychwood Avenue",
      "property_id": "10010d09f47fb0bc"
    }
  ],
  "error": "",
  "pagination": {
    "current_page": 1,
    "has_next_page": true,
    "has_previous_page": false,
    "page_total": 68063
  },
  "price_quote": false,
  "result_total": 1361251,
  "time_ms": 1337,
  "ui_info": {
    "city": "Toronto",
    "city_id": "6cdbdee2492718ed",
    "city_link": "ca/on/toronto",
    "city_slug": "toronto",
    "country": "Canada",
    "country_abbreviation": "CA",
    "country_abbreviation_id": "9ace2b6431b7f1be",
    "country_abbreviation_link": "ca",
    "country_slug": "canada",
    "province": "Ontario",
    "province_abbreviation": "ON",
    "province_abbreviation_id": "146699ee774499d3",
    "province_abbreviation_link": "ca/on",
    "province_slug": "ontario"
  }
}

Pricing for startups and scale-ups

Pay-as-you-go

  • Property data: Most fields cost a tenth of a cent per field per property
  • AVM valuations: $5.00 per request
  • Search/geocoding: Billed per field per row, the same way as property data
  • $99/month minimum, billed monthly, no annual contract for companies under $2M revenue (companies over $2M revenue negotiate an enterprise contract directly with us)

Volume pricing

As you scale, per-request costs decrease. Contact us for:

  • Enterprise pricing for high-volume applications
  • Custom data packages
  • Service level agreement (SLA) guarantees

Cost optimization tips

  1. Cache responses - Most property data is stable. Cache 24+ hours
  2. Select minimal fields - Only request what you use
  3. Batch requests - Use pagination instead of many small requests
  4. Use price quotes - Test queries with price_quote=true to see costs first

Getting started: Your first week

Day 1: Explore the API

  1. Sign up for your API key
  2. Read the quick start guide
  3. Make your first API call

Days 2-3: Build a prototype

Pick one feature (home valuation, search, neighborhood scores) and build a prototype using the examples above.

Days 4-5: Refine and test

  • Add error handling and edge cases
  • Implement caching
  • Test with various property types and locations

Day 6-7: Plan your product

Map out additional features. Review the full fields documentation to discover data points you might not have considered.

Why build on Houski

Comprehensive coverage

19+ million Canadian properties with 200+ data fields each. No cobbling together multiple sources.

Transparent pricing

Know what you'll pay before making a request. No hidden fees.

Developer experience

Modern easy API with JSON responses, comprehensive documentation, type definitions for TypeScript/Rust/Go/Python/Java/C#, and responsive support.

No MLS restrictions

No display restrictions or board membership requirements. Build whatever you want.

AI-ready

MCP server integration so your app can leverage AI assistants with full property data access.

Resources for builders


The best time to start building was yesterday. The second best is now.

Get your API key and start building.