A BMO eStatement is a sparse, wide-margin Canadian retail layout rather than a dense grid, and that sparseness is exactly what breaks naive extraction. Transactions run down the page as Date, Description, and separate withdrawal and deposit money columns, with a Balance figure that is not reprinted on every single line — it appears where the day's running total changes, leaving visual gaps down the balance column. Descriptions carry the Canadian payment vocabulary in full: INTERAC e-Transfer strings, pre-authorized debit merchant names, cheque numbers, and point-of-sale entries that regularly need a second line. The statement closes with an opening-and-closing balance summary that makes the whole file checkable rather than merely readable.
- Gapped balance columns are handled — a row with no printed balance is still a transaction, not a continuation line to be swallowed.
- Separate withdrawal and deposit columns map onto Debit and Credit, so no amount silently flips direction.
- Wrapped INTERAC and pre-authorized debit descriptions are rejoined into the single transaction they belong to.
- The opening and closing balances printed on the statement are used to verify the output, so a dropped row surfaces as a DISCREPANCY rather than passing quietly.