How to Extract Data from Bank Statement PDFs

Updated · 4 min read

To extract usable bank transactions from a PDF, first identify actual events and their field roles, then compare the CSV with that source map. A matching net amount does not prove complete extraction. A subtotal, running balance or foreign-currency original amount can look like a transaction amount without being one.

Official reference.

The desktop apps export date, description, and amount as CSV. Open CSV in Excel to save an XLSX workbook. Statement support varies: verify the result against your own PDF.

Choose the source and extraction route

Prefer the bank’s suitable native transaction export when available. For a PDF, preserve the original and inventory account, currency, period and pages. Try selecting and copying a few visible values, then compare the copied characters with the page. Selectable text can be an incorrect OCR layer or contain encoding problems; it is not proof of faithful data.

Microsoft’s PDF connector documents choosing PDF tables through the Navigator and transforming the selected data. Where available in your Excel installation, use Data → Get Data → From File → From PDF and inspect the candidates before loading. Multi-page and multiline values may need transformation; the first detected table is not automatically the bank-event table. For image pages or bad text layers, use the scanned-statement guide rather than assuming this route performs OCR.

For local desktop extraction, select one PDF in LocalExtract, review the result and export CSV. Its fields are date,description,amount. The app has no desktop batch queue, direct XLSX/QBO/OFX export or accounting sync. XLSX is a separate Excel Save As step. PDF parsing and OCR run locally; account services and periodic Pro verification need network access. Bank guides and parser definitions do not guarantee a particular statement format.

Map the source before removing apparent duplicates

Assign each source event a page and region reference. Separate transaction amount from running balance using the actual labels. For foreign-currency purchases, distinguish the account-currency posting from the original foreign amount; retain uncertain fees or currency roles for review.

If the page has two independent columns, map each region and its own sequence before combining them. Do not assume a universal left-to-right or row-across reading order. A subtotal is excluded because of its source role, not because its amount duplicates a real payment.

Test roles, coverage and values separately

Read the invented source-role map directly before checking an output. These amounts describe only this exercise, not a bank’s PDF layout:

Source identityRegion or roleValueExpected treatment
L1Left, first event100Include as transaction amount
L2Left, second event-100Include as transaction amount
R1Right, first event50Include as transaction amount
R2Right, second event-20Include as transaction amount
SSubtotal100Exclude by source role, not value equality
BRunning balance980Retain as balance evidence, not transaction amount
FForeign original22Do not substitute for account-currency posting

The complete event net is 30. Omitting L1 and L2 also leaves 30, but removes two real events. Preserve both region order and event membership rather than accepting a matching sum.

The synthetic extraction-map exercise includes a real payment equal to a subtotal, a running balance, an original foreign amount and events in two regions. Its expected event set includes only the explicitly labelled postings. A wrong result omitting an equal receipt and payment still has the correct net, but fails identity and coverage checks. Another wrong result uses balances instead of amounts and fails field-role checks.

The Python reference controls compare invented event identities, values and source order. They do not process a PDF or test any bank layout. Apply the same separate controls to your actual extraction: inspect every event, page boundary and retained description against the source, then review dates and signs before an importer-specific handoff. Keep unresolved rows visible rather than inventing balancing entries.

Related task.

For a PDF-only bank source, download LocalExtract. It processes one PDF locally to date,description,amount CSV; it does not access platform accounts or synchronize accounting records.

Official sources and scope

Documentation checked October 16, 2026. Official reference 1 — pq-pdf · Official reference 2 — adobe-encoding

LocalExtract Team

We build LocalExtract, a desktop bank statement converter. Questions or corrections? Contact · Editorial policy

Continue with a related guide