# Fundamental stock scanners for NSE

> Fundamental screeners for NSE stocks. Dividend yield, growth and consistency, promoter buying and selling, shareholding patterns, market-cap filters and sector scans, all on point-in-time data.

Canonical: https://dev.patternsradar.com/scans/fundamentals

These scans read what the filings say rather than what the chart does: who owns the company, how that ownership is shifting, how big the business is, which sector block it trades with. The shareholding scans are the heart of the group. A promoter stake change is the closest thing to a public insider signal Indian markets offer, and a promoter adding or cutting a full percentage point in one quarter did it deliberately, with a filing date attached. The dividend scans are the income half. Yield against today's price is the easy question; the harder ones are whether the company paid in every one of the last five years, whether the payment is growing, and whether it was just cut. The highest yields on any given session mostly belong to prices that fell, and only the record tells the two apart. Dividend amounts are counted by ex-date and split-adjusted to match the price, so a bonus issue never reads as a cut. Sector and industry scans express rotation directly, membership first and technical condition second, which is a query shape no price-only screener can write. Everything here is point-in-time. A scan replayed on a past date sees only what had been filed by that date, so a result published after the close counts from the next session, and a restatement counts from its own filing rather than backwards. That discipline is what makes the hit-rate replays on these pages worth reading. Coverage is the standing caveat: fundamentals exist only where a filing has been collected and parsed, about three in four listed equities on a given day, and a stock without data is NULL, which never matches a condition. These scans understate.

## The scans (20)

### Promoters buying

https://dev.patternsradar.com/screener/promoter-buying.md

```sift
where promoter_change_qoq > 0.5
  and close > sma(200)
```

Promoter stake up more than half a percentage point last quarter, in a stock above its 200-day average. Promoters know their company better than any outside analyst does, and they raise their stake with their own money for exactly one reason. A half-point increase in a single quarter is a deliberate act. Nobody drifts into that. The trend filter keeps the list to stocks the market already agrees with, because insider buying into a broken chart is a different and harder trade.

Top 500 by turnover.

### Promoters selling

https://dev.patternsradar.com/screener/promoter-selling.md

```sift
where promoter_change_qoq < -1
```

Promoter stake cut by more than a percentage point in one quarter. A full percentage point of promoter stake sold in one quarter is rarely noise. It is not automatically bearish. Stakes also fall through pledged-share invocation, through dilution from a fundraise, and through regulatory minimum-float selling. Every one of those is worth knowing about in a stock you hold, and the benign explanations are checkable in the filings once the scan has pointed you at the name.

Top 500 by turnover.

### High promoter holding in an uptrend

https://dev.patternsradar.com/screener/high-promoter-holding.md

```sift
where promoter_pct > 70 and close > sma(200)
```

Promoters holding over 70% with the price above its 200-day average. A tight float and aligned owners. When promoters hold seventy percent, the tradable float is thin and the people with the most information have the most to lose. In an uptrend that combination compounds, because modest buying moves a tight float further than it would a wide one. The cost is liquidity. These stocks move fast in both directions, and limiting that is exactly what the liquidity-ranked universe tier is for.

Top 500 by turnover.

### Institutions on both sides

https://dev.patternsradar.com/screener/institutional-ownership.md

```sift
where fii_pct > 15 and dii_pct > 15
```

FIIs and DIIs each holding more than 15%. Both kinds of institutional money in the same name. Foreign and domestic institutions often sit on opposite sides of the Indian tape, one selling the very exposure the other is accumulating. A stock where both hold more than fifteen percent is the overlap of two separate due-diligence processes, and the overlap shows up in behaviour: research coverage, index membership, someone on the bid in a selloff. Treat it as a quality list and pair it with a technical scan for entries. Ownership comes from quarterly shareholding filings, so changes land on filing dates and not on trade dates.

Top 500 by turnover.

### Tight public float

https://dev.patternsradar.com/screener/tight-float.md

```sift
where public_pct < 25
```

Public shareholders holding under a quarter of the company. When public shareholders hold less than 25%, whoever holds the rest is not selling at market prices, whether that is the promoters, the government or a foreign parent. The tradable float is a fraction of the listed size, so the same buying moves the price further in both directions. Listed subsidiaries and recent listings sitting at the minimum public shareholding live on this list. It reads best next to a demand signal, a volume or delivery scan, because scarcity only amplifies interest that already exists. On its own, a tight float is a property of the stock and not an event.

Top 500 by turnover.

### Pledged promoter stakes

