KEY TAKEAWAYS
- Use
screen_stocksfor plain AND filters, andscreen_by_queryfor OR or arithmetic between ratios. - Units differ by tool and dialect. In
screen_stocks, ROCE is a fraction (0.2 is 20 percent). The default query dialect reads 22% as 22 percent. - Results are a filtered list sorted by market cap unless you choose another column. Order is not a ranking.
What are the four screener tools?
| Tool | Use it for | Input |
|---|---|---|
| screen_stocks | Plain numeric criteria combined with AND, plus exact-match filters such as sector, company_type and index | A filters object, sort_by, order and limit up to 100 |
| screen_by_query | OR logic, arithmetic between ratios, functions | One expression, a dialect, limit, offset and snapshot_id |
| list_preset_screens | See the ready-made screens and when each was computed | None |
| run_preset_screen | Fetch the stored result of one preset | A preset name from the list |
How does a filter screen work?
You pass filters as keys. A range filter takes a _min or _max suffix, such as pe_max or roce_min. An unknown key returns an error that lists every accepted key. We ran roce_min 0.2 and debt_to_equity_max 0.5 on 29 October 2026. The server scanned 5,293 securities, excluded 1,923 for a missing metric and matched 607. The five rows below are the first five by market cap. They are the start of a longer list and not a shortlist.
{
"filters": { "roce_min": 0.2, "debt_to_equity_max": 0.5 },
"sort_by": "market_cap",
"order": "desc",
"match_count": 607,
"total_scanned": 5293,
"excluded_missing_metric": 1923,
"results": [
{ "nse_symbol": "TCS", "market_cap": 8905200000000.0, "pe": 17.2462, "roce": 0.6965, "debt_to_equity": 0.0 },
{ "nse_symbol": "INFY", "market_cap": 4551003800000.0, "pe": 14.8388, "roce": 0.4511, "debt_to_equity": 0.0 },
{ "nse_symbol": "HINDUNILVR", "market_cap": 4267130000000.0, "pe": 40.3153, "roce": 0.2978, "debt_to_equity": 0.0003 },
{ "nse_symbol": "SUNPHARMA", "market_cap": 4216769750000.0, "pe": 34.871, "roce": 0.2029, "debt_to_equity": 0.0488 },
{ "nse_symbol": "HCLTECH", "market_cap": 3802357500000.0, "pe": 20.6869, "roce": 0.3334, "debt_to_equity": 0.0125 }
],
"snapshot": { "id": 70, "computed_at": "2026-10-28 16:16:45" },
"cached_at": "2026-10-28T14:45:03+00:00"
}Trimmed from the live response: 5 of 607 rows shown with fewer fields, no value changed. Market cap is in whole rupees.
How does a query with OR work?
screen_by_query reads one expression. Operators are AND, OR, comparison symbols and + - * /, with functions such as COALESCE, IF, LEAST, POWER, ABS, SQRT and LOG. On 29 October 2026 we ran a query with an OR inside brackets. It matched 543 companies, and the response gave the first five by market cap. All five satisfied both sides of the OR.
query: Return on capital employed > 22% AND (Debt to equity < 0.5 OR Interest Coverage Ratio > 8)
dialect: screener, sort_by: market_cap, order: desc, limit: 5
{
"results": [
{ "nse_symbol": "TCS", "roce": 0.6965, "debt_to_equity": 0, "interest_coverage": 52.9744 },
{ "nse_symbol": "INFY", "roce": 0.4511, "debt_to_equity": 0, "interest_coverage": 96.9385 },
{ "nse_symbol": "HINDUNILVR", "roce": 0.2978, "debt_to_equity": 0.0003, "interest_coverage": 46.6869 },
{ "nse_symbol": "HCLTECH", "roce": 0.3334, "debt_to_equity": 0.0125, "interest_coverage": 33.9516 },
{ "nse_symbol": "ITC", "roce": 0.3657, "debt_to_equity": 0.0302, "interest_coverage": 244.1047 }
],
"pagination": { "limit": 5, "offset": 0, "returned": 5, "total_matches": 543, "has_more": true, "snapshot_id": 70 },
"snapshot": { "id": 70, "computed_at": "2026-10-28 16:16:45" },
"compatibility": { "dialect": "screener", "diagnostics": [] }
}Trimmed from the live response: 5 of 543 rows shown with fewer fields, no value changed.
The two screens used different criteria, so their match counts (607 and 543) are not comparable. The query also used ROCE above 22 percent where the filter screen used 20 percent.
What are the dialects and units?
Name the dialect
roce > 22 in the dalalos dialect asks for 2,200 percent and matches nothing. Always say which dialect you want in your prompt.What preset screens are there?
list_preset_screens returned five presets on 29 October 2026. Each is a fixed filter combination computed each night. It is not a live query and it carries no label or ranking. run_preset_screen returns the stored result for one name. A preset that has never been computed returns an empty result with the reason code no_data. We listed the presets and did not run one for this page.
low_price_to_earnings Trailing P/E between 0 and 15.
high_dividend_yield_large_market_cap Trailing-12m dividend yield >= 3% and market cap >= Rs 20,000 Cr.
low_leverage_high_roe Debt-to-equity <= 0.5 and return on equity >= 15%.
high_promoter_holding_low_pledge Promoter holding >= 50% and pledged-promoter-shares <= 5%.
high_growth_latest_results Latest-quarter revenue YoY growth >= 20%, latest-quarter net income
YoY growth >= 20%, and net margin did not contract YoY.
(all five: computed_at 2026-10-28T16:30:04+00:00, stale: false)Reformatted from the live response as a table of name and description, no value changed.
How does paging work?
Each screen_by_query response reports a pagination.snapshot_id. Our screen reported 70. Pass it back as snapshot_id with the next offset, and every page reads the same published generation of the nightly metrics. If a refresh publishes a new generation in between, the call fails with snapshot_expired and you restart from offset 0. Sorting puts unknown values last and ends with an ISIN tie-break, so pages never repeat or skip a row.
What are the limits?
Is there a web screener?
Yes. The screener on this site runs the same engine. You can browse curated screens, write your own in the screen composer, and read the query guide and the ratio reference. The ratio reference listed 112 ratios on 29 October 2026, 104 of them usable in a screen condition.
How do I ask for it?
EXAMPLE PROMPTS
- Screen Indian stocks with ROCE of at least 20 percent and debt to equity at most 0.5 using DalalOS. Show 5 rows, the match count and the snapshot date.
- Use screen_by_query in the screener dialect: ROCE above 22% and either debt to equity below 0.5 or interest coverage above 8. List the first 10 by market cap.
- List the preset screens DalalOS has and when each was computed.
- Run the low_leverage_high_roe preset and show the first 10 rows with their as-of date.
To set it up, connect your AI, or follow the guide for Claude or ChatGPT, Cursor and other clients. The server is at https://mcp.dalalos.in/mcp. The public repo is DalalOS-Indian-Stock-Research on GitHub.
How we checked
On 29 October 2026 we ran screen_stocks, screen_by_query and list_preset_screens on the live server. We did not run run_preset_screen. Its behaviour, the unit rules for each key and the list of general-only ratios come from the tool descriptions. The ratio count comes from the live ratio reference page on the same date. Figures change as the nightly snapshot refreshes. This is research data, not investment advice, and DalalOS does not rank or rate stocks. Found an error? Email hello@dalalos.in.
FAQ
Common questions
- Is there an Indian stock screener I can use through an MCP server?
- Yes. DalalOS has four screener tools. screen_stocks takes numeric filters that are AND-combined. screen_by_query takes one free-form expression with OR and arithmetic. list_preset_screens and run_preset_screen return fixed screens computed each night. DalalOS publishes this page, so read the limits section before you rely on it.
- Can the screener use OR conditions?
- Yes, through screen_by_query. It accepts AND, OR, comparisons, arithmetic and functions such as COALESCE and IF. screen_stocks combines every filter with AND.
- What are the two dialects?
- screen_by_query takes a dialect. The default, “screener”, reads common screener ratio names in the units a screener page displays, so 22% means 22 percent. The “dalalos” dialect reads DalalOS metric ids in stored units, where 22 percent is 0.22. The server never guesses the dialect.
- Does the screener tell me which stocks to buy?
- No. A screen returns every company that matches your conditions, sorted by a column you pick, market cap by default. The order is a sort and not a ranking. DalalOS gives no buy or sell calls, target prices or ratings.
- How does paging work?
- screen_by_query pages from one published snapshot of the nightly metrics. The response gives a snapshot_id. Pass it back as snapshot_id with the next offset. If a refresh lands in between, the call fails with snapshot_expired and you restart from offset 0.
- Is there a web screener too?
- Yes. The same engine runs the screener on this site. You can browse curated screens, write your own in the screen composer, and read how screens work in the docs. The links are in the sections below.
- Is this investment advice?
- No. DalalOS returns filed figures and ratios from fixed formulas, filtered by your own criteria. Nothing on this page is investment advice.
Connect your AI to Indian stock market data
Add DalalOS as a connector and sign in once. Free to start with no card and no waitlist; paid plans from ₹199 a month when you need more.
KEEP EXPLORING