indian-bank-statement-parser
Offline-first CLI & Python library to convert Indian bank statement PDFs (HDFC, ICICI, SBI, Axis) into standardized CSV/JSON for GST reconciliation, accounting, and lending workflows.
Quick Start
# pip
pip install indian-bank-statement-parser
# Poetry
poetry add indian-bank-statement-parser
# UV (fast)
uv add indian-bank-statement-parser
# Docker
docker pull ghcr.io/raptar231/indian-bank-statement-parser:latest
# Parse directory
parse-bank-statements --input-dir ./statements --output-dir ./parsed --bank hdfc
# Parse single file
parse-bank-statements --input-file ./stmt.pdf --output-file ./out.csv --bank icici
# GSTR-2A reconciliation
parse-bank-statements --input-dir ./stmts --output-dir ./gstr2a --bank sbi --reconcile-gstr2a --gstin 29ABCDE1234F1Z5
Why this exists
| Problem with Bank CSVs | This Tool |
|---|---|
| Different schema per bank | One unified schema |
| Inconsistent date formats | Normalized to YYYY-MM-DD |
| Mixed debit/credit amounts | Separate debit/credit columns |
| Limited history (90-180 days) | Full statement period via PDF |
| No CSV for credit cards | Parses card PDFs |
| No GSTR-2A fields | GSTR-2A ready CSV |
| Manual per-account download | parse-bank-statements --input-dir ./clients |
Use this if: You process 10+ statements/month, need GST reconciliation, multi-bank standardization, or full history.
Skip if: Occasional personal statements — bank CSV is fine.
Documentation
Full docs: raptar231.github.io/indian-bank-statement-parser
- Quickstart
- CLI Reference
- Python API
- Supported Banks
- GSTR-2A Reconciliation
- Adding a Bank
- Docker
- PyPI Release
Supported Banks
| Bank | Code | Status |
|---|---|---|
| HDFC | hdfc, hdfc_cc |
✅ Production |
| ICICI | icici, icici_cc |
✅ Production |
| SBI | sbi, sbi_cc |
✅ Production |
| Axis | axis, axis_cc |
✅ Production |
Don't see your bank or statement format?
Open an issue or drop an email with details so support can be added:
- 🐛 Report an unsupported document: Open an issue and attach an anonymized sample PDF/CSV
- 🏦 Request a new bank: Open an issue with the bank name, statement type (savings/current/credit card), and an anonymized sample
- 📧 Email: mondalsonu4@gmail.com
Please make sure to anonymize your statement (mask account numbers, names, and amounts) before sharing.
Install & Run
# Development
git clone https://github.com/raptar231/indian-bank-statement-parser
cd indian-bank-statement-parser
pip install -e ".[dev]"
# Tests
pytest tests/ -v
# Code quality
ruff check bank_parser/ tests/
mypy bank_parser/
black --check bank_parser/ tests/
License
Apache-2.0 — see LICENSE.
Support
If this tool saves you time, consider supporting development:
- ☕ Buy Me a Coffee: buymeacoffee.com/raptar231
- ❤️ GitHub Sponsors: github.com/sponsors/raptar231
- 📧 Contact: mondalsonu4@gmail.com
Built for CA firms, lenders, and fintechs processing Indian bank statements at scale.
Release files for indian-bank-statement-parser 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| indian_bank_statement_parser-0.1.0.tar.gz | 49.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| indian_bank_statement_parser-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.7 kB
Release files / indian_bank_statement_parser-0.1.0.tar.gz
| Download URL | indian_bank_statement_parser-0.1.0.tar.gz |
|---|---|
| Size | 49.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e76339afe3ae709a784cd08881732525995e2e6b6dfb105e79a0833adba9c73b
|
|
BLAKE2b-256 checksum How to use checksums |
3b6743ea21709c1aada81e5b238b5b97578a060200d1e31a66028be18567bbec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.
Transparency logRelease files / indian_bank_statement_parser-0.1.0-py3-none-any.whl
| Download URL | indian_bank_statement_parser-0.1.0-py3-none-any.whl |
|---|---|
| Size | 60.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c05fe6b7ab28e498508f396bf3dea89711e42f01b5acc79bc856476938ab45f9
|
|
BLAKE2b-256 checksum How to use checksums |
5b04f98b5b020a6bd58e91a52bac64f3f13b8e971ae539eea695e0f73785ebdd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 8, 2026.
Transparency log