A clean Python library for fetching Indian stock market data from NSE India
Project description
📈 Nifty Terminal
A comprehensive Python library for NSE India market data
Access Index, Equity, ETF, Commodity & Historical data from official NSE India APIs
✨ Features
| 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 |
🚀 Quick Start
Installation
pip install niftyterminal
Basic Usage
from 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']}")
📚 Table of Contents
📖 API Reference
get_market_status()
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 |
Index Functions
get_index_list()
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_all_index_quote()
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_index_historical_data(index_symbol, start_date, end_date)
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_index_stocks(index_symbol)
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_vix_historical_data(start_date, end_date)
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_all_etfs()
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_stocks_list()
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_stock_quote(symbol)
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 |
Commodity Functions
get_commodity_list()
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_commodity_historical_data(symbol, start_date, end_date)
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) |
⚠️ Disclaimer
[!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.
📄 License
MIT License © 2025
Made with ❤️ for the Indian trading community
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file niftyterminal-0.2.1.tar.gz.
File metadata
- Download URL: niftyterminal-0.2.1.tar.gz
- Upload date:
- Size: 99.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5351675b8eeceb009f4bfe3ee4d765d8aded3e329eee463c444229a5ca67ecb1
|
|
| MD5 |
d3fc6204ae287a7a1d61cf161cc22e35
|
|
| BLAKE2b-256 |
8477b0e7800f44459aef287f0d65ea7a23b9db20105a158751bfb973a9394917
|
Provenance
The following attestation bundles were made for niftyterminal-0.2.1.tar.gz:
Publisher:
pypi-publish.yml on mwsurjith/niftyterminal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
niftyterminal-0.2.1.tar.gz -
Subject digest:
5351675b8eeceb009f4bfe3ee4d765d8aded3e329eee463c444229a5ca67ecb1 - Sigstore transparency entry: 810363311
- Sigstore integration time:
-
Permalink:
mwsurjith/niftyterminal@39f2bd53f56092638fa398d20b677636f4073586 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mwsurjith
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@39f2bd53f56092638fa398d20b677636f4073586 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file niftyterminal-0.2.1-py3-none-any.whl.
File metadata
- Download URL: niftyterminal-0.2.1-py3-none-any.whl
- Upload date:
- Size: 108.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15de1269d3e80f414da54801588267f92c0050ea04ac867965e4885e53479046
|
|
| MD5 |
5104a4dd07f9e1d137b647a63be4d994
|
|
| BLAKE2b-256 |
218db3b00a1005f9174b1c26d7a0e468ac306f8e1b9390e45af0bdbe1ecba981
|
Provenance
The following attestation bundles were made for niftyterminal-0.2.1-py3-none-any.whl:
Publisher:
pypi-publish.yml on mwsurjith/niftyterminal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
niftyterminal-0.2.1-py3-none-any.whl -
Subject digest:
15de1269d3e80f414da54801588267f92c0050ea04ac867965e4885e53479046 - Sigstore transparency entry: 810363326
- Sigstore integration time:
-
Permalink:
mwsurjith/niftyterminal@39f2bd53f56092638fa398d20b677636f4073586 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mwsurjith
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@39f2bd53f56092638fa398d20b677636f4073586 -
Trigger Event:
workflow_dispatch
-
Statement type: