Skip to content

Tally XML · TallyPrime and Tally.ERP 9 · nothing uploaded

Bank statement to Tally XML converter

Drop a PDF bank statement and download a Tally XML file that creates a Payment or Receipt voucher for every row, between your bank ledger and a second ledger of your choice. Nothing is uploaded.

Try a sample statement

Exports to Excel · CSV · QBO · OFX · QFX · Xero · Tally

How it works

Three steps. No upload.

The whole conversion runs in your browser tab, so your statement never reaches a server.

  1. 01

    Drop the PDF

    An Indian bank statement with ₹ amounts and day-first dates works, and so does any other text PDF.

  2. 02

    Name your ledgers

    Type the bank ledger as it exists in Tally, an optional company name, and the other ledger to post each row against.

  3. 03

    Import in Tally

    Use Import, Vouchers in Tally and pick the XML. Reclassify the second ledger’s rows afterwards.

The balance check

Check the statement, then post the vouchers

Once a voucher is in Tally it is an accounting entry, and deleting a month of them is tedious. So the statement is checked first. Every row is added up and compared with the opening and closing balances printed on it.

This example is in rupees with lakh grouping, the way many Indian statements print numbers. Amounts like 1,25,430.50 are read correctly, and balances marked Cr or Dr are understood. If the check says Off by an amount, fix the row on the review screen before you export.

How your statement is handled

example-bank-in_2026-09.pdf

Opening balance
1,25,430.50
+ Credits
3,25,000.00
− Debits
38,776.50
= We calculated
4,11,654.00
Statement says
4,11,654.00
BalancedDifference 0.00

If the last row had been missed:

Off by 118.00 possible missed line on page 2

The file

One voucher per row

This is a real export of a made-up statement. Money out becomes a Payment voucher, money in a Receipt. Each voucher has two ledger entries of equal size, one on the bank ledger and one on the other ledger.

Each row becomes one voucher

Statement rowVoucher typeOther ledger sideBank ledger side
Money outPaymentDebitedCredited
Money inReceiptCreditedDebited

A deposit, as a Receipt voucher

    <TALLYMESSAGE xmlns:UDF="TallyUDF">
     <VOUCHER VCHTYPE="Receipt" ACTION="Create">
      <DATE>20260902</DATE>
      <VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
      <NARRATION>Salary credit</NARRATION>
      <ALLLEDGERENTRIES.LIST>
       <LEDGERNAME>Bank Account</LEDGERNAME>
       <ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
       <AMOUNT>-85000.00</AMOUNT>
      </ALLLEDGERENTRIES.LIST>
      <ALLLEDGERENTRIES.LIST>
       <LEDGERNAME>Suspense A/c</LEDGERNAME>
       <ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
       <AMOUNT>85000.00</AMOUNT>
      </ALLLEDGERENTRIES.LIST>
     </VOUCHER>
    </TALLYMESSAGE>

A withdrawal, as a Payment voucher

    <TALLYMESSAGE xmlns:UDF="TallyUDF">
     <VOUCHER VCHTYPE="Payment" ACTION="Create">
      <DATE>20260903</DATE>
      <VOUCHERTYPENAME>Payment</VOUCHERTYPENAME>
      <NARRATION>Rent Sharma Estates</NARRATION>
      <ALLLEDGERENTRIES.LIST>
       <LEDGERNAME>Suspense A/c</LEDGERNAME>
       <ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
       <AMOUNT>-32500.00</AMOUNT>
      </ALLLEDGERENTRIES.LIST>
      <ALLLEDGERENTRIES.LIST>
       <LEDGERNAME>Bank Account</LEDGERNAME>
       <ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
       <AMOUNT>32500.00</AMOUNT>
      </ALLLEDGERENTRIES.LIST>
     </VOUCHER>
    </TALLYMESSAGE>
Bank ledger
Defaults to “Bank Account”. It must already exist in your company in Tally.
Other ledger
Defaults to “Suspense A/c”, so every row has somewhere to land. Reclassify the entries in Tally afterwards.
Dates
Written as yyyymmdd, the way Tally reads them.
Narration
The description from the statement.
Company
Optional. If you type the company name, the file asks Tally to import into that company.

Import

Import into Tally

TallyPrime

  1. 1.Create the bank ledger and the other ledger in your company first, with the same names you typed here.
  2. 2.Choose Import, then Vouchers.
  3. 3.Pick the XML file and let it run.
  4. 4.Open Day Book to check the vouchers, then reclassify the rows posted to the other ledger.

Tally.ERP 9

  1. 1.The menu is under Gateway of Tally, Import of Data, Vouchers.
  2. 2.The ledger rules are the same: both ledgers must already exist.

FAQ

Bank statement to Tally, answered

What does the Tally file create?
One voucher per statement row: a Payment for money out and a Receipt for money in. Each has an entry on your bank ledger and an equal entry on the other ledger, which defaults to Suspense A/c.
Why post to a suspense ledger?
A bank statement says what moved, not what it was for. Posting to one ledger gets every row into Tally correctly and the money in the right bank. You then reclassify rows to expense, income or party ledgers in Tally, where you already do that work.
Does it read Indian statements?
Yes: ₹ amounts, lakh grouping such as 1,25,430.50, day-first dates, and balances marked Cr or Dr. Negative amounts in brackets or with a minus sign are read too. The reader is tested on synthetic layouts of Indian bank statements, among others.
Which Tally versions does it work with?
The file is in the XML import layout used by TallyPrime and Tally.ERP 9. The menu path differs a little between them, and both are listed above.
Can I use it for credit card statements?
Yes. For a card, name the card’s ledger instead of a bank ledger. A card payment is posted the way money into a bank account is, and charges the way money out is.
Is my statement uploaded?
No. A text PDF is read in your browser and the XML is built there. It keeps working offline after your first visit.
Does it read scanned or photographed statements?
Not yet. A scan has no text to read, so it needs OCR on a server. That is planned for paid plans, and it will ask before sending a file. Statements you download from online banking are text PDFs and work today.