VouchRow

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
march-business-checking.pdf
TransactionAmount · Balance
Checking running balance · row 1 of 6

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
Where it stops

Only files with an ID, and only duplicates VouchRow would create

CSV and Excel files carry no transaction ID, so importing the same CSV twice duplicates every row. QIF has no ID either, and QuickBooks Desktop runs no duplicate check on an IIF import. Duplicates already in your books because a bank feed and a manual import covered the same dates are not detected or removed by VouchRow; that clean-up happens in QuickBooks. And a FITID only matches when the transaction is printed the same way on both statements: if the bank words or dates a transaction differently on two documents, the IDs differ too.

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.

RoutePer-transaction IDSame statement imported twice
QBO into QuickBooksFITID, stableRepeats recognised and skipped
QFX into QuickenFITID, stableRepeats recognised and skipped
OFXFITID, stableDepends on the importer; many use it
Send to QuickBooks OnlineSent rows recorded; idempotency id per requestRows already sent are skipped
CSV or ExcelNoneEvery row imported again
QIFNoneEvery row imported again
IIF into QuickBooks DesktopNone; no duplicate checkEvery row imported again
What a repeat import does, by route

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 transactionRandom or timestamp IDRow-number ID
Same file imported twiceSkippedDoubledSkipped
Same statement re-convertedSkippedDoubledSkipped only if the row order is unchanged
Overlapping next statementShared rows skipped, new rows importedShared rows doubledReal transactions skipped because their row numbers collide
Two identical charges on one dayBoth keptBoth keptBoth kept

Who uses it

Where repeats usually happen

01

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.

02

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.

03

Quicken users re-downloading history

QFX files with stable IDs can be imported again after a restore without doubling the register.

04

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.

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.