Designed for finance exports
The parser recognises date, description, amount, debit/credit, memo, category, and transaction id fields, including headers like Narration or Withdrawal Amt. used by many banks.
Finance file converter
Extract transaction rows from PDF bank statements and convert to OFX format. Upload a file or paste its contents, check the parsed transactions, then download the OFX file.
1 · Source
3 · Result
Nothing converted yet
A sample PDF file is loaded — press “Convert to OFX” to see how the output looks.
The parser recognises date, description, amount, debit/credit, memo, category, and transaction id fields, including headers like Narration or Withdrawal Amt. used by many banks.
Each conversion shows the parsed transactions with money in, money out, and date range, plus warnings about ambiguous dates or missing account details.
PDFs and text files are read by your browser and never sent to a server. Close the tab and the data is gone.
Most banks will happily give you a PDF of any statement going back years, but the OFX download that accounting software actually wants is often limited to the last 90 days, or missing entirely for closed accounts and some credit cards. This converter reads the transaction lines out of a statement PDF and writes an OFX file, so you can get older activity into QuickBooks, GnuCash, Xero, Wave, or Quicken after a one-step OFX to QFX conversion.
It works on text-based PDFs, the kind your bank generates and emails. The page text is extracted in your browser with a PDF parser, transaction lines are recognised by their date and amount, and each becomes a STMTTRN record. You can also paste statement text copied from a PDF viewer or a banking portal; the parser does not care where the text came from.
The PDF stays on your computer. Nothing is uploaded, which is the only sensible way to handle a document that lists your account number, balance, and every purchase for the month.
OFX (Open Financial Exchange) is the format behind QuickBooks and Quicken bank downloads. The file produced here uses the SGML flavour (OFX version 1.02), which has the widest support among desktop finance programs.
Each transaction becomes a STMTTRN block with TRNTYPE (CREDIT or DEBIT), DTPOSTED in YYYYMMDDHHMMSS form, TRNAMT, a FITID, and NAME. The whole text between the date and the amount becomes NAME, trimmed to the 32-character OFX limit; when it is longer, the full description is written to MEMO as well. Statement text has no separate memo field of its own.
Signs are inferred, because statements usually print unsigned amounts. A minus sign, parentheses, or DR after the amount makes a line a debit, as do the words withdrawal, debit, payment, purchase, check, fee, ATM, or POS in the description. CR, deposit, or credit mark a credit. Otherwise the amount stays positive. When the statement header shows a Withdrawals column before a Deposits or Balance column, unsigned amounts default to debits.
FITID is the transaction id importers use to detect duplicates. Statement PDFs do not carry one, so the converter derives a stable id from the date, amount, description, and position. Converting the same statement twice yields the same ids, so a re-import is recognised as a duplicate rather than doubled.
The Intuit bank ID field fills the INTU.BID and FID tags. QuickBooks uses it to decide which institution the file belongs to. The default of 3000 is accepted by importers that do not validate the id; entering your bank's real id avoids an extra prompt in those that do.
The file also carries a BANKACCTFROM block with a placeholder account id and a zero ledger balance. Statement PDFs rarely expose that data in a form the parser can trust, so your software will ask which account to attach the transactions to on first import.
The PDF is opened with a browser-side PDF parser and the text of every page is extracted in reading order.
Lines that contain a date followed by a description and an amount are treated as transactions; when a running balance column is detected, the amount before the balance is used. Header, footer, and summary lines without that shape are ignored.
Dates are normalised using the Date order setting, amounts are cleaned and signed from cue words, and each row is given a stable FITID.
The rows are written into an OFX document with sign-on and statement sections, and offered as an .ofx download.
Statement text
2026-05-03 Cloud hosting -39.99
2026-05-06 Client deposit 2400.00OFX (transaction list)
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20260503000000
<TRNAMT>-39.99
<FITID>20260503-kyo64d
<NAME>Cloud hosting
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT
<DTPOSTED>20260506000000
<TRNAMT>2400.00
<FITID>20260506-1268bxc
<NAME>Client deposit
</STMTTRN>Does this work with scanned statements?
Not directly. The converter reads the text layer of the PDF. A scan is an image, so you need to OCR it first; most PDF tools and some phone scanner apps can add a text layer.
Can I import the OFX into Quicken?
Quicken only opens .qfx files. Run the downloaded OFX through the OFX to QFX converter first. QuickBooks Online and Desktop, GnuCash, Xero, Wave, and most personal finance apps import the .ofx directly.
Why does the output show a zero balance?
Statement text does not reliably expose an opening or closing balance in a form the parser can trust, so the ledger balance is left at zero rather than guessed. Your software calculates balances from the transactions once they are reconciled.
Will importing the same statement twice create duplicates?
Usually not. The FITIDs are derived from the transaction data, so the second import carries the same ids and most programs skip them. Importing an overlapping statement from a different source, such as a CSV, can still produce duplicates because the ids will differ.
For more background on data formats and conversion workflows, read our format guides.