QuickBooks Online does not read a PDF statement directly. You need a CSV with the right columns, one consistent date format, and one clean amount column. This guide covers the manual method, the format Intuit describes, and the mistakes that cause failed or silently wrong imports. (Using Xero? See the Xero version.)
Open the PDF and try to select a line of text with your cursor. If you can, it has a text layer and the methods below work. If you can't (it is a scan or a photo), you need OCR first, and every method below will give poor or empty results without it.
=D2-C2 in a new column and fill down (money in positive, money out negative).Always check the result: add opening balance + money in − money out and compare it to the closing balance on the statement. If they differ, a row was missed, duplicated, or has the wrong sign.
Intuit's UK help article (Prepare your CSV file for bank upload, read 2026-10-04) describes two layouts:
| Layout | Columns |
|---|---|
| 3 column | Date, Description, Amount (negative = money out, positive = money in) |
| 4 column | Date, Description, Credit, Debit (one of the two filled per row, not both) |
The same article says to keep all dates in one consistent format, leave zero amounts blank, and remove special characters such as ! @ # $ % ^ & * ( ) , . ? " : { } | < > from the data. It recommends dd/mm/yyyy on that UK page and says to save as a Windows CSV. The US version of that article returned a 404 when I tried it. For a US company file, a secondary source (dancingnumbers.com) gives MM/DD/YYYY as the example. Check the date format your QuickBooks region accepts with a 3-row test file first.
In QuickBooks, you import via Banking > Link account > Upload from file and map the columns (same secondary source).
1,234.56 CR, $, and (45.00) all need converting to plain decimals.I sell a one-time $29 Python script that reads text-layer PDF statements and writes CSV. It is a script you run on your own computer, not a website or an app with buttons. You need Python installed and one install command (pip install pdfplumber). It does not read scanned, photographed or password-protected PDFs. I have not tested it on a real bank's statement layout, so check its output against your statement. Bank Statement PDF to CSV Converter on Gumroad.
If your statements are scanned, or you do only a few a month, the manual method above is the better choice.