AnkitSanjyal/nepse-market-data
NEPSE Market Data Daily and tick-level data from the Nepal Stock Exchange, captured by an open-source pipeline and validated at every layer boundary. Daily prices reach back to 1995-07-20. Tick data starts 2026-08-19. That gap is a property of the source, not a backlog - see Coverage below. Tables Path Grain Source Coverage eod_history_ext/ symbol x day ShareSansar (second source) 1995-07-20 -> present, 653 symbols eod_price/ symbol x day NEPSE… See the full description on the dataset page: https://huggingface.co/datasets/AnkitSanjyal/nepse-market-data.
NEPSE Market Data
Daily and tick-level data from the Nepal Stock Exchange, captured by an open-source pipeline and validated at every layer boundary.
Daily prices reach back to 1995-07-20. Tick data starts 2026-08-19. That gap is a property of the source, not a backlog - see Coverage below.
Tables
floorsheet names both counterparty brokers on every trade with a microsecond timestamp - something most exchanges never expose.
Worked examples
Three analyses with committed outputs — read them without running anything:
Load it
import duckdb
# 31 years of daily bars
duckdb.sql("SELECT * FROM 'hf://datasets/AnkitSanjyal/nepse-market-data/eod_history_ext/*.parquet'")
# tick-level contracts
duckdb.sql("SELECT * FROM 'hf://datasets/AnkitSanjyal/nepse-market-data/floorsheet/**/*.parquet'")Provenance - read this before combining tables
The two daily tables are deliberately not merged, and eod_history_ext carries a source column on every row so it always identifies itself.
eod_priceis NEPSE's own end-of-day board. Authoritative, but NEPSE's API clamps every history endpoint to a rolling 365 days. Verified 2026-08-21: an explicitstartDate=2010-01-01on the per-security route returns exactly 365 days,totalPages=1. There is no deeper authoritative source.eod_history_extis compiled by ShareSansar and is the only route to pre-2025 data. Credit for that compilation is theirs.
How far to trust the second source. On the 226-day window where both exist:
The 14 close disagreements are 4 debentures already flagged close_outside_range plus 10 single-session differences under 1%. Volume agreeing on every row is the strong signal: both sources describe the same trades. This validates the mechanism; nothing independently verifies the pre-2025 portion.
What will bite you when modelling
- Corporate actions are not adjusted. Bonus shares and rights issues are common on NEPSE and leave artificial overnight gaps in any raw price series. Returns computed on the raw close will contain those artefacts.
- Tick history cannot be backfilled by anyone. NEPSE's floorsheet endpoint serves only the current session and ignores the date requested. It accumulates one session at a time and a missed day is gone permanently.
- The trading week changed. NEPSE traded Sunday-Thursday until roughly 2026-04-06, then Monday-Friday. A naive weekday filter drops real sessions.
- The early years are thin. 1995-2002 is a single symbol. The market only becomes broadly observable from 2011 (93 symbols); 125 symbols carry 10+ years.
- Every published session passed a completeness gate against upstream's own row count, plus uniqueness, null, and
qty * rate = amountchecks.
Licence and use
NEPSE publishes its data free to any browser and ShareSansar's robots.txt permits crawling. This dataset is provided for research and educational use. Commercial redistribution may require a licence from NEPSE. If you are ShareSansar or NEPSE and want this changed, open a discussion on this repo.
Pipeline source: https://github.com/ANKITSANJYAL/nepse-pipeline
