🔒 Private by design — your files are processed in your browser and never uploaded
Free · 100% in your browser · No upload

Bank Statement to Tally XML Converter

Turn a bank statement into a Tally-importable XML voucher file — every transaction becomes a balanced Receipt or Payment voucher, ready for Gateway of Tally → Import Data. Free, no signup, and nothing is uploaded: parsing happens in your browser.

🔒 Your statement never leaves your computer — parsing happens in your browser
Drop your bank statement here or click to choose  ·  PDF, BAI2, CAMT.053, MT940 or CSV — format detected automatically
.pdf.bai2.xml .sta.mt940.csv
🔒 Nothing uploaded — read in your browser ⚡ Instant — no signup 🧮 Balance check included ✓ Tally XML · Excel · CSV

What Tally's XML voucher import expects

Tally ERP 9 and TallyPrime don't import a spreadsheet — Gateway of Tally → Import Data reads a specific XML envelope: an <ENVELOPE> with a <HEADER> declaring Import Data, and a <BODY> whose <REQUESTDATA> holds one <TALLYMESSAGE> per voucher. Each message wraps a <VOUCHER> with a date, a voucher type, a narration, and — the part a generic export can't produce — two <ALLLEDGERENTRIES.LIST> blocks that must balance to zero. This page builds that exact structure from your statement, one voucher per transaction.

Why a plain Excel export fails to import

An Excel or CSV export gives Tally one flat row per transaction: a date, an amount, a description. Tally has nowhere to put that — it has no "row" concept, only vouchers made of ledger entries, and it needs to know which ledger is debited and which is credited for every single transaction. Copy-pasting statement rows into a spreadsheet template doesn't create that double entry either; it just moves the same flat data into a different grid. The only way in is the XML voucher format, built correctly, transaction by transaction.

Receipt, Payment, and the double-entry rule

Every transaction becomes one of two voucher types: money coming into the account is a Receipt, money going out is a Payment. Each voucher carries exactly two ledger entries — your bank ledger and a counter ledger — and Tally's own sign convention is easy to get backwards: a debit entry carries <ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE> with a negative amount, a credit entry carries No with a positive amount, and the two always sum to exactly 0.00. Get that backwards by hand and Tally either rejects the file or posts it inverted; this tool applies it consistently on every voucher.

Ledger names must already exist in your company file

Tally's XML import will not create ledger masters for you — it posts into ledgers that already exist, matched by exact name. By default this file uses Bank Account for the bank side and Suspense A/c for the counter side of every voucher, because a bank statement alone doesn't say which real expense or income ledger a transaction belongs to. Create ledgers with those exact names in Tally before importing (or rename them in Tally afterward), then reclassify each voucher out of Suspense A/c into your real chart of accounts once it's inside Tally, where you can see your actual ledger list.

Frequently asked questions

Will Tally accept an Excel or CSV file directly?

No — Tally's own import only reads its XML voucher format, not a spreadsheet. A plain Excel or CSV export has one flat row per transaction with no double entry and no voucher type, so Tally's Gateway of Tally → Import Data screen has nothing it recognizes as a voucher. This page produces the actual <ENVELOPE> XML structure Tally expects, with a balanced Receipt or Payment voucher for every transaction.

Why did my import fail with an unresolved ledger error?

Tally's XML import does not create ledger masters on the fly — both ledger names used in each voucher, your bank ledger and the counter ledger, must already exist in the company you're importing into, spelled exactly the same way. This file uses "Bank Account" and "Suspense A/c" by default; either create ledgers with those exact names in Tally first (Gateway of Tally → Create → Ledger), or open the XML in a text editor and replace those two names with your real ledger names before importing.

Why is everything posted to Suspense A/c instead of the right expense or income ledger?

A bank statement only tells you money moved and a description — it does not tell you which of your chart-of-accounts ledgers it belongs to, and guessing that automatically would risk silently misclassifying entries, which we won't do. Suspense A/c is a safe, honest default: everything imports and balances correctly, then you re-classify each voucher inside Tally, where you can see your actual ledger list.

Related converters

Convert a PDF bank statement to ExcelDrop a text-based PDF statement and get a full spreadsheet or QuickBooks file.
Convert BAI2 to ExcelCents converted to decimals, type codes decoded into readable columns.
Convert CAMT.053 to ExcelAmounts written as real numbers, booking and value dates split into columns.
Convert MT940 to ExcelSWIFT tags :25:, :60F:, :61:, :86:, :62F: normalised into a clean spreadsheet.
Batch-convert up to 50 statements at onceMix BAI2, CAMT.053, MT940, CSV and PDF in one drop, merged into one file.