Skip to content

Wrong price to book value is returned for the Indian companies #2593

@InfantJerin

Description

@InfantJerin

Describe bug

priceToBook value for Infosys Ticker INFY.NS ( https://finance.yahoo.com/quote/INFY.NS/ ) is returned by the API is given below. it is 573 but that is wrong, the web app shows the right values but the API returns different value.

"bookValue": 2.67,
"priceToBook": 573.55804,
"currentPrice": 1531.4,
"financialCurrency": "USD",
"currency": "INR",

Below is the observation done by chatgpt -

🧐 Observations

bookValue = 2.67

This should normally mean Book Value per Share (BVPS).

But clearly 2.67 is not in INR, because Infosys BVPS (from filings) is around ₹230.

It looks like yfinance is mixing USD values for fundamentals while showing INR prices.

currentPrice = 1531.4 (INR)

This is the live NSE share price in rupees.

priceToBook = 573.55804

If you compute:

1531.4
2.67

573.5
2.67
1531.4

≈573.5

→ Exactly matches the JSON field.

So yfinance is dividing an INR price (₹1531) by a USD book value (2.67), which makes no sense.

✅ Correct Calculation

If we take Infosys’s real BVPS ≈ ₹231 (INR) from filings:

P/B

1531.4
231

6.63
P/B=
231
1531.4

≈6.63

That’s the correct number (and matches Screener, Smart-Investing, etc.).

Main issue seems to be the money values are not in the same currency format.

Simple code that reproduces your problem

import yfinance as yf

symbol = 'INFY.NS'
ticker = yf.Ticker(symbol)
info = ticker.info

print(f"Info for {symbol}: {info}")

Debug log from yf.enable_debug_mode()

NA

Bad data proof

No response

yfinance version

0.2.65

Python version

No response

Operating system

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions