How to calculate your true XIRR from your broker data (not the number your broker shows)

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.

yet another tool :rofl::rofl:

Haha yes, there are ton of tools, but none worked for me, so i tried making one of my own. Let me know if you like it.