1\begin{table}[htbp]\centering2\begin{threeparttable}3\caption{Listing-level sample attrition}\label{tab:attrition}4\small5\begin{tabular}{p{9cm}rr}6\toprule7Step & Listings & Share of initial \\8\midrule9All listings in snapshot (products table) & 124\,579 & 1.000 \\10excl. SAQ (alcohol monopoly) & 117\,102 & 0.940 \\11excl. pharmacy feeds & 115\,352 & 0.926 \\12excl. non-food categories (health \& beauty, household, pets, baby, alcohol) & 112\,233 & 0.901 \\13with at least one observed price & 111\,924 & 0.898 \\14excl. unrealistic prices & 111\,575 & 0.896 \\15… with parsable package size (unit-price / matching universe) & 66\,340 & 0.533 \\16… in a cross-banner match group (tiers A–C) & 13\,273 & 0.107 \\17\bottomrule18\end{tabular}19\begin{tablenotes}[flushleft]\footnotesize20\item Each row applies the stated filter to the previous row. Matching tiers A--C shown; the primary analysis uses A+B.21\end{tablenotes}22\end{threeparttable}23\end{table}24