Methodology — v2.9

The audit trail behind filing-derived data.

Available source references remain attached to filing-derived metrics. Page deep-links appear only when structured page metadata, a matching document URL, and the user’s access tier permit them. The rest of this page explains the controls behind that claim. The universe of REITs this methodology applies to is listed at /coverage.

Source ledger

Where the data comes from.

The underlying data on every REIT page is composed from five source streams, each with its own provenance and refresh cadence.

Issuer filings

Annual reports, MD&A, interim reports, and financial statements — pulled directly from each issuer’s official disclosures (the document linked from their investor relations page, or the equivalent on the public document aggregator we use to discover newly-filed reports). We do not scrape SEDAR+, we do not estimate, we do not interpolate. If an extracted filing metric is on a REIT page, it came from a document the issuer published. Available source references remain attached to the metric.

Earnings call transcripts

Downloaded per earnings event, loaded into our database, then structured into a 4-section summary (call narrative, executive commentary, forward guidance, analyst Q&A) using an LLM-assisted summarization pipeline. Validated against the audio source where ambiguity arises. Refresh cadence: quarterly, driven by the issuer’s filing calendar.

Daily news synthesis

Daily provider-backed news pulls produce one-row-per-REIT summaries of news flow across the 32 Canadian REITs. Refresh: daily.

Prices and FX

Daily refresh from yfinance and OpenExchangeRates. Commodity data, presented well — no proprietary value, no claim of value.

Bottom-up market data

For our Research reports, we publish city and sector reads on cap rates, vacancy, rent growth, and quarterly deltas sourced from public market data and our own editorial commentary.

What we don’t use

For REIT fundamentals, we do not license a broad-market terminal feed. The dataset is built from primary documents and our own extraction work.

Extraction controls

How we extract.

The fundamental data layer (financials and operational metrics on every REIT page) is built by an LLM-assisted extraction pipeline that reads each REIT’s MD&A and produces a normalized JSON document conforming to our v2.9 schema. The schema defines 21 top-level properties, including 12 required sections and structured reconciliation arrays. Its reusable value object carries {value, source, notes}; an optional pdf_page field records the page where structured page metadata exists.

Three deterministic gates wrap the LLM step. They exist because LLM extraction, on its own, fails in confident-and-wrong ways. The gates exist to catch those failures before the data reaches a paying user.

Validation gate

Regex pre-fill

Before the main extraction step, a deterministic parser reads the consolidated balance sheet and emits a confidence-scored pre-fill. Results below 0.8 use a separate extractor fallback, and selected balance-sheet fields are merged into the final JSON.

Validation gate

Schema and sanity validation

Each extraction is checked against the v2.9 JSON Schema and deterministic hard-fail and warning rules. Hard failures stop scoring; warning-only results can continue and remain visible for review.

Validation gate

Four-dimension composite scorer

The scorer evaluates validated extractions on four dimensions. Published scores are shown by REIT and period below; each dimension targets a different failure mode.

Completeness

Scores weighted population across 49 core scalar fields, with additional small deductions for selected dynamic sections. Explained or not-applicable nulls receive reduced or no penalty; unexplained nulls receive the full penalty.

Accuracy

Uses up to 14 weighted cross-field consistency checks plus validator warnings; checks with missing inputs are skipped.

Source quality

Scores source population and citation format across evaluable value objects; format points cover year, document type, page, and section markers.

Notes quality

Protects against the boilerplate-extraction failure mode. Substantive notes on ambiguity, judgment calls, and cross-period adjustments. Empty notes reduce the score.

Composite weighting.35% Accuracy + 30% Completeness + 20% Source quality + 15% Notes quality. Accuracy gets the highest weight because it’s the dimension most likely to ship a wrong number to a paying user.

Canadian non-GAAP framework

How FFO and AFFO align to REALPAC.

REALPAC’s January 2022 FFO and AFFO white paper provides the Canadian reference framework for these non-GAAP measures. REIT Stack uses that framework to organize FFO, AFFO, per-unit amounts, payout ratios, and the reconciliation from IFRS net income through FFO to AFFO. The issuer’s filing remains the source of record for the measure and its adjustments.

