How to Import a Bank Statement into Tally
Getting a bank statement PDF into TallyPrime or Tally.ERP 9 as Payment and Receipt vouchers: the XML file, the ledger names to set, and reconciling.
Tally remains the backbone of accounting for a very large number of Indian businesses, and bank statement entry is one of the most time-consuming parts of using it. You need the statement as something Tally can import, and a PDF is not that.
What Tally imports
Tally does not import a list of transactions. It imports vouchers: each one a date, a narration and two ledger entries that balance to zero, naming ledgers that already exist in your company. That is why a spreadsheet of statement rows cannot simply be pasted in, and why the file Tally takes is XML.
The bank statement PDF to Tally XML converter writes that file from your statement. Money out becomes a Payment voucher, money in becomes a Receipt voucher, and every voucher's two entries sum to zero, which is the first thing Tally checks before it accepts anything.
The workflow
- Convert the statement PDF to Tally XML Upload the PDF on the Tally XML converter and download the .xml file.
- Check the conversion before anything else Press Verify transactions under the preview: it says whether every row agrees with the running balance the bank printed. Fixing a bad import in Tally costs far more than not making it.
- Replace the two placeholder ledger names The file names its ledgers with placeholders that say REPLACE. Open it in a text editor and replace both with the exact names of ledgers in your company: your bank ledger, and the ledger the other side of each voucher should post to, such as a suspense ledger you clear later.
- Import it In TallyPrime, press Alt+O (Import) and choose Transactions; in Tally.ERP 9, go to Gateway of Tally > Import of Data > Vouchers. Point it at the XML file.
- Check the vouchers against the statement Count the Payment and Receipt vouchers created against the transactions on the statement, and compare the bank ledger's closing balance with the one the bank printed.
Why the ledger names are placeholders
Nothing in a bank statement says what your company calls its ledgers, and Tally refuses a voucher that names a ledger it does not have. A plausible guess such as Suspense A/c would be worse than a placeholder: on a company that happens to have that ledger, the import would succeed and post a month of transactions somewhere nobody chose.
So the file fails until you name the ledgers, and Tally's error quotes the placeholder back, which tells you exactly what to set.
One voucher, as the file writes it
Below is one voucher from a Tally XML file, written by the converter from a made-up statement line: a UPI payment of 1,250.00 to an invented stationer on 03/04/2026, with an invented reference. The two placeholders have been replaced with Office Expenses and Example Bank A/c. Line breaks inside each row are left out; everything else is as the file has it.
| In the file (made-up transaction) | What it says |
|---|---|
| <TALLYMESSAGE xmlns:UDF="TallyUDF"> | One per transaction, inside Tally's import envelope, whose report name is Vouchers |
| <VOUCHER REMOTEID="ad410657-357b-5afe-a25e-1800c7f79c5b" VCHTYPE="Payment" ACTION="Create" OBJVIEW="Accounting Voucher View"> | Money out, so a Payment voucher. The REMOTEID is the same every time this statement is converted |
| <DATE>20260403</DATE> <EFFECTIVEDATE>20260403</EFFECTIVEDATE> | 3 April 2026: 03/04/2026 read day first, written year, month, day |
| <VOUCHERTYPENAME>Payment</VOUCHERTYPENAME> | Your company's Payment voucher type, which also numbers the voucher |
| <PARTYLEDGERNAME>Office Expenses</PARTYLEDGERNAME> | The ledger you put in place of the statement-ledger placeholder |
| <PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW> | Opens as an ordinary accounting voucher |
| <NARRATION>UPI/EXAMPLE STATIONERS/OFFICE SUPPLIES | Ref 000123456789</NARRATION> | The bank's narration, with the statement's reference column added after a bar |
| <ALLLEDGERENTRIES.LIST> <LEDGERNAME>Office Expenses</LEDGERNAME> <ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE> <AMOUNT>-1250.00</AMOUNT> </ALLLEDGERENTRIES.LIST> | The debit side. Deemed positive and written negative: that is Tally's convention, not a mistake |
| <ALLLEDGERENTRIES.LIST> <LEDGERNAME>Example Bank A/c</LEDGERNAME> <ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE> <AMOUNT>1250.00</AMOUNT> </ALLLEDGERENTRIES.LIST> | The credit side, your bank ledger. The two amounts sum to zero, which Tally checks first |
| </VOUCHER> </TALLYMESSAGE> | The end of the voucher |
Money in is the mirror image: a Receipt voucher, with the bank ledger deemed positive and written negative, and the other ledger positive.
What the XML carries, and what it does not
| In the file | Why |
|---|---|
| One voucher per transaction | A Payment for money out, a Receipt for money in |
| The bank's narration | With the reference or cheque number added to it when the statement's column is recognised as one, because a Payment or Receipt voucher has no separate reference field. Not every heading is recognised yet (a combined Chq./Ref.No. column is not), so check one narration after importing |
| A REMOTEID on every voucher | The same every time the statement is converted, so Tally can recognise a voucher it has already imported |
| No voucher numbers | Tally numbers vouchers itself, from the numbering method on your Payment and Receipt voucher types |
| No currency symbol | Amounts are plain figures, read in your company's base currency |
| No running balance | A voucher has nowhere to put one; the Excel keeps it |
Date format matters more in India than most places
Indian bank statements use DD/MM/YY almost universally. A converter defaulting to US conventions will read 03/04/25 as 4 March instead of 3 April — and roughly 40% of transactions in any given month fall on a day that's ambiguous under both readings. The errors are invisible by eye and land transactions in the wrong period.
The Tally XML reads numeric dates day first, the way Indian banks print them. Still check one voucher dated before the 13th against the statement after importing: it takes seconds, and it is the check that would catch a statement printed the other way round.
Why bank entry takes so long in Tally
The time does not go on typing amounts. It goes on the matching — working out which of the 180 rows on the statement correspond to vouchers already entered, which are new, and which are the same payment recorded twice under different references.
Importing vouchers does not remove that judgement. Every voucher lands against the ledger you named, and moving each one to its proper ledger is still your call. What it removes is the typing underneath it.
Common problems and what causes them
| Problem | Usual cause |
|---|---|
| Tally says a ledger does not exist | A placeholder was left in the file, or a name does not match your ledger exactly, spacing included |
| Voucher totals do not match | The two entries of a voucher no longer cancel, usually after an amount was edited by hand |
| Every voucher appears twice | The file was imported twice with overwrite switched off |
| Dates land in the wrong month | DD/MM read as MM/DD — affects every date below the 13th |
| Fewer vouchers than statement rows | Rows with no date or no amount, such as the opening balance line, are not transactions and are left out |
Check before you import, not after
This is worth saying plainly because Tally makes it expensive to get wrong. Once vouchers are created from a bad import, unpicking them is considerably more work than the import saved. Confirm the conversion reconciles against the statement's printed balances first, every time.
Reconcile in TallyPrime after importing
Importing creates the vouchers. Reconciling marks each one with the date it went through the bank, and it is the check that your bank ledger now agrees with the statement. Reconciliation works on a bank ledger, so the one you named in the file should be created under the Bank Accounts group, not as a general ledger.
- Open the bank reconciliation Menus have moved between releases. In current TallyPrime, press Alt+G (Go To), choose Banking Activities, and open the Bank Reconciliation Summary or the Bank Reconciliation report. Press F4 to choose the bank ledger.
- Switch to manual reconciliation Press Alt+R (Manual Recon), unless manual reconciliation is already your default.
- Enter the bank date against each voucher Use the dates printed on the statement. The converted Excel keeps every date exactly as the bank printed it, which makes it the easier copy to read from.
- Accept the screen Press Ctrl+A. The vouchers you dated are marked reconciled.
- Check what is left A voucher still unreconciled is one the statement does not show, such as a payment entered by hand that has not cleared yet. A statement line with no voucher to date means a row did not import. If the ledger's opening balance agreed with the statement's, the bank side should now come to the closing balance the bank printed.
Frequently asked questions
Does this work with TallyPrime and older Tally ERP 9?
Yes. The XML is written for both; the import menu is simply in a different place in each.
How do I reconcile the imported vouchers in TallyPrime?
Open the Bank Reconciliation report for the bank ledger, press Alt+R for manual reconciliation, enter the bank date from the statement against each voucher, and press Ctrl+A to accept. The bank ledger should be created under the Bank Accounts group.
Can I import statements for several bank ledgers at once?
Import one statement per bank ledger, each with that bank ledger's name in place of the placeholder. No Account column is added, so where a single PDF covers several accounts, split it by account first.
Does it handle Indian date formats correctly?
Yes. Numeric dates are read day first, as Indian banks print them, and the Excel keeps every date exactly as printed. Check one voucher dated before the 13th after importing.
Can I still get the statement as Excel?
Yes. The PDF to Excel converter gives you the bank's own columns exactly as printed, with a Completeness sheet saying what was checked.
Which Indian banks work?
Any bank whose PDF has a table of transactions: the reader works from the page rather than a list of banks. There are guides for SBI, HDFC, ICICI, Axis, Kotak and many more on this blog.
Related posts
- How to Import a Bank Statement PDF into Xero
- How to Import a Bank Statement PDF into QuickBooks
- Bank Statement Conversion for Small Business Bookkeeping
Convert a statement now
Bank Statement PDF to Tally XML, or see every format. More in the guides.