TallyPrime and Tally ERP 9
Import bank statements into Tally Prime
TallyPrime’s own bank statement import takes CSV, Excel or MT940 files downloaded from a supported bank, and refuses PDFs and anything converted from them. For a PDF statement the route in is voucher XML. Here is how it works.
- Receipt and Payment vouchers as Tally XML
- Every voucher balanced before export
- Unassigned rows post to Suspense A/c
- Scanned and digital statements
<VOUCHER VCHTYPE="Receipt"> <DATE>20260302</DATE> <NARRATION>STRIPE PAYOUT</NARRATION> <ALLLEDGERENTRIES.LIST> <LEDGERNAME>Suspense A/c</LEDGERNAME> <AMOUNT>4210.00</AMOUNT> </ALLLEDGERENTRIES.LIST></VOUCHER><VOUCHER VCHTYPE="Payment"> <DATE>20260305</DATE> <NARRATION>CHECK #1042</NARRATION></VOUCHER>
The short answer
Can you import a PDF bank statement into Tally?
Not through Tally’s Bank Statement import. TallyHelp states that it accepts CSV or Excel statements downloaded from the bank portal (and MT940 for some banks), for its list of supported banks, and that PDF files and CSV or Excel files converted from PDF cannot be imported. So a PDF statement, or an old statement your bank no longer offers as a download, cannot go in that way.
What Tally does import from any source is XML through Import → Transactions: vouchers written in Tally’s own envelope, each with both ledger entries, in dates Tally reads (YYYYMMDD). The ledgers those vouchers name must already exist in the company, and each voucher’s debits and credits must agree.
VouchRow converts the PDF statement, digital or scanned, into that XML. Each transaction becomes a Receipt (money in) or Payment (money out) voucher against the bank ledger name you enter, with the other side on Suspense A/c for you to reassign. Every row is checked against the statement’s running balance before the file is written.
Which format to use
The file Tally wants
Tally XML for Tally
A ledger name that does not match exactly rejects the import
Step by step
How to import a PDF bank statement into TallyPrime
The same steps work for Tally ERP 9, where Import sits under Gateway of Tally → Import of Data → Vouchers.
- 1Check the ledgers in the companyIn TallyPrime, open Chart of Accounts and note the bank ledger’s name exactly as written, including suffixes like “A/c” and spacing. Make sure a Suspense A/c ledger exists; if not, create one under the Suspense A/c group. Tally’s help is clear that ledgers named in an import must already exist.
- 2Convert the statement and check itSign in and upload the PDF. Password-protected PDFs, common with Indian bank e-statements, ask for their password, which unlocks them in your browser. Each row is checked against the running balance and the closing balance; fix any flagged row against the highlighted line on the PDF.
- 3Export Tally XML with your bank ledger nameChoose Tally XML and type the bank ledger name verbatim. Deposits become Receipt vouchers and withdrawals Payment vouchers. Both voucher types exist in every Tally company by default, so none has to be created.
- 4Import: Alt+O → TransactionsIn TallyPrime, open the company, press Alt+O (Import), choose Transactions, give the path to the XML file under File to import, and confirm. Under Alt+O → Configuration you can turn on a detailed import log before you start.
- 5Read the import result and Tally.impTally reports how many vouchers were created and how many had errors. The detail is written to Tally.imp in the TallyPrime folder. Check it before doing anything else, and compare counts with the statement’s transaction count.
- 6Reassign Suspense and reconcileOpen the Suspense A/c ledger, alter each voucher to the correct party or expense ledger, then reconcile the bank ledger against the statement in Banking → Bank Reconciliation.
Why it works
Why XML vouchers rather than retyping
Balanced vouchers only
Every voucher has a bank entry and an equal and opposite contra entry. Tally rejects unbalanced vouchers with “Voucher totals do not match”; these never reach that point.
Your ledger, by name
The bank ledger is the name you type, not a guess. Get it exactly right once and every voucher posts to the account you reconcile.
Nothing silently misposted
Rows aren’t guessed into expense heads. They sit in Suspense A/c, one balance you can see and clear, instead of scattered across the wrong ledgers.
Statements Tally won’t read
Old statements, scanned copies and banks outside Tally’s supported list all convert the same way.
Excel as well, from the same rows
Export Excel alongside the XML to review narrations and plan ledger assignments before or after import.
Checked before export
A misread digit is caught on its own row
Every conversion is tested against the statement: the running balance on every row, page subtotals, opening plus movement against closing, the printed credit and debit totals, and the transaction count. When a number does not add up, VouchRow names the row and highlights the line it came from on the PDF.
Arithmetic only: it verifies amounts, balances and totals, not descriptions or dates, and two errors that cancel out would pass. The source-line link covers the rest.
How the checks workRunning balance check
- POS AMAZON MKTPLACE−86.4316,604.12
- CHECK #1042−1,250.0015,354.12
- ZELLE FROM J MORALES+640.0015,994.12
Every row agrees with the balance printed beside it.
Two import routes
Tally’s Bank Statement import vs XML voucher import
Tally has two separate ways in, and most confusion comes from mixing them up. The Bank Statement import (Alt+O → Bank Statement, or from Bank Reconciliation) brings a statement in for reconciliation and can then auto-create vouchers. The Transactions import (Alt+O → Transactions) brings in vouchers directly from XML.
| Bank Statement import | Import Transactions (XML) | |
|---|---|---|
| Files | CSV, Excel or MT940 from the bank portal | XML in Tally’s envelope |
| PDF or converted files | Not accepted | XML from any source |
| Banks | Tally’s supported bank list | Any bank |
| Prerequisite | Bank Name selected in the bank ledger | Every ledger named must exist |
| Result | Statement lines for BRS; vouchers created afterwards | Vouchers created directly |
XML format
What a Tally voucher XML has to contain
Tally’s own Sample XML documentation sets the rules, and they explain most rejected imports. The safest way to see the expected shape is Tally’s own advice: create a voucher by hand and export it as XML.
- An ENVELOPE with an Import Data request and a VOUCHER per transaction, each with a voucher type (Receipt, Payment, Contra and so on).
- Dates as YYYYMMDD with no separators. Indian statements print DD-MM-YYYY or DD/MM/YY; the conversion rewrites them.
- Ledger entries in ALLLEDGERENTRIES.LIST, each with LEDGERNAME, AMOUNT and ISDEEMEDPOSITIVE, which decides debit or credit. Debits and credits in each voucher must total the same.
- Ledger names that already exist in the company, under the right kind of group. Tally’s documentation asks that dependent masters be created before the transactions are imported.
- Characters like & and < escaped. A raw ampersand in a narration (“M&M”, “AT&T”) breaks the whole file.
Errors
Tally import errors and what to check
Tally’s messages name the voucher, not the reason. These are the checks that resolve most failures.
- “Voucher totals do not match”: the debit and credit sides of a voucher differ. Tally’s import FAQ gives this as the Excel-import error; vouchers written here are balanced before export.
- Vouchers counted as errors: usually a ledger name that doesn’t exist exactly as written. Compare the bank ledger in Chart of Accounts with what you typed at export, and check Suspense A/c exists.
- “Not a valid format” or the bank statement option unavailable: that is the Bank Statement import refusing the file. Converted files are not accepted there; use Import → Transactions with XML.
- Import stops at the first problem: set Ignore errors during import in Alt+O → Configuration, then read Tally.imp for each failed voucher.
- Dates outside the company’s books: vouchers dated before the books beginning date can’t be created. Check the company’s financial year.
Re-imports
Importing the same statement twice creates duplicates
Tally decides whether an incoming voucher replaces an existing one by its GUID, under the Configuration option “Overwrite voucher when a voucher with same GUID exists”. A voucher created from a converted bank statement is new each time it is imported, so importing the same XML twice creates every voucher twice.
Import each file once, keep a list of the periods imported per bank ledger, and if you need to redo a month, delete its vouchers first. Back up the company before a large import.
India
Tally in India: statements, passwords and CA firms
Tally is the default ledger for a large share of Indian businesses and CA firms, and the usual job is a client’s year of statements from HDFC, SBI, ICICI, Axis or Kotak that has to become vouchers. Many of those banks email password-protected PDFs. Upload them as they arrived and enter each password when asked; it unlocks the file in your browser and is never sent to us or stored.
Indian statements usually print separate withdrawal and deposit columns with a running balance on every line, which is exactly what the row-by-row check uses. Amounts in INR, including lakh-style grouping in the PDF, are written as plain numbers in the XML.
Tally XML export is part of the Professional and Business plans, along with IIF. See pricing for what each plan includes.
Side by side
Ways to get a bank statement into Tally
| Manual entry | Tally Bank Statement import | Converted Tally XML | |
|---|---|---|---|
| Works from a PDF statement | Yes, by typing | No | Yes |
| Works for scanned statements | Yes, by typing | No | Yes, via OCR |
| Banks covered | Any | Tally’s supported list | Any |
| Creates vouchers | One at a time | After import, via auto-create | On import |
| Checked against running balance | No | At reconciliation | Yes, before export |
| Contra ledger | Chosen per entry | Chosen per row or common ledger | Suspense A/c, reassigned after |
Who uses it
Who imports statements into Tally this way
CA firms and accountants
Year-end and audit work for clients who send PDF statements. Convert, import into the client’s company, clear Suspense A/c and reconcile.
Old and closed accounts
Banks only offer recent periods as downloads. Earlier years are PDFs, which Tally’s statement import won’t take.
Banks outside Tally’s list
Co-operative banks, smaller private banks and foreign accounts that Tally’s Bank Statement import doesn’t support.
FAQ
Tally imports: questions
Can we import a bank statement in Tally Prime?
Yes, two ways. The Bank Statement import takes CSV, Excel or MT940 downloaded from a supported bank. For PDFs, or files converted from PDFs, which that import refuses, import vouchers as XML through Alt+O → Transactions.
Can I import a bank statement PDF converted to Excel into Tally?
Not through the Bank Statement import. TallyHelp says CSV or Excel converted from PDF can’t be imported there. Convert the PDF to Tally XML and use Import → Transactions instead.
Can Tally import a CSV bank statement?
Only through the Bank Statement import, and only one downloaded from a supported bank’s portal. A CSV made any other way needs to become XML vouchers.
Everything imported into Suspense A/c. Why?
That is deliberate. Guessing a ledger per transaction would post rows to the wrong account silently, which is far harder to find later than one Suspense balance you reassign in a single pass.
Do the ledgers have to exist before import?
Yes. Tally’s help asks for every ledger named in the XML to exist first. Create the bank ledger (if needed) and Suspense A/c, and type the bank ledger’s name exactly when exporting.
What does “voucher rejected” or an error count mean?
Usually that the two sides of a voucher don’t balance, or that a ledger name couldn’t be found. Vouchers written here are balanced, so check the ledger names first, then Tally.imp for detail.
Does it work with Tally ERP 9?
Yes. The XML is in the voucher format both TallyPrime and Tally ERP 9 import. In ERP 9 the menu is Gateway of Tally → Import of Data → Vouchers.
What if I import the same XML twice?
You get every voucher twice. Import each statement once, and delete a period’s vouchers before re-importing it.
Are password-protected bank PDFs supported?
Yes. Upload the PDF as the bank sent it and enter the password when asked. It unlocks the file in your browser and is never sent to us or stored. In a batch, locked files are set aside to convert one at a time.
Keep going
Related guides and converters
Files for Tally
Every format we write for Tally
Turn PDF statements into Tally vouchers
Upload a statement, check it against its balances, and export Tally XML posted to your bank ledger by name.