Duplicates and split transfers, fixed

When a PrivatBank or Erste import brings in the same transaction twice, or splits or mismatches one of your own transfers, Budgie finds it and fixes it — duplicates are removed, mismatched transfers are put right, and missing transfer fees are restored.

No spam, ever. Unsubscribe anytime.

  • Free, no account
  • Works offline
  • Source-available

Cleanup you stay in charge of

0

hand-typed entries touchedOnly imported rows are ever repaired. Your own entries stay as you typed them.

A count

shown before any changeThe screen tells you how many rows it would fix first.

None

repairs in the backgroundNothing runs until you press Repair.

Find it in Settings

The repair has its own row in Settings, and it only acts after you confirm.

Repair Sync Data sits in the data section

A confirmation card comes before every repair

Read the source
Budgie Settings data management list with the Repair Sync Data and Consolidate Matches rows

What you get

See the count first

A dedicated Settings screen scans your PrivatBank and Erste imports and shows a count before it changes anything

Hand-typed entries stay untouched

Removes duplicated imported rows — anything you typed yourself is never a candidate

Nothing runs unconfirmed

No repair runs until you confirm on the repair card — no background cleanup

Everything included

  • A per-source list, though paired own-card transfers are folded into one connection's count rather than shown separately
  • An explicit empty state, “No sync repairs found”, when there is nothing to fix
  • Runs against the local database — no upload, no server
  • For PrivatBank, also pairs unmatched own-card transfers into a real transfer — that's a rewrite, not a deletion, and it can't be undone with one tap
  • Restores transfer fees that went missing, and turns stale transfers back into income and expense

The details

For when you want to know exactly how it behaves.

Why duplicates appear at all

An import can bring in the same transaction twice: overlapping statement exports, a file imported again, a download that was retried. Neither row is wrong on its own — they simply describe the same event, and you see it twice.

The Sync Data Repairs screen runs several checks in one pass: it finds duplicate imported rows, turns transfers that were matched wrongly or twice back into plain income and expense, restores transfer fees that went missing, and looks for PrivatBank transfers between your own cards that arrived as a separate income row and expense row instead of one transfer. It covers your PrivatBank and Erste file imports; Monobank and Binance are not part of it. It shows a count before changing anything, and only touches the rows involved once you confirm.

When one of your cards pays another (PrivatBank)

Sometimes a transfer between your own cards arrives as two separate rows instead of one — an expense on the card that sent it, an income on the card that received it. For PrivatBank, the repair finds those pairs and turns the unmatched row into a proper transfer, rather than deleting anything.

It only acts when the receiving card is no longer active on your account, when the masked card number on the transaction matches exactly one of your closed cards, and when a matching entry turns up within about half a day and within the expected amount. If the receiving card is still active, this repair leaves it alone — that's by design, not a bug.

Guides on the blog

Questions

What does a sync data repair actually do?

It runs several fixes on your PrivatBank and Erste imports: it removes duplicate imported rows, turns stale transfers back into income and expense, restores transfer fees that went missing, and — for PrivatBank — pairs transfers between your own cards that arrived as two separate rows into one. The screen shows a count before you confirm anything.

Will it touch transactions I entered by hand?

No. The repair works on imported rows only. Manual transactions are never touched — that is exactly what the confirmation card promises before you press Repair.

What does the own-card transfer fix actually change?

It only applies to PrivatBank, and it doesn't delete anything. It rewrites an imported income or expense row into a transfer, pointing it at the closed card that received or sent it. That's a bigger change than removing a duplicate, and it has no one-tap undo.

Why didn't it find my own-card transfer?

The receiving card has to be closed on your account, and its masked card number has to match exactly one of your closed cards. A matching entry also has to turn up within about half a day and for the expected amount. If the card is still active, or the masked number matches more than one closed card, the repair leaves it alone.

Why do duplicates appear at all?

Overlapping exports or a file imported again can bring in a transaction twice. The repair finds those repeated imported rows and removes the copies, not the original event.

Ready to take Budgie for a spin?

Join the waitlist — be first to try the offline-first expense tracker.