Someone pulls ten years of history for a well-known stock, charts it, and finds a day where the price fell 50% — with no crisis, no news, nothing. The data looks broken. It is not. That is a stock split, and the file is showing you exactly what traded.
This is the most common source of confusion with raw exchange data, and it is worth understanding properly, because it silently corrupts returns, moving averages, and volatility if you do not handle it.
What a corporate action does to the price
Certain events change the number of shares outstanding without changing the value of the company. The share price adjusts mechanically to compensate.
- Stock split. One ₹10 face-value share becomes two ₹5 shares. If it closed at ₹2,000, it opens around ₹1,000. Your holding is worth the same; you simply own twice as many, each worth half.
- Bonus issue. Free additional shares, say one for every one held. Same arithmetic — twice the shares, roughly half the price.
- Rights issue. Shares offered to existing holders below market price, producing a smaller downward adjustment.
- Dividend. Cash leaves the company, and the price typically opens lower by roughly the dividend on the ex-date. Small for ordinary dividends; very visible for a large special dividend.
- Demerger.Part of the business is spun into a separate listed entity, and the parent’s price drops by the value that left.
In every case the drop is arithmetic, not economic. No investor lost money at the moment it happened.
Why this export is unadjusted
The data comes through as the exchange reported it: the actual prices at which shares actually traded on each date. Many commercial data providers instead publish back-adjusted series, retroactively rescaling all pre-event prices so the chart looks continuous.
Both are legitimate; they answer different questions.
- Unadjustedanswers “what did this share cost on that date?” It is the historical record, and it is what you want for reconciling against a contract note, a statement, or an old transaction.
- Adjustedanswers “what return would an investor have earned?” It is what you want for performance analysis.
This tool gives you the unadjusted record because it is the source of truth and can always be converted into the adjusted version. The reverse is not true — once a series has been rescaled by a factor nobody wrote down, the original prices cannot be recovered. Adjusting silently would also hide the fact that an event occurred at all, which is itself information.
Finding the events in your own file
You do not need an external corporate-actions feed to locate candidates. There are two methods, and using both together is far more reliable than either alone.
Method 1: flag implausible moves
With CLOSE in column H, in a free column at row 3:
=IF(ABS(H3/H2-1)>0.2,"CHECK","")
A move above 20% in a single session is uncommon for an established stock and worth inspecting. Lower the threshold for a large-cap, raise it for a volatile small-cap. This catches real news too — that is fine, the point is to produce a shortlist.
Method 2: compare the two close columns
This one is more specific, and it exists only because the export carries both. Normally PREV. CLOSE on a row equals CLOSE on the row above. When the exchange restates the reference price for a corporate action, they diverge:
=IF(ABS(F3/H2-1)>0.01,"ACTION?","")
Because a genuine market move affects both columns equally, a mismatch points specifically at an adjustment rather than at volatility. Treat hits as strong candidates, not proof — a data gap or a missing session can produce the same signature.
Confirm anything either method flags against the exchange’s own corporate actions record for that symbol and date before adjusting. Never rescale a price series on a guess.
Adjusting the history yourself
Once you know the event and its ratio, the procedure is straightforward. The rule: multiply every price before the ex-date by the adjustment factor, leaving prices from the ex-date onward untouched.
| Event | Factor for earlier prices |
|---|---|
| 2-for-1 split (one share becomes two) | × 0.5 |
| 5-for-1 split | × 0.2 |
| 1:1 bonus (one free share per share held) | × 0.5 |
| 1:2 bonus (one free share per two held) | × 0.667 |
| Face value ₹10 → ₹2 | × 0.2 |
The general form: the factor is the ratio of shares before the event to shares after. A 1:1 bonus doubles the count, so earlier prices are halved.
Multiple events compound. If there was a 1:1 bonus in 2019 and a 2-for-1 split in 2023, prices before 2019 need both — multiply by 0.5 × 0.5 = 0.25. Working backwards from the most recent event is the least error-prone order.
Volume moves the other way. If prices are halved, share counts double: divide historical VOLUME and DELIVERY QTY by the same factor to keep them comparable. VALUE is in rupees and needs no adjustment at all — one of the reasons turnover is the more robust activity measure.
Doing it in a spreadsheet
Add a factor column. For a single event with ex-date in cell $U$1 and factor in $U$2, at row 2:
=IF(A2<$U$1,$U$2,1)
Then build adjusted columns by multiplying: adjusted close is =H2*V2, and the same pattern applies to OPEN, HIGH, LOW and PREV. CLOSE. For several events, chain the conditions or add one factor column per event and multiply them together.
Keep the original columns. The adjusted series is a derived view, and you will want the raw record when something looks wrong.
A note on dividends
Ordinary dividends are usually left alone. The ex-date drop is small, adjusting for it requires a complete dividend history, and for most purposes the distortion is negligible.
Be aware of what that means, though: a price series ignoring dividends measures price return, not total return. For a stock yielding 3% a year, price return understates what an investor actually earned by roughly that much annually — which compounds into a large gap over a decade. If you are comparing against a total-return benchmark, you are not comparing like with like.
Large special dividends are the exception and are worth adjusting for explicitly, since they can move a price by several percent in one session.
The short version
- Prices in this export are unadjusted and reflect what actually traded.
- Splits, bonuses and demergers leave large artificial gaps that are not real losses.
- Flag candidates with a large-move test and the
PREV. CLOSEmismatch test, then verify each against the exchange’s record. - Multiply pre-event prices by the factor; divide pre-event share quantities by it; leave turnover alone.
- Compound multiple events, working backwards.
- Keep the raw columns alongside the adjusted ones.
Related: what each column means and what this dataset does not cover.
Keep reading
- Every column in your NSE export, explained — What OPEN, HIGH, LOW, PREV. CLOSE, LTP, CLOSE, VWAP, VOLUME, VALUE, NO OF TRADES, DELIVERY QTY and DELIVERY % actually mean in an NSE historical data file — and where people misread them.
- NSE series codes: EQ, BE, BZ, SM and ST — Why your export sometimes has two rows for the same date, what each NSE series code means for how a stock trades, and which rows you probably want to keep.
- Delivery percentage: how to read it, and its limits — How NSE delivery quantity and delivery percentage are calculated, what high and low readings suggest about participation, and the cases where the number misleads.
Or go straight to the download console and pull a file.