A comprehensive Python library for NSE India market data
Access Index, Equity, ETF, Commodity & Historical data from official NSE India APIs
| Category | Features |
|---|---|
| ποΈ Market | Market status, trading hours |
| π Indices | List, quotes, historical OHLCV, PE/PB/DY ratios, constituents |
| π Equities | Complete stock list, quotes, historical data |
| π° ETFs | All ETFs with smart asset categorization (Gold, Silver, Index, International) |
| πͺ Commodities | Commodity list, spot prices, historical data |
| π VIX | India VIX historical data |
pip install niftyterminalfrom niftyterminal import get_market_status, get_index_historical_data
# Check if market is open
status = get_market_status()
print(f"Market is {status['marketStatus']}")
# Get NIFTY 50 historical data with PE/PB/DY
data = get_index_historical_data("NIFTY 50", "2025-01-01", "2025-12-31")
for row in data['indexData']:
print(f"{row['date']}: Close={row['close']}, PE={row['PE']}")Get the current Capital Market status from NSE India.
from niftyterminal import get_market_status
status = get_market_status()
print(status)π€ Output
{
"marketStatus": "Close",
"marketStatusMessage": "Market is Closed"
}| Field | Description |
|---|---|
marketStatus |
Current status: "Open", "Close", etc. |
marketStatusMessage |
Detailed status message |
Get the master list of all indices with their category and derivatives eligibility.
from niftyterminal import get_index_list
data = get_index_list()π€ Output
{
"indexList": [
{
"indexName": "NIFTY 50",
"subType": "Broad Market Indices",
"derivativesEligiblity": true
},
{
"indexName": "NIFTY BANK",
"subType": "Broad Market Indices",
"derivativesEligiblity": true
}
]
}| Field | Description |
|---|---|
indexName |
Full name of the index |
subType |
Category: Broad Market, Sectoral, Thematic, Strategy, Fixed Income |
derivativesEligiblity |
true if eligible for F&O trading |
Get comprehensive quote data for all indices including OHLC, valuation metrics (PE/PB/DY), and historical comparison data.
from niftyterminal import get_all_index_quote
data = get_all_index_quote()π€ Output
{
"timestamp": "02-Jan-2026 15:30",
"indexQuote": [
{
"indexName": "NIFTY 50",
"date": "2026-01-02",
"open": 26155.1,
"high": 26340,
"low": 26118.4,
"ltp": 26328.55,
"prevClose": 26146.55,
"change": 182,
"percentChange": 0.7,
"pe": "22.92",
"pb": "3.58",
"dy": "1.28",
"oneWeekAgoPercentChange": 1.1,
"30dAgoPercentChange": 1.14,
"365dAgoPercentChange": 10.89
}
]
}| Field | Description |
|---|---|
ltp |
Last traded price |
percentChange |
Percentage change from previous close |
pe / pb / dy |
PE ratio, PB ratio, Dividend Yield |
oneWeekAgoPercentChange |
Percent change from 1 week ago |
30dAgoPercentChange |
Percent change from 30 days ago |
365dAgoPercentChange |
Percent change from 365 days ago |
Get historical OHLC, valuation data (PE, PB, Dividend Yield), and Total Returns Index for any index.
Note: This function fetches data from Nifty Indices (niftyindices.com), which often provides more complete historical data than NSE India.
| Parameter | Type | Required | Description |
|---|---|---|---|
index_symbol |
str | β | Index name (e.g., "NIFTY 50", "NIFTY BANK") |
start_date |
str | β | Start date in YYYY-MM-DD format |
end_date |
str | β | End date in YYYY-MM-DD format (defaults to today) |
from niftyterminal import get_index_historical_data
# With date range
data = get_index_historical_data("NIFTY 50", "2025-01-01", "2026-01-03")
# Without end date (defaults to today)
data = get_index_historical_data("NIFTY BANK", "2024-01-01")π€ Output
{
"indexData": [
{
"indexName": "Nifty 50",
"date": "2024-12-05",
"open": "24539.15",
"high": "24857.75",
"low": "24295.55",
"close": "24708.40",
"PE": "22.74",
"PB": "3.68",
"divYield": "1.24",
"totalReturnsIndex": "36737.18"
}
]
}| Field | Description |
|---|---|
date |
Trading date in YYYY-MM-DD format |
open / high / low / close |
OHLC values |
PE / PB / divYield |
Valuation metrics |
totalReturnsIndex |
Total Returns Index value (includes dividends reinvested) |
Get the list of constituent stocks for an index.
| Parameter | Type | Required | Description |
|---|---|---|---|
index_symbol |
str | β | Index symbol (e.g., "NIFTY 50", "NIFTY BANK") |
from niftyterminal import get_index_stocks
data = get_index_stocks("NIFTY 50")π€ Output
{
"indexName": "NIFTY 50",
"date": "2026-01-07",
"stockList": [
{
"symbol": "TITAN",
"companyName": "Titan Company Limited",
"isin": "INE280A01028"
}
]
}| Field | Description |
|---|---|
symbol |
Stock ticker symbol |
companyName |
Full company name |
isin |
ISIN code |
Get historical India VIX data.
| Parameter | Type | Required | Description |
|---|---|---|---|
start_date |
str | β | Start date in YYYY-MM-DD format |
end_date |
str | β | End date in YYYY-MM-DD format (defaults to today) |
from niftyterminal import get_vix_historical_data
data = get_vix_historical_data("2025-01-01", "2025-04-16")π€ Output
{
"vixData": [
{
"indexName": "INDIA VIX",
"date": "2025-04-11",
"open": 21.43,
"high": 21.43,
"low": 18.855,
"close": 20.11
}
]
}| Field | Description |
|---|---|
date |
Trading date in YYYY-MM-DD format |
open / high / low / close |
VIX OHLC values |
Get list of all ETFs with smart asset categorization for easy filtering.
from niftyterminal import get_all_etfs
data = get_all_etfs()
# Filter by asset type
gold_etfs = [e for e in data['etfs'] if e['underlyingAsset'] == 'GOLD']
nifty_50_etfs = [e for e in data['etfs'] if e['underlyingAsset'] == 'NIFTY_50']π€ Output
{
"date": "2026-01-02",
"etfs": [
{
"symbol": "NIFTYBEES",
"companyName": "Nippon India ETF Nifty BeES",
"assetType": "EquityIndex",
"underlyingAsset": "NIFTY_50",
"indexVariant": "TRI",
"listingDate": "2002-01-08",
"isFNOSec": true
}
]
}| Field | Values |
|---|---|
assetType |
Commodity, EquityIndex, DebtIndex, Liquid, International |
underlyingAsset |
GOLD, SILVER, NIFTY_50, SENSEX, NASDAQ_100, etc. |
indexVariant |
TRI, EqualWeight, Momentum, Quality, Value, LowVol, Alpha |
Get the complete list of all listed stocks on NSE.
from niftyterminal import get_stocks_list
data = get_stocks_list()
print(f"Total stocks: {len(data['stockList'])}")π€ Output
{
"stockList": [
{
"symbol": "20MICRONS",
"companyName": "20 Microns Limited",
"series": "EQ",
"isin": "INE144J01027"
}
]
}| Field | Description |
|---|---|
symbol |
Stock ticker symbol |
companyName |
Full company name |
series |
Trading series: EQ, BE, BZ |
isin |
ISIN code |
Get quote and detailed information for a specific stock including current price, market cap, sector classification, and trading status.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
str | β | Stock ticker symbol (e.g., "RELIANCE", "TCS") |
from niftyterminal import get_stock_quote
data = get_stock_quote("20MICRONS")
print(f"LTP: {data['ltp']}, Change: {data['percentChange']}%")π€ Output
{
"symbol": "20MICRONS",
"companyName": "20 Microns Limited",
"series": "EQ",
"listingDate": "2008-10-06",
"isin": "INE144J01027",
"faceValue": 5,
"marketCap": 7209032358.6,
"secStatus": "Listed",
"industry": "Industrial Minerals",
"sector": "Metals & Mining",
"sectorPe": "11.69",
"industryInfo": "Minerals & Mining",
"macro": "Commodities",
"tradingSegment": "Normal Market",
"isFNOSec": false,
"isSLBSec": false,
"isSuspended": false,
"isETFSec": false,
"open": 206.9,
"high": 209.89,
"low": 202.51,
"ltp": 204.3,
"prevClose": 207.54,
"change": -3.24,
"percentChange": -1.56,
"pe": "11.86"
}| Field | Description |
|---|---|
ltp |
Last traded price |
change / percentChange |
Price change |
pe |
Stock PE ratio |
marketCap |
Total market capitalization |
sector / industry |
Sector and industry classification |
isFNOSec |
Eligible for F&O trading |
Get the list of all commodity symbols from NSE.
from niftyterminal import get_commodity_list
data = get_commodity_list()
print([c['symbol'] for c in data['commodityList']])
# Output: ['ALUMINI', 'GOLD', 'SILVER', 'CRUDEOIL', ...]Get historical spot price data for a commodity.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol |
str | β | Commodity symbol (e.g., "GOLD1G", "SILVER") |
start_date |
str | β | Start date in YYYY-MM-DD format |
end_date |
str | β | End date (defaults to today) |
from niftyterminal import get_commodity_historical_data
data = get_commodity_historical_data("GOLD1G", "2025-12-28", "2026-01-04")π€ Output
{
"commodityData": [
{
"symbol": "GOLD1G",
"unit": "1 Grams",
"spotPrice1": 13442,
"spotPrice2": 13460,
"date": "2026-01-02"
}
]
}| Field | Description |
|---|---|
symbol |
Commodity symbol |
unit |
Unit of measurement |
spotPrice1 / spotPrice2 |
Spot prices |
date |
Date (YYYY-MM-DD) |
Caution
- This library is not affiliated with, endorsed by, or associated with the National Stock Exchange of India (NSE) or any other financial institution.
- It does not provide financial, trading, or investment advice. Verify data independently before making financial decisions.
- It only retrieves publicly available data without authentication or bypassing security measures.
- Users are responsible for ensuring compliance with applicable laws and the data provider's terms of service.
- Use at your own risk.
MIT License Β© 2025
Made with β€οΈ for the Indian trading community