This release is a pre-release and may not be stable for production use.
psxdata — Python Library for Pakistan Stock Exchange (PSX) Data
Full documentation at psxdata.mintlify.app
Deprecated: ReadTheDocs hosting at psxdata.readthedocs.io is no longer the primary documentation source and may be removed in a future release.
psxdata is a Python library for downloading Pakistan Stock Exchange (PSX) data — historical OHLCV prices, real-time quotes, KSE-100 index constituents, sector summaries, fundamentals, debt market instruments, and margin-eligible stocks. Free, open-source, and actively maintained.
Alpha release note
0.1.0a1 — Core scraping, caching, and public API are complete. The FastAPI REST layer has moved to mtauha/psxdata-api. APIs may change before 1.0.
Installation
pip install psxdata
Requires Python 3.11+.
Quick Start
import psxdata
# Historical OHLCV data
df = psxdata.stocks("ENGRO", start="2024-01-01", end="2024-12-31")
# All listed tickers
all_tickers = psxdata.tickers()
# KSE-100 index constituents
kse100 = psxdata.indices("KSE100")
# Live quote
q = psxdata.quote("LUCK")
# Sector summary
sectors = psxdata.sectors()
# Debt market instruments
debt = psxdata.debt_market()
# Margin-eligible stocks
scrips = psxdata.eligible_scrips()
API Reference
| Function | Description |
|---|---|
psxdata.stocks(symbol, start, end) |
Historical OHLCV DataFrame for a ticker |
psxdata.tickers() |
All listed tickers (1000+) |
psxdata.quote(symbol) |
Live quote row for a ticker |
psxdata.indices(name) |
Constituents of a named index (e.g."KSE100") |
psxdata.sectors() |
Sector aggregates DataFrame (37 sectors) |
psxdata.fundamentals(symbol) |
Financial reports for a ticker |
psxdata.debt_market() |
Debt market instruments (TFCs, Sukuks, etc.) |
psxdata.eligible_scrips() |
Margin trading eligible stocks |
Why psxdata
Existing solutions for PSX data tend to hardcode date formats and column positions that break silently when PSX changes its HTML. psxdata is designed differently:
- Dynamic column extraction from
<th>tags — survives column reordering - Multi-format date parsing with fuzzy fallback via
dateutil - Exponential backoff retries — 3 attempts, 1s/2s delays
- Disk cache (
~/.psxdata/cache/) — historical data cached forever, live data for 15 min - Data validation — OHLC constraint checks, duplicate/future date detection
REST API
A FastAPI REST service wrapping this library now lives in a standalone repository: mtauha/psxdata-api.
It exposes the same data as this library over HTTP (GET /stocks, GET /indices/{name}, GET /sectors, etc.), installs psxdata from PyPI, and ships its own Docker image (mtauha/psxdata-api on Docker Hub) and CI/CD pipeline. See that repo's README for endpoints, request/response formats, and Docker run instructions.
Development Status
See the roadmap issue for the full phase breakdown.
- ✅ Phase 0 — PSX endpoint research and HTML fixture capture
- ✅ Phase 0.5 — Repository setup, CI/CD, community files
- ✅ Phase 2 — Core engineering (BaseScraper, parsers, cache, utils)
- ✅ Phase 3 — Scrapers (historical, real-time, indices, sectors, fundamentals, screener, debt, eligible scrips)
- ✅ Phase 3 API — Public Python package interface
- ✅ Phase 4 — FastAPI REST layer (now at mtauha/psxdata-api)
- ✅ Phase 5 — Full test suite (API layer tests pending)
- ✅ Phase 6 — Packaging & PyPI publish
- ✅ Phase 7 — Documentation
Contributing
Contributions are welcome. See CONTRIBUTING.md and open an issue before starting non-trivial work.
Architecture
See ARCHITECTURE.md for the component diagram, data flow, and design decisions.
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 psxdata-0.1.0a4.tar.gz.
File metadata
- Download URL: psxdata-0.1.0a4.tar.gz
- Upload date:
- Size: 27.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a56be8736a89cb0d1fb8952c94cb0c271ba848753ff268c6acdd54a135c5d94b
|
|
| MD5 |
bdcdb536d84f1943ea23d5f8373bf888
|
|
| BLAKE2b-256 |
a9c0faafd236281eda7c0e9013194df623a394093908bd8f3caf80b5b3f17a5c
|
Provenance
The following attestation bundles were made for psxdata-0.1.0a4.tar.gz:
Publisher:
publish.yml on mtauha/psxdata
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
psxdata-0.1.0a4.tar.gz -
Subject digest:
a56be8736a89cb0d1fb8952c94cb0c271ba848753ff268c6acdd54a135c5d94b - Sigstore transparency entry: 2063255713
- Sigstore integration time:
-
Permalink:
mtauha/psxdata@4ed10e39c7c4e99b3a73334d31e8cb75585ad5bf -
Branch / Tag:
refs/tags/v0.1.0a4 - Owner: https://github.com/mtauha
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4ed10e39c7c4e99b3a73334d31e8cb75585ad5bf -
Trigger Event:
push
-
Statement type:
File details
Details for the file psxdata-0.1.0a4-py3-none-any.whl.
File metadata
- Download URL: psxdata-0.1.0a4-py3-none-any.whl
- Upload date:
- Size: 34.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ec0e16b769d2ea9c808acbca034a05fdb81a5b288c90c666a82b3b5b8a4ba44
|
|
| MD5 |
0980864076952f6c5599efd3428a1cba
|
|
| BLAKE2b-256 |
286a521957d15dacaba654ca68e5af9a2ec30b93d331034ecf9484f4d14dedae
|
Provenance
The following attestation bundles were made for psxdata-0.1.0a4-py3-none-any.whl:
Publisher:
publish.yml on mtauha/psxdata
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
psxdata-0.1.0a4-py3-none-any.whl -
Subject digest:
6ec0e16b769d2ea9c808acbca034a05fdb81a5b288c90c666a82b3b5b8a4ba44 - Sigstore transparency entry: 2063255795
- Sigstore integration time:
-
Permalink:
mtauha/psxdata@4ed10e39c7c4e99b3a73334d31e8cb75585ad5bf -
Branch / Tag:
refs/tags/v0.1.0a4 - Owner: https://github.com/mtauha
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4ed10e39c7c4e99b3a73334d31e8cb75585ad5bf -
Trigger Event:
push
-
Statement type: