ConvertCSV

Finance file converter

Bank Statement (PDF) to OFX 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.

  • No signup
  • Files stay on your device
  • Transaction preview
  • Download ready

1 · Source

Add your bank statement

.pdf.ofx
2 · Options

Used only if the file has none.

3 · Result

Output preview

Nothing converted yet

A sample PDF file is loaded — press “Convert to OFX” to see how the output looks.

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.

Check before you import

Each conversion shows the parsed transactions with money in, money out, and date range, plus warnings about ambiguous dates or missing account details.

Private browser workflow

PDFs and text files are read by your browser and never sent to a server. Close the tab and the data is gone.

Bank Statement (PDF) to OFX Converter

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.

Key features

  • Extracts text from multi-page statement PDFs in the browser and recognises transaction lines across common bank layouts.
  • Accepts pasted statement text as well as PDF, TXT, and CSV uploads.
  • Writes OFX 1.02 SGML with CREDIT/DEBIT types inferred from signs and cue words, YYYYMMDDHHMMSS dates, and stable FITIDs.
  • Lets you set the Intuit bank ID and the date order.
  • Shows the parsed transactions as a table alongside the OFX text before download.

About the PDF to OFX format

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.

How it works

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.

Common use cases

  • Rebuilding two years of credit card history in QuickBooks after the card issuer's download limit turned out to be 18 months.
  • Loading statements from a closed business account so the final year's books can be reconciled.
  • Moving a family's banking history from PDF archives into GnuCash or another open-source ledger that imports OFX.
  • Getting transactions from a small credit union or foreign bank that only offers PDF statements into Xero or Wave.
  • Reconstructing records for a tax audit when only the mailed paper statements, scanned to PDF with a text layer, survive.

How to use this tool

  1. Download the statement PDF from your bank and open the PDF to OFX converter.
  2. Drop the PDF onto the upload area, or paste the statement text into the text box.
  3. Enter your bank's Intuit ID if you use QuickBooks, and set Date order if the statement uses day-first dates.
  4. Review the parsed table for row count, signs, and dates.
  5. Download the .ofx file and import it with your finance software's bank file import, choosing the matching account when prompted.

Example

Statement text

2026-05-03 Cloud hosting -39.99
2026-05-06 Client deposit 2400.00

OFX (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>

Tips for best results

  • Download the statement directly from the bank rather than printing to PDF from a browser. Native statements have cleaner text and keep each transaction on one line.
  • Check the parsed row count against the statement's own transaction count or summary totals before downloading. A missed row is easier to spot here than after import.
  • Set the Date order control when the statement prints dates like 03/05 without a year or with day-first ordering and no day above 12 appears. UK, European, Indian, and Australian statements are day-first; the auto-detector only switches when a day above 12 proves it.
  • Read the signs in the preview with the cue-word rule in mind. A customer payment you received is flagged as a debit because of the word payment; a line reading Client deposit is a credit.
  • Convert one statement at a time and name the OFX after the account and period. Importers reconcile per statement, and small files are easy to redo if the account mapping was wrong.

Common errors and how to fix them

No transactions were found in the PDF.
Open the PDF and try to select some text. If you cannot, it is a scanned image and needs OCR first. If you can, copy the transaction section and paste it into the text box; some statements store text in an order the extractor cannot follow.
The PDF cannot be opened because it is password protected.
Open it in your PDF viewer with the password, then print or export it to a new PDF without protection and upload that.
Some deposits were imported as withdrawals.
Their descriptions contain a debit cue word such as payment or check. Convert the statement with the PDF to CSV tool, fix the signs in a spreadsheet, and run the corrected CSV through CSV to OFX.
Payee names are cut short or a transaction is missing.
The statement wraps long descriptions onto a second line. The first line converts and the continuation is dropped with a warning. Paste the text and join the wrapped lines by hand for those rows.
Dates are a month off after import.
The statement is day-first and every day in it was 12 or below. Delete the imported transactions, set Date order to day-first, and import the regenerated file.
QuickBooks asks for a financial institution every time.
Enter your bank's Intuit ID in the bank ID field. Lists of these ids are published by user communities; the default 3000 works in versions that do not check it.

Best practices

  • Compare the parsed total of debits and credits against the statement summary before importing anything.
  • Keep the original PDF next to the OFX file; the OFX is derived data and the PDF is the record of truth for an auditor.
  • Import in chronological order so running balances in your software line up with the statement closing balances as you reconcile.

Frequently asked questions

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.