Provenance report — WP22 SHARP-HPI (generated 2026-10-21)
1. Source and snapshot
- Production database:
M3U96a:~/apps/vrai-prix/data/vraiprix.db (production, read via .backup)(Vrai Prix, www.vrai-prix.com), read throughsqlite3 .backupon 2026-10-21T00:30. - Snapshot file
data/raw/vraiprix-20261021.db, SHA-2562816d8ddbee66faf7f8961fabf0460583249e911dab52014e633be14b9d34461(verified at every extraction). - Tables:
transactions769,995 rows (2021-01-04 → 2026-10-07);units3,747,008 assessment-roll units, of which 613,153 distinct units are matched to a sale;market_index268 rows (the site's own median $/m² series, not used). - Upstream: deeds of sale published by the Quebec land registry and redistributed by the Journal de Québec / Journal de Montréal "Transactions immobilières" feed (
api.qub.ca), ingested daily by Vrai Prix (scripts/ingest-jdm.mjs); assessment roll = MAMH open data (current triennial roll per municipality). No credentials were used or copied; the production file was never opened for writing.
2. Dates
The table carries one date per transaction (the deed date as published by the feed). Deed signing, registration and feed publication cannot be separated. Four earlier extractions of the same table measure the publication delay:
| vintage | vintage_rows | vintage_last_date | vintage_max_lag_days | final_rows_dated_le_last | share_present | deleted_since_vintage | amount_revised |
|---|---|---|---|---|---|---|---|
| 2026-08-06 | 745119 | 2026-07-27 | 10 | 745227 | 1.000 | 0 | 0 |
| 2026-08-09 | 745119 | 2026-07-27 | 13 | 745227 | 1.000 | 0 | 0 |
| 2026-10-10 | 766596 | 2026-09-29 | 11 | 766682 | 1.000 | 0 | 0 |
| 2026-10-17 | 769333 | 2026-10-06 | 11 | 769678 | 1.000 | 0 | 0 |
Interpretation: in every vintage, more than 99.95 % of the transactions that the final snapshot dates on or before the vintage's last observed date were already present; no row was deleted and no price revised between vintages. The feed therefore publishes with a lag of about 10–13 days and does not backfill older months. Real-time simulations use a 10-day publication delay and a partial final month (results/vintages/arrival_profile_by_lag.csv).
3. Coverage
Monthly volumes (results/profile/coverage_month_type.csv): first month 2021-01 = 2,478 sales, 2021-02 = 9,887, 2021-04 = 15,613 (feed start-up); 2022–2025 average 10,557 per month; last month 2026-10 = 2,722 (2026-10-07 = last date, partial month). No sale below $50,000 is collected by the provider (a hard floor visible in every year), which is a selection on price. 2026 monthly volumes run 8–14 % below the same month of 2025.
Municipality coverage (sales matched to the roll, 2021–2026):
| band | municipalities | transactions |
|---|---|---|
| 0-9 | 25 | 152 |
| 10-24 | 72 | 1328 |
| 25-49 | 141 | 5303 |
| 50-99 | 223 | 16760 |
| 100-249 | 304 | 49238 |
| 250-499 | 150 | 52304 |
| 500-999 | 75 | 53475 |
| 1000-4999 | 99 | 195777 |
| 5000+ | 20 | 355639 |
4. Geography
Spatial join of every sale to the MRNF SDA V2026-07 municipal polygons: | join_method | n | |---|---| | within | 769995 |
Agreement between the roll's municipality code and the spatial join: 99.9573% of 729,976 matched sales. Series are on 2026 boundaries (municipalities constituted or merged 2022–2026 are listed in results/geo/mamh_constituted_since_2021.csv).
5. Completeness by year (share of rows with a non-missing value)
| year | n | id_provinc | floor_area | year_built | building_type | cubf | nb_logements | lien_physique | genre_construction | superficie_terrain_m2 | nb_etages | valeur_terrain |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | 165541 | 0.988 | 0.796 | 0.698 | 0.128 | 0.931 | 0.901 | 0.899 | 0.863 | 0.930 | 0.908 | 0.914 |
| 2022 | 137662 | 0.988 | 0.816 | 0.770 | 0.514 | 0.927 | 0.895 | 0.894 | 0.856 | 0.926 | 0.901 | 0.911 |
| 2023 | 108429 | 0.991 | 0.865 | 0.864 | 0.825 | 0.939 | 0.907 | 0.905 | 0.870 | 0.938 | 0.912 | 0.922 |
| 2024 | 123157 | 0.994 | 0.888 | 0.889 | 0.852 | 0.945 | 0.912 | 0.909 | 0.874 | 0.944 | 0.916 | 0.927 |
| 2025 | 137509 | 0.995 | 0.882 | 0.884 | 0.848 | 0.970 | 0.916 | 0.912 | 0.878 | 0.969 | 0.920 | 0.953 |
| 2026 | 97697 | 0.993 | 0.852 | 0.853 | 0.818 | 0.989 | 0.924 | 0.922 | 0.888 | 0.987 | 0.929 | 0.972 |
building_type (provider) is backfilled over time and is never used. Provider characteristics equal the roll's for matched sales (year built 99.2%, floor area 94.1%, lot area 98.1%); the provider's valeur_role is the assessment in force at the sale date (equal to the current roll value for 27.7% of sales, to the previous roll value for 42.4%).
6. Exclusion ledger (first matching rule; headline population = house / condo / plex with roll characteristics)
| exclude_reason_headline | n | share_of_raw |
|---|---|---|
| (retained — headline sample) | 632006 | 0.821 |
| class_not_in_headline | 38280 | 0.050 |
| assessment_ratio_outlier | 23653 | 0.031 |
| land | 18798 | 0.024 |
| non_residential | 15520 | 0.020 |
| same_parcel_same_date_diff_price | 14709 | 0.019 |
| no_roll_characteristics | 11533 | 0.015 |
| shared_parcel | 6981 | 0.009 |
| built_after_sale | 4996 | 0.006 |
| multi_parcel_candidate | 2663 | 0.003 |
| exact_duplicate | 824 | 0.001 |
| price_above_cap | 32 | 0.000 |
Flags counted independently (overlaps allowed):
| flag | n | share_of_raw |
|---|---|---|
| exact_duplicate | 824 | 0.001 |
| same_parcel_same_date_diff_price | 14857 | 0.019 |
| built_after_sale | 5013 | 0.007 |
| new_construction | 17087 | 0.022 |
| roll_is_land | 19606 | 0.025 |
| roll_non_residential | 16573 | 0.022 |
| shared_parcel | 20771 | 0.027 |
| multi_parcel_candidate | 4043 | 0.005 |
| price_above_cap | 47 | 0.000 |
| assessment_ratio_outlier | 42826 | 0.056 |
| type_conflict | 33316 | 0.043 |
| floor_area_missing | 74879 | 0.097 |
| year_built_missing | 71557 | 0.093 |
| roll_matched | 729976 | 0.948 |
Headline share by year:
| year | excluded | headline | share_headline |
|---|---|---|---|
| 2021 | 33723 | 131818 | 0.796 |
| 2022 | 28544 | 109118 | 0.793 |
| 2023 | 19276 | 89153 | 0.822 |
| 2024 | 20774 | 102383 | 0.831 |
| 2025 | 21492 | 116017 | 0.844 |
| 2026 | 14180 | 83517 | 0.855 |
7. Known selection issues
- Price floor $50,000 (provider): low-price rural sales are missing; indexes for such markets start from a truncated distribution.
- Current-roll characteristics: renovations after the sale are invisible; new constructions of 2025–2026 may still be coded as vacant land in the roll and are then excluded (
built_after_saledoes not fire,landdoes), lowering new-build coverage at the end of the sample. - No arm's-length indicator: non-market transfers are screened only through the assessment-ratio rule and the robust likelihoods.
indéterminéprovider type (14 % of rows): classified from the roll when possible; otherwise excluded.