One-click import from Tally → Run 24 specialized audit modules → Export audit-ready Excel working papers. 100% local. Zero telemetry. No cloud.
⬇️ Download Now · Try It in Your Browser · Quick Start (5 min) · All 24 Modules · Developer Setup
Standalone build — unzip and run. No Node.js install required.
| Platform | Download |
|---|---|
| Windows 10 / 11 (x64) | ⬇️ FinAnalyzer-windows-x64.zip |
| macOS (Apple Silicon M1–M4) | ⬇️ FinAnalyzer-macos-arm64.zip |
| macOS (Intel) | ⬇️ FinAnalyzer-macos-x64.zip |
| All releases & source | github.com/dhruvdua88/FinAnalyzer-CSV-Version/releases |
Windows: Unzip → double-click FinAnalyzer.exe
macOS: Unzip → right-click Run FinAnalyzer.command → Open (first time only, to bypass Gatekeeper)
Keep the
app/folder next to the executable — it contains the interface and is required at runtime.
No install, no Node.js — a static web build runs the same React modules entirely client-side:
→ https://dhruvdua88.github.io/FinAnalyzer-CSV-Version/
Import a Tally Export ZIP (the tally-database-loader CSV/XLSX export) or a .TSF file, then run any module that works from imported data — Purchase Register, Balance Sheet, GSTR-2B Reconciliation, and more. Your data never leaves the browser tab; nothing is uploaded.
The browser build has no live-Tally connection and no SQL low-memory mode — those need the desktop backend. For day-to-day audit work on large companies, use the desktop download above.
FinAnalyzer is a desktop audit utility that connects directly to Tally Prime and turns your books into structured, reviewable, exportable audit working papers — in minutes, not days.
If you've ever:
- Spent an evening pivoting the Day Book in Excel to check TDS coverage
- Manually matched GSTR-2B against your Purchase Register row by row
- Tried to figure out which Sundry Creditor is missing RCM
- Built an ageing schedule by hand because Tally's built-in one is wrong
…this tool was built specifically for you.
Tally is the most-used accounting software in India. But it has no audit layer. FinAnalyzer adds one — a set of 24 focused analysis modules that work with any Tally company, no customizations, no add-ons, no Tally consultant required.
| Category | Module | What it does |
|---|---|---|
| Setup | Dashboard Overview | Summary cards: total vouchers, date range, data mode |
| Setup | Audit Configuration Manager | Map ledgers to GST/TDS/RCM categories; save profiles per period |
| Core Audit | Accounting Ledger Analytics | Ledger-wise balances, turnover, and variance across groups |
| Core Audit | Voucher Book View | Full day book with Dr/Cr detail; search by narration, party, amount |
| Core Audit | Ledger Statement | Opening balance → all movements → closing for any ledger |
| Core Audit | Party Ledger Matrix ⭐ | Party-wise Sales / Purchase / Expense / TDS / GST / RCM breakdown |
| Core Audit | Related Party (RPT) Analysis | AS-18 classification, approval status, transaction materiality |
| Core Audit | Trial Balance Analysis | Group-wise and ledger-wise TB with opening / movement / closing |
| Ageing | Debtor Ageing (FIFO) | True FIFO bucket ageing for receivables (0–30 / 30–60 / 60–90 / 90+) |
| Ageing | Creditor Ageing (FIFO) | True FIFO bucket ageing for payables |
| GST & Tax | GST Rate Analysis | Validate GST rates on sales ledgers against expected category |
| GST & Tax | Sales Register | Invoice-level sales detail with HSN, GST rate, party GSTIN |
| GST & Tax | Purchase GST Register | 6-sheet ITC register — ITC schedule, GSTR-3B summary, GL control, orphan-GST and ledger-audit checks (B2B / RCM-UR / import of services) |
| GST & Tax | GSTR-2B Reconciliation ⭐ | Upload portal JSON → matched / unmatched / rate-mismatch buckets |
| GST & Tax | ITC vs 3B Reconciliation | Books ITC vs GSTR-3B filed — row by row comparison |
| GST & Tax | GST Ledger Summary | Ledger-wise GST constitution (CGST / SGST / IGST / Cess) |
| GST & Tax | GST Expense Analysis | Blocked credit items, ineligible ITC, Section 17(5) violations |
| GST & Tax | TDS Analysis ⭐ | Section-wise (194C / 194J / 194Q / 194H / 194A …) compliance + thresholds |
| GST & Tax | RCM Analysis | Reverse charge liability — voucher-level RCM entries vs. expected |
| Analytics | Profit & Loss Analysis | P&L trends period-over-period with % movement |
| Analytics | Cash Flow Analysis | Cash pool movement with accounting-format CF statement |
| Analytics | Variance Analysis | Month-on-month % variance with spike detection |
| Analytics | Exception Density Heatmap | Visual concentration of exceptions by ledger and period |
| Analytics | Balance Sheet Cleanliness | Hygiene diagnostics — stale entries, long-outstanding items, mis-groups |
⭐ = Flagship modules. Start here.
Every module outputs an audit-ready Excel workbook: frozen header row, colour-coded amounts, totals row, observations block — ready to paste into a file note.
Use one of the download links above, or click the green Code button → Download ZIP if you want the source.
- Go to nodejs.org and install the LTS version (keep all defaults).
- Reboot.
| OS | Action |
|---|---|
| Windows | Double-click Start FinAnalyzer (Windows).bat |
| macOS | Double-click Start FinAnalyzer (Mac).command |
The first run installs dependencies (~3–5 min). After that, the app opens at http://127.0.0.1:5173 in your browser automatically.
Leave the terminal window open while you work. Closing it stops the app.
In Tally Prime:
F1 → Settings → Connectivity → Client/Server configuration- Set TallyPrime is acting as: Both · Enable ODBC: Yes · Port: 9000
Quick test: open http://localhost:9000 in a browser. If you see XML, FinAnalyzer will connect.
Then install the Tally loader utility (one-time, ~15 MB):
- Download:
tally-database-loader-utility-1.0.42.7z - Extract with 7-Zip (Windows) or The Unarchiver (macOS)
- Rename the folder to exactly
tally-database-loader-main - Place it inside the
app/folder
Final layout:
app/
├── tally-database-loader-main/ ← renamed folder here
│ ├── dist/index.mjs
│ └── config.json
├── package.json
└── …
- Restart FinAnalyzer. The "Loader not found" warning disappears.
| Method | When to use |
|---|---|
| Import from Tally | Tally is open on the same machine (or LAN) — fastest |
| Import Tally Export (ZIP) | You have the tally-database-loader CSV/XLSX export ZIP — required by Purchase Register, Balance Sheet, and other relational modules |
| Import TSF file | A colleague already exported a .TSF — just upload it |
| TSF Raw to Excel | You only want flat CSV sheets, no analysis |
Click a module in the left sidebar → set date range / ledger filters → review the table → click Export Beautiful Excel (top-right).
| OS | Action |
|---|---|
| Windows | Double-click Stop FinAnalyzer (Windows).bat |
| macOS | Press Ctrl+C in the terminal, then close it |
| Minimum | Recommended | |
|---|---|---|
| OS | Windows 10 or macOS 12 | Windows 11 or macOS 14 |
| RAM | 8 GB | 16 GB (for 100k+ vouchers/year) |
| Disk | 2 GB free | 4 GB free |
| Tally | Any recent Tally Prime | Tally Prime 3.x |
| Node.js | LTS (source mode only) | LTS (source mode only) |
The most powerful module. For every party in Sundry Debtors / Sundry Creditors / any group you choose, it builds a single-row summary:
| Column | What it shows |
|---|---|
| Total Sales | Revenue booked through this party |
| Total Purchase | Purchases from this party |
| Total Expense | Expense vouchers posted to this party |
| TDS Deducted | TDS entries linked to this party |
| TDS / Expense % | Instant flag if under-deduction |
| GST Amount | GST collected or paid |
| GST / Sales % | Rate check |
| RCM | Reverse charge entries |
| Bank / Cash | Payment and receipt legs |
| Net Balance | Outstanding after all movements |
TDS and GST ledgers aren't tagged in Tally by default. The module lets you tick which ledgers count as TDS / GST / RCM, with auto-suggest. That mapping is saved as a Profile JSON — reusable across periods and entities.
- Download your GSTR-2B JSON from the GST portal
- Upload it in FinAnalyzer
- The module matches every record against your Purchase Register
Output buckets:
- ✅ Matched (GSTIN + invoice number + date + amount)
- 📗 Only in Books (ITC claimed but not in 2B — risky)
- 📘 Only in 2B (supplier filed, you haven't booked)
⚠️ Rate Mismatch (amount or tax rate differs)- 🕐 Date Tolerance Matches (same invoice, date shifted ±3 days)
Exports a 9-sheet Excel: Summary, Action Required, Full Detail, GSTIN-wise, Month-wise, and more.
Section-wise coverage across:
194C (Contractors) · 194J (Professionals) · 194H (Commission) · 194I (Rent) · 194A (Interest) · 194Q (Purchase) · 194M (Society) · 194O (E-commerce) · 26Q / 27Q
For each expense ledger mapped to a TDS section:
- Per-voucher status: Deducted / Short-deducted / Missed / Below threshold
- Threshold comparison (configurable in Audit Setup)
- Effective TDS % per party
- Excel export with a full action list
Tally's built-in ageing is wrong — it ages by invoice date, not by actual knockoff. FinAnalyzer uses FIFO matching (receipts against oldest invoices first) to produce accurate:
- 0–30 days · 31–60 days · 61–90 days · 91–180 days · 181–365 days · 365+ days
| Question | Answer |
|---|---|
| Is data uploaded anywhere? | Never. No server, no API, no analytics. |
| Where is data stored? | In-memory during the session, or local audit.sqlite (never leaves your machine) |
| Does it phone home? | No license server, no crash reporting, no telemetry of any kind. |
| Is client data safe to use? | Yes. The .gitignore also blocks TSF files, GSTR JSON, and PDFs from being committed. |
| Symptom | Fix |
|---|---|
npm not recognised |
Node.js not installed. Re-run installer from nodejs.org and reboot. |
Browser shows "site can't be reached" at 127.0.0.1:5173 |
Terminal was closed. Re-run the Start launcher. |
| Import from Tally returns 0 records | Check Tally port 9000, confirm a company is loaded, run the connectivity checklist above. |
| "Loader utility not found" after placing it | Confirm dist/index.mjs and config.json exist inside the renamed folder. |
| Export button does nothing (large company) | 500k+ vouchers can take 30–60 s. Watch the terminal for progress. |
| First run stuck on "installing" | npm install needs internet (~200 MB). Corporate proxies can block this — try on a personal connection. |
| Slow with 1M+ vouchers | Switch to SQL (low-memory) mode via the toggle on the top-right of each module. |
If the fix isn't here, open an Issue with: (a) module name, (b) what you clicked, (c) screenshot of browser + terminal.
# 1. Clone
git clone https://github.com/dhruvdua88/FinAnalyzer-CSV-Version.git
cd FinAnalyzer-CSV-Version/app
# 2. Install
npm install
# 3. Develop
npm run dev # Vite dev server at http://127.0.0.1:5173
# 4. Build
npm run build # Production build → /dist
# 5. Test
npm run test:gstr2b # GSTR-2B unit tests
node scripts/smoke-test-all-modules.mjs # Smoke test all 24 modulesapp/
├── App.tsx # Module routing, settings state, data orchestration
├── types.ts # LedgerEntry (36+ fields), AuditSettings, all interfaces
├── index.tsx # React 19 root + TanStack Query setup
├── vite.config.ts # Dev server + API middleware + SQLite integration
│
├── components/
│ ├── FileUpload.tsx # Tally import, TSF import/export, raw converter
│ └── modules/ # 24 self-contained .tsx files (one per module)
│
├── services/
│ ├── sqlDataService.ts # SQLite abstraction (100k+ row optimizations)
│ ├── sqlAnalyticsService.ts # SQL query builders per module
│ └── tallyLoaderImportService.ts # One-click loader orchestration
│
├── workers/
│ ├── tdsWorker.ts # Web Worker: TDS calculations
│ ├── partyMatrixWorker.ts # Web Worker: party matrix pivoting
│ ├── relatedPartyWorker.ts # Web Worker: RPT analysis
│ └── orphanPLWorker.ts # Web Worker: orphan P&L detection
│
└── desktop-backend/
├── backend.cjs # Express.js for SEA/desktop mode
└── services/ # SQLite, GSTR-2B reconciliation (CJS)
Data flow:
Tally / TSF → FileUpload.tsx → normalize to LedgerEntry[] → SQLite or memory
↓
Module (filter + analyze)
↓
xlsx-js-style → Excel
Adding a new module:
- Create
components/modules/YourModule.tsx— acceptsdata: LedgerEntry[] - Register in
App.tsx(add toAnalysisTypeenum,MODULE_LABELS,MODULE_ICONS,MODULE_SECTIONS) - Export styled Excel: freeze panes at header, totals in slate-900, observations block at bottom
- Open a PR with a screenshot + sample exported Excel
Pull requests are welcome — especially from other CAs who've hit a real audit gap.
- Fork the repo
cd app && npm install && npm run dev- Add your module under
components/modules/ - Run
npm run test:gstr2b+ smoke tests - Open a PR with a screenshot of the module UI and the exported Excel
See app/INSTRUCTIONS.md for the full API contract, data conventions, and module extension checklist.
FinAnalyzer is an aid to the audit process, not a substitute for professional judgement. Always verify flagged exceptions against source documents before concluding. The authors accept no liability for reliance on the tool's output.
MIT — see app/LICENSE. Free to use in your practice, modify, and share — provided the copyright notice is retained.
Built by a CA, for CAs.
If it saves you an evening, pay it forward — file an issue with a feature idea or open a PR.
