CheapBankConvertCheapBankConvert home

Tesseract OCR for Bank Statements: Free but Fiddly

By CheapBankConvertPublished October 17, 2026

Tesseract OCR for bank statements is free, open source and runs offline, but it reads images, not PDFs, and gives you plain text rather than columns. You convert each page to a 300 dpi image, run Tesseract from the command line with settings tuned for numbers, then split the text into rows and check every amount.

What does Tesseract OCR do with a scanned bank statement?

Tesseract takes an image of a page and returns the characters it recognizes, as plain text by default. It does not know what a transaction, a column or a balance is. For a scanned statement, that means it hands you lines of words and numbers in roughly the right order, and you build the table yourself.

Tesseract is a command-line program. You type a command that names an input image and an output name, and it writes a file. Its command-line usage guide gives the basic form as tesseract imagename outputbase, with English as the default language. Besides plain text, it can write TSV, hOCR and a searchable PDF that places a text layer over the image.

Before you install anything, make sure you need OCR at all. Open the statement PDF and try to highlight one line of text. If the words highlight, the PDF already contains text, and OCR would only add errors. In Microsoft 365 Excel for Windows, a digital statement goes straight in through Get Data, as laid out in importing a PDF to Excel for free with Get Data. Tesseract is for scans, faxes and phone photos of paper statements.

What Tesseract is good at:

  • Clean, high-resolution, black-on-white pages.
  • Printed fonts, which most bank statements use.
  • Working offline, so the statement never leaves your computer.

What it struggles with:

  • Low-resolution scans and phone photos taken at an angle.
  • Grey shading behind alternate rows.
  • Keeping columns lined up when there is wide white space between them.

Installing Tesseract OCR on Windows, Mac or Linux

Tesseract installs from a standard package on all three systems. On a Mac, Homebrew installs it with one command. On Ubuntu Linux, the package manager does. On Windows, you download an installer and add its folder to your PATH so the command works from any window.

The commands come from the project's installation guide.

On macOS with Homebrew:

brew install tesseract

On Ubuntu:

sudo apt install tesseract-ocr

On Windows, the guide points to the installers built by UB Mannheim, linked from its wiki on GitHub. Run the installer, then add the folder where tesseract.exe was installed to your Path environment variable. The guide notes this step lets you run Tesseract from any location.

Check that it works by opening a new terminal or Command Prompt and typing:

tesseract --version

If you see a version number, you are ready. If you see "command not found" or "not recognized," the PATH step did not take. Close and reopen the terminal before trying again.

Preparing statement pages as 300 dpi images for Tesseract

Tesseract works on images, so a scanned PDF must be split into one image per page first. Use a resolution of at least 300 dpi. The project's guide on improving the quality of the output says Tesseract works best on images of at least 300 dpi, and suggests resizing images that fall short.

You have a few free ways to make the images:

  • On a Mac: open the PDF in Preview, choose File, Export, pick PNG and set the resolution to 300. Count the images that come out, and export any missing page on its own.
  • On any system: a free PDF-to-image tool can export every page at once. Choose PNG and 300 dpi in its settings.
  • From a scanner: if you still have the paper, rescan at 300 dpi in black and white or greyscale and save as PNG or TIFF.

Name the files so they sort in page order, such as page-01.png, page-02.png and so on. You will run Tesseract on each one.

Cleaning the image first

Two quick fixes help before OCR:

  • Straighten. A page scanned at a slight angle makes lines drift into each other. Rotate it until rows are level.
  • Crop. Cut away the bank's logo, marketing boxes and the page edge. Less noise means fewer junk characters.

The quality guide also notes that Tesseract converts the image to black and white internally, and the result can be poor if the page background is unevenly dark. A statement with shaded rows is a typical case. Raising contrast in an image editor before OCR often helps.

Tesseract settings for statement numbers: page mode, dictionaries, digit whitelist

Three settings matter most for statements: the page segmentation mode, which tells Tesseract how the page is laid out; the dictionaries, which nudge it toward real words; and a character whitelist, which limits it to digits and a few symbols. Change one at a time and compare the output.

The settings

These are the options the project's guides describe. The values in the right-hand column are starting points to try on your own file.

Setting What it does Try for a statement
--psm 3 Fully automatic page layout, the default Baseline run
--psm 4 Assumes a single column of text of variable sizes Transaction lists printed as one block
--psm 6 Assumes a single uniform block of text A cropped table area
--psm 11 Sparse text, finds as much as it can in no fixed order Pages with scattered fields
-c preserve_interword_spaces=1 Keeps runs of spaces between words Helps keep columns apart
load_system_dawg and load_freq_dawg set to false Turns off the word dictionaries Codes and numbers that are not words
tessedit_char_whitelist Limits output to the listed characters A crop of the amount column only

The quality guide explains the dictionary setting: disabling the dictionaries should increase recognition if most of your text is not dictionary words. Merchant codes and reference numbers fit that description.

Commands for one page

A baseline run on one page, writing page-01.txt:

tesseract page-01.png page-01 --psm 6 -c preserve_interword_spaces=1

The same page with dictionaries off:

