Upload a QBO file, once, for dates QuickBooks does not hold yet. Of the three routes, only a QBO file gives every row its own id, and Intuit documents QuickBooks Desktop for Mac refusing an id it has stored. Its QuickBooks Online guide describes no such check: there, the date range you choose is what stops a repeat.
Evidilo writes the QBO route, and every row in its file carries an id built from what the bank printed.
The three routes into QuickBooks
Intuit’s guide to manually uploading transactions into QuickBooks Online lists all three: a statement as a PDF or an image, or a list of transactions as a QBO, QFX or CSV file. It suggests a QBO file. A statement has to be in English, and QuickBooks’ AI extracts the rows from it; the guide adds that Intuit’s team of experts may review the statement. The table was checked on 26 October 2026: the QuickBooks cells come from that guide and from Intuit’s “Nothing imported” article, the Evidilo cells from a run of the function that writes its ids, all in dataset.csv.
| Route | What QuickBooks receives | What tells a repeat apart | What the guide asks of the file |
|---|---|---|---|
| QuickBooks Online statement upload | The rows its AI extracts from the statement, shown side by side with it | Not described; the guide answers duplicates with the date range you choose | In English; PDF, JPG, PNG or HEIC |
| CSV | 3 columns (Date, Description, Amount) or 4 (Date, Description, Credit, Debit) | No id column; you pick the transactions to import | English, 350 KB or less, up to 1,000 lines |
| QBO file from Evidilo | Every row with its own id (FITID), 22 characters | The FITID: 0 of 5 moved on a second conversion. QuickBooks Desktop for Mac refuses an id it has stored | English, 350 KB or less, up to 1,000 lines |
For a statement you have to get right first time, the QBO file is the better of the three, because it is the only one that carries a key for each row. How much that key does depends on which QuickBooks reads it. Desktop for Mac refuses a repeated id; Intuit’s Online guide does not say what Online does with one, so in Online the date range stays the protection whichever file you upload.
Why a statement imports twice
A QBO file is a Web Connect file, the format a bank’s own download uses. Intuit’s “Nothing imported” article explains the mechanism for QuickBooks Desktop for Mac: every transaction in the file has a unique identifier, QuickBooks keeps it once the transaction is added or matched, and it will not import the same identifier twice. A second import of the same file reports the account as up to date and adds nothing.
That only works if the identifier is stable. A converter that numbers rows by their position writes different ids as soon as a row is added or removed, and one that stamps them with the time of the download writes new ids every time it runs, so the second file looks like new money. A CSV has no identifier at all. Intuit’s guide for QuickBooks Online does not mention a transaction identifier anywhere. It tells you to check your Chart of accounts before an upload and to choose the date range so you can avoid duplicate transactions, and that advice holds for every route.
What moves an Evidilo id
Evidilo builds each row’s id from the bank, the account, the date, the amount, the direction and the running balance the statement printed. The description and the row’s position are left out on purpose. On 26 October 2026 the function that writes those ids ran over the five-row checking statement of Evidilo’s export tests, laid out as Wells Fargo prints one, with one thing changed at a time:
| Change | Ids that moved |
|---|---|
| Converted the same statement a second time | 0 of 5 |
| Gave the rows in reverse order | 0 of 5 |
| Corrected the description on the Square deposit | 0 of 5 |
| Changed the $45.00 check to $48.00 and nothing else | 1 of 5, the check |
| Changed the $45.00 check to $48.00 with the balances printed on it and below it | 3 of 5, the check and the two rows after it |
| Same rows under a different account number | 5 of 5 |
Each id came out at 22 characters. The OFX Banking Specification allows up to 255 and recommends 32 or fewer. A real correction is the fifth row, not the fourth: when a misread amount is fixed, the running balance on that row and on every later one moves with it, and so do their ids. A file downloaded before the correction and one downloaded after it disagree on all of those rows. Correct first, then download once.
The download step also remembers. When you have converted the same account for an overlapping period before, it says so before you download, naming the dates of the earlier statement and the day you converted it, so you see a repeated month before QuickBooks does.
Where the id cannot help
The ids Evidilo writes are made from the statement. They are not the ids your bank sends through a bank feed, so they cannot be what keeps a feed and a file apart when both cover the same week. If the account already has a feed, convert only the statements from before it started, and end the last one the day before the feed’s first transaction.
Before you import
- Look up the date of the newest transaction QuickBooks already holds for the account.
- Convert the statements that start after it, and only those.
- Read the balance check on each one. A statement that does not tie out names the first day it fails, and what a tied-out statement proves sets out what the check can and cannot see.
- Correct any row before you download, so the file carries the ids of the final rows.
- Download the QBO file once and upload it to the account it names.
What Evidilo is
Evidilo is a bank statement to accounting import file converter. It reads a PDF, a scan, a photo of a paper statement, a CSV, an Excel or Word file or an OFX/QFX file and writes QBO, IIF, OFX, QFX, QIF, CSV or Excel. It adds up every row against the opening, closing and daily balances the bank printed, and on a paid plan a statement that does not tie out uses no pages until it is corrected and ties out. For a statement that only exists on paper, a photo of the statement is enough to start from.
How was this checked?
On 26 October 2026 Intuit’s QuickBooks Online upload guide, its “Nothing imported” article for QuickBooks Desktop for Mac, its Web Connect troubleshooting page and the OFX Banking Specification were read with curl, and every sentence this post relies on is kept with its link in dataset.csv. The same day Evidilo’s id builder ran under Node 22 over the five-row statement of its export tests, once unchanged and once per change in the table above, and check.py re-reads every page and re-runs that measurement. No file was uploaded to QuickBooks for this post, so whether QuickBooks Online refuses a repeated id stays unchecked: that needs the same file uploaded twice into an Online company.
Common questions about QuickBooks imports
Can QuickBooks Online read a PDF bank statement by itself?
Yes. Intuit’s upload guide says QuickBooks Online accepts a statement in English as a PDF or an image, its AI extracts the transactions, and you check them in a side-by-side view of the statement. Evidilo does the same reading outside QuickBooks and adds up every row against the balances the bank printed before it writes the file. Which one suits you depends on whether you want that check before the rows reach the books or a review inside QuickBooks after they arrive.
Should I import a CSV or a QBO file into QuickBooks?
A QBO file, where you have the choice. Intuit suggests QBO in its own guide, and the QBO file Evidilo writes carries an id on every row, which a CSV has no column for. A CSV is still the right file for a spreadsheet, and Evidilo writes it in the three-column layout Intuit lists.
Why did QuickBooks say “Nothing imported. Account up to date”?
Every transaction in the file carried an id QuickBooks had already stored, so it treated the file as one it had seen. Intuit documents this message for QuickBooks Desktop for Mac. A file whose ids are all stored already is a file that went in before, which is the repeat the id is there to catch.
How do I import bank statements from before my bank feed started?
Convert the older statements to QBO and stop the last one the day before the feed’s first transaction. Evidilo reads statements rather than connecting to the bank, so it can cover a period the feed never downloaded. Whichever converter you use, the date boundary is what keeps the feed and the file from overlapping.
Can I try it before paying?
Yes. Evidilo converts three statements a day free, up to 10 pages each, without an account, and the QBO file is one of the downloads.