Feature · Duplicate protection
How to avoid duplicate transactions on a QuickBooks import
The surest way to avoid duplicate transactions on a QuickBooks import is a file whose transaction IDs never change. Every QBO, QFX and OFX file here carries one per row, derived from the transaction itself, and rows sent straight to QuickBooks Online are tracked so a second send skips them.
- Stable FITID on every QBO, QFX and OFX row
- Overlapping statements recognised
- Sent rows tracked on QuickBooks Online
- Says plainly where protection stops
The short answer
How do you avoid duplicate transactions when importing into QuickBooks?
Import a QBO file whose transaction IDs (FITIDs) are stable, into the right account, and do not import the same dates from a second source. QuickBooks skips any row whose FITID it has already seen on that account, so a file that gives each transaction the same ID every time can be imported twice, or alongside an overlapping statement, without doubling anything.
Every QBO, QFX and OFX file VouchRow writes works that way, because each ID is derived from the transaction rather than generated fresh. When you send a statement straight to QuickBooks Online instead, sent rows are recorded and skipped on a second send.
What no converter can do is put an ID into a format that has none. CSV, Excel, QIF and IIF imports have no FITID, so with those the protection is you: import each period once.
Step by step
Importing a statement without duplicates
Most duplicates come from one of three mistakes. These steps avoid all three.
- 1Choose a format with a transaction IDQBO for QuickBooks, QFX for Quicken, OFX for software that reads it. Use CSV or Excel only when you will import each period exactly once.
- 2Enter your bank’s Intuit IDQBO and QFX need the Intuit bank ID for your bank, which you enter at export. It is a different number for QuickBooks and for Quicken at the same bank.
- 3Import into the same account every timeQuickBooks remembers FITIDs per account. Importing the same file into a second account, or a new copy of the account, is treated as new.
- 4Check the period against the bank feedIf the account has a live bank feed, import only dates the feed does not cover, or match the feed items to what you imported. A feed and a file are two sources with no shared ID.
- 5Re-import freely when you need toRe-converting the same statement, or importing an overlapping one, produces the same IDs for the shared transactions, and QuickBooks skips them.
A stable FITID on every QBO, QFX and OFX row
QuickBooks and Quicken decide whether a transaction is new by one field: the FITID, the transaction ID inside each row of an OFX-family file. If an incoming FITID has already been imported into that account, the row is skipped. They do not compare dates, amounts or descriptions.
So the ID has to be the same every time the same transaction is exported. Here it is derived from the transaction itself: the account, the date, the amount, the description (with case and spacing normalised) and the reference. No timestamp, no random value, no row number. Convert the same statement twice, or a later statement that overlaps it, and each shared transaction gets the same ID it had before.
Two genuinely identical transactions, the same coffee bought twice on one day, still get different IDs. The second is numbered by its order within the statement, which keeps the ID reproducible without collapsing two real purchases into one.
The bank ID is yours, not invented
QBO and QFX files also carry an Intuit bank ID (INTU.BID) that tells QuickBooks or Quicken which bank the file is from. It is entered by you at export, and never made up. A guessed bank ID does not just fail; it fails with an error about the connection rather than the file, which sends people looking in the wrong place.
OFX files need no Intuit bank ID, and carry the same stable FITIDs.
Sending to QuickBooks Online: three guards
Sending a statement straight to QuickBooks Online creates transactions through Intuit’s API rather than through a file, so there is no FITID to rely on. Three other things do the same job.
- Every row that is sent is recorded against the QuickBooks company and the statement. Sending the same statement again skips those rows and reports them as already sent.
- Every create request carries an idempotency id. A request retried after a dropped connection gets back the transaction already made, not a second one.
- A sent transaction that is later deleted in QuickBooks is noticed, through Intuit’s change notifications and a check before sending, and that row can be sent again. A voided one counts as still there.
Only files with an ID, and only duplicates VouchRow would create
Why it works
What stable IDs and tracked sends give you
The same ID every time
Built from the account, date, amount, description and reference, so re-exporting a statement after a correction does not turn it into a new set of transactions.
Overlaps handled
A statement that shares a fortnight with the last one imports only the new days, as long as the bank printed the shared rows the same way.
Real repeats kept
Two identical purchases on the same day get two different IDs, numbered by order, so a genuine second charge is never skipped as a duplicate.
Safe to send again
On QuickBooks Online, sent rows are recorded and skipped, and retried requests cannot create a second transaction.
Repeats inside a statement flagged
A row with the same date, amount and description as one on the previous page is flagged in review as a possible duplicate, and left for you to decide.
Causes
Why duplicates appear after a QuickBooks import
Nearly every case of doubled transactions comes from one of three causes, and only the first is about the file.
- The IDs changed between imports. A converter that builds FITIDs from a timestamp or a random value writes new IDs every time it runs, so the second import looks entirely new to QuickBooks. One that numbers rows is worse in a quieter way: row 1 of February has the same ID as row 1 of January, and QuickBooks skips a real transaction.
- The format has no ID at all. A CSV imported twice is simply imported twice.
- Two sources covered the same dates. A bank feed downloads a month, and then a statement file for the same month is imported too. The feed’s IDs come from the bank and the file’s from the converter, so they never match.
Formats
Which formats protect you, and which do not
Duplicate protection lives in the format, not the converter. The converter’s job is to fill the ID field properly where one exists, and to say so where it does not.
| Route | Per-transaction ID | Same statement imported twice |
|---|---|---|
| QBO into QuickBooks | FITID, stable | Repeats recognised and skipped |
| QFX into Quicken | FITID, stable | Repeats recognised and skipped |
| OFX | FITID, stable | Depends on the importer; many use it |
| Send to QuickBooks Online | Sent rows recorded; idempotency id per request | Rows already sent are skipped |
| CSV or Excel | None | Every row imported again |
| QIF | None | Every row imported again |
| IIF into QuickBooks Desktop | None; no duplicate check | Every row imported again |
Overlaps
Overlapping statements and re-converted files
Statements do not always line up. An interim statement printed mid-month, a closing statement for a switched account, or two months downloaded with a shared week all overlap. Because each FITID is derived from the transaction, a row that appears on both documents gets the same ID on both, and QuickBooks or Quicken imports it once.
The same holds when you re-convert a statement after fixing something in review, or after VouchRow’s reading of a layout improves. Spacing and capitalisation in descriptions are normalised before the ID is built, so a small change in how text was extracted does not change the ID.
Where it can break is when the bank itself prints a transaction differently on two documents: a description shortened on one, or a different date. Then the two IDs differ and both rows import. Glance at the overlap dates after importing an overlapping statement.
Checklist
How to avoid duplicate transactions on a QuickBooks import
A short routine that prevents nearly all of them, whichever route you use.
- Prefer QBO for QuickBooks and QFX for Quicken over CSV whenever the bank has an Intuit ID.
- Keep a note of which periods each account has been imported or sent for. With CSV, Excel, QIF or IIF it is the only protection there is.
- Before importing into an account with a bank feed, check the feed’s first date and import only what comes before it, or plan to match.
- Do not delete and re-import a whole period to fix one row. Fix the row in QuickBooks.
- On QuickBooks Online, sending is safe to repeat: an interrupted send is finished by sending again.
Clean-up
Duplicates that are already in QuickBooks
VouchRow prevents the duplicates it would otherwise create. It does not reach into QuickBooks to find or remove duplicates made earlier, whether by a feed plus an import, a CSV imported twice, or another tool’s files. Those are cleaned up in QuickBooks, by excluding or deleting the extra rows before reconciling.
The guide on duplicate transactions after a QBO import walks through that clean-up for QuickBooks Online and Desktop.
Side by side
Stable IDs against the IDs many converters write
All three kinds of file import cleanly the first time. The difference shows on the second.
| ID derived from the transaction | Random or timestamp ID | Row-number ID | |
|---|---|---|---|
| Same file imported twice | Skipped | Doubled | Skipped |
| Same statement re-converted | Skipped | Doubled | Skipped only if the row order is unchanged |
| Overlapping next statement | Shared rows skipped, new rows imported | Shared rows doubled | Real transactions skipped because their row numbers collide |
| Two identical charges on one day | Both kept | Both kept | Both kept |
Who uses it
Where repeats usually happen
Catch-up work across many months
Statements converted in batches over several sessions, with some months converted twice by different people. Stable IDs make the second import harmless.
Switching from a bank feed to statements
A feed that stopped working leaves a gap. Import only the gap, and match where it overlaps the last feed download.
Quicken users re-downloading history
QFX files with stable IDs can be imported again after a restore without doubling the register.
Teams sending to QuickBooks Online
Two people sending the same statement to the same company cannot double it: the second send skips what the first created.
FAQ
How to avoid duplicate transactions on a QuickBooks import: questions
How do I avoid duplicate transactions when importing into QuickBooks?
Use a QBO file with stable FITIDs, import it into the same account each time, and do not import dates a bank feed has already brought in. QuickBooks skips rows whose FITID it has seen on that account.
What is a FITID?
The Financial Institution Transaction ID carried by every row of a QBO, QFX or OFX file. QuickBooks and Quicken use it as the duplicate key. VouchRow derives it from the transaction itself, so it is the same every time the same transaction is exported.
Can I import the same QBO file twice?
Yes, into the same account. The rows are recognised by their FITIDs and skipped. Importing it into a different account brings the rows in again, because QuickBooks tracks IDs per account.
Why did my CSV import create duplicates?
CSV has no transaction ID, so QuickBooks has nothing to recognise a repeat by. The same applies to Excel and QIF. Use QBO where you can, or import each CSV period once.
Does an IIF import check for duplicates?
No. QuickBooks Desktop runs no duplicate check on IIF, so an IIF file imported twice posts everything twice. If you may need to re-import, use a QBO file through Web Connect.
What happens with two statements that overlap?
Transactions on both get the same FITID, so the second import adds only the new ones. The exception is a transaction the bank printed differently on the two documents, which gets two IDs.
My bank feed and an import both brought in the same month. Will VouchRow fix that?
No. VouchRow prevents duplicates it would create, but does not find or remove duplicates already in QuickBooks. Exclude or delete the extra rows in QuickBooks, and in future import only the dates the feed does not cover.
Is sending to QuickBooks Online protected the same way?
Yes, by different means. Sent rows are recorded and skipped on a second send, each request carries an idempotency id, and a row deleted in QuickBooks becomes sendable again.
Keep going
Related guides and converters
Guides
Formats with a transaction ID
Related
Other features
Export a QBO file you can import twice
Create an account, convert a statement and export QBO, QFX or OFX with stable transaction IDs. Plans start at $15 a month for 300 pages, and only pages with transactions count.