Skip to main content
BankFlow logoBankFlow

PDF to QBO converter

PDF in, QBO out.

Turn a statement PDF into a .qbo web-connect file QuickBooks Desktop imports natively: OFX 1.02 SGML with the Intuit header, correct transaction types, and stable IDs for duplicate detection.

50 free page credits · No card · Cancel anytime

  • OFX 1.02 SGML
  • Intuit web-connect header
  • FITID duplicate detection

Export transactions

1,284 rows

Format

CSVExcelJSONOFXQuickBooks
DateDescriptionAmount
2025-10-24STRIPE PAYOUT 4af2c9+4,820.00
2025-10-23AWS EMEA SARL−1,204.00
2025-10-22WHOLE FOODS MKT−112.88
1,284 rows · 3 columnsExport QuickBooks

PDF statement you upload

scanned_statement_047.pdfUnstructured

24/10 STRIPE PAYOUT 4af2c9........4,820.00

23-10 AWS EMEA SARL us-east-1 1,204.00-

22 OCT WHOLE FOODS MKT #214 112.88

21/10 UBER *TRIP..............24.40

20-OCT-2025 GUSTO PAY 9931 18,440.00

[illegible: scan quality]

QBO file you download

statement_oct.qboOFX / QBO

<STMTTRN>

<TRNTYPE>CREDIT

<DTPOSTED>20251024

<TRNAMT>4820.00

<NAME>Stripe

<MEMO>STRIPE PAYOUT 4af2c9

</STMTTRN>

<STMTTRN>

<TRNTYPE>DEBIT

<DTPOSTED>20251023

<TRNAMT>-1204.00

<NAME>Amazon Web Services

<MEMO>AWS EMEA SARL us-east-1

</STMTTRN>

… 3 more transactions

Import in QuickBooks under Transactions › Bank transactions › Upload
A PDF in, OFX 1.02 SGML out: one <STMTTRN> block per transaction, each with a stable FITID so a re-import cannot double-post. Illustrative data.

QuickBooks won't read a PDF, and the QBO format is fussy.

QBO is Intuit's flavour of OFX: SGML rather than XML, with unclosed tags, a specific header block, and a required set of transaction fields. Hand-rolled converters routinely produce files QuickBooks rejects outright, or worse, files it accepts with every amount's sign inverted. Getting the format exactly right is the whole job.

How it works

Converting a PDF to QBO

  1. 01

    Upload the statement PDF

    Scanned, multi-page, and password-protected PDFs are supported, up to 50 MB.

    BankFlow dashboard with the empty state offering a statement upload or an email import address.
    Drop the file in, or forward the bank's email to your private import address and skip the download entirely.
  2. 02

    Confirm the import

    Review the queued file and choose whether statements carrying warnings count in your analytics before anything is read.

    Import dialog with chase.pdf selected, the warning policy listed, and an Import button.
    The file, its size, and the warning policy: all settled before a single transaction is extracted.
  3. 03

    Check the parse

    Opening and closing balances are reconciled against the extracted rows, so a dropped page surfaces before it reaches your books.

    Activity panel showing a Chase statement processing, with the current stage and elapsed time.
    Each upload reports its stage and elapsed time while it moves through the queue.
  4. 04

    Choose QBO

    Select the QBO export variant to get the Intuit web-connect header and a .qbo file extension.

    Export dialog with QuickBooks selected, the field list on the right, and a live preview of the rows.
    QuickBooks is the .qbo variant, and it sits beside OFX in the format list: same reviewed rows, different header.
  5. 05

    Import Web Connect Files

    In QuickBooks Desktop, use File → Utilities → Import → Web Connect Files and pick the download.

A QBO file QuickBooks accepts the first time

Correct OFX 1.02 SGML

Line-oriented SGML with unclosed tags as the spec requires, not XML with closing tags, which is the most common reason a hand-made file gets rejected.

Intuit web-connect header

The QBO variant emits the INTU.BID header block QuickBooks Desktop looks for when recognizing a web-connect file.

FITIDs on every transaction

Stable per-transaction identifiers are what QuickBooks matches against to avoid importing the same row twice.

Signs that survive the round trip

TRNTYPE is derived from the signed amount, so debits import as debits and your balance does not end up inverted.

Nothing lost to truncation

NAME respects the format's 32-character payee limit while the full narration rides along in MEMO, which has no such cap.

Export only what you need

Scope the file to one account, one month, or one filtered view rather than regenerating your whole history each time.

What's inside the file

The structural pieces that determine whether QuickBooks accepts the import.

ElementValue
OFXHEADER100: the OFX 1.x header marker.
DATAOFXSGML, declaring SGML rather than XML encoding.
VERSION102: OFX 1.02, the version QuickBooks web connect expects.
INTU.BIDPresent in the .qbo variant; this is what marks the file as web connect.
CURDEFA single currency for the whole statement download.
BANKID / ACCTIDPlaceholder identifiers. You choose the real target account inside QuickBooks at import time.
STMTTRNOne block per transaction, each with DTPOSTED, TRNAMT, TRNTYPE, NAME, MEMO, and FITID.

FAQ

Common questions

What is a QBO file?

A QBO file is Intuit's web-connect variant of OFX 1.02: the same SGML transaction format with an added header block that identifies it to QuickBooks. It is what QuickBooks Desktop expects from Import Web Connect Files.

What is the difference between OFX and QBO here?

The transaction body is identical. The .qbo download adds the Intuit web-connect header and uses the .qbo extension so QuickBooks Desktop recognizes it. If you are not using web connect, plain OFX is fine.

How do I import a QBO file into QuickBooks Desktop?

Use File → Utilities → Import → Web Connect Files and select the downloaded .qbo. QuickBooks will ask which account to import into.

Will it create duplicate transactions?

Each transaction carries a FITID, the identifier QuickBooks uses to detect rows it has already imported. Reviewing the import preview is still worthwhile, particularly if you re-export an overlapping date range.

Can I convert scanned PDF statements?

Yes. Scanned, multi-page, and password-protected PDFs are all supported, as are CSV, XLSX, and JSON files if that is what your bank provides.

Should I categorize before converting?

It usually pays off. Bulk-categorizing in BankFlow's ledger is faster than working through uncategorized entries inside QuickBooks, and the categories travel with the export.

Converting a statement from a specific bank?

Written up for the format each of these banks prints.

A .qbo that imports on the first try.

Upload a statement PDF and download a properly formed web-connect file for QuickBooks Desktop.