jyapystock
A Python library to fetch live and historical prices for Indian, American, and European stocks.
Status Badges
Features
- Live price and historical price support with timestamp and % change data
- Indian (NSE/BSE), American (NYSE/NASDAQ), and European (Xetra/Euronext) stocks
- Multiple data sources: yfinance, NASDAQ, NSE (for India), Alpha Vantage (optional API key)
- Auto-fallback: tries available sources in order based on country and API key availability
- Country support:
India,USA, andEuropewith automatic symbol variant detection (e.g.,.NS/.BOfor Indian stocks,.DE/.PA/.AS/.BR/.LSfor European stocks)
Installation
pip install jyapystock
Installation for Development
Dependencies are locked with Poetry (poetry.lock) for CI reproducibility:
pip install poetry
poetry install --extras dev
This installs the package in editable mode along with dev tools (pytest, pytest-cov, flake8). Run commands inside the managed environment with poetry run, e.g. poetry run pytest.
Usage
Basic Usage - USA Stocks
from jyapystock import StockPriceProvider
# Using yfinance (default)
provider = StockPriceProvider(country="USA")
result = provider.get_live_price("AAPL")
# Returns: {'timestamp': '2025-12-24T00:00:00-05:00', 'price': 273.81, 'change_percent': 0.53}
Indian Stocks with NSE
from jyapystock import StockPriceProvider
# Using NSE (National Stock Exchange)
provider = StockPriceProvider(country="India", source="nse")
result = provider.get_live_price("SBIN")
# Returns: {'timestamp': '24-Dec-2025 16:00:00', 'price': 968.85, 'change_percent': -0.31}
# Using yfinance for India (auto-tries .NS and .BO variants)
provider = StockPriceProvider(country="India")
result = provider.get_live_price("RELIANCE")
European Stocks with Xetra/Euronext
from jyapystock import StockPriceProvider
# Using yfinance for a specific exchange
provider = StockPriceProvider(country="europe", exchange="xetr")
result = provider.get_live_price("SAP")
# Resolves to SAP.DE
provider = StockPriceProvider(country="europe", exchange="xpar")
result = provider.get_live_price("MC")
# Resolves to MC.PA
# No exchange given -- tries every suffix (.DE, .PA, .AS, .BR, .LS) until one resolves
provider = StockPriceProvider(country="europe")
result = provider.get_live_price("SAP")
Historical Data
# Get historical prices
hist = provider.get_historical_price("AAPL", "2023-01-01", "2023-01-31")
# Returns list of records with date/open/high/low/close/volume
Using NASDAQ Provider
provider = StockPriceProvider(country="USA", source="nasdaq")
result = provider.get_live_price("AAPL")
Using Alpha Vantage (requires API key)
provider = StockPriceProvider(
country="USA",
source="alphavantage",
alpha_vantage_api_key="YOUR_API_KEY"
)
result = provider.get_live_price("AAPL")
Multiple Providers with Fallback
You can specify multiple sources as a list. The provider will try them in order until one returns data:
# Try NSE first, then fall back to yfinance for Indian stocks
provider = StockPriceProvider(country="India", source=["nse", "yfinance"])
result = provider.get_live_price("RELIANCE")
# Try NASDAQ first, then NASDAQ, then yfinance for USA stocks
provider = StockPriceProvider(country="USA", source=["nasdaq", "yfinance"])
result = provider.get_live_price("AAPL")
# Try BSE for historical data, fall back to yfinance
provider = StockPriceProvider(country="India", source=["bse", "yfinance"])
hist = provider.get_historical_price("NSDL", "2025-12-01", "2025-12-31")
You can also pass a single provider as a string:
# Equivalent to source=["bse"]
provider = StockPriceProvider(country="India", source="bse")
result = provider.get_live_price("NSDL")
Supported Sources
- yfinance: Free, supports most global stocks (USA, India & Europe)
- NASDAQ: Free, USA stocks only
- NYSE: Free, USA stocks only
- NSE: Free, Indian stocks only (via National Stock Exchange)
- BSE: Free, Indian stocks only (via Bombay Stock Exchange)
- Alpha Vantage: Free tier with limits, requires API key, supports global stocks
Testing
Install dependencies (see Installation for Development)
poetry install --extras dev
Run tests
poetry run python -m unittest discover tests
# Run provider-specific tests
PROVIDER=yfinance poetry run python -m unittest discover tests
PROVIDER=nse poetry run python -m unittest discover tests
PROVIDER=bse poetry run python -m unittest discover tests
PROVIDER=nasdaq poetry run python -m unittest discover tests
PROVIDER=alphavantage poetry run python -m unittest discover tests
License
MIT
Metadata
Release files for jyapystock 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jyapystock-0.5.1.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jyapystock-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.9 kB
Release files / jyapystock-0.5.1.tar.gz
| Download URL | jyapystock-0.5.1.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84f5537e40dae0537ac2e493aed4dce50f69cf3d84131925a30bd6d57e3e02c2
|
|
BLAKE2b-256 checksum How to use checksums |
898d3c797faa2903029832d1ab11ffec29cc9dedfdc2854ab383d6787295b8e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|
Release files / jyapystock-0.5.1-py3-none-any.whl
| Download URL | jyapystock-0.5.1-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e5ec6b79decdd13df8c0c22daa649573e84836ca29bf63d8220c029468ad0283
|
|
BLAKE2b-256 checksum How to use checksums |
1f54cb5060eadf066ae0b31e36d75c55e5098bc39b5dfea94760bd0a3a1fe407
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.4
|