Issuer-reported measures pass through

When an issuer reports FFO, AFFO, per-unit amounts, payout ratios, or reconciliation rows, REIT Stack retains those disclosed figures and their source context. Storage normalizes representation such as numeric scale; it does not rewrite issuer adjustments to force a single house definition.

Calculated views use the reported base

FFO and AFFO yields, P/FFO and P/AFFO multiples, and any derived payout ratio are transparent arithmetic built from the reported FFO or AFFO input and the stated denominator. A calculated view does not change the underlying issuer definition.

Comparability has a boundary

Issuer definitions can differ, especially for AFFO and for core, normalized, or adjusted variants. We keep those variants distinct and retain the reconciliation so readers can inspect any disclosed maintenance capital, leasing costs, straight-line rent, and other issuer-specific adjustments before comparing REITs.

Extraction ledger — 32 scored

Current internal composite extraction score.

Latest available score per active REIT — median internal composite extraction score across 32 extractions: 9.0/10.

Calculated using REIT Stack’s published four-dimension rubric; not an independent accuracy measure. Freshest scored period represented in this set: 2026 Q1.

32
Actively tracked Canadian REITs
9.0/10
Median internal composite extraction score
Across 32 REITs
30/32
REITs scored ≥ 8.0
2026-06-27
Latest refresh

Composite-score distribution

10.0
0
9.0–9.9
17
8.0–8.9
13
Below 8.0
2
REITPeriodCompositeCompletenessAccuracySourceNotes
CHP.UN 2026 Q19.28.010.08.910.0
CRT.UN 2026 Q19.27.510.09.510.0
FCD.UN 2026 Q19.28.29.49.910.0
FCR.UN 2026 Q19.27.710.09.210.0
GRT.UN 2026 Q19.28.59.59.010.0
HOM.UN 2026 Q19.28.110.09.39.5
PMZ.UN 2026 Q19.28.69.09.710.0
PRV.UN 2026 Q19.28.29.49.69.9
SGR.UN 2026 Q19.28.710.08.210.0
APR.UN 2026 Q19.18.29.59.110.0
CAR.UN 2026 Q19.17.410.09.610.0
PLZ.UN 2026 Q19.18.38.810.010.0
BEI.UN 2026 Q19.07.99.59.210.0
MHC.UN 2026 Q19.07.410.09.110.0
MPCT.UN 2026 Q19.08.88.88.910.0
NXR.UN 2026 Q19.08.69.48.410.0
VITL.UN 2026 Q19.08.49.97.810.0
AP.UN 2026 Q18.98.48.69.310.0
D.UN 2026 Q18.97.59.78.910.0
CRR.UN 2026 Q18.88.68.39.310.0
DIR.UN 2026 Q18.67.88.39.110.0
KMP.UN 2026 Q18.67.39.57.710.0
BTB.UN 2026 Q18.48.37.78.510.0
CSH.UN 2026 Q18.46.69.28.510.0
HR.UN 2026 Q18.48.17.69.210.0
MI.UN 2026 Q18.38.18.08.19.9
NET.UN 2026 Q18.37.29.07.410.0
REI.UN 2026 Q18.37.29.48.67.7
SRU.UN 2026 Q18.35.710.08.49.6
MRG.UN 2026 Q18.06.98.27.810.0
NRR.UN 2026 Q17.97.07.38.910.0
MRT.UN 2026 Q17.87.65.89.910.0

On the below-8.0 scores in the table above.From the 2026 Q1 batch onwards, any extraction scoring below 8.0 on the composite is flagged for re-extraction. Historical batches (FY 2024 and FY 2025) were scored under a looser threshold and remain published with their original score — we don’t retroactively hide work, we flag it. Some below-8.0 scores you see here are this historical artifact.

Screening signal

Distribution-safety methodology.

The distribution-safety engine turns the latest filing data into one deterministic screening verdict: Covered, Watch, Elevated risk, or Insufficient data. It is the same rules-based function behind the screener badge, public fact sheets, and the REIT-detail Distribution Safety card, so the public badge and detail card do not branch into separate opinions.

Payout basis

The engine scores AFFO payout ratio first, then derived AFFO payout, then FFO payout ratio, then derived FFO payout. If none of those payout readings can be computed, the verdict is Insufficient data.

Risk escalators

A recent sustained distribution cut, elevated debt-to-assets when payout cushion is thin, and a rising payout trend near the ceiling can only push the verdict toward risk. They never make a REIT look safer.

Screening signal

The verdict is not a credit rating, price target, or investment recommendation. It is a consistent first-pass signal for finding REITs whose distributions need closer source-backed review.

The detailed implementation lives in the distribution-safety engine and threshold tests; public fact sheets expose only headline public inputs and the public driver summary, while member pages carry deeper source and period context.

Transcript ledger

Earnings-transcript audit results.

Stored transcript-audit rows record L1 deterministic checks and, where present, L2 follow-up. The tiles below summarize the audits currently recorded.

330
Summaries audited
99%
L1 pass rate
273/330
L2 audited
629/40444
Figures flagged

Correction intake

Report a discrepancy.

Where a figure includes a citation, you can check it against that source. To report a mismatch, use the contact form and choose “Report a data discrepancy.” Include the REIT ticker, metric, reporting period, and filing value. Confirmed material errors are published in the public error log.

Public corrections

The public error log.

This log documents material errors identified by our gates, audits, or users. We define “material” as any single data point that, if propagated to a user, could change an investment-relevant interpretation. We do not log typos, formatting issues, or non-material extraction noise.

2025-Q3ERE.UN

ASR magnitude error — EUR 90 vs EUR 0.90 per unit

The Q3 2025 transcript ASR rendered a special distribution as 'EUR 90 per unit.' The initial extraction summarized this verbatim into the 4-section earnings JSON. The actual figure was EUR 0.90 — a 100× error. Caught by manual audit during weekly review, before publication. The current scorer includes a DPU × weighted-average diluted units versus reported total distributions consistency check when all required inputs are present.

2026-04Coverage purge

277 transcript stubs removed

A coverage audit revealed that 277 of 462 stored transcripts in our database were paywall remnants — ~1.5KB documents ending in 'Upgrade to unlock.' The summarizer had produced confident JSON from incomplete sources. None of the affected summaries had been published — they sat in a staging table — but the failure mode was real. All 277 stubs purged. Source-verification step added: any transcript under 5KB is now flagged for manual review before downstream summarization.

OngoingNews synthesis

Citation provenance — open methodological gap

Our daily news synthesis uses Grok and Perplexity. Briefings are audit-checked against their sources before publishing. Default publish paths refuse missing or blocked audits; the audit traces figures, dates, and URLs against source markdown and checks framing and citations. The unresolved gap: we don't independently verify the citations these tools include in their raw output before they enter the reit_news table. We flag this as an open methodological item rather than a closed one.

Claim boundary

What we don’t claim.

We don’t claim our data is right. We claim it’s auditable — extracted filing metrics retain a source reference, published extractions carry an internal composite score, and material errors are documented in a public log. The comparability and transparency are downstream of the audit trail, not separate brand pillars.

Where a source link is rendered, the path from the number to the source document is one click; page details appear where structured page metadata exists. That’s what “audit trail” means when we use the phrase.

Version ledger

Methodology version history.

v2.9current

The current schema adds an explicit adjusted-EBITDA disclosure-basis field. See the live schema in reit-parser-v3 for the full field set and version history.

v2.4

Introduced the optional structured pdf_page field on reusable value objects; retained here as a historical milestone.

v2.3

4-bucket rate guard plus explicit currency/scale and notes-policy hardening. Introduces the 4-dimension composite scorer.

v2.2

Gap-audit deltas: hard rules for null classification and provenance triples.