- Brand
- DalalOS
- Category
- Finance
- Primary Subcategory
- Institutional Financial Data & Equity Research Platforms
Integration details
Description
Research Indian listed companies with sourced market and corporate data. Look up companies, retrieve end-of-day quotes and financial statements, compare peers, screen using your own criteria, and inspect shareholding, corporate actions and filings. Results include source and freshness information when available. Prices are end-of-day, not a real-time trading feed; coverage and update frequency vary by dataset. Missing or stale data is labelled. Some filing requests can queue processing and may return a pending result. With your authorization, DalalOS can read, add or remove symbols in your DalalOS watchlist. This list does not contain brokerage holdings, quantities or cost basis. Connect a DalalOS account through OAuth. DalalOS supplies disclosed facts and mechanical ratios for research; it does not execute trades, provide personalized investment advice, or issue buy/sell calls or target prices.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Institutional Financial Data & Equity Research Platforms
- Secondary Subcategories
- None listed
- Brand
- DalalOS
- Access
- Account required
- First tracked
- 2026-10-28
- Tool count
- 61
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for DalalOS
Get updates when DalalOS’s Discoverability Score or category rank changes.
Competing in ChatGPT Institutional Financial Data & Equity Research Platforms
View Category61 tools agents can invoke
Use this when the user asks to add, watch or track Indian stocks in their DalalOS watchlist. Changes only the user's own saved list. Add one or more stocks to the caller's DalalOS watchlist, accepting a pasted list. Use this when the user says "watch X", "track X", "add X to my watchlist", or asks to save stocks they just searched/screened/analyzed via DalalOS for later. This writes to DalalOS's own watchlist, tied to the caller's DalalOS account. `symbols` accepts a list of strings or a single string, and any entry may itself be a DELIMITED PASTE -- commas, newlines, semicolons, tabs or pipes -- so a CSV or pasted list of symbols can be handed over as-is. Each fragment is resolved by exact identifier (NSE symbol, ISIN, BSE code) first, then by company name, so "Gandhar Oil" becomes GANDHAR. Capped at 200 resolved symbols per call. Fragments are never guessed at. The response splits three ways: `watchlist` (added), `unmatched` (no match), and `ambiguous` (two or more plausible matches, returned WITH their candidates so you can ask the user which they meant rather than picking one). Space-separated company names cannot be split reliably -- "GANDHAR OIL SAVITA OIL" is one fragment, not two -- so ask the user for one per line or comma-separated if a paste comes back unmatched. Re-adding a symbol already on the watchlist is a no-op, not an error. Requires an authenticated caller; see `get_watchlist` for the auth error shape.
add_to_watchlist
Use this when the user wants to browse market-wide disclosure types, such as order receipts or fundraises, before calling get_announcement_bucket. List the market-wide BSE announcement discovery buckets (id + label). Each bucket groups a real-world disclosure type (e.g. "order-receipts", "fundraise", "credit-rating", "acquisitions", "management-changes") across the WHOLE market — the inverse of get_stock_events, which is scoped to one company. Pass a bucket id to get_announcement_bucket to fetch its recent filings.
list_announcement_buckets
Use this when the user needs the list of Indian market indices DalalOS covers. List the market indices for which constituent membership is cached.
list_indices
Use this when the user asks about an Indian company's BRSR (Business Responsibility and Sustainability Report) or ESG disclosures. Get BRSR (Business Responsibility & Sustainability Report) ESG disclosures for a stock. Accepts NSE symbol, ISIN, or BSE code. `years` (1..10, default 3) caps fiscal years returned, newest first. Each year gives curated KPIs grouped as `emissions` (Scope 1/2 + intensity), `energy`, `water`, `waste`, `social` (female board/KMP %, LTIFR, fatalities, POSH complaints, CSR spend, ...), `governance`, and `meta` — each `{value, unit}`, raw as filed with SEBI. `include_raw=True` also returns the full ~800-concept BRSR map exactly as disclosed. SEBI's mandatory ESG filing for the top 1000 listed companies (LODR Reg 34(2)(f)). Raw disclosed figures only — never an ESG score, rating, or verdict (SEBI-RA line). Coverage starts from whenever the nightly refresh began ingesting the company's BRSR.
get_brsr
Use this when the user asks about bulk or block trades in an Indian stock on the NSE. Get NSE bulk/block trade disclosures for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `deal_type` optionally narrows to "bulk" or "block" (omitted returns both); `days` (1..1825, default 90) bounds the trailing window; `limit` (1..500, default 100) caps rows returned, newest first. Each row is a raw disclosed (symbol, counter-party, direction) record: `client_name`, `buy_sell` ("BUY"/"SELL"), `quantity`, `price`, and `remarks` (bulk only). NSE's feed reports one row per counter-party + direction, not a matched buyer/seller pair — there is no official "buyer paired with seller" record. Only NSE's most-recently-published trading day is fetched upstream (no reachable historical bulk/block archive), so coverage starts from whenever the nightly refresh job began running, not further back.
get_bulk_block_deals
Use this when the user asks which Indian companies recently announced a given kind of disclosure, for example order wins or fundraises, across the whole market. Get every company that filed a matching BSE announcement in a trailing window, market-wide. `bucket` is one of the ids from list_announcement_buckets (e.g. "order-receipts", "fundraise"). `days` (1..90, default 7) bounds the trailing window over filing date. Returns newest first across the WHOLE universe (not one security). Metadata only — the raw disclosed subject/headline plus a link to the source BSE filing; no PDF parsing, no verdicts. Capped at 200 rows; `truncated: true` means more announcements matched the window than were returned (narrow `days` to see the rest) — `total_scanned` reports the true match count, uncapped. Each event carries its `news_id` — pass it to get_filing_extract for that filing's extracted facts. When filing prefetch is enabled, an MCP call may enqueue background extraction for eligible listed filings and count accepted jobs against the caller's per-day on-demand cap. The listing response does not wait for extraction.
get_announcement_bucket
Use this when the user asks which macro or commodity factors an Indian company depends on, based on reviewed exposure mappings. Return one company's REVIEWED macro-factor exposures, labelled via the factor catalog. Cache-only, read-only: the company's reviewed ``company_exposures`` rows joined to the ``factor_registry`` catalog, so each exposure carries its factor label/description/dimension alongside the disclosed pathway (directness/direction/lag/mechanism) and source evidence. This is a DIFFERENT tool from ``get_company_macro_exposures`` (two similarly-named tools): this one is the plain, raw per-company evidence listing — no ``as_of_date``/factor filter, no live PPAC/FBIL macro window, no eligibility signals. ``get_company_macro_exposures`` is the signal-eligibility tool that evaluates those exposures against a complete official macro window. Neither ever claims a macro move caused or will cause an earnings/price/investment outcome (SEBI-RA line). A company with no reviewed exposures returns an empty success envelope.
get_company_exposures
Use this when the user asks how an Indian company listed on NSE or BSE has performed financially: revenue, profit, margins, balance sheet, cash flow or growth, quarterly or annual. Not for non-Indian companies; for a period-by-period growth series use get_financial_trends. Get consolidated financials (P&L + balance sheet), TTM, and computed margins. Accepts an NSE symbol, ISIN, or BSE code. `period_type` is "quarterly" (default) or "annual". Banks/NBFCs/insurers return an interest-income template (NII / interest income) instead of Revenue / EBITDA. Returns raw line items and mechanically-computed ratios only — no valuation verdicts. Also includes a `growth` section (annual YoY plus 3y/5y CAGR for revenue / net income / EBITDA / EPS) — a single summary block layered on top of these levels, NOT a per-period series; for a period-by-period QoQ/YoY growth, margin-delta, and reportable-segment trend series instead, see `get_financial_trends`. The `growth` section here is sign-aware (a loss base/endpoint is Not Meaningful rather than a garbage %), EPS share-adjusted across splits/bonuses, with a `base_effect` flag when a tiny prior-year base inflates the YoY. A `null` inside a present growth metric (as opposed to the metric being absent, which means <2 annual periods are cached) means the growth figure is Not Meaningful for that metric this period — most commonly because the prior-year base (or a CAGR endpoint) was a loss, making a percentage change mathematically undefined or misleading; it is not a data gap. When that is the cause, a sibling `*_not_meaningful_reason` field (e.g. `yoy_not_meaningful_reason: "prior_period_loss"`) makes it explicit rather than leaving the `null` to be misread as "no data available". Also carries three multi-period histories (independent of `period_type`/`limit` — always the full annual history): `interest_coverage_history` (per-year interest-coverage trend, general-only, omitted for banks/NBFCs/insurers or a newly-listed filer), `book_value_history` (per-year book value per share plus a P/B "band" against the actual historical price near each period, not general-only), and `working_capital_ratios` (always present: general filers get inventory/receivable/payable days and cash conversion cycle when the latest annual inputs are available; financial institutions receive an explicit not-applicable note). Cash flow: each period carries `cash_flow_available` — Indian BSE-XBRL quarterly filings never include a cash-flow statement (only annual filings do), so it is `false` on every period for the default `period_type="quarterly"`; a top-level `cash_flow_note` explains this when no displayed period has cash-flow data. Call with `period_type="annual"` for populated `operating_cash_flow`/`free_cash_flow`/`capex` figures. Provenance: each period carries `source` — `"bse-xbrl"` for a post-listing exchange filing, or `"drhp"` for a newly-listed company's pre-listing years (restated figures from its IPO prospectus, audited per SEBI ICDR requirements). The envelope's own `source` is the shared value, or `"mixed"` when a window straddles both; a `drhp_periods_note` explains it further whenever any displayed period is DRHP-sourced.
get_financials
Use this when the user asks what an Indian company listed on NSE or BSE is: its sector, industry, market cap and a headline financial summary. Get a company profile: identity, sector/industry, market snapshot, and TTM summary. Assembled from cached security master + quotes + financials. Accepts NSE symbol, ISIN, or BSE code. `fundamentals` is None when no financials are cached yet; `market` is None when no quote is cached. When present, `market` carries `currency` ("INR") and, only when a split/bonus fell inside the trailing 52 weeks, `week52_adjustments` — the same treatment get_stock_quote gives its own snapshot. Both `market` and `fundamentals` may carry caveat fields (e.g. `market.valuation_notes`, `fundamentals.ttm.basis_note`, `fundamentals.latest_period_income.non_recurring_items_note`) when a figure is suppressed or driven by a one-off/non-recurring item — always surface these alongside the figure they annotate rather than the bare number. `market.bse_reported`, when present, carries BSE's OWN published ROE/operating margin/net margin — a DIFFERENT, BSE-computed figure (not necessarily the same period or consolidated/standalone basis) from `fundamentals`' XBRL-derived ratios. Cross-check/ fallback signal only — never the same number as the computed `roe`/margins.
get_company_profile
Use this when the user wants a sourced overview of an Indian company listed on NSE or BSE: identity, key facts, recent disclosures and calculations in one report, each linked to its source. Get a source-linked, read-only canonical company report for one security. Accepts an NSE symbol, ISIN, BSE code, or company name. `days` (1-365, default 90) is the reporting window that selects which recent disclosures are in scope. Returns the validated `company_report_v1` model as the envelope `data`: company identity, source-linked `facts` with `citations`, mechanically-computed `calculations`, evidence-referenced `claims`, materiality-bucketed `events`, and a `coverage` block that names any missing reviewed mapping rather than implying non-disclosure. This is DalalOS's own consolidated report over its cached exchange filings + reviewed exposure/peer mappings. Read-only: assembled entirely from cache, no upstream fetch and no LLM call. Every number in a claim references the fact/calculation supporting it, and NO verdict, target price, or buy/sell language can appear — the canonical validator rejects such a report before it is ever built (SEBI research-analyst boundary). An unresolvable query (or a required input with nothing cached) returns `reason_code="not_found"`; an out-of-range `days` returns `invalid_argument`.
get_company_report
Use this only to confirm the DalalOS connection is working. DalalOS health check. Returns a success envelope to confirm the server is reachable.
ping
Use this when the user asks about an Indian company's past splits, bonuses, dividends or other corporate actions. For upcoming events across the market use get_market_calendar. Get the disclosed corporate-action timeline for ONE STOCK, HISTORICAL (splits, bonuses, dividends, etc.) — the per-stock, backward-looking sibling of get_market_calendar (whole- market, any window, all event types merged) and get_upcoming_results (whole-market, forward- only results convenience). Use this tool, not get_market_calendar, when you want one company's corporate-action history rather than a market-wide view. Accepts NSE symbol, ISIN, or BSE code. `years` (1..20, default 5) bounds the window. `types` optionally filters to a subset of action types. Newest first; raw disclosures.
get_corporate_actions
Use this when the user asks how recent DalalOS data is, or when a figure looks stale. Report cache freshness: last successful refresh per data domain and overall health. Every scraper-backed domain (including fii_dii and the ipos family) carries a staleness threshold matched to its real refresh cadence, so a domain whose scraper job silently stops running gets flagged stale rather than reporting `max_age_hours: null` forever.
get_data_freshness
Use this when the user asks how much of an Indian stock's traded volume was taken for delivery, and how that has trended. Get the delivery-volume / delivery-percentage trend for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `days` (1..1825) bounds the lookback window. Returns the raw delivery quantity and delivery % time series from the NSE bhavcopy.
get_delivery_trends
Use this when the user asks whether and when an Indian company paid or declared a dividend, or about its dividend yield. Get the cash-dividend history for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `years` (1..15, default 5) bounds the window. Returns disclosed dividend amounts per share with ex-dates. Raw disclosures only. `annual_totals` (fiscal-year, Apr-Mar buckets) also carries a dividend-YIELD HISTORY: each bucket's `fy_end_price_date`/`fy_end_price` (the closing price on/before that FY's 31 March year-end) and `dividend_yield` (that FY's total dividend / that FY-end close) — None when no price history reaches that far back yet.
get_dividends
Use this when the user asks which Indian stocks are in the NSE futures-and-options ban period today. Get the full NSE F&O securities-in-ban list for the most-recently-published trading day. Market-wide, not per-underlying — no `query` argument. This is the whole-list companion to `get_derivatives_positioning`'s per-symbol `in_ban_list` flag: use this tool when you want everything currently banned in one call, rather than checking symbols one at a time. Returns `ban_date` (the snapshot's date) and `symbols` (one entry per banned name, each with `nse_symbol` and `isin` — None for index names, which carry no security-master row). Raw NSE-published ban list verbatim — no "avoid these" framing or interpretation (SEBI-RA line).
get_fno_ban_list
Use this when the user asks how FIIs, DIIs, proprietary traders or clients are positioned in NSE futures and options across the whole market. Get NSE participant-wise (FII/DII/Pro/Client) F&O open interest & volume — market-wide. `days` (1..366, default 30) bounds the trailing window. Each row is one (trade_date, client_type) pair with raw long/short contract counts across futures-index, futures-stock, options-index-call/put, and options-stock-call/put, for both `oi` and `volume`. This is a DIFFERENT, derivatives-side signal from `get_market_fii_dii_flow` (market-wide daily CASH-segment net flow) — it is the highest-confidence official substitute for FII/DII derivatives positioning (NSE's cash-market feed does not cover F&O). Raw counts only — no "smart money"/positioning-bias interpretation (SEBI-RA line).
get_fo_participant_activity
Use this when the user asks what FIIs and DIIs have been buying or selling in Indian equities day by day across the whole market. Not for a company's ownership percentage; use get_shareholding. Market-wide DAILY FII/DII net cash-flow (Rs crore), NSE cash (Capital Market) segment. NOT the shareholding data: get_shareholding gives per-company QUARTERLY FII/DII holding PERCENTAGES; this gives market-wide DAILY net buy/sell/net value in Rs crore -- e.g. "FIIs net sold Rs 2,340 Cr, DIIs net bought Rs 1,890 Cr" for a given trading day. `from_date`/ `to_date` are optional ISO dates (default: trailing ~30 days); `segment` is "cash" only. For NSE participant-wise F&O positioning, use `get_fo_participant_activity`. Raw figures; `net = buy - sell` is the only computation, with no interpretation added. The envelope's `source` reflects actual per-call provenance: recent dates are NSE-live (`source="nse"`), older dates come from a one-time historical backfill by a secondary public source, since NSE publishes no bulk cash-history archive (each row's `source` names its origin), and a query window spanning both returns `source="mixed"`.
get_market_fii_dii_flow
Use this when the user asks about daily FII flow by sector in the historical CDSL data, which stops at March 2025. For current sector flows use get_sector_fpi_investment. Daily FII/FPI net flow (raw Rs), aggregated by sector -- the sector-wise breakdown. Scope-keyed alongside its siblings: get_market_fii_dii_flow is market-wide with no sector dimension; get_stock_fii_flow is per-stock; get_shareholding is per-company QUARTERLY holding %. This is DAILY, per-sector, TRANSACTION flow, joined from the stock-level fii_fpi_stock_flow table against securities.sector (the same sector field get_company_profile/get_sector_overview use). `from_date`/`to_date` are optional ISO dates (default: trailing ~30 days, capped at 366); `sector` optionally narrows to one sector name. `net = buy - sell` is the only computation (SEBI-RA line). COVERAGE CAVEAT: sourced from CDSL's Trade-Wise Equity Data of FII/FPI ONLY -- NSDL's per-stock trade data is not ingested, so this is a PARTIAL view of FII/FPI activity by sector, not the whole market's figure (every response carries a `coverage_note` saying so). CDSL stopped publishing after March 2025, so nothing later exists here: for current sector-level FPI flow across both depositories use get_sector_fpi_investment (fortnightly).
get_sector_fii_flow
Use this when the user asks which Indian sectors foreign portfolio investors are buying or selling, using fortnightly NSDL data. Fortnightly FPI net investment and assets under custody by sector, from NSDL's Fortnightly Sector-wise FPI Investment data. Covers every FPI across BOTH depositories (NSDL and CDSL), 2012 onward -- the current sector-level FPI source; get_sector_fii_flow's CDSL feed stopped publishing after March 2025. Scope-keyed alongside its siblings: get_market_fii_dii_flow is market-wide DAILY cash flow; get_sector_fii_flow / get_stock_fii_flow are DAILY CDSL-only transaction flow; get_shareholding is per-company QUARTERLY holding %. This is FORTNIGHTLY, per NSDL sector. `from_date`/`to_date` are optional ISO dates matched to each fortnight's period_end (default trailing ~6 months; capped at 5 years unless `sector` is given); `sector` narrows to one NSDL label (case-insensitive; 'Grand Total' is NSDL's all-sector row); `instrument` picks one column (default equity; also debt_general, debt_vrr, debt_far, hybrid, aif, total, mf_equity, mf_debt, mf_hybrid, mf_solution_oriented, mf_other); `include_subsectors` adds pre-2022 nested sub-sector rows, which are already included in their parent. Each row is `{period_start, period_end, taxonomy, sector, row_kind, parent_sector, instrument, net_inr_cr, net_usd_mn, auc_inr_cr, auc_usd_mn}` as NSDL published it (INR crore / USD million; null = not published). Sector labels switch to BSE's Common Industry Classification from 2022-04-30 (`taxonomy` marks it) and are NSDL's own, not securities.sector. No computation beyond row selection.
get_sector_fpi_investment
Use this when the user asks for official FBIL reference rates of the rupee against USD, GBP, EUR, JPY or AED, for example the USD to INR rate. Daily FBIL INR reference rates (USD/GBP/EUR/JPY/AED/IDR against INR). `currency_pair` optionally filters to one pair (e.g. `"USD/INR"`, case-insensitive). `from_date`/`to_date` are optional ISO dates (default: trailing 30 days). Each row is `{rate_date, currency_pair, unit_base, rate, source}` — `rate` is always "INR per `unit_base` units of the foreign currency" (unit_base is 1 for USD/GBP/EUR/AED, 100 for JPY, 10000 for IDR — FBIL's own published denomination, never silently rescaled). FBIL's public feed only serves a rolling ~2-day window with no bulk history archive found, so a fresh deploy accretes this table forward one scheduled refresh at a time — a wide window may legitimately return far fewer rows than the window implies.
get_fx_reference_rates
Use this after get_filing_extract when the user wants the earlier state behind an order, capacity or similar event in a filing. Return cached prior-state context for a canonicalized filing event. Use after get_filing_extract for an order, capacity or other supported event. The result retains source quotes and reports only deterministic historical links; it does not infer price correlation, business causality, or an investment conclusion. Cache-only: no fetches, extraction requests, or writes occur on this tool path. ``event_family`` additionally carries the persisted family TIMELINE — every cached filing in this disclosure thread, in filing order — and ``open_questions`` lists the factual follow-ups still unanswered by those filings (e.g. a required contract value the company has not disclosed), each with the filing that raised it and, once answered, the filing that resolved it. Both are raw, source-linked groupings of the company's own disclosures: never a verdict, target, forecast or recommendation.
get_event_context
Use this when the user asks for the contents or a summary of one specific BSE filing of an Indian company, using a news_id from get_stock_events. It may queue processing and use a small daily allowance. Get the cached PDF-extraction for one BSE corporate filing. Accepts NSE symbol, ISIN, or BSE code + a BSE news_id. Obtain the `news_id` from get_stock_events, which lists a security's recent filings each carrying its `news_id`. Returns cached grounded facts + a factual summary extracted from the filing PDF. On a cache miss for any filing that has an attached PDF, calling this tool ENQUEUES on-demand extraction. It waits (up to ~30 seconds) only when the queue estimate says the result can be ready in that time; otherwise it returns at once with `status="pending", queued=true`, `retry_after_seconds` and, when known, an `eta_seconds` estimate from the current queue and recent run times — call again after that long to retrieve the facts. Extraction often takes a few minutes, so to read several filings of one company use get_filing_extracts (up to 10 news_ids per call) rather than polling this tool per filing. Extraction works for ANY filing with a PDF, not a fixed doc-type list — EXCEPT financial-results filings, which return `not_queued` reason `results_available_via_financials` (+ a `see_instead` pointer) because their figures come from XBRL via get_financials / get_financial_trends, not PDF extraction. Every `pending` response carries a `reason_code` that stays consistent across repeat polls of the same news_id: `on_demand_processing` (this tool's own trigger enqueued it, or moved an already-queued automatic job up to on-demand priority, and it is still queued/running — keep polling), `auto_backfill_processing` (already being processed by automatic extraction, not this tool — keep polling), or `awaiting_auto_backfill` (not yet queued, but eligible for a future sweep). Other cache-miss statuses: `not_queued` reason `no_document_to_extract` (no PDF), `not_queued` reason `on_demand_quota_exceeded` (authenticated caller hit its per-day on-demand cap — retry tomorrow, or read `attachment_url` directly), or `failed` (retries exhausted; see `error_reason`). Every cache-miss response includes `attachment_url` to read the filing PDF directly. Raw disclosed facts with verbatim source quotes only — no verdicts, targets, or recommendations.
get_filing_extract
Use this when the user asks for quarter-on-quarter or year-on-year growth and margin trends of an Indian company period by period. Get multi-period growth and margin trends for an Indian stock. Levels-vs-deltas division: this tool returns a PER-PERIOD time series (QoQ/YoY growth, `net_margin_delta`, `fcf_growth`, and per-period reportable-segment breakdowns, one row per displayed period) — not the latest levels or a summary growth/CAGR block. For the current P&L/balance-sheet levels, TTM, and a single summary `growth` section (annual YoY plus 3y/5y CAGR), see `get_financials` instead. Accepts NSE symbol, ISIN, or BSE code. `period_type` is "quarterly" (default) or "annual"; `limit` (1..12) caps the periods, newest first. Returns level fields plus QoQ/YoY growth and margins — mechanically computed, no verdicts. Each period carries `source` (`"bse-xbrl"` post-listing vs `"drhp"` pre-listing/prospectus-restated for a newly-listed company); the envelope's own `source` is the shared value or `"mixed"`.
get_financial_trends
Use this when the user names an Indian company, NSE symbol, BSE code or ISIN and you need to identify the listed security before calling another tool. Not for US or other non-Indian stocks. Find Indian stocks by company name, NSE symbol, BSE code, or ISIN. Returns matching securities with their ISIN, internal company_id, name, and both exchange codes. Use this first when a ticker is unknown or ambiguous, then pass a returned `nse_symbol` / `isin` / BSE code as the `query` argument to any other per-stock tool. Tolerant matching: a company-name/symbol typo still surfaces a suggestion, a truncated/ partial ISIN or BSE code matches via prefix, and a former/retired name or symbol (e.g. a pre-rename company name) resolves to the security's current identity, with `resolved_via` on the result naming which kind of resolution fired.
search_stocks
Use this when the user asks about open interest, put-call ratio or futures and options positioning for an Indian stock or an index such as NIFTY or BANKNIFTY. Get NSE F&O (futures & options) positioning for one underlying. Accepts an NSE symbol, ISIN, or BSE code for a stock, OR a raw F&O underlying/index name (e.g. "NIFTY", "BANKNIFTY") that has no security-master row of its own. Returns the latest trading day's aggregate: `futures_oi`/`futures_oi_change`, `call_oi`/ `put_oi`, `pcr` (put_oi / call_oi — a mechanically-computed ratio, not a signal), `total_volume`, and `in_ban_list`. Raw NSE bhavcopy figures only — no OI-buildup interpretation or bullish/bearish framing (SEBI-RA line).
get_derivatives_positioning
Use this when the user asks about Indian IPOs: upcoming, open, awaiting listing or recently listed. List IPO/public-issue records: upcoming, open, listing pending, or recently listed. `status` optionally filters to `upcoming`, `open`, `listing_pending`, or `listed` (omitted returns all four); an unknown value is a bad_request. Unlike most fields, `status` is derived at READ TIME from dates versus today (IST) and a listed-security match. A passed planned listing date without that evidence is `listing_pending`, never `listed`. `limit` (1..500, default 100) caps the result. Each entry carries price band, face value, lot size, issue size, open/close/listing dates, issue price, listing price (once listed), category-wise subscription x-times (QIB/NII/Retail/Employee) where disclosed, a DRHP/prospectus link, and a mechanically-computed `listing_gain_pct` = (listing_price - issue_price) / issue_price (null pre-listing). Sourced from BSE (api.bseindia.com) and SEBI public-issue filings — official sources only. No Grey Market Premium (GMP) field anywhere: GMP has no official exchange source, so it is deliberately excluded (SEBI-RA line — raw facts and mechanical arithmetic only, never a verdict).
get_ipos
Use this when the user asks which stocks are in an Indian index such as NIFTY 50 or NIFTY Bank. List the constituent stocks of an Indian market index (e.g. NIFTY 50, NIFTY 500). `index` is matched exactly to a known index name — get the valid names from list_indices. `limit` (1..500) caps the returned constituents. Returns the member securities with identifiers (each `nse_symbol`/`isin` can be passed as the `query` to any per-stock tool).
list_index_constituents
Use this when the user wants valuation and returns across the stocks in an Indian index at a glance. Not for ranking by return; use get_top_movers. Get valuation + multi-horizon returns for the constituents of an Indian market index. `index` is matched exactly to a known index name (e.g. NIFTY 50, NIFTY 500) — get the valid names from list_indices. `limit` (1..500) caps the returned constituents, sorted by market cap desc. Each row carries market_cap/pe/pb plus precomputed 1d/1w/1m/3m/6m/1y returns, and any Tier-C structural-event flags on those returns (`return_flags`) or a lack of price history (`incomplete_windows`) — the two are mutually exclusive and together explain every null return. Mechanical facts only — no rankings.
get_market_heatmap
Use this when the user asks for an Indian index's PE, PB or dividend yield over time, for example whether NIFTY 50 is expensive relative to its history. NSE's own daily OHLC + P/E + P/B + Div Yield time series for one named index. `index` is matched case-insensitively against NSE's own published index names (e.g. "Nifty 50", "Nifty Bank", "Nifty IT", "Nifty Auto", "Nifty FMCG", "India VIX" — use get_india_vix for a VIX-specific shape). `from_date`/`to_date` are optional ISO dates (default: trailing ~30 days; window capped at 1825 days). Sourced from NSE's own daily `ind_close_all` file, which carries NSE's ALREADY-COMPUTED P/E, P/B, Div Yield for every index it publishes — sector indices (Nifty Bank, Nifty IT, ...) give an official NSE sector-valuation band, a DIFFERENT figure from get_sector_overview's peer-derived median_pe/median_pb (this project's own aggregate over its tracked universe, grouped by a different taxonomy) — the two are independent, neither validates the other. An unrecognized `index` returns `reason_code: "no_data"` with `available_indices_hint` (every index name NSE publishes) — see also list_index_valuations. Raw NSE-published figures only.
get_index_valuation
Use this when the user asks about the India VIX, the NSE volatility index, today or over a period. NSE's daily India VIX (volatility index) OHLC time series. `from_date`/`to_date` are optional ISO dates (default: trailing ~30 days; window capped at 1825 days). Each row is `{trade_date, open, high, low, close, points_change, pct_change}` — VIX has no P/E, P/B, dividend yield, volume, or turnover, so those keys are omitted rather than returned null.
get_india_vix
Use this when the user asks for official Indian macro data: CPI inflation, WPI, IIP, GDP or the crude-oil basket price. Official macro/sector indicators: MOSPI CPI, WPI, IIP (monthly), GDP (annual), and PPAC's Indian Basket crude-oil price (monthly). `dataset` is required: `"cpi"` (headline Consumer Price Index by sector/division), `"wpi"` (headline Wholesale Price Index — overall + food index only), `"iip"` (Index of Industrial Production by category), `"gdp"` (GDP level + growth rate, current/constant prices, one row per published estimate vintage — First/Second Advance, Provisional, Revised), or `"crude_basket"` (PPAC's Indian Basket crude-oil monthly average price, USD/bbl). Any other value is a `bad_request`. `from_period`/`to_period` bound the window (`"YYYY-MM"` for cpi/wpi/iip/crude_basket, the fiscal-year string e.g. `"2024-25"` for gdp); `series_contains` substring-filters `series_key` (e.g. `"Food"`, `"Manufacturing"`, `"GDP Growth Rate"`; a no-op for crude_basket, which has only one series). `limit` (1..2000, default 200) caps the result, newest period first. Raw published index values/growth percentages/commodity prices only (SEBI-RA line) — no directional commentary ("inflation is high", "oil is expensive").
get_macro_indicators
Use this when the user needs the names of Indian indices that have PE, PB and dividend-yield history. List every NSE index name tracked (headline, broad-market, sector/thematic, India VIX). Each entry carries `{index_name, latest_trade_date, latest_close}`. Powers get_index_valuation's `available_indices_hint` and lets you discover NSE's exact index-name spelling before calling it.
list_index_valuations
Use this when the user asks how an Indian company is exposed to a macro factor such as crude oil, rates or currency, with official context signals. Return cached company macro pathway evidence and eligible official context signals. Signals are emitted only when an active, reviewed, sourced company exposure passes the factor policy against a complete official PPAC Indian Basket or FBIL USD/INR window. This is conditional context only: it never states that a macro move caused or will cause an earnings, price, or investment outcome. Missing evidence is returned as explicit coverage, not inferred.
get_company_macro_exposures
Use this when the user asks how many Indian stocks advanced, declined or were unchanged on a trading day. Whole-market advance/decline/unchanged breadth: how many NSE-listed securities moved up/down/flat on a trading day. `from_date`/`to_date` are optional ISO dates (default: trailing ~30 days; window capped at 366 days). Each row is `{trade_date, advances, declines, unchanged, total}`, sourced from NSE's own live market-data feed. NSE publishes no bulk historical archive for this figure, so history only extends as far back as this server has been capturing it — an empty result for a genuinely old date is expected, not a bug. Raw counts only — no "risk-on/risk-off" or breadth-based market-direction commentary (SEBI-RA line).
get_market_breadth
Use this when the user asks what events are scheduled or happened across Indian markets in any date window: results, board meetings, dividends, splits. Get a unified, WHOLE-MARKET calendar of disclosed events across all NSE/BSE securities, over an ARBITRARY window (past or future). Use this instead of get_upcoming_results when you need a past window or multiple event types together; use get_upcoming_results instead when you just want a forward results window with a sector filter (a scoped convenience over the same results data this tool also reads). For ONE company's historical corporate-action timeline, use get_corporate_actions instead — that tool is per-stock; this one is market-wide. `date_from`/`date_to` are ISO dates (YYYY-MM-DD); `date_to` must be on or after `date_from` and the window is capped at 180 days. `types` optionally filters to a subset of `results, dividend, split, bonus, demerger, ipo` (plus the remaining corporate-action disclosure types: consolidation, rights, buyback, spinoff, merger, distribution, other) — an unknown type is a bad_request. Each event is `{date, type, isin, nse_symbol, name, detail}`, merged from results_calendar (results) and corporate_action_events (everything else) and sorted chronologically; `limit` (1..2000, default 500) caps the merged result. `ipo` is a stub — no IPO data source exists yet, so it always returns zero rows with an explanatory note. Raw disclosed facts only — no verdicts, no importance ranking beyond your own type filter.
get_market_calendar
Use this when the user asks for an Indian company's disclosed operating figures such as order book, order inflow, capacity or other business KPIs over time. Return cached, source-grounded operating KPI history for one company. Coverage distinguishes company-disclosed values from ``not_disclosed`` fields. It never infers a current order book from a new order and never fetches or writes on this read path.
get_company_operating_metrics
Use this when the user compares an Indian company listed on NSE or BSE with similar companies on valuation, margins, returns or debt (PE, PB, debt-to-equity, ROE). For an explainable peer set rather than a table use get_relevant_peers. Compare a stock against its sector/industry peers on valuation metrics. Auto-identifies the peer group and returns a side-by-side table (Mkt Cap, PE, PB, Revenue TTM, net / EBITDA margin, ROE, ROA, ROCE, interest coverage, D/E, the EV bundle — EV, EV/EBITDA, EV/EBIT and the EV-based earnings yield — plus the cash-flow ratios P/CF, P/FCF and FCF yield), sourced entirely from cache. EBITDA-margin and the EV bundle are DELIBERATELY general-only (None for banks/NBFCs/insurers — an intentional validity- matrix decision: EBIT/EBITDA are not meaningful add-backs for a financial's P&L). Cash-flow ratios are NOT gated that way and populate for any peer disclosing an annual cash flow — including banks/NBFCs/insurers. The one exception is bank capex specifically: P/FCF and FCF yield are structurally unavailable for BANK peers whose only cached annual filing predates a capex-mapping fix (banks tag capex under a different XBRL concept than the general template; the mapping now covers it, but existing cached rows need a backfill re-scrape to pick it up) — P/CF (which doesn't need capex) is unaffected either way. Each row also carries `piotroski_f_score` (0-9, general-only; None for banks/NBFCs/ insurers) and `altman_z_score` (general-only; None for banks/NBFCs/insurers, and for a general filer whenever any of the five classic-formula inputs is undisclosed for that security). The explanatory text for WHY a score is None is never repeated per row — it is deduplicated across the whole peer set and surfaced once at `data.notes.{piotroski_f_score,altman_z_score}` (a list of the distinct reasons actually present in the table). A row with an implausible figure (e.g. a corrupted P/B or a unit-slipped market cap) is marked `valuation_suspect` and excluded from the table-level `peer_medians`; a row within 52 weeks of a rights issue/demerger/merger is marked `ratios_incomplete` (see the table-level `ratios_caveat`), and a row whose margins are dominated by a one-off exceptional/discontinued item is marked `non_recurring_items` (also excluded from `peer_medians`). `grain_widened`/`size_banded` indicate whether the peer set fell back to the broader SEBI industry grain or was restricted by the market-cap size band. Each row also carries `bvps` (book value per share, NOT general-only); the full per-period BVPS + P/B history is get_financials-only.
get_peer_comparison
Use this when the user asks what ready-made screens are available, before calling run_preset_screen. List the fixed, nightly-precomputed preset screens (name/description/cache freshness). Presets are FIXED mechanical filter combinations (never live-queried, never ranked or labelled as a recommendation) — a discovery starting point a caller can further filter via screen_stocks itself. Use run_preset_screen(name) to fetch one preset's actual results.
list_preset_screens
Use this when the user wants past share prices of an Indian company listed on NSE or BSE over a period, daily, weekly or monthly, for example to chart or compare a move. Get the OHLC + volume price-history series for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `days` (1..1825) bounds the lookback window. Set `adjusted=True` for split/bonus-adjusted closes; default is raw close. `interval` is 'daily' (default), 'weekly', or 'monthly' (weekly/monthly resample the adjusted daily series). EOD from the NSE bhavcopy. `currency` is always "INR". Each bar carries `sma_50` and `sma_200`, computed from daily split/bonus-adjusted (both modes) closes before resampling, plus a mechanically-computed `vwap` (turnover / volume, None when either is missing/zero); vwap is not rescaled by the split/bonus adjustment factor (turnover/volume are raw flow figures, identical in raw and adjusted mode).
get_price_history
Use this when the user asks how much of an Indian company's promoter holding is pledged and how that has changed. Get the promoter share-pledge percentage trend for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `limit` (1..16) caps the most-recent periods. Returns the reported pledged-percentage time series. Raw disclosures only. Each period carries `pledge_disclosed`: false means this quarter's pledge field wasn't present in the underlying filing (a null `pledged_pct` reads as "not disclosed", not "zero pledge") — a real 0.0 is only reported when `pledge_disclosed` is true.
get_pledge_trend
Use this when the user wants end-of-day prices or ratios for several Indian stocks at once (up to 20), for example to line up peers. Get EOD quotes for up to 20 Indian stocks in one call (peer benchmarking). Each item carries the same fields as get_stock_quote (currency, vwap, bse_reported, any valuation_notes/ratios_caveat/dividend fields) plus `status` and `error` keys, so an unresolved or uncached symbol is reported per-item rather than failing the whole batch.
get_batch_quotes
Use this when the user asks what an Indian company has announced or filed on the exchange recently: results, orders, board meetings, fundraising, acquisitions or other disclosures. Get recent BSE corporate announcements (SEBI Reg-30 disclosures) for an Indian stock. Accepts NSE symbol, ISIN, or BSE code. `days` (1..365, default 30) bounds the trailing window over filing date; `category` optionally narrows to one BSE category (e.g. "Board Meeting", or "Insider Trading / SAST" for promoter/KMP insider buy-sell and pledge creation/invocation/revocation disclosures). Returns disclosure metadata — subject, headline, category, filing time, and a link to the source PDF on BSE. Metadata only; the filings themselves are not parsed or summarised. Quarterly results aren't here — use get_financials for those. Capped at 200 rows; `truncated: true` means more filings matched the window than were returned (narrow `days`/`category` to see the rest) — `total_scanned` reports the true match count, uncapped. Each event includes a `news_id` (the BSE filing GUID). To read the extracted facts and a factual summary of a specific filing, pass that `news_id` to get_filing_extract. When filing prefetch is enabled, an MCP call may enqueue background extraction for eligible listed filings and count accepted jobs against the caller's per-day on-demand cap. The listing response does not wait for extraction.
get_stock_events
Use this when the user asks who an Indian company's real peers or competitors are and why. For a valuation table of peers use get_peer_comparison. Return an explainable peer set for operating, financial, or valuation comparison. Uses reviewed, provenance-backed business tags and overrides plus cached factual metrics. The existing get_peer_comparison table remains the broader SEBI-classification comparison. This tool may return fewer peers when business-model evidence is insufficient; it never presents a same-industry label as proof of comparability, and returns no investment conclusion.
get_relevant_peers
Use this when the user asks to remove stocks from their DalalOS watchlist. Changes only the user's own saved list. Remove one or more stock symbols from the caller's DalalOS watchlist in a single call. Use this when the user says "stop watching X", "remove X from my watchlist", or "clear my watchlist" (call get_watchlist first, then pass every returned symbol here in one call). This is DalalOS's own watchlist, tied to the caller's DalalOS account. `symbols` accepts either a list of strings (mirrors `add_to_watchlist`, capped at 200 symbols per call) or a single bare string (kept for one release for backward compatibility with older single-symbol callers). A partial match -- some symbols on the watchlist, some not -- never fails the call: the response reports `{"removed": [...], "not_found": [...]}` so the caller can see exactly which symbols were actually removed. Requires an authenticated caller; see `get_watchlist` for the auth error shape.
remove_from_watchlist
Use this when the user wants the latest result of a named ready-made screen from list_preset_screens. Return the last nightly-precomputed result for one registered preset screen. `name` must be one of the names returned by list_preset_screens. A preset that has never been computed yet returns an empty result with reason_code "no_data". Cache-only — this is the stored output of an equivalent screen_stocks(filters=...) call, not a live query.
run_preset_screen
Use this when the user's screen needs OR logic, arithmetic between two metrics or a screen expression that screen_stocks filters cannot express. Screen the Indian security universe with one free-form DalalOS screen expression. Reach for this instead of screen_stocks when the ask needs OR, arithmetic between two metrics, or a comparison screen_stocks' fixed `<metric>_min`/`_max` keys cannot express — e.g. `Return on capital employed > 22% AND (Debt to equity < 0.5 OR Interest Coverage Ratio > 8)`. screen_stocks stays the right tool for a plain AND-combined set of range filters. `dialect` picks the vocabulary and is never guessed: "screener" (default) reads common screener ratio names in the units a screener page DISPLAYS — `> 22%` against a ratio stored as a fraction, market cap in crore — while "dalalos" reads canonical DalalOS metric ids in the units the cache stores. The metric catalogue for both is GET /v1/ratios; an unrecognised name comes back as an explicit error naming the phrase, never a silent substitution. Query syntax and metric names: https://dalalos.in/docs/screener and https://dalalos.in/docs/screener/ratios. Operators: AND, OR, = != > < >= <=, + - * /, and COALESCE, IF, LEAST, POWER, ABS, SQRT, LOG. Missing values follow SQL three-valued logic: a bare comparison against an unknown value does NOT match, `COALESCE(<metric>, 0) > x` does, and `A > x OR B > y` can still match on the right side alone. Division by zero is a missing value, not an error. Paging is pinned to one published metrics generation. Each response reports it as `pagination.snapshot_id`; pass that value back as `snapshot_id` on the next page. If a metrics refresh published a new generation in between, the call fails with `snapshot_expired` and the current generation rather than mixing rows from two of them — restart from `offset` 0. `sort_by` is a sortable metric id; ordering puts unknown values last and ends with an ISIN tie-break, so pages never duplicate or skip a row. Returns matching securities with the screened metrics — data only, no recommendations.
screen_by_query
Use this when the user needs historical detail from an Indian company's earlier filings, for example a prior order value or commissioning date. Search this company's already cached official filings, page by page. Use after get_stock_events/get_filing_extract when you need historical context, such as a prior commissioning date, original order announcement, customer, project, or tender. This is cache-only: it never downloads a filing or triggers extraction. Results retain a source page and original BSE attachment URL; `coverage` tells you how much page-preserving history is indexed and explicitly reports parsed legacy filings that cannot be searched reliably yet.
search_company_disclosures
Use this when the user asks how an Indian sector or industry looks in aggregate: number of companies, market cap, valuation and returns. Get an aggregate market overview by sector (or a finer SEBI grain). Omit `sector` to list all groups; pass one to drill in. `grain` is "sector" (default), "igroup" (SEBI Industry), or "isubgroup" (SEBI Basic Industry, the finest grain). Returns count, total market cap, and median/mean PE and median PB per group — computed from cached quotes. Aggregates only.
get_sector_overview
Use this when the user wants summaries of several filings of one Indian company at once (up to 10 news_ids from get_stock_events). It may queue processing and use allowance. Get the cached PDF-extractions for several BSE filings of ONE company in one call. Accepts NSE symbol, ISIN, or BSE code + a list of up to 10 BSE news_ids (from get_stock_events). Use this instead of calling get_filing_extract once per filing. Each entry in `filings` (in request order) is exactly what get_filing_extract returns for that filing: extracted facts with verbatim source quotes when cached, otherwise `pending` / `not_queued` / `failed` with the same `reason_code` values. Every uncached filing with a PDF is ENQUEUED for on-demand extraction in this one call (each enqueue counts against the caller's per-day on-demand cap; once the cap is reached the rest return `not_queued` reason `on_demand_quota_exceeded`). This tool never waits. When some filings are still `pending`, the response lists them in `pending_news_ids` with one shared `retry_after_seconds`: call this tool again after that long with just `pending_news_ids`. `counts` tallies the entries by status. To keep the response small, a cached filing past the size budget comes back as a stub listed in `omitted_for_size`; fetch it with get_filing_extract (it is cached, so no new extraction). A news_id that is not this company's filing returns `status="request_error"` without failing the batch. Raw disclosed facts with verbatim source quotes only — no verdicts, targets, or recommendations.
get_filing_extracts
DalalOS ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve DalalOS's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are DalalOS alternatives on ChatGPT?
As of 2026-10-28, DalalOS competes with AeonData, Aiera, AIR Credit Intelligence, Alpha Vantage, ALPHAPORT.AI, AlphaYou - Market Intelligence, AnnuityRatesHQ, Balanços.AI and 69 more in ChatGPT Institutional Financial Data & Equity Research Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.