VouchRow

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
statement.pdf statement.xml
<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>
Balanced · every row checked before this Tally XML file was written

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

Start here

Tally XML for Tally

Tally’s own import path. Each transaction becomes a Receipt or Payment voucher with both ledger entries written out, so the books balance on arrival.
What bites people

A ledger name that does not match exactly rejects the import

Tally matches ledgers by name, and the ledgers a voucher names must already exist in the company. A bank ledger spelled even slightly differently from the one in your books — "HBL Current" against "HBL Current A/c" — means every voucher in the file is refused, and the reason only shows in the import log. The same goes for Suspense A/c, where unassigned rows post. Check the exact names in Chart of Accounts before importing, create Suspense A/c if it is missing, and enter the bank ledger name verbatim.

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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 work

Running balance check

RowAmountBalance
  • 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 importImport Transactions (XML)
FilesCSV, Excel or MT940 from the bank portalXML in Tally’s envelope
PDF or converted filesNot acceptedXML from any source
BanksTally’s supported bank listAny bank
PrerequisiteBank Name selected in the bank ledgerEvery ledger named must exist
ResultStatement lines for BRS; vouchers created afterwardsVouchers created directly
The two routes, per TallyHelp

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 entryTally Bank Statement importConverted Tally XML
Works from a PDF statementYes, by typingNoYes
Works for scanned statementsYes, by typingNoYes, via OCR
Banks coveredAnyTally’s supported listAny
Creates vouchersOne at a timeAfter import, via auto-createOn import
Checked against running balanceNoAt reconciliationYes, before export
Contra ledgerChosen per entryChosen per row or common ledgerSuspense A/c, reassigned after

Who uses it

Who imports statements into Tally this way

01

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.

02

Old and closed accounts

Banks only offer recent periods as downloads. Earlier years are PDFs, which Tally’s statement import won’t take.

03

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.

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.