Most people glance at the XIRR shown on Kite, Groww, or their broker app and take it at face value. That number is often wrong — or at least incomplete.
Why broker XIRR is unreliable
Broker apps compute XIRR on their internal records, which frequently miss fund transfers, show stale valuations, or error out for multi-year portfolios. Kite in particular has a long
history of showing wrong XIRR for portfolios older than 2–3 years. Search this forum and you’ll find dozens of threads about it.
What XIRR actually needs
Two things:
- Every cash flow (money deposited/withdrawn) with exact dates
- Your current portfolio value as of today
Your broker’s ledger already has the first part. Zerodha’s ledger CSV (Console → Funds → Statement → All segments, full date range) has every fund transfer with exact dates.
Doing it manually in Excel
List each deposit as a negative number with its date, add your current portfolio value as a positive number with today’s date, then =XIRR(values, dates).
Works, but tedious for large portfolios — hundreds of rows to clean and format.
Benchmarking against Nifty 50
Knowing your XIRR is step one. The more useful question is: did you beat Nifty 50 over the same period, on the same cash flows? That requires computing what Nifty 50 returned given your
exact deposit dates — which means another XIRR calculation using historical index data.
A faster way
I built a free tool for this: xirrledger.com — supports Zerodha, Groww, and Fyers. Upload your ledger file, enter your current holdings value, and it gives you true XIRR vs Nifty 50
benchmark. Takes about a minute.
Happy to answer questions on the methodology or how XIRR is computed.