NSE·histdataOpen console

CAVEATS · 8 MIN READ

Corporate actions: why old prices look wrong

Splits, bonus issues and dividends leave visible cliffs in raw NSE price history. Why this data is unadjusted, how to spot an artificial gap, and how to adjust it yourself.

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.

EventFactor 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

  1. Prices in this export are unadjusted and reflect what actually traded.
  2. Splits, bonuses and demergers leave large artificial gaps that are not real losses.
  3. Flag candidates with a large-move test and the PREV. CLOSEmismatch test, then verify each against the exchange’s record.
  4. Multiply pre-event prices by the factor; divide pre-event share quantities by it; leave turnover alone.
  5. Compound multiple events, working backwards.
  6. Keep the raw columns alongside the adjusted ones.

Related: what each column means and what this dataset does not cover.


Keep reading

Or go straight to the download console and pull a file.