# 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 through `sqlite3 .backup` on 2026-10-21T00:30. - Snapshot file `data/raw/vraiprix-20261021.db`, SHA-256 `2816d8ddbee66faf7f8961fabf0460583249e911dab52014e633be14b9d34461` (verified at every extraction). - Tables: `transactions` 769,995 rows (2021-01-04 → 2026-10-07); `units` 3,747,008 assessment-roll units, of which 613,153 distinct units are matched to a sale; `market_index` 268 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_sale` does not fire, `land` does), 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.