ZHU PROPERTIES / Market analytics
Calgary residential market
Explore transaction samples, price trends and model estimates by period, property type and community.
Calgary residential export sample · definitions provisional Coverage
Filter market dataPast 3 months · All communities · All types
Swipe to see all sections →
Past 3 months 2026-07-24 — 2026-10-23
Download period summary CSVFull historical trends · Amounts in Canadian dollars
Price trend
Transaction activity
Trends retain all history for the selected community and property type. Gold shading marks your chosen window; hatching and dashed lines mark incomplete periods, which are not directly comparable with full months or weeks.
Time on market
Time on market among sold records
- Within 14 days
- 21.9%
- Within 30 days
- 48.7%
- Over 90 days
- 9.5%
- 75th percentile DOM
- 59 days
Five periods compared · Current filters
| Period | Range | Records | Records per day | Median price | Mean price | Total value | Price per sq. ft. | Median DOM |
|---|---|---|---|---|---|---|---|---|
| Past week | 2026-10-17 2026-10-23 | 341 | 48.7 | $575,400 | $676,640 | $230,734,284 | $403 | 32 |
| Past month | 2026-09-24 2026-10-23 | 1,509 | 50.3 | $572,500 | $644,910 | $973,169,884 | $392 | 30 |
| Past 3 months | 2026-07-24 2026-10-23 | 4,998 | 54.3 | $575,000 | $646,188 | $3,229,649,659 | $392 | 32 |
| Past 6 months | 2026-04-24 2026-10-23 | 11,267 | 61.6 | $580,000 | $651,460 | $7,339,996,513 | $394 | 28 |
| Past year | 2025-10-24 2026-10-23 | 20,662 | 56.6 | $575,000 | $642,094 | $13,266,937,835 | $393 | 28 |
Periods overlap. Changes compare the preceding non-overlapping period and are omitted when coverage is incomplete. Use daily counts when period lengths differ.
Price distribution
Box: 25th–75th percentile; centre: median; ends: 10th–90th percentile.
Area and price
Select a point to inspect its values.
Up to 650 evenly sampled anonymous records are plotted; all records contribute to statistics.
Transaction mix
Bedrooms
Area bands
Age bands
Communities
No price ranking below 10 records; 10–29 records are marked as a small sample. Ranges are approximate 95% confidence intervals for the median, without property-feature adjustment.
Community map
Quantile bands use communities with enough records in the current filter. Darker shades mean higher values. Grey means insufficient or unmatched data.
Select a community to inspect its summary without changing filters. Use “Filter to this community” for details. Municipal boundaries may differ from MLS areas. Communities without matching boundaries remain in the table. Boundaries: City of Calgary Open Data
| Community | Records | Median price | Median interval | Price per sq. ft. | Median DOM |
|---|
No records match these filters. Change the period, property type or community.
Statistics & machine learning
Models use the full export sample and do not retrain with the filters above. The estimator uses an interpretable GAM; random forest and XGBoost provide predictive comparisons.
Performance on a later test period
Sorted by mean absolute error; lower is better. Gold highlights the GAM used by the estimator. Full metrics are available below. Amounts in Canadian dollars
View all error metrics
| Model | Mean absolute error | Root mean squared error | Mean percentage error | Median percentage error |
|---|---|---|---|---|
| Community / type median | $131,049 | $255,420 | 19.1% | 13.2% |
| Multiple linear regression | $132,587 | $244,432 | 19% | 16% |
| GAM + community effects | $85,013 | $157,002 | 12.8% | 9.5% |
| Random forest | $81,555 | $159,068 | 11.8% | 8.5% |
| XGBoost | $90,734 | $169,355 | 13.4% | 10.4% |
Earlier records predict the next month. Addresses present in validation, calibration or test data are excluded from the corresponding training set. The test set is not used for tuning.
Prediction interval
- Target coverage
- 80%
- Observed test coverage
- 78.9%
Intervals use GAM log residuals from the calibration period. Historical coverage does not guarantee future coverage.
DOM model for sold records
- Mean absolute error
- 24.8 days
- Median baseline error
- 26.2 days
Estimates time on market among sold homes only, not the probability that a listing will sell.
Property-adjusted price index
GAM controls for area, age, type, bedrooms, bathrooms, garage, basement and community. October 2025 = 100; first and last months are incomplete. Shading is an approximate model-conditional 95% confidence interval. This is not an official index.
Area, age and price · Area
Area, age and price · Age in years
Curves show price ratios relative to a reference home, holding other features fixed. They describe associations, not causal effects.
Actual and predicted test prices
Anonymous sample; the dashed line represents perfect agreement. Metrics use all test records.
Random forest variable importance
Increase in training out-of-bag error after permuting a variable. Importance does not imply causation.
Error by property type
| Property type | Records | Mean absolute error | Mean percentage error |
|---|---|---|---|
| Apartment | 675 | $55,509 | 17.8% |
| Attached / row housing | 488 | $56,074 | 12.3% |
| Duplex | 341 | $84,804 | 10.7% |
| House | 1,765 | $105,396 | 11.5% |
| Other | 48 | $46,118 | 12.8% |
Forward validation
2026-05-01 — 2026-05-31
| Model | Mean absolute error | Mean percentage error |
|---|---|---|
| Community / type median | $137,748 | 18.1% |
| Multiple linear regression | $135,222 | 17.7% |
| GAM + community effects | $84,418 | 11.6% |
| Random forest | $83,096 | 11% |
| XGBoost | $92,708 | 12.2% |
2026-06-01 — 2026-06-30
| Model | Mean absolute error | Mean percentage error |
|---|---|---|
| Community / type median | $136,290 | 17.7% |
| Multiple linear regression | $136,593 | 17.7% |
| GAM + community effects | $82,869 | 11.1% |
| Random forest | $79,035 | 10.3% |
| XGBoost | $90,482 | 11.7% |
Linear regression coefficients
| Field | Log-price coefficient | Standard error |
|---|---|---|
| (Intercept) | 8.20891 | 0.04655 |
| Log area | 0.63060 | 0.00697 |
| Age in years | -0.00404 | 0.00020 |
| I(age^2) | 0.00008 | 0.00000 |
| Bedrooms | 0.00520 | 0.00226 |
| Bathrooms (half bath = 0.5) | 0.10957 | 0.00342 |
| Garage | 0.13184 | 0.00443 |
| basementunknown | 0.01024 | 0.01350 |
| basementyes | 0.07724 | 0.00833 |
| typeattached | -0.14729 | 0.01483 |
| typeduplex | 0.06863 | 0.01645 |
| typehouse | 0.11029 | 0.01613 |
| typeother | -0.17356 | 0.01918 |
Records to review
Ranked by out-of-sample deviation. Renovations, tenure and transaction conditions may explain differences; they do not establish undervaluation, opportunity or error.
| Record date | Community | Property type | Recorded price | Predicted price | Deviation |
|---|---|---|---|---|---|
| 2026-08-20 | Aspen Woods | Duplex | $2,265,000 | $845,775 | 167.8% |
| 2026-08-04 | Aspen Woods | Duplex | $2,450,000 | $1,008,386 | 143% |
| 2026-09-21 | Windsor Park | House | $2,940,000 | $1,326,206 | 121.7% |
| 2026-08-20 | Mahogany | Apartment | $975,000 | $444,902 | 119.1% |
| 2026-08-12 | Cranston | House | $1,526,000 | $716,641 | 112.9% |
| 2026-09-05 | Mahogany | Apartment | $740,000 | $348,075 | 112.6% |
| 2026-09-14 | Spruce Cliff | Apartment | $1,035,000 | $503,706 | 105.5% |
| 2026-08-28 | Cranston | House | $1,520,000 | $741,703 | 104.9% |
| 2026-09-25 | Patterson | House | $1,750,000 | $861,905 | 103% |
| 2026-09-01 | Mahogany | Apartment | $665,000 | $332,415 | 100.1% |
| 2026-08-06 | Eau Claire | Apartment | $1,337,000 | $669,796 | 99.6% |
| 2026-08-03 | Edgemont | House | $1,350,000 | $703,895 | 91.8% |
| 2026-09-08 | Crescent Heights | House | $1,480,000 | $773,294 | 91.4% |
| 2026-09-15 | University District | Apartment | $1,378,850 | $737,741 | 86.9% |
| 2026-09-20 | Mahogany | Apartment | $725,000 | $392,244 | 84.8% |
Price & comparable records
Enter property features to see an estimated value, lower and upper prediction bounds, and similar historical records.
Valuation reference date: 2026-10-23
Enter property features to see an estimated value, lower and upper prediction bounds, and similar historical records.
Based on the historical sample and recorded features. Renovations, views, tenure and live market changes are not included. This is not a formal appraisal. Area is provisionally interpreted as square feet; field definitions await confirmation.
Home evaluation ↗ Request a private consultation ↗
Estimated range and comparable sales
The band is this home's prediction interval, the vertical line its estimate, and dots are comparable historical sale prices. Comparables are not feature-adjusted and are not a predictive distribution for this home. Amounts are in CAD.
Additional analysis: conditional price quantiles
10th, 50th and 90th percentile regression uses area, age, type, bedrooms, bathrooms, garage and basement, without community. It describes a conditional price distribution, separate from the GAM interval for a home.
Observed test coverage: 75.1% (80%)
Similar historical records
Ranked by type, community, area, age, bedrooms, bathrooms and recency. Addresses, MLS identifiers and personal details are not displayed.
| Record date | Community | Area | Bedrooms | Bathrooms (half bath = 0.5) | Year built | Price | Median DOM | School |
|---|
Model adjustments from the reference home
Reference: Brentwood, House category, 1,400 sq. ft., age 25, 3 beds, 2 baths, garage and basement.
Data & methods
Field definitions
Provisionally: St=S means sold, Current Price is sale price, Stat Date is sale date, and RMS Total is square feet. Source definitions await confirmation, so all results are labelled as export-sample analysis.
Coverage
Deduplicated Calgary residential exports; sales outside Calgary stay in the local source files. Full-market coverage has not been confirmed; counts must not be presented as citywide totals. The default reporting date follows the latest record and never presents old data as live.
2025-10-02 — 2026-10-23 · 21,963 records
Preparation and checks
Deduplicated by MLS, ignoring export row numbers. Different MLS records at the same address are retained. Only Calgary rows enter the analysis; unusable year built and other required fields are dropped, not imputed. Blanks, currency and dates are converted explicitly. Assessed value and lot size are excluded from first-version models due to substantial missingness.
Only allowlisted analytical fields are published. Owners, phone numbers, agents, addresses and MLS identifiers remain local with the source files and full R models.
- Build year later than record year
- 28
- DOM differs from date difference
- 2,715
- Tax amount above $50,000
- 8
- Additional records at repeated addresses
- 160
These are review flags, not automatic deletions. Future-built records use age zero in models, while the original year is retained.
Data quality
| Field | Missing records | Missing rate |
|---|---|---|
| Ownership Type | 21,963 | 100% |
| Township | 21,910 | 99.8% |
| Frontage Lng | 6,723 | 30.6% |
| Frontage Ft | 6,719 | 30.6% |
| Lot Size SF | 6,681 | 30.4% |
| Tax Assessed Value | 6,150 | 28% |
| Basement | 4,196 | 19.1% |
| Tax Year | 648 | 3% |
| Tax Amount | 599 | 2.7% |
| Zoning | 6 | 0% |
| Structure Type | 6 | 0% |
| Front Exposure | 6 | 0% |
| Rooms Above Grade | 6 | 0% |
| Ensuite YN | 6 | 0% |
| Subdivision Name | 2 | 0% |
| Restrictions | 1 | 0% |
| MLS® # | 0 | 0% |
| Address | 0 | 0% |
| City | 0 | 0% |
| St | 0 | 0% |
| Current Price | 0 | 0% |
| RMS Total | 0 | 0% |
| Style | 0 | 0% |
| Property Type | 0 | 0% |
| Listing Contract Date | 0 | 0% |
| Parking | 0 | 0% |
| Ownership Interest | 0 | 0% |
| Beds | 0 | 0% |
| Full Baths | 0 | 0% |
| Half Baths | 0 | 0% |
| Year Built | 0 | 0% |
| DOM | 0 | 0% |
| Stat Date | 0 | 0% |
Models and limitations
Price models use log prices and estimate a typical conditional price. Realized DOM, buyer agent and final sale date are not predictors. Community random effects partially pool small samples. The estimator uses a GAM refitted on the full snapshot; validation metrics come from an earlier independent test model.
Earlier records predict the next month. Addresses present in validation, calibration or test data are excluded from the corresponding training set. The test set is not used for tuning.
No price ranking below 10 records; 10–29 records are marked as a small sample. Ranges are approximate 95% confidence intervals for the median, without property-feature adjustment.
Intervals use GAM log residuals from the calibration period. Historical coverage does not guarantee future coverage.
Analyses requiring additional data
Inventory and absorption
Require dated active inventory, new, withdrawn and expired listings.
Sale probability and survival analysis
Require complete listing cohorts, unsold records and observation end dates.
Sale-to-list ratios and price reductions
Require original asking prices and price-change history.
Annual comparisons and long-range forecasts
Require a complete preceding year; stable seasonal and long-range forecasts need several years.
Updating the analysis
After adding source files, rerun the R merge, analysis and validation, then update the website data. This page does not automatically fetch new MLS records.