Skip to content

PDF bank statement to Tally

TallyPrime can’t import a PDF statement. Convert it here to Tally XML vouchers, or to Excel / MT940 for Alt+O › Bank Statement import. Each transaction keeps the date, narration and amount the bank printed, and a scanned statement works the same way.

Upload a file

Read your statement

pages ready to read.

Drag your statement herePDF or image — as many at once as you likeChoose files

What the Tally XML contains

  • One voucher line per transaction
  • Date, narration, and amount kept as printed on the statement
  • Debit and credit on the side the bank shows them
  • A file you import through Tally, not a spreadsheet to retype

What the Tally XML file looks like

Each transaction becomes a Receipt voucher with two ledger entries: the Bank ledger and an Uncategorised contra ledger you rename or map in TallyPrime. ISDEEMEDPOSITIVE is Tally's debit/credit flag, and the date is written as YYYYMMDD, the way Tally's XML import reads it.

<ENVELOPE>
<BODY>
<DATA>
<TALLYMESSAGE>
<VOUCHER VCHTYPE="Receipt" ACTION="Create">
<DATE>20260302</DATE>
<NARRATION>Direct Debit 4471 Acme Insurance</NARRATION>
<VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Bank</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-120.00</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Uncategorised</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>120.00</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
<VOUCHER VCHTYPE="Receipt" ACTION="Create">
<DATE>20260304</DATE>
<NARRATION>Card Payment Corner Grocer</NARRATION>
<VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Bank</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-38.40</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Uncategorised</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>38.40</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
<VOUCHER VCHTYPE="Receipt" ACTION="Create">
<DATE>20260306</DATE>
<NARRATION>Transfer Received J Smith</NARRATION>
<VOUCHERTYPENAME>Receipt</VOUCHERTYPENAME>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Bank</LEDGERNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT>500.00</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>Uncategorised</LEDGERNAME>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT>-500.00</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</TALLYMESSAGE>
</DATA>
</BODY>
</ENVELOPE>
Three transactions from a sample statement, exactly as the downloaded .xml file writes them.

How to convert

  1. Upload your statement

    Drop in the PDF you downloaded from your bank, or a scan of a paper statement.

  2. Choose Tally XML

    Leave the output format on Tally XML — it is preselected on this page.

  3. Import into Tally

    Bring the XML in through TallyPrime and post the vouchers.

Statements it handles

Layouts differ from bank to bank, so nothing is matched against a fixed template. An unusual statement still produces a table you can check before exporting — which is what makes it usable for bookkeepers and accountants who receive statements from every client.

PDF statements and CSV exports

A statement downloaded from your bank, or the CSV your bank lets you export. Both arrive as the same clean table.

Multi-page statements, read as one table

A statement that runs over several pages — or several statements uploaded together — is read as one continuous table, not one file per page.

Amounts and dates kept as your bank prints them

Debit and credit signs, decimal places and date formats are left as printed, so the numbers still reconcile against the statement.

Scanned, image-only PDFs, read with OCR

A statement with no text layer is read with OCR and may need a quick review — the one case where a row can come out wrong.

  • PDF
  • CSV
  • Scan
DateDescriptionAmount
02/03Direct Debit 4471120.00
04/03Card Payment-38.40
06/03Transfer Received500.00
08/03Standing Order-250.00
11/03Salary Payment2,400.00

Rows are read by what they are — a date, a description, an amount — not by where they sit on the page, so a wrapped description stays with its transaction and a closing balance never becomes one. Why OCR mangles bank statements

Frequently asked questions

How do I convert a bank statement to Tally?

Upload the PDF from your bank (or a scan) above, keep Tally XML as the output format, and download the XML file. No account and nothing to install.

Can I import a PDF bank statement into TallyPrime?

Not directly. TallyPrime reads a bank statement from Excel, CSV or MT940 in its Bank Statement import, and vouchers from XML — never from a PDF. Upload the PDF here and download Tally XML, Excel or MT940 instead.

Does it work with TallyPrime?

Yes. TallyPrime imports XML vouchers, which is what the Tally XML option gives you. For the Bank Statement import on the reconciliation screen, choose Excel or MT940 as the output instead.

Which output should I pick — Tally XML, Excel or MT940?

Tally XML when you want vouchers created for you (Import › Transactions). Excel or MT940 when the vouchers are already in your books and you only want to reconcile the bank ledger against the statement (Alt+O › Bank Statement on the reconciliation screen).

What is the difference between Tally XML and Tally TDL?

XML is the file you import transactions from. TDL is the language used to customise Tally itself, not an import format, so nothing TDL-specific is produced.

Will debits and credits be on the right side?

Amounts are read as the statement prints them and kept on the same side, rather than re-signed from a single column.

Is my statement kept after conversion?

No. The file is deleted when the conversion finishes; only the converted copy stays at your private link.

Do I need an account?

No. The converter works without signing up.