Last updated: 2026-06-30
Database snapshot: 150,161 transactions, July 2005 → June 2026
Scope: Private-residential houses (property_category='خاص' AND property_status='بيت')
⚠️ Current standard → see §14. Sections 0–13 document the original three-method comparison (OLS time-dummy hedonic). A 10-reviewer adversarial audit (June 2026) unanimously kept the hedonic family but rejected the as-is OLS implementation. The production headline is now the hardened robust index in
hedonic_index.py(median/quantile regression, non-revising rolling splice, bootstrap + dispersion bands). Headline moved from −15.1% (OLS) to −12.8% (robust). Where §0–§13 disagree with §14, §14 governs. The "<2%" cap-sensitivity claim in §12 was wrong and is corrected in place.
| Method | Q1 2026 (KWD/sqm) | YoY | Peak | Decline from peak |
|---|---|---|---|---|
| Pooled median (existing report) | 758 | ▲ 1.0% | 833 (Q4 2022) | −9.1% |
| Stratified median (mix-controlled) | 798 | ▼ 8.1% | 955 (Q3 2023) | −16.5% |
| Hedonic regression (recommended headline) | 748 | ▼ 1.6% | 881 (Q3 2022) | −15.1% |
Headline narrative: Kuwait house prices are down ~15% from the 2022 peak (hedonic). Robustness range across methods: −9% to −17%. Not the 20-30% "crash" sometimes claimed in popular discussion — those numbers come from cherry-picking the worst-affected peripheral areas.
The existing report (report_generator_psqm.py) headlines a pooled median price/sqm. This is the simplest possible aggregate and is biased because it lets high-volume cheap areas dominate the headline. The OECD/Eurostat/IMF Handbook on Residential Property Price Indices explicitly recommends against pooled median for headline indices.
This document records the methodology work done to build a more defensible price index for Kuwait MOJ transaction data, the alternatives we tested, what works, what doesn't, and the empirical results.
Kuwait Ministry of Justice (MOJ) real-estate transaction database, scraped monthly.
- Database: Current/data/moj_realestate.db
- Update script: Current/data/download_all_moj.py --update
- Refresh cadence: monthly (re-downloads last month + any new months)
transactions table)| Column | Type | Notes |
|---|---|---|
governorate |
TEXT | Arabic name; 6 valid + "غير معرف" |
area |
TEXT | Arabic area/zone name; ~122 unique for houses |
block |
TEXT | Block number within area; ~946 (area,block) tuples for houses |
property_category |
TEXT | Filter to خاص (Private) for houses |
property_status |
TEXT | Filter to بيت (House) |
transaction_date |
TEXT | Format: DD/MM/YYYY |
property_size |
REAL | sqm |
price |
REAL | KWD |
Critical missing columns (limit how deep we can go): - ❌ Property identifier / parcel ID (would enable Case-Shiller repeat-sales) - ❌ Year built / age - ❌ Number of bedrooms / floors - ❌ Quality / condition rating - ❌ Tax appraisal value (would enable SPAR index) - ❌ Lot frontage, corner status, view, etc.
| Filter | Used by | Rationale |
|---|---|---|
property_category='خاص' AND property_status='بيت' |
All methods | Houses (private residential plots), the dominant category and what "house prices" usually means |
price > 1000 KWD |
Stratified, Hedonic | Drops nominal transfers (gifts, family swaps) |
price > 0, size > 0 |
Pooled (existing) | Minimum needed to compute price/sqm |
psqm ∈ [100, 3000] KWD/sqm |
Stratified, Hedonic | Sanity cap; drops data-entry errors that distort area-level medians |
| Governorate whitelist (6 official) | All methods | Drops "غير معرف" (Unknown) — only 9 records |
Note on the psqm cap: without it, area medians get distorted by single transactions at 30 KWD/sqm or 5,000 KWD/sqm (data entry errors). Median is robust to outliers in large samples but not in small ones, and per-area stratification means small samples per cell.
Before building the stratified index, we profiled cell sizes to confirm we have enough data per area for a stable estimate.
Whole period (44,720 transactions):
| Aggregation | Cells (n≥10) | Coverage of total rows |
|---|---|---|
| Area | 95 / 123 (77%) | 99.8% |
| Area + Block | 519 / 949 (55%) | 97.7% |
Last 2 years (4,534 transactions):
| Aggregation | Cells (n≥10) | Coverage |
|---|---|---|
| Area | 82 / 105 (78%) | 98.3% |
| Area + Block | 146 / 587 (25%) | 62.7% |
Last quarter (Q1 2026) (435 transactions):
| Aggregation | Cells (n≥10) | Coverage |
|---|---|---|
| Area | 9 / 77 (12%) | ~60% |
| Area + Block | 5 / 230 (2%) | ~15% |
For 26 areas with ≥50 obs and ≥2 well-sampled blocks (last 2y):
| Quartile | Block-median spread within area (max/min−1) |
|---|---|
| p10 | 7% |
| p25 | 11% |
| p50 | 20% |
| p75 | 28% |
| p90 | 60% |
Some areas are wildly heterogeneous internally: - جليب الشيوخ (Farwaniya): area median 159 KWD/sqm hides block medians 126→658 (4× spread, mixed labour-housing + residential) - خيطان (Farwaniya): 92% block spread - سلوى (Hawalli): 61% block spread
Other areas are uniform: - المطلاع (Jahra): 2% block spread - مدينة صباح الأحمد السكنية (Ahmadi): 7% block spread
→ Block-level matters for ~25-30% of areas. The headline index doesn't need it; a "drill-down" report could use it for those specific areas.
Spec:
median_psqm(t) = median { price_i / size_i : transaction i in quarter t }
Strengths: Simple, transparent, fast to compute.
Weaknesses: - No mix control. If 266 deals come from cheap المطلاع area (750 KWD/sqm) and 35 from expensive بيان (1,033 KWD/sqm), pooled gives the cheap area 7.6× the influence. - Conflates mix changes with price changes. - The OECD/Eurostat handbook explicitly deprecates this for headline indices.
Implementation: Current/Template/report_generator_psqm.py (existing report)
Q1 2026 value: 758 KWD/sqm Peak: 833 in Q4 2022 Decline from peak: −9.1%
Spec:
For each quarter t:
1. Take trailing 4 quarters of transactions.
2. Drop transactions with psqm outside [100, 3000].
3. For each area a with n_a >= 10 in this window, compute median_psqm_a.
4. stratified(t) = sum(n_a * median_psqm_a) / sum(n_a)
over areas with n_a >= 10
Strengths: - Controls for area mix. - Standard professional method (Reserve Bank of Australia, ABS, CoreLogic use variants). - Transparent — non-technical audience can follow it. - 90-97% coverage across all quarters with the 4Q window.
Weaknesses: - Doesn't control for size mix within an area. If 2025 deals in a given area happened to be larger houses (lower psqm by elasticity), this reads as a price drop. - 4Q window adds smoothing — less responsive to genuine quarterly turning points. - Requires arbitrary thresholds (n≥10, psqm cap).
Implementation: Current/data/stratified_psqm_report.py
Output: Current/Reports/kuwait_realestate_quarterly_Houses_Q1_2026_en_stratified_*.pdf
Q1 2026 value: 798 KWD/sqm (63 areas qualify, 93% coverage) Peak: 955 in Q3 2023 Decline from peak: −16.5%
Spec:
log(price_i) = β0 + β1 * log(size_i) + Σ_a γ_a * I(area_i = a)
+ Σ_t δ_t * I(quarter_i = t) + ε_i
Sample: 2020-Q1 onward, areas with >=30 obs in window.
Estimator: OLS.
Index: hedonic_psqm(t) = base_psqm * exp(δ_t)
(anchor: pooled median in base quarter Q1 2020)
95% CI: ± 1.96 * SE(δ_t)
Strengths: - Controls for both area mix and size mix (the two biggest drivers we can observe). - Industry standard (Eurostat, ONS, ABS, RBA, BLS use hedonic for residential indices). - Tight 95% CI on the index (~±5-10%) despite per-transaction RMSE of ±57% on price level — averaging across thousands of transactions per quarter pins down the central tendency. - Area FE ladder can be reused as a constant-quality price map.
Weaknesses: - R² = 0.47 — only half the price variance is explained. The other 53% is unobserved property quality (year built, condition, # bedrooms, view, etc.). - Assumes the hedonic relationship is stable over time (no area×time interactions in the basic spec). - Requires statistical software / training to interpret coefficients.
Implementation: Current/data/three_method_report.py
Output: Current/Reports/kuwait_realestate_quarterly_Houses_Q1_2026_en_three_methods_*.pdf
Model fit (estimated 2026-05-10): - n = 14,545 transactions - 83 areas (≥30 obs each in trend window) - 26 quarters (Q1 2020 → Q2 2026) - R² = 0.471, Adj R² = 0.467 - Size elasticity = 0.691 (1% larger house → 0.69% higher price → larger houses cost less per sqm) - log_size standard error: tight, p-value ≈ 0
Q1 2026 value: 748 KWD/sqm (95% CI: [705, 794]) Peak: 881 in Q3 2022 Decline from peak: −15.1%
Idea: Without a property ID, try to match transactions on (area, block, size) tuples. If two sales share a fingerprint, treat them as repeat sales of the same property and compute the price change between them. This is the closest possible workaround for Case-Shiller methodology.
Why it fails for Kuwait: Modern Kuwaiti developments are master-planned with standardized plot sizes. Many different houses share the exact same (area, block, size) tuple.
Match rate observed: 95% of transactions share a fingerprint with at least one other. (Real Case-Shiller studies typically find 10-20% — anything higher means false matches.)
Concrete examples: | Fingerprint | "Sales" found | Reality | |---|---|---| | مدينة صباح الأحمد البحرية, Block 0, 543 sqm | 26 sales over 12 years | ~26 different houses on a development grid | | الفنيطيس, Block 2, 400 sqm | 25 sales over 13 years | Same — different houses, same dimensions | | المسايل, Block 3, 500 sqm | 10 sales over 11 years | Same | | الجابرية, Block 5, 741 sqm | 3 sales SAME DAY same price | Data duplicates, not real repeats |
Verdict: the fingerprint approach has too high a false-positive rate to produce a defensible index. Tried filtering to fingerprints with exactly 2 sales and "unusual" sizes (rare combos less likely to be standardized plots) — sample halved, noise barely shrank. Not a usable methodology with current data.
| Method | Why rejected |
|---|---|
| Repeat-sales (Case-Shiller) | No property ID in MOJ data |
| SPAR (sale-price-appraisal-ratio) | No tax appraisal data |
| Hybrid models | Need property IDs |
| Hedonic imputation | Marginal variant of time-dummy hedonic; same data, similar result |
| Block-level stratification | Per-quarter cells too sparse (only 5-6 cells with n≥10 per quarter); works only for ≥4y windows |
| Quarter | Pooled | Stratified | Hedonic |
|---|---|---|---|
| Q1 2020 | 650 | 692 | 680 |
| Q2 2020 | 667 | 699 | 658 |
| Q3 2020 | 634 | 707 | 675 |
| Q4 2020 | 633 | 722 | 666 |
| Q1 2021 | 700 | 752 | 715 |
| Q2 2021 | 671 | 765 | 740 |
| Q3 2021 | 716 | 777 | 766 |
| Q4 2021 | 775 | 814 | 783 |
| Q1 2022 | 783 | 845 | 830 |
| Q2 2022 | 830 | 881 | 862 |
| Q3 2022 | 826 | 917 | 881 ← H peak |
| Q4 2022 | 833 ← P peak | 941 | 818 |
| Q1 2023 | 832 | 953 | 852 |
| Q2 2023 | 826 | 944 | 849 |
| Q3 2023 | 822 | 955 ← S peak | 820 |
| Q4 2023 | 788 | 918 | 786 |
| Q1 2024 | 813 | 914 | 787 |
| Q2 2024 | 790 | 913 | 799 |
| Q3 2024 | 750 | 885 | 774 |
| Q4 2024 | 774 | 883 | 787 |
| Q1 2025 | 750 | 868 | 760 |
| Q2 2025 | 745 | 831 | 750 |
| Q3 2025 | 739 | 824 | 793 |
| Q4 2025 | 750 | 823 | 779 |
| Q1 2026 | 758 | 798 | 748 |
| Method | Peak | Current (Q1 2026) | Decline | Trough (post-peak) |
|---|---|---|---|---|
| Pooled | 833 (Q4 2022) | 758 | −9.1% | 739 (Q3 2025) → −11.3% |
| Stratified | 955 (Q3 2023) | 798 | −16.5% | 798 (Q1 2026) — current is trough |
| Hedonic | 881 (Q3 2022) | 748 | −15.1% | 748 (Q1 2026) — current is trough |
| Method | Q1 2025 | Q1 2026 | YoY |
|---|---|---|---|
| Pooled | 753 | 758 | +1.0% |
| Stratified | 868 | 798 | −8.1% |
| Hedonic | 760 | 748 | −1.6% |
To answer "is the market crashing 20-30% as people claim?", we look at area-level changes between the 2022 peak year and the trailing 4 quarters ending Q1 2026.
Sample: Only areas with ≥30 transactions in BOTH periods (20 areas qualify).
| Quartile | % change |
|---|---|
| p10 | −20.4% |
| p25 | −14.2% |
| p50 (median area) | −7.8% |
| p75 | −5.0% |
| p90 | −1.2% |
| Mean | −8.9% |
| Bucket | # areas (of 20) |
|---|---|
| Down ≥20% | 3 |
| Down 10-20% | 4 |
| Roughly flat (−10% to +10%) | 13 |
| Up ≥10% | 0 |
| Area | Governorate | 2022 KWD/sqm | Last 4Q | % change |
|---|---|---|---|---|
| مدينة صباح الأحمد البحرية | Ahmadi | 867 | 674 | −22% |
| أبو فطيرة | Mubarak Al-Kabeer | 1,445 | 1,125 | −22% |
| الأندلس | Farwaniya | 853 | 680 | −20% |
| سلوى | Hawalli | 877 | 738 | −16% |
| الفردوس | Farwaniya | 781 | 664 | −15% |
| الرقة | Ahmadi | 718 | 618 | −14% |
| الوفرة السكنية | Ahmadi | 400 | 360 | −10% |
| الواحة | Jahra | 667 | 607 | −9% |
| العارضية | Farwaniya | 857 | 783 | −9% |
| مدينة صباح الأحمد السكنية | Ahmadi | 492 | 450 | −8% |
| Area | Governorate | 2022 KWD/sqm | Last 4Q | % change |
|---|---|---|---|---|
| المنقف | Ahmadi | 880 | 950 | +8% |
| الرميثية | Hawalli | 940 | 929 | −1% |
| م.جابر الأحمد السكنية | Capital | 1,050 | 1,038 | −1% |
| بيان | Hawalli | 1,067 | 1,033 | −3% |
| الجابرية | Hawalli | 1,067 | 1,021 | −4% |
| ض.صباح السالم | Mubarak Al-Kabeer | 933 | 883 | −5% |
| م. سعد العبدالله | Jahra | 849 | 795 | −6% |
The hedonic model produces an area FE for each of 83 areas. After shifting so the cheapest area = 0%, the top 20 areas by price level (holding size constant, holding quarter constant):
| Rank | Area | Governorate | Premium above cheapest |
|---|---|---|---|
| 1 | ض.الصديق | Hawalli | +425% |
| 2 | ض. عبد الله السالم | Capital | +376% |
| 3 | المنصورية | Capital | +370% |
| 4 | النزهة | Capital | +353% |
| 5 | المسايل | Mubarak Al-Kabeer | +332% |
| 6 | الشامية | Capital | +327% |
| 7 | ض. مبارك العبدالله الصباح | Hawalli | +317% |
| 8 | ض. السلام | Hawalli | +314% |
| 9 | الخالدية | Capital | +312% |
| 10 | الفيحاء | Capital | +309% |
| 11 | الفنيطيس | Mubarak Al-Kabeer | +299% |
| 12 | العديلية | Capital | +297% |
| 13 | أبو فطيرة | Mubarak Al-Kabeer | +280% |
| 14 | ض. الشهداء | Hawalli | +275% |
| 15 | الروضة | Capital | +265% |
| 16 | كيفان | Capital | +254% |
| 17 | ض. الزهراء | Hawalli | +253% |
| 18 | اليرموك | Capital | +244% |
| 19 | ض. حطين | Hawalli | +239% |
| 20 | جنوب عبدالله المبارك السكني | Farwaniya | +235% |
Validation: This ladder matches the known geography of high-end Kuwait housing — ضواحي (suburbs) of Hawalli, premium Capital neighborhoods, master-planned Mubarak Al-Kabeer developments. The model is identifying real signal, not noise.
Range: ~5× from cheapest to most expensive area, holding house size and time constant.
Use hedonic. Quote it as: "Median price/sqm Q1 2026: 748 KWD/sqm (hedonic). Robustness range: 758 (pooled) to 798 (stratified)."
All three methods agree houses are down from the 2022 peak. The bracket is −9% to −17%. Hedonic central estimate: −15%.
"Kuwait house prices are down about 15% from their 2022 peak, after controlling for which areas the deals came from and what size houses were transacted. Some peripheral areas are down 20%+; premium urban areas are roughly flat. The 'crash' headlines are mostly cherry-picking the worst-hit segments."
Suggest option 3 for an upcoming quarterly cycle, then settle on hedonic as the headline going forward.
| Component | Path | Notes |
|---|---|---|
| MOJ scraper | test/moj_realstate_scraper.py |
Low-level CSV download |
| Bulk download orchestrator | Current/data/download_all_moj.py |
Run with --update weekly |
| Database | Current/data/moj_realestate.db |
SQLite |
| Existing pooled report | Current/Template/report_generator_psqm.py |
Per-language quarterly/yearly PDF |
| Stratified report | Current/data/stratified_psqm_report.py |
Builds 2-page PDF (pooled vs stratified) |
| Three-method comparison | Current/data/three_method_report.py |
Builds 2-page PDF (pooled vs stratified vs hedonic) + area FE ranking |
To regenerate Q1 2026 reports:
python Current/Template/report_generator_psqm.py quarterly 2026 1 -c house --both
python Current/data/stratified_psqm_report.py 2026 1
python Current/data/three_method_report.py 2026 1
| Wish-list field | Unlocks |
|---|---|
| Persistent property/parcel ID | True Case-Shiller repeat-sales index (gold standard) |
| Year built / age | Hedonic R² jump from 0.47 → 0.65+ |
| # bedrooms, # floors | Same |
| Condition / quality rating | Same |
| Lot characteristics (corner, frontage, view) | Marginal R² improvement |
| Tax appraisal value | SPAR index |
| Listing data (asking vs sold) | Liquidity / market-tightness measures |
If MOJ ever publishes deed numbers across transactions, repeat-sales becomes immediately viable and would supersede everything here.
log(price) ~ log(size) + log(size)^2 + ... to allow non-constant elasticity. May matter for very small or very large houses.خاص vs إستثماري filters). Currently houses-only; investment apartment market is a separate question.spatial_heatmaps.py).hedonic_index.py) estimates the conditional median via quantile regression, which is robust to the tails — the headline then barely moves on the upper cap, leaving only the economic low-transfer threshold as a disclosed choice. See §14.| R² range | Typical interpretation for hedonic price models |
|---|---|
| <0.30 | Model is missing major drivers; results unreliable |
| 0.30-0.50 | Stripped-down hedonic with limited covariates; index is usable but per-transaction predictions are weak. Our model lands here (0.47). |
| 0.50-0.70 | Standard published hedonic indices with reasonable property data |
| 0.70-0.90 | Rich data: includes age, condition, # rooms, sometimes quality scores |
| >0.90 | Very rich data + small homogeneous market (rare) |
Our R² is at the lower end of "usable" but we're getting the index from a coefficient (the quarter dummy) that is itself well-estimated because it averages over thousands of transactions per period. Per-transaction prediction is noisy; index estimation is not.
Status: this supersedes §0–§13 as the production standard. Implementation: Current/data/hedonic_index.py · published series: hedonic_index_published.csv · audit: hedonic_index_audit.md. Data: 150,161 transactions through June 2026.
A 10-reviewer adversarial panel (distinct lenses: econometric spec, RPPI handbook, revision/publishability, transparency, data-quality, robustness, Kuwait domain, repeat-sales, time-series, premise-buster) pressure-tested "standardize on the OLS time-dummy hedonic":
- Verdict HEDONIC_WITH_FIXES — 10/10. No vote for pooled or stratified as the standard; none for the OLS build as-is.
- Average endorsement 5.6/10 (range 4–7): right family, wrong build. 9/10 wanted a fixed hedonic variant.
hedonic_index.py)| Wound | Fix | Evidence |
|---|---|---|
| Discretionary cap | Median (quantile) regression vs OLS — robust to the price tails (psqm p99.9 ≈ 609,000) | Upper-cap span OLS 1.5pp → QuantReg 0.4pp; low-threshold swing OLS 3.3pp → QuantReg 0.9pp |
| Revision | Rolling-window movement-splice (append-only) + frozen on-disk vintage (settled quarters never rewritten; last 2 provisional) | Rebuild as-of an earlier vintage changes shared history by 0 |
| Narrow CI | Unit-clustered bootstrap (resample gov|area), peak fixed | 95% CI [−20.1%, −11.8%] (n=200) |
Plus a per-governorate dispersion band, optional 2Q smoothing, and an honest label ("location/size-adjusted constant-quality — better-than-pooled, NOT validated repeat-sales").
| Quantity | Value |
|---|---|
| Published index (2020Q1 = 100), robust rolling chain | 110.9 |
| Constant-quality level (anchor = 2020Q1 pooled median 681) | ≈ 755 KWD/sqm (2Q-smoothed 767) |
| Peak→Q2-2026 decline — published chain | −15.5% (peak Q3 2022) |
| Full-sample robust cross-check QuantReg / RLM / OLS | −17.0% / −17.4% / −16.6% |
| Bootstrap 95% CI (full-sample decline, 200 reps) | [−19.9%, −13.6%] |
| Governorate dispersion | −15.3% (Jahra) … −26.9% (Capital) |
Plain-language headline: Kuwait house prices are down roughly 15–17% from their 2022 peak on a constant-quality basis (95% CI ≈ −14% to −20%). Still short of the 20–30% "crash" of popular discussion, but the gap is narrowing — Q2 2026 fell 3.1% QoQ.
Dispersion flip (Q2 2026): the geography inverted versus the Q1 vintage. Capital (−26.9%) and Hawalli (−24.5%) now lead the decline; Jahra (−15.3%) and Ahmadi (−15.6%) are mildest — the reverse of the earlier "premium held better" reading. Per-governorate estimates are noisy quarter to quarter (Hawalli moved ~9pp in one quarter on a thin per-gov sample), so treat the ordering as indicative; the robust statement is the ~12pp spread itself.
The published rolling-chain decline (−15.5%) is milder than the single full-sample robust fit (−17.0%) because the rolling window lets area/size shadow-prices drift quarter-to-quarter (the handbook-preferred behaviour). Quote the band, not a false-precision point.
Prior vintage for reference (2026-06-30, headline Q1 2026): index 114.5, level ≈779, published decline −12.8%, CI [−20.1%, −11.8%], dispersion −11.4% (Jahra) … −25.6% (Farwaniya).
A separate verification pass confirmed the splice is exactly non-revising and the cluster bootstrap valid, and found 4 defects — all fixed:
1. Hardcoded headline/immature quarters → derived from the data each run (would have gone stale when Q3 2026 lands).
2. Area-name collision (one name shared by two governorates) → location key now gov|area (matches the stratified module); sample 14,892 → 14,876.
3. Latent NaN-propagation in the splice → guarded.
4. Bootstrap re-argmaxed the peak each rep (pessimistic) → peak fixed to the point estimate.
python Current/data/hedonic_index.py build # update non-revising series -> hedonic_index_published.csv
python Current/data/hedonic_index.py audit --bootstrap 200 # cross-checks, cap-sensitivity, non-revision, bootstrap, dispersion -> hedonic_index_audit.md
Estimator switchable via --estimator {quantreg,rlm,ols} (default quantreg). Run build after each DB --update; the published series only ever appends or refreshes the provisional tail.
Current/data/hedonic_longrun_report.py (build / render) extends the index back to 2006Q3 — the true start of usable MOJ house data (khaas+bayt records begin Apr 2006) — using the identical frozen filters, median regression, and 13-quarter rolling movement splice (44,989 obs, 91 gov|area units). Output: hedonic_longrun.csv.
Governance: 2020Q1+ is the published non-revising series verbatim; pre-2020 is an analytical backcast, spliced at 2020Q1, revisable on re-estimation — it is not part of the frozen vintage.
Backcast↔published cross-check: over the shared 2020–26 span the two differ by a one-time level offset of ≈ +7–8 index points, built up in 2020Q2–2021Q1 — the quarters where the published chain's windows were necessarily short (its data starts 2020Q1, and 2020Q2 had n=68 under COVID lockdown). After 2021Q1 the gap is flat (no trend). Consequences are second-order: era-B trend CAGR is +1.9%/yr (published) vs +2.6%/yr (backcast variant); peak→Q2-2026 decline −15.5% vs −14.9%. The published numbers are retained (non-revision governance) and are the conservative reading of post-2020 growth.
Era findings (Q2 2026 long-run report, nominal KWD): | | 2008Q1–2019Q4 | 2020Q1–2026Q2 | |---|---|---| | Level | 407 → 658 KWD/sqm (+62%) | 680 → 755 KWD/sqm (+11%) | | Trend CAGR (log-linear fit) | +5.6%/yr (R² 0.62; ex-2008 +5.3%) | +1.9%/yr (R² 0.17; ex-2020Q2 +1.5%) | | Endpoint CAGR | +4.2%/yr | +1.7%/yr |
Slowdown = 3.7 pp/yr (3.0 pp/yr on the backcast variant). Q2 2026 is +14.7% above Q4 2019 — constant-quality prices never fell below their pre-COVID level — while sitting −15.5% off the Q3 2022 peak and ≈ −19.5% below the old-trend path compounded from the actual Q4-2019 level (−29.7% vs the fit-extended trend line, but the 2019 market already sat ~13% below that fit — quote the anchored figure first). Era-B trend fit is weak by construction (boom-bust dominates); lead with levels + both CAGRs, not the fit alone.
Section 14 added 2026-06-30 after the adversarial audit; §14.4 refreshed and §14.8 added 2026-07-12. Where §0–§13 conflict, §14 governs.
End of methodology document. Last reviewed 2026-07-12.