https://dev.patternsradar.com/screener/pledged-promoters.md

```sift
where promoter_pledged_pct > 20
```

More than a fifth of the promoter holding pledged as loan collateral. A risk screen. Pledged shares are a standing margin call. Fall far enough and the lender sells the collateral into the decline, which is how a bad week becomes a terrible one. A fifth of the promoter stake pledged is past the point of routine treasury management. This scan inverts the rest of the category: I run it against what I already own instead of shopping from it. It is short by design too, because heavy pledging is rare among liquid names for exactly the reason it is worth screening. The market punishes it. Filings report a pledge only where one exists, so absence from this list usually means zero and occasionally means an unparsed filing.

Top 500 by turnover.

### Large-cap pullback

https://dev.patternsradar.com/screener/mega-cap-dip.md

```sift
where marketcap > 20000cr and rsi(14) < 40
```

Market cap above ₹20,000 crore with RSI under 40. Size doing the quality filtering. A market-cap floor is the simplest quality screen there is. A twenty-thousand-crore company has institutional ownership, analyst coverage and a business that survived scrutiny, so an oversold reading in one is more often a pullback than a collapse. One mechanical caveat took me a while to notice. Market cap is the day's close times the latest filed share count, so the size floor moves with the price itself, and a stock that crashes through the threshold drops off this list even as it becomes more oversold.

Top 500 by turnover.

### Low PE in an uptrend

https://dev.patternsradar.com/screener/low-pe-uptrend.md

```sift
where pe < 15 and close > sma(200)
```

Under fifteen times trailing earnings and above the 200-day average. Cheap, and no longer ignored. A low P/E on its own is a value-trap list, businesses priced cheap because they deserve to be. The trend filter changes the question. A stock below fifteen times trailing earnings that also holds above its 200-day average is cheap and being re-rated, not cheap and forgotten. The earnings side is point-in-time trailing twelve months, so a stock appears only once four quarters are on file. Loss-makers, where a P/E means nothing, are NULL and excluded by construction.

Top 500 by turnover.

### Earnings growth with revenue behind it

https://dev.patternsradar.com/screener/earnings-growth.md

```sift
where profit_growth_yoy > 25
  and revenue_growth_yoy > 15
```

Latest quarter profit up 25% year on year with revenue up 15%. Growth the top line can explain. Profit growth alone is the easiest number to flatter. A tax writeback, an asset sale, a soft base quarter will all do it. Requiring revenue growth alongside filters for the version that lasts, where there is more business behind the figure and not only better accounting. Both numbers compare the latest filed quarter to the same quarter a year earlier, counted from the filing date, so the scan sees each result exactly when the market did. The base-effect caveat survives the filter. A company recovering from a terrible year still posts spectacular percentages, and the revenue leg tempers that without eliminating it.

Top 500 by turnover.

### Quality compounders

https://dev.patternsradar.com/screener/quality-compounders.md

```sift
where profit_cagr_5y > 15
  and pe < 30
  and interest_cost_growth_yoy < 5
  and sector is not "Financial Services"
```

Profit compounding above 15% a year for five years, under 30 times earnings, interest costs up less than 5%, financials excluded. Three legs, each closing a hatch the others leave open. Five years of trailing-twelve-month profit growth is the compounding test: one good year against a soft base cannot carry a five-year rate, and a company that grew through a full cycle is a different animal from one that caught a single upswing. The P/E ceiling is the price test, because compounding the market has already paid for is not an opportunity. The interest leg is the best approximation I can offer. Indian quarterly filings carry a profit-and-loss statement and no balance sheet, so there is no debt figure to screen on, and the interest bill is what we can see. Flat interest beside compounding profit is growth funded from earnings; a jump is the tell that it was funded with borrowing. Lenders are excluded for exactly that reason, since for a bank the interest paid is a cost of goods and rises with a healthy loan book. Coverage is the real limit. The results backfill starts in 2018, so roughly half of covered names can answer a five-year question at all and the rest are NULL, which never matches. Widen it with `profit_cagr_3y`, lengthen it with `profit_cagr_7y`, or add `profit_growth_yoy > 15` to insist the latest quarter is still delivering.

Top 500 by turnover.

### IT stocks in an uptrend

https://dev.patternsradar.com/screener/it-stocks-uptrend.md

```sift
where sector is "Information Technology"
  and close > sma(200) and rsi(14) > 55
```

