BankStatementScan
English

Repeated PDF headers in bank exports: remove them without losing rows

Classify repeated headings and page footers before filtering a bank table, with a rule that preserves legitimate transaction descriptions.

Remove confirmed headings and footers from the transaction view, while keeping their source positions in a separate log. Do not filter on a word such as ‘date’ or ‘total’ alone: genuine descriptions can contain those words.

Classify source rows before filtering

  1. Identify the full repeated pattern and its page position. Compare several pages instead of assuming every page uses the same heading.

  2. Assign row types before filtering. A heading usually has column labels rather than a coherent transaction, but check the PDF to confirm.

  3. Filter only reviewed non-transaction types. Compare the retained first and last payment on every page with the source.

Fictional example

A fictional repeated row says Date | Description | Debit | Credit, with no amount. It is a heading. A payment description TOTAL OFFICE, debit 18.40, is a real transaction and stays. Deleting every row containing ‘TOTAL’ would lose it.

Build an exclusion rule you can inspect

As a proposed review method, add source page, original row number, row type and reason before hiding anything. Use separate types for confirmed header, confirmed footer, transaction, continuation, balance checkpoint and unresolved. For a candidate header, check the complete set of column labels and its position against the PDF. Repetition supports the decision but does not establish it: a real recurring payment can also repeat. A line with no date is not automatically a footer, and a numeric page number is not automatically an amount.

Filter by the reviewed type. For a small sheet, a filter on the type column is enough; copy the excluded rows into the log with their source positions. Filter on the reviewed row type; the condition selects rows but cannot establish their meaning. Keep unresolved lines visible in a review view instead of letting a condition such as “has a date” discard them.

Extend the fictional example to six physical source rows: one confirmed heading, three transactions, one description continuation and one confirmed footer. Excluding heading and footer leaves four physical rows representing three transactions. The continuation still belongs to its payment; it is not a fourth payment and is not discarded merely because it lacks a date. If the three debits are 18.40, 12.00 and 4.00, they total 34.40 before and after the layout exclusions.

Check the excluded set itself, not only the clean result. It should contain the two documented layout rows, no TOTAL OFFICE payment and no balance checkpoint whose amount is needed for a separate check.

Decide what each physical row contributes

Use the following classification on the six-row fictional EUR page. The decision follows a visual check of that page; it is not a rule based on the text alone.

Source rowWhat the PDF showsTreatment in the working table
1Date / Description / Debit / Credit labelsConfirmed header; exclude from transactions, retain in log
2TOTAL OFFICE, debit 18.40Transaction; keep its date and amount
3First part of a description, debit 12.00Transaction start; keep
4Remaining reference for row 3, no new amountContinuation; attach to row 3 with its source position
5Another payment, debit 4.00Transaction; keep
6Page 2 of 5, outside the transaction areaConfirmed footer; retain only in the layout log

Do this classification before filling blank dates down. Otherwise a copied date can make the footer look like a payment. Equally, join row 4 only after confirming that it continues row 3: physical proximity alone is insufficient when the page contains two account sections.

Recheck the rule when the page layout changes

Keep a raw view, an annotated view and a filtered view. In the annotated view record the complete matched pattern, page and decision; a new label or unexpected amount goes back to review. Do not reuse a rule merely because last month’s PDF came from the same bank.

Combining similar page tables can hide boundaries; compare the last and first transaction on each page explicitly. A combined preview therefore does not remove the need to compare page boundaries. On the fictional page, verify the count equation: six physical rows = two layout rows + three transaction starts + one continuation. After joining the continuation, there should be three transactions and debits of 34.40 EUR. If the count fails while the sum matches, inspect merged or lost descriptions; if the sum fails, reopen the exclusions and the first/last retained amounts. Restore an uncertain row to the review view instead of extending the filter to make the totals fit.

Checks and limits

Record how many headings and footers were excluded on each page. An extra heading may indicate another account section requiring separate mapping. A missing expected footer is a clue, not proof of a missing page. Keep balance-report lines distinct from text headings so they can still support checks.

Keep the original file unchanged and record any unresolved item before using the table.

Separate headings and carried balances from transactions at page boundaries. Carried-forward bank balances: keep them out of transaction rows · Bank statement columns shift at a page break: check the boundary · Diagnose a bank PDF before choosing a table extraction tool.

BankStatementScan is in preparation. The site offers an access request and a fictional example; it does not currently convert your bank files. See the planned service.

Sources checked on 16 October 2026

Leave your work email to register your interest. The conversion product is still in preparation.

Explore the example
BankStatementScan

Request access to BankStatementScan.

Leave your work email to register your interest. The conversion product is still in preparation.

Submitting sends your email and visit/context information to BankStatementLab infrastructure for BankStatementScan. No account, payment or automatic email is created. Privacy.