Cleanrow

Convert a PDF bank statement to OFX or QIF

Personal finance and accounting apps that can't read a PDF often import OFX or QIF, the file formats banks use for downloads. Cleanrow reads a PDF statement in your browser, checks it against the statement's balances, and writes either one.

What OFX is, and who needs it

OFX (Open Financial Exchange) is a standard file format for bank and card transactions. Many banks offer it as a download, and many finance and accounting apps import it. It carries more than a spreadsheet does: the account, the statement period, the closing balance, and a transaction id for every row, which lets an app skip transactions it has already imported. You need it when an app accepts bank files but not PDFs, and your bank only gives you PDFs for the months you're missing: an old statement, a closed account, or a gap in a bank feed.

Cleanrow writes OFX 2.2, the XML version of the format.

Step by step

  1. Open the converter and drop the PDF on Drop statements here, or click Choose files.
  2. Check the banner reads Verified, or fix the rows it points at with Edit (how the check works).
  3. Check Type. A Bank account becomes a bank statement in the OFX file and a Credit card a card statement; it also decides which way every amount goes.
  4. Under Download, choose OFX in Format and click Download OFX.
  5. Import the .ofx file into your app, into the account it belongs to, and compare the first rows and the balance with the statement.

What the OFX file looks like

Part of a real export, made by the engine from a made-up test statement (the Copperfield Trust checking account ending 1544, 2025-01-01 to 2025-01-31):

<STMTRS>
<CURDEF>USD</CURDEF>
<BANKACCTFROM>
<BANKID>000000000</BANKID>
<ACCTID>XXXX1544</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
<BANKTRANLIST>
<DTSTART>20250101120000</DTSTART>
<DTEND>20250131120000</DTEND>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20250101120000</DTPOSTED>
<TRNAMT>-1149.46</TRNAMT>
<FITID>2025010106f199c5</FITID>
<NAME>Check 1650</NAME>
</STMTTRN>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20250101120000</DTPOSTED>
<TRNAMT>-237.18</TRNAMT>
<FITID>2025010133686a0b</FITID>
<NAME>BRIGHTPATH ELECTRIC AUTOPAY WEB </NAME>
<MEMO>BRIGHTPATH ELECTRIC AUTOPAY WEB ID 437965622</MEMO>
</STMTTRN>
…

QIF instead

QIF (Quicken Interchange Format) is an older plain-text format that some apps still import, especially desktop finance programs. Choose QIF in Format, pick MM/DD/YYYY or DD/MM/YYYY in Date format, and click Download QIF. The first records of the same statement:

!Type:Bank
D01/01/2025
T-1149.46
PCheck 1650
^
D01/01/2025
T-237.18
PBRIGHTPATH ELECTRIC AUTOPAY WEB ID 437965622
^
D01/02/2025
T-169.22
PHEARTH GAS CO AUTOPAY WEB ID 312706058
^
…

Each transaction is a D (date), T (amount), an N (check number) when there is one, a P (payee: the statement's description) and a closing ^. The first line says !Type:Bank or !Type:CCard. QIF has no transaction ids and no account details, so importing the same file twice gives every row twice. Prefer OFX if your app takes both.

Common problems

The app asks which account the file is for

A PDF statement prints only the last digits of the account number and no routing number, so the OFX file carries placeholders: ACCTID is XXXX plus the last four digits and BANKID is zeros. If your app matches files to accounts by those numbers, pick the account by hand the first time.

A savings account shows as checking

Every bank statement is written with ACCTTYPE CHECKING, including savings and money market statements. If your app goes by the account type, choose the account by hand when you import.

"Needs OCR"

A scanned statement has no text to read, and the web converter says so instead of guessing. Cleanrow for Mac, coming to the Mac App Store, reads scans with the text recognition built into macOS.

Two accounts in one PDF

Each account gets its own statement, balance check and OFX file, so each can go into its own account in your app.

Your statement stays on your computer

The OFX or QIF file is built in the browser tab; the PDF is never uploaded, and Cleanrow doesn't connect to your bank or your finance app. The only outside address the page may contact is Polar's license check, when you enter a pass key. See the privacy policy.

Limits

The 7-day pass isn't on sale yet. Until it is, the free download of your first file works as described.

Related guides