tesseract page-01.png page-01-nodict --psm 6 -c preserve_interword_spaces=1 -c load_system_dawg=false -c load_freq_dawg=false

An amount column cropped into its own image, limited to digits and money symbols:

tesseract amounts-01.png amounts-01 --psm 6 -c tessedit_char_whitelist=0123456789.,-

Open the text files side by side and compare them against the page. The whitelist run is the most useful for amounts, because it cannot turn a 0 into an O or a 1 into an l. It also cannot read descriptions, so use it only on a crop that contains numbers.

From Tesseract text output to spreadsheet rows

Tesseract's plain text gives you one printed line per text line, with the date, description and amounts separated by spaces. To get columns, paste the text into Excel and split it, or load the text files through Power Query. Expect to fix lines where a long description pushed the amount out of place.

Splitting in Excel

  1. Open page-01.txt in a text editor, select the transaction lines and copy them.
  2. Paste into column A of a blank Excel sheet.
  3. Run Data, Text to Columns, Delimited, Space only if every description has the same number of words. Otherwise the amounts land in different columns from row to row.
  4. For real statements, split from both ends instead. In Microsoft 365 Excel, with a line in A2: =TEXTBEFORE(A2," ") returns the date, =TEXTAFTER(A2," ",-1) the balance, =TEXTAFTER(TEXTBEFORE(A2," ",-1)," ",-1) the amount, and =TEXTBEFORE(TEXTAFTER(A2," ")," ",-2) the description between them.
  5. Fill the formulas down, and wrap the amount and balance formulas in VALUE() so they become numbers.
  6. Set the date column to Date.

The description is the awkward field, because it contains spaces too. Splitting off only the first field and the last two leaves everything between them as the description, however many words it has. Run TRIM over column A first if the preserve_interword_spaces setting left runs of spaces.

Making it repeatable

If you scan a statement every month, write the cleanup once as a Power Query query and point it at each new text file. Reusing Power Query for monthly statements shows how to set that up. Note that Power Query needs desktop Excel. The browser version lacks it, as covered in what the Excel for the web PDF import lacks.

An alternative to OCRing the whole page is to OCR one column at a time. Crop the date column, the description column and the amount column into separate images, run each, and paste them side by side. It takes longer to set up but avoids most of the splitting. The same idea, for PDFs that already have text, is in selecting one column in a PDF.

Tesseract digit errors that break a statement balance

The errors that matter on a statement are small ones: an 8 read as a 3, a 5 as an S, a lost decimal point, a minus sign dropped, or a comma read as a period. Each one changes an amount, and nothing in the output flags it. The running balance is your only reliable check.

Common misreads to search for

  • Letters in amounts. Search the amount column for O, l, I, S and B. They are usually 0, 1, 1, 5 and 8.
  • Missing decimals. An amount of 4599 where you expect 45.99 means the point was lost.
  • Dropped signs. A withdrawal with no minus sign or CR mark doubles the error when you total.
  • Merged lines. Two short transactions on one output line, with two amounts at the end.

A worked balance check

Here is an example with invented figures. The statement shows an opening balance of $1,250.00 and a closing balance of $978.15. The OCR amounts sum to −$266.85.

$1,250.00 − $266.85 = $983.15, which is $5.00 over the closing balance.

A $5.00 gap is the classic sign of a 3 read in place of an 8, or the reverse. A withdrawal of $18.40 read as $13.40, for example, makes the withdrawals $5.00 too small and the computed closing balance $5.00 too high, as here. Look for amounts with a 3 or an 8 in the units place and compare them with the page image.

Check every page this way if the statement prints a running balance. A page-level check narrows a gap to twenty lines instead of two hundred.

How many hours does tuning Tesseract for statements cost?

Expect a first statement to take a few hours: installing, making images, trying settings, splitting text and hunting misreads. Later statements from the same bank go faster once your settings and cleanup steps are saved. Tesseract costs no money, so the question is whether those hours are worth it for your file count.

A worked estimate

These are example figures for one person doing this for the first time. Time your own first page and adjust.

Task First statement Later statements, same bank
Install and test Tesseract 30 minutes 0
Export pages as 300 dpi images (6 pages) 20 minutes 10 minutes
Try settings and compare output 60 minutes 5 minutes
Split text into columns in Excel 40 minutes 15 minutes
Find and fix misreads with the balance check 45 minutes 20 minutes
Total about 3 hours 15 minutes about 50 minutes

At those example times, twelve monthly scanned statements take about 12 hours in the first year (3 hours 15 minutes, plus 11 × 50 minutes). If you value your time at $20 an hour, that is roughly $250 of effort for software that cost nothing.

When Tesseract is the right choice

  • You have a stack of old paper statements and no other way to digitize them.
  • The files must stay on your own computer.
  • You enjoy scripting and will automate the steps.

When it is not

  • The PDF already has text. Then you need no OCR at all. A text-based statement converts directly, and CheapBankConvert is built for exactly that kind of file, with a free preview of the first two pages once it opens.
  • You need one or two statements and have no time for setup. Ask your bank whether it can send a digital copy of the statement instead.

All posts in Free tools you already own