SCREENER
How screens work
A screen is one expression over every NSE/BSE-listed company DalalOS covers. You name the ratios, set the thresholds, and get back every company that satisfies all of them — each value a raw disclosed figure or a mechanically-computed ratio.
The query is parsed on the server, never in your browser, so what this page describes is exactly what the engine does. Write one in the screen composer.
A first screen
Each condition is a ratio, a comparison and a number. Join conditions with AND or OR:
Return on capital employed > 22% AND
Market Capitalization > 500That reads: companies whose return on capital employed is above 22 percent and whose market capitalization is above ₹500 crore. Line breaks are only for readability; a ratio name may even wrap across a line. Keywords and function names are case-insensitive.
Operators
| Operator | Meaning |
|---|---|
> < >= <= = != | Compare two values. |
+ - * / | Arithmetic between ratios or numbers. Division by zero is a missing value, not an error. |
AND · OR | Combine conditions. AND binds tighter than OR. |
( ) | Group, to override the default order. |
From loosest to tightest the order is: OR, then AND, then comparisons, then + and -, then * and /. So A > 1 OR B > 2 AND C > 3 means A > 1 OR (B > 2 AND C > 3). Write the parentheses when in doubt.
Two ratios can be compared to each other directly:
Price to Earning < Industry PEUnits: a number means what the ratio shows
A threshold is written in the unit the ratio is displayed in, and converted on the server. You never type a rupee amount in full or a percentage as a fraction:
| Ratio shows | Write | Means |
|---|---|---|
| ₹ crore — market cap, sales, profit | Market Capitalization > 500 | Above ₹500 crore |
| ₹ per share — price, EPS | Current price < 100 | Below ₹100 a share |
| Percent — returns, margins, growth, holdings | Return on equity > 15 | Above 15 percent |
| Multiple — P/E, debt to equity | Debt to equity < 0.5 | Below 0.5× |
For a percentage ratio, 15 and 15% are the same threshold. A percent sign on anything else is rejected rather than guessed at — Market Capitalization > 5% fails with “a percentage literal cannot be combined with a currency_crore value”. Comparing two ratios in different units, such as a share price with a market capitalization, is rejected the same way.
The unit of every ratio is listed in the ratio reference.
Functions
| Function | Arguments | Returns |
|---|---|---|
ABS(x) | 1 | The absolute value of x. |
SQRT(x) | 1 | The square root of x. |
LOG(x) · LOG(x, base) | 1 or 2 | The logarithm of x. |
POWER(x, y) | 2 | x raised to the power y. |
LEAST(a, b, …) | 1 or more | The smallest of its arguments. |
COALESCE(a, b, …) | 1 or more | The first argument that has a value. |
IF(condition, a, b) | 3 | a when the condition holds, b otherwise. |
ABS(YOY Quarterly profit growth) > 50That matches a quarterly profit swing of more than 50 percent in either direction.
Missing values
Not every company discloses every figure, and some ratios have no meaning for some companies — a bank has no return on capital employed. A missing value is never treated as zero:
Screener.in names or DalalOS ids
The default dialect reads Screener.in's ratio names, so a query written there usually runs unchanged. A ratio's DalalOS id, such as roce, is also accepted in this dialect when no Screener.in name matches, and means the same thing: roce > 22 is 22 percent.
The DalalOS dialect is for scripts and the REST API. It takes ids only, and its numbers are in the stored unit, not the displayed one: a percentage ratio is a fraction and money is in whole rupees.
| Condition | Screener.in dialect | DalalOS dialect |
|---|---|---|
| ROCE above 22% | roce > 22 | roce > 0.22 |
| Market cap above ₹500 crore | Market Capitalization > 500 | market_cap > 5000000000 |
The same text, two meanings
roce > 22 in the DalalOS dialect asks for a return on capital employed above 2,200 percent, and matches nothing. That is why the dialect is always stated and never guessed from the text.Sectors, industries and indices
The query language has no text values, so a sector or index name cannot appear in a condition. Classification is applied separately, as an exact filter alongside the query: choose a sector from Browse sectors on the screens hub and every condition you add runs within it. Over the REST API, the same filter is the scope object (sector, industry, industry group, sub-group, company type or index).
During a results season, the composer can also keep only companies that have already filed the latest quarter, so a growth condition compares like with like.
Results, paging and export
What a screen is not
A screen filters on facts. It does not score, rank or rate a company, and a company appearing in a screen is not a recommendation to buy, sell or hold it. The order of the results is the sort you chose and nothing more. DalalOS is a research data layer, not investment advice.
FAQ
Common questions
Can I paste a query from Screener.in?
Usually, yes. The default dialect reads Screener.in's ratio names, its AND/OR keywords, its operators and its units, so a typical Screener.in query runs unchanged. A name DalalOS does not recognise, or a ratio it has no source for, stops the run with an error that names it; nothing is silently dropped from your query.
Why does a company with no value for a ratio not appear?
A condition on a missing value is neither true nor false, so the company does not match it. That is SQL's three-valued logic, applied deliberately: an undisclosed figure is not treated as zero. Inside an OR, the other side can still match on its own.
Can I filter by sector or index in the query text?
No. The query language has no text values, so a sector name cannot appear in a condition. Pick a sector from Browse sectors on the screens hub instead; the sector is applied alongside your query as an exact classification filter.
Is the order of the results a ranking?
No. Results are sorted by the column you choose, market capitalization by default, and nothing else. A screen returns every company that satisfies its conditions; it does not score, rank or recommend any of them.
KEEP EXPLORING