A factory in Pune uses XML import. Their CA set it up two years ago. The XML maps to their voucher types, their ledger structure, their GST classification. They will not switch to CSV because a new tool ships CSV by default. The question is not "which is better." The question is "which does your Tally already accept."
The Tally import screen does not care about your opinion on CSV vs XML. It cares about the file format it was taught. Follow Tally import help for your release. Menu labels change. File format expectations change. Do not take a hotkey from a blog and expect it to work in 2027.
app/entryledger/export/ contains csv_formats.py, xlsx_format.py, and tally_xml.py. Each writes a file that fits the corresponding Tally import path. The right one is the one your company already uses. Do not migrate your import format to match a capture tool.
CSV: the simplest path
One row per voucher. One CSV per day or per vendor. Columns in the order Tally expects: date, voucher type, party, item, HSN, rate, taxable, tax, total. Ledger names must match. That is the usual failure: "Acme Steels" vs "Acme Steels Pvt Ltd." See Tally import.
CSV is the path of least resistance. Most AP teams can read it. The CA can check it. The downside is that CSV does not carry voucher-type metadata as richly as XML. If your Tally setup uses complex voucher types ( GST registers, multi-rate), CSV may need extra columns that are not obvious.
XML: the power path
XML carries Tally-specific structure: voucher types, ledger references, tax classifications. If your company already imports XML, this is the natural path. The same GSTIN, same amounts, same ledgers. The XML just carries more baggage.
The downside: XML is harder to read in Excel. The CA cannot check it without opening the file in a text editor. If your workflow involves the CA reviewing the file before import, CSV is easier. If the CA never touches the file and Tally does the work, XML is fine.
XLSX: the middle ground
Excel format. Readable in Excel. Carries the same columns as CSV. The advantage: formatting, headers, freeze panes. The disadvantage: Tally imports from CSV more reliably than from XLSX in some releases. Check Tally Help. We ship both.
Masters first
Regardless of format, the import sequence is: masters (ledgers, groups) first, then vouchers. If the vendor ledger does not exist, every voucher row for that vendor fails with "ledger not found." Import masters once per supplier. Import vouchers each batch. See Tally import.
Seeding mappings in your workspace is how you stop nightly surprises. We do not create ledgers in your Tally company. That is a Tally job. We write the file. Tally reads it.
Simple. One row per voucher.
Excel readable. Headers.
Tally-specific. Rich metadata.
Use the one your company already imports. Do not migrate your format.
What we will not do
We will not tell you to switch from XML to CSV because CSV is "simpler." We will not tell you to switch from CSV to XML because XML is "richer." The decision is yours. We ship all three. Use the one you already have.
We will not promise that XML import is error-free. Tally's XML parser is strict. A missing tag, a wrong namespace, a character encoding issue. These are Tally's rules, not ours. Follow Tally Help for the current release.
- Tally HelpImport vouchers
Menus, formats, and sequence. Your release, not ours.
- EntryLedger
app/entryledger/export/csv_formats.py, xlsx_format.py, tally_xml.py. All three shipped.
Which format?+
The one your company already imports. We ship all three.
Do you create ledgers?+
No. We write a file. Ledgers must exist. Masters first.
XML or CSV?+
XML if your company uses XML. CSV if CSV. Tally Help for the current release.