All your bank statements become one Tally import file of Payment, Receipt and Contra vouchers. Party names are matched to your ledgers, own-account transfers become one Contra, and lines already in your Day Book are skipped.
Who it is for: Accountant, article assistant or owner of an Indian small business who keys 50-500 bank lines a month into Tally Prime or ERP 9 by hand.
Format: Claude skill pack · Version: 1.0.1 · Tested on: Python 3.13.5 (standard library only)
What it does
You give it each statement with its Tally bank ledger. It finds the header row in most Indian bank exports, reads Indian dates and amounts (1,50,000.00, Dr/Cr columns), drops title and summary rows and puts newest-first files in date order. Statements of the same account that overlap are merged and the shared lines kept once. Each line then gets a ledger: your rules first (keywords, regular expressions, amount ranges, and contra rules for ATM and cash), then transfers that name your own account (XX9876) become a Contra, merged with the matching line in your other statement, then the party name in UPI, NEFT, IMPS and RTGS narrations is matched to your party ledgers. Anything else goes to Suspense. Lines already in your Tally Day Book (same date, amount and voucher type) are skipped. It writes the Tally XML, reads it back and checks every voucher's debit equals its credit, and checks each statement's running balance.
What you need
- Claude.ai with code execution switched on (or Claude Code, or just Python 3.10+)
- Bank statements downloaded as CSV or Excel from net banking (not PDF)
- Your Tally ledger names (bank, parties, Cash, Suspense) already created in Tally
- Optional: a Day Book export from Tally for the same period
5-minute setup
- Claude.ai: open Settings → Capabilities → Skills, click Upload skill and pick
claude-ai-upload/bank-statement-to-tally-pro.zip. - Claude Code: copy the folder
skills/bank-statement-to-tally-prointo~/.claude/skills/. - Start a new chat. Attach your file and say: "Use bank-statement-to-tally-pro. My HDFC account is HDFC Bank (ends 4321), ICICI is ICICI Bank (ends 9876). Make Tally vouchers from these statements".
- Claude runs the script and gives you the files listed under Outputs. Check them before you act on them.
Try it with the sample
Run the sample (two fictional statements, rules, party list and Day Book):
python3 skills/bank-statement-to-tally-pro/scripts/core.py --statement "samples/statement-hdfc-oct.csv=HDFC Bank" --statement "samples/statement-icici-oct.csv=ICICI Bank" --own-account "4321=HDFC Bank" --own-account "9876=ICICI Bank" --rules samples/ledger-rules.csv --party-ledgers samples/party-ledgers.csv --daybook samples/daybook-oct.csv --voucher-prefix BK/ --out out
You should see 17 vouchers (9 Payment, 5 Receipt, 3 Contra), 1 transfer merged, 2 Day Book lines skipped, 6 party matches and 0 unbalanced vouchers. In Claude, attach the files and use the prompt above.
Settings you can change
| Option | Default | What it is |
|---|---|---|
--statement |
(required, repeat) |
PATH=Tally bank ledger, one per statement. Overlapping downloads of the same account are de-duplicated |
--own-account |
(none, repeat) |
LAST4=Tally ledger for each of your own bank accounts, so transfers between them become one Contra voucher |
--rules |
(none) |
CSV keyword,ledger,direction,min,max. direction out |
--party-ledgers |
(none) |
Your party ledger names from Tally (one per line). Names in UPI/NEFT/IMPS/RTGS narrations are matched to them |
--daybook |
(none) |
Tally Day Book export as CSV. Bank lines already entered (same date, amount and voucher type) are skipped |
--voucher-prefix |
(blank) |
Voucher numbers like BK/0001; blank lets Tally number them |
--suspense-ledger |
Suspense |
Ledger for lines nothing matched |
--company |
(blank) |
Tally company name |
--date-order |
dmy |
dmy or mdy |
--out |
out |
Output folder |
What goes in and what comes out
Inputs: One or more bank statement exports (CSV, TSV, semicolon or XLSX); Each statement's Tally bank ledger name; Optional rules CSV with regex and amount ranges; Optional list of party ledger names; Optional Tally Day Book CSV export; Optional last 4 digits of your own accounts
Outputs: tally-vouchers.xml (Payment, Receipt and Contra vouchers); vouchers.csv with the reason for each ledger; report.md with checks, party matches, Suspense and skipped lines
AI disclosure and limits
This product does not call an AI model at run time. It was built by Oarsman AI's AI agents and checked by the automated tests shipped with it.
Limits: - Reads CSV, TSV and XLSX exports, not PDF or scanned statements; download CSV or Excel from net banking. - Does not split GST or TDS out of a payment; book those adjustments in Tally. - Running-balance check is per statement; merged overlapping statements are only de-duplicated. - Party matching needs the party name in the narration; cheque and cash lines need a rule. - Every ledger named must already exist in Tally; it does not create ledgers. - Bookkeeping help, not accounting or tax advice.
Not tested by us: - a live import into TallyPrime (the XML was parsed back and checked, not imported) - statement layouts of banks other than the HDFC, ICICI and SBI style samples - XLSX statements in the shipped tests (CSV only)
Files
- oarsman-bank-statement-to-tally-pro-v1.0.1.zip
- CHANGELOG.md
- QA-REPORT.json
- README.md
- SPEC.md
- SUPPORT.md
- TROUBLESHOOTING.md
- VERSION
- VIDEO-SCRIPT.md
- claude-ai-upload
- diagram.mmd
- diagram.png
- preview.png
- samples
- skills
- tests
Help
Self-serve: see TROUBLESHOOTING.md (fixes and FAQ). There is no call, chat or email support. Fixes ship as new versions at your download link. Refund: 14 days, works as described, through the checkout platform.