Information Technology names above their 200-day average with RSI over 55. Sector rotation is half of Indian market behaviour, and this is how a rotation scan gets written: membership first, then the technical condition. IT stocks trade as a block, on the same currency, the same client geographies and the same rate cycle, so when the sector turns the strong names turn first. One caveat. Sector membership is today's classification applied retroactively, so historical replays lean on the current list.

Top 500 by turnover.

### Banks near 52-week highs

https://dev.patternsradar.com/screener/banks-near-highs.md

```sift
where industry is "Banks" and close within 3% of high_52w
```

Banking stocks within 3% of their 52-week high. Banks lead Indian indices by weight and by narrative. A bank pressing its yearly high is a statement about credit conditions and not only about one chart. Scanning the industry tier instead of the broader Financial Services sector keeps out the NBFCs and insurers, which trade on different cycles. The proximity form catches stocks at the high without demanding the breakout print itself.

Top 500 by turnover.

### Commodity stocks above the 200-day

https://dev.patternsradar.com/screener/commodity-uptrends.md

```sift
where macro_sector is "Commodities" and close > sma(200)
```

The Commodities macro-sector, filtered to stocks above their 200-day average. A cycle scan in one line. Commodity stocks are the market's purest cycle plays. Metals, mining, oil and gas all move on global prices no company controls, and they move together. The macro-sector tier is the right altitude for that question, broader than any single industry. The 200-day filter then sorts the names already in an upcycle from the ones still waiting for it.

Top 500 by turnover.

### High dividend yield

https://dev.patternsradar.com/screener/high-dividend-yield.md

```sift
where dividend_yield(1y) > 4% and marketcap > 1000cr
  sort by dividend_yield(1y) desc
```

Trailing-year yield above 4% in companies worth over ₹1,000 crore, highest first. The market-cap floor keeps the penny-stock yields out. Yield is the most-searched fundamental screen and the most misleading one raw. The top of any yield list is companies whose price collapsed faster than their payout was cut. The market-cap floor removes the penny-stock yields. I sort by yield anyway, so the extreme cases sit at the top where they can be read with suspicion rather than bought. The figure is the trailing twelve months by ex-date, split-adjusted to match the price, so a stock that split after paying does not show a doubled yield. Pair it with `dividend_years(5y) == 5` for the reliable version, or `close > sma(200)` for the one where the price is not the reason.

Top 500 by turnover.

### Consistent dividend payers

https://dev.patternsradar.com/screener/consistent-dividend-payers.md

```sift
where dividend_years(5y) == 5 and dividend_yield(1y) > 2%
```

A dividend in every one of the last five years, yielding over 2% today. A company that has paid in each of the last five years, in any amount, has a board that treats the dividend as a commitment. `dividend_years(5y)` counts paying years and does not require a rising amount, so a payer that held its dividend flat through a bad year still qualifies. That is the right answer to the question this scan asks. The yield floor keeps out the token payers. Tighten it with `dividend_streak_years >= 7`, or add growth with `dividend_cagr(5y) > 5`.

Top 500 by turnover.

### Dividend growers

https://dev.patternsradar.com/screener/dividend-growers.md

```sift
where dividend_cagr(5y) > 10 and dividend_years(5y) == 5
  sort by dividend_cagr(5y) desc
```

Dividend per share compounding above 10% a year across five years, with no year skipped. Growth in the payment is the strongest statement a board can make about the years ahead, because a raised dividend is expensive to reverse. Ten percent a year over five years, with no year skipped, is a rate that no single special payout can carry. The CAGR compares the trailing year to the trailing year that ended five years ago, so one large interim distorts it far less than a year-on-year figure would. The amounts are per share on the split-adjusted basis, so a bonus issue does not read as a cut.

Top 500 by turnover.

### A decade of dividends

https://dev.patternsradar.com/screener/decade-of-dividends.md

```sift
where dividend_streak_years >= 10 and dividend_yield(1y) > 1%
```

Ten consecutive years of dividends, every year the record can see, with a yield over 1%. The NSE's closest thing to a dividend-aristocrat list. The dividend record on this site begins in 2012, and the streak counts consecutive paying years back from today, capped at ten. A streak of ten therefore means every year we can see. It is the nearest thing the NSE data offers to a dividend-aristocrat list. It runs on the wider universe, because the payers with the longest records are not always the most traded, and the 1% floor only removes the companies paying a rupee for the sake of the record. Ask for growth alongside it with `dividend_cagr(5y) > 5`.

Top 1000 by turnover.

### Dividend yield in an uptrend

https://dev.patternsradar.com/screener/dividend-yield-uptrend.md

```sift
where dividend_yield(1y) > 3% and close > sma(200)
```

Yielding over 3% and trading above the 200-day average. High yields usually come from falling prices; these prices are rising. The trend filter is what turns a yield list into an income list. A 3% yield with the price above its 200-day average is a company paying you to hold while the market re-rates it upward. The same yield below the average is usually a price falling into the number. Between the two conditions this is the shape most dividend investors actually want, and a plain yield sort never produces it.

Top 500 by turnover.

### Yield after a sell-off

https://dev.patternsradar.com/screener/yield-after-selloff.md

```sift
where dividend_yield(1y) > 3%
    and dividend_years(3y) == 3
    and pct_from_high(1y) < -20
```

More than 20% below the 52-week high, yielding over 3%, and paid in each of the last three years. The contrarian income screen. A reliable payer, three years without a miss, that is more than 20% below its yearly high has been marked down for a reason, and the yield is the market's price for finding out what that reason was. Some of these are cuts waiting to be announced. The `dividend_years(3y)` leg filters out the ones with a history of skipping, and `dividend_growth_yoy` alongside it will show whether the last payment was already smaller. `pct_from_high(1y)` is the stored 52-week distance; write `pct_from_high(2y)` to measure against a longer high.

Top 500 by turnover.

### Dividend cuts

https://dev.patternsradar.com/screener/dividend-cut.md

```sift
where dividend_growth_yoy < -25 and dividend(1y) > 0
```

Trailing-year dividends down more than 25% on the year before, from a company that still paid something. The filing says why. The other half of the dividend story. A trailing-year payout down more than a quarter on the year before, from a company that still paid something, is a board signalling that the cash is not there, often before the results say so. The `dividend(1y) > 0` leg keeps out the stocks that simply stopped, which are a different list. The wider universe is deliberate, because cuts cluster in the smaller names. Read it alongside `promoter_pledged_pct` and `interest_cost_growth_yoy`, which tend to tell the same story from the balance-sheet side.

Top 1000 by turnover.

## Common questions

### What does a change in promoter holding tell you?

Promoters are the ultimate insiders, and their stake changes are disclosed quarterly. An increase is unambiguous: they bought with their own money. A decrease needs reading, because it can mean genuine selling, pledge invocation, dilution from a fundraise, or a regulatory float requirement. The scan points at the stock. The filing explains the move.

### Why point-in-time fundamentals?

Because a replay lies without it. If a scan run on last March sees earnings that were filed in May, it is trading on information nobody had, which is look-ahead bias in its most common form. Point-in-time means a number becomes visible only from its filing date, so a replayed scan holds only the stocks it could genuinely have found that day.

### How is the dividend yield calculated?

Rupees per share paid over the trailing twelve months, dated by ex-date, divided by the day's close, both on the same split-adjusted basis, so a stock that split after paying does not show a doubled yield. A company that paid nothing reads 0 rather than empty. `dividend_yield(3y)`, `dividend_cagr(5y)` and `dividend_years(5y)` ask the same questions over other spans.

### Why does a fundamental scan return fewer stocks than a price scan?

Coverage. Every listed instrument has a price bar, but a fundamental value exists only where a filing has been collected and parsed. ETFs and indices never file results at all. A stock with no data is NULL, and NULL matches nothing.

## More scan categories

- [Breakout stock scanners for NSE](https://dev.patternsradar.com/scans/breakouts.md)
- [Reversal stock scanners for NSE](https://dev.patternsradar.com/scans/reversals.md)
- [Momentum stock scanners for NSE](https://dev.patternsradar.com/scans/momentum.md)
- [Delivery percentage scanners for NSE](https://dev.patternsradar.com/scans/delivery.md)
- [Volatility stock scanners for NSE](https://dev.patternsradar.com/scans/volatility.md)
- [Candlestick pattern scanners for NSE](https://dev.patternsradar.com/scans/candlestick-patterns.md)
- [F&O derivatives scanners for NSE](https://dev.patternsradar.com/scans/derivatives.md)

The whole library: https://dev.patternsradar.com/scans.md.

---

Price and delivery data from the [eod2](https://github.com/BennyThadikaran/eod2) dataset: National Stock Exchange of India end-of-day files, split- and bonus-adjusted, updated after each close. Not affiliated with or endorsed by NSE. PatternsRadar is a research tool. Nothing here is investment advice or a recommendation to buy or sell anything.
