Use this skill to generate a deep, source-backed, insight-rich fundamental analysis of an Indian listed stock for long-term investors. The final output must be a single self-contained Markdown document ready to save as an .md file.
Operating objective
Produce a high-quality Indian stock research note covering: business quality, growth, financial health, returns, valuation, peers, ownership and governance, sector-cycle/macro sensitivity, liquidity, and clear pros/cons. The skill must emphasize insight, not just data collection.
Non-negotiable rules
- Use Indian market context only.
- No price prediction, no target price, no buy/sell/hold language, and no recommendation of any kind.
- Do not fabricate any number. If unavailable, write
DATA UNAVAILABLE. - Every material metric must cite a source such as NSE, BSE, Screener.in, annual report, earnings transcript, investor presentation, credit rating note, or credible financial news.
- Prefer live web data. If live data is unavailable, clearly state
DATA UNAVAILABLEorFigures from limited context; verify independently on NSE/BSE/Screener.in. - Every key financial metric must be cross-referenced from at least 2 independent sources during research. If only 1 source is available, mark it
[single-source]in the report. If 0 sources, mark itDATA UNAVAILABLE. - Separate verified facts from interpretation.
- Keep the tone factual, analytical, and long-term oriented.
- Scenario analysis may be included only as historical-trend-based illustration, not as a forecast.
- Do not use vague hype words like "multibagger", "sure winner", "must buy", or "hidden gem".
- Do not hide uncertainty. Missing or weakly supported points must be called out explicitly.
- You MUST save the final report as a
.mdfile using the Write tool (or platform equivalent). Printing the report to chat without saving it to a file is a skill violation. The file name must follow the pattern{TICKER}_{YYYY-MM-DD}.mdin the current working directory. - You MUST use parallel research agents for data collection (Phase 1). Do not collect all data sequentially in the main agent. Single-agent data collection is a skill violation.
- Every metric in the final report must carry its as-of date or reporting period. Do not present numbers without time context. See "Data freshness" section for format.
Trigger behavior
When invoked, ask exactly one question and wait:
- Which stock? Company name or NSE/BSE ticker.
Do not begin analysis until the answer is provided. If the stock identifier is ambiguous, ask a clarifying question before research.
Input contract
Required: stock_identifier (company name or NSE/BSE ticker).
No other inputs. The skill always analyses across two fixed horizons — 5 years and 10 years. This ensures both medium-term trajectory and long-term structural risks are covered. The user does not choose a horizon — the skill reveals what both timeframes show.
Research workflow
Research is a phased funnel. Each phase gates the next. Do not skip ahead.
Preferred sources
Use these in priority order. Higher-ranked sources win when numbers conflict.
- NSE India, BSE India (official filings, shareholding, corporate actions)
- Screener.in (consolidated financials, ratios, peer sets)
- Tickertape (valuation, technicals, mutual fund holdings)
- Moneycontrol (earnings, news, analyst commentary)
- Annual reports, investor presentations
- Earnings call transcripts
- Credit rating agencies (CRISIL, ICRA, CARE, India Ratings)
- Reputable financial news (ET, Livemint, Business Standard)
Source fetching guide
Do not blindly web-search "NSE INFY financial data". Use direct URL patterns and API endpoints. This saves search calls and returns structured data.
Verified source availability (tested April 2026):
| Source | Fetch method | Notes |
|---|---|---|
| NSE India | Works — via Bash curl with session cookies | Official source. Requires 2-step cookie flow. See recipe below. |
| Screener.in | Works — via WebFetch | Predictable URLs, rich consolidated data |
| Tickertape | Works — via WebFetch | Slug varies, may need search |
| Moneycontrol | Unpredictable URLs | Always needs web search + WebFetch |
NSE India (primary — official data via curl)
NSE uses Akamai bot protection. WebFetch will not work. Use the Bash tool with curl instead. The flow requires two steps: establish a session, then hit API endpoints.
Critical curl requirements (all three are mandatory):
--compressedflag — NSE sends gzip-encoded responsesAccept-Encoding: gzip, deflate— do NOT includebr(brotli). Most curl builds lack brotli support and will receive garbled data.- Session cookies — first request to
https://www.nseindia.comestablishes cookies, subsequent API calls reuse them.
NSE curl template — base form for both steps:
curl -s --compressed \
-b /tmp/nse_cookies.txt -c /tmp/nse_cookies.txt \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36' \
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
-H 'Accept-Language: en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Referer: https://www.nseindia.com/get-quotes/equity?symbol={SYMBOL}' \
-H 'Sec-Ch-Ua: "Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"' \
-H 'Sec-Ch-Ua-Mobile: ?0' \
-H 'Sec-Ch-Ua-Platform: "macOS"' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Site: same-origin' \
'https://www.nseindia.com{ENDPOINT}'
Step 1 — Session init (run once): Remove -b flag (keep only -c), add -o /dev/null, change Accept to text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8, change Sec-Fetch-Dest to document, Sec-Fetch-Mode to navigate, replace Sec-Fetch-Site with none, add Sec-Fetch-User: ?1 and Upgrade-Insecure-Requests: 1, remove Referer, set URL to https://www.nseindia.com.
Step 2 — API calls: Use the template as-is, substituting {ENDPOINT} and {SYMBOL}.
Verified working endpoints (tested April 2026 with TCS):
| Endpoint | Data returned | Use for |
|---|---|---|
/api/quote-equity?symbol={SYMBOL} |
CMP, open/high/low/close, 52w range (with dates), P/E, sector P/E, P/B, market cap, face value, ISIN, industry, all index memberships, pre-open data | Primary price & valuation |
/api/quote-equity?symbol={SYMBOL}§ion=trade_info |
Total traded volume, traded value (₹ Cr), total market cap (₹ Cr), free-float market cap (₹ Cr), impact cost, delivery %, daily & annual volatility, VAR margin | Liquidity analysis — impact cost and delivery % are unique to NSE |
/api/equity-meta-info?symbol={SYMBOL} |
Company name, ISIN, industry, F&O eligibility, SLB eligibility, listing date, active series | Entity resolution — confirms ticker, F&O status |
/api/NextApi/globalSearch/equity?symbol={QUERY} |
Search results with symbol, company name matches | Ticker resolution from user input |
/api/NextApi/apiClient/GetQuoteApi?functionName=getSymbolData&marketType=N&series=EQ&symbol={SYMBOL} |
Order book, CMP, OHLC, 52w range, total market cap, free-float market cap, face value, impact cost, delivery %, traded volume/value | Richest single endpoint — superset of quote-equity + trade_info |
/api/NextApi/apiClient/GetQuoteApi?functionName=getMetaData&symbol={SYMBOL} |
Company name, symbol, ISIN, industry, listing date, F&O status | Metadata |
/api/NextApi/apiClient/GetQuoteApi?functionName=getYearwiseData&symbol={SYMBOL}EQN |
Price change %: 1W, 1M, 3M, 6M, 1Y, 2Y, 3Y, 5Y + same for benchmark index | Historical price performance — vs Nifty 50 |
/api/NextApi/apiClient/GetQuoteApi?functionName=getIndexList&symbol={SYMBOL} |
All indices the stock belongs to (Nifty 50, Nifty IT, etc.) | Index membership for liquidity classification |
/api/NextApi/apiClient/GetQuoteApi?functionName=getSymbolChartData&symbol={SYMBOL}EQN&days=1D |
Intraday price data points | Chart data (optional) |
/api/equity-stockIndices?index=NIFTY%20IT |
All constituents of the index with their last price, change %, P/E, 52w range | Sector P/E comparison — every stock in the index |
Note on identifier format: Some NextApi endpoints use {SYMBOL}EQN (e.g., TCSEQN). This is {NSE_SYMBOL}{SERIES}{MARKET} where series is EQ and market is N (NSE).
Not available via API (use Screener.in/Tickertape instead):
- Shareholding pattern (NSE corporate filing pages return HTTP2 errors as of April 2026)
- Financial results (quarterly/annual P&L — not exposed via API)
- Board meeting filings
- Corporate actions history
If the session expires (API returns empty or HTML instead of JSON), re-run Step 1 to get fresh cookies. Sessions typically last 5-15 minutes.
Screener.in (secondary — fills gaps NSE doesn't cover)
Predictable URLs via WebFetch — no search needed:
- Main:
https://www.screener.in/company/{SYMBOL}/consolidated/(use/consolidated/by default; drop it for standalone-only companies) - Peers: append
#peersto the above URL
Contains: P/E, P/B, market cap, dividend yield, ROCE, ROE, face value, book value, 10Y financials (revenue, profit, EPS, OPM), quarterly results, balance sheet, cash flow, shareholding, peer comparison, segment revenue breakdown. Primary source for multi-year financials, quarterly EPS, balance sheet, cash flow, ROE/ROCE, shareholding trends, and peer comparison — data NSE's API does not expose.
Tickertape (tertiary — cross-reference)
Always resolve the slug first — do not guess it. Web-search site:tickertape.in {NSE_SYMBOL} stock to get the canonical URL, then fetch that URL. The slug format ({company-name}-{SYMBOL}) is inconsistent across stocks and guessing will produce 404s.
Contains: current price, P/E, P/B, EV/EBITDA, market cap, dividend yield, free cash flow, peer comparison with sector averages, mutual fund holdings count, shareholding pattern, 52-week range.
Moneycontrol (for qualitative data)
URL unpredictable — always web-search: site:moneycontrol.com {COMPANY NAME} stock overview. Best for: earnings call transcripts, management commentary, news, analyst estimates — qualitative data not on NSE/Screener.in/Tickertape.
General fetching rules
- NSE curl: official price, valuation, liquidity (most authoritative). Screener.in: multi-year financials, ratios, shareholding, peers. Tickertape: cross-ref valuation and MF holdings. Moneycontrol: qualitative data (transcripts, commentary, news).
- Record the actual URL or endpoint fetched as the source citation — not just "NSE India".
Phase 0 — Entity resolution (main agent, mandatory first step)
Before any data collection, resolve and lock the entity:
- Establish an NSE session first (run the Step 1 curl from the Source fetching guide). Then resolve the ticker:
- If user gave a ticker: fetch
/api/equity-meta-info?symbol={TICKER}via curl. This returns company name, ISIN, industry, F&O status, and listing date. - If user gave a company name: fetch
/api/NextApi/globalSearch/equity?symbol={NAME}via curl. Pick the best match, then fetch equity-meta-info to confirm. - Cross-check with Screener.in:
https://www.screener.in/company/{SYMBOL}/consolidated/(WebFetch) to confirm the entity and get additional data. From these, lock: NSE symbol, full company name, ISIN, sector/industry, F&O eligibility, listing date.
- If user gave a ticker: fetch
- Lock the reporting basis: consolidated or standalone. Screener.in shows both — if
/consolidated/returns data, use consolidated. This choice is final and must be passed to all 4 agents. Every agent must fetch data matching this basis only. If a source only shows the other basis, mark those values[wrong basis — discard]. - Confirm the sector and industry classification from the NSE equity-meta-info response (industry field) and Screener.in.
- Classify the company's segment structure using the latest annual report or investor presentation:
- Single-segment: One business line contributes >85% of revenue. Treat as a pure-play. No segment-level analysis needed.
- Multi-segment: 2+ segments each contributing >15% of revenue. Segment-level analysis is mandatory (see "Multi-segment company rules" section).
- Record for each material segment: segment name, revenue (₹ Cr), % of total revenue, EBIT or EBITDA if disclosed, and primary sector classification.
- Note the latest reported quarter and annual report year available.
- Check for corporate actions (stock splits, bonus issues, mergers/demergers) in the last 10 years. Screener.in's company page and NSE corporate actions data both show these. Record any split/bonus with date and ratio (e.g., "10:1 split Sep 2018", "1:1 bonus Jun 2022"). This list is passed to Agent B and used in Phase 2 to verify historical data is adjusted.
If any ambiguity remains (e.g., multiple entities with similar names, recent merger/demerger), ask the user before proceeding.
Only after entity resolution is complete, proceed to Phase 1. The segment classification from this phase controls whether multi-segment rules activate in all downstream sections.
Phase 1 — Parallel data collection (multi-agent)
NSE curl ownership: Only Agent A uses NSE curl endpoints. It inherits the session cookie file (/tmp/nse_cookies.txt) created during Phase 0. Agents B, C, and D use Screener.in, Tickertape, Moneycontrol, and web search only — no NSE curl. This avoids cookie contention from parallel writes to the same file.
Dispatch 4 research agents in parallel using the Agent tool (or platform equivalent). Each agent works independently and returns structured data. All 4 agents must be launched in a single parallel tool call — do not run them sequentially. The main agent must pass the resolved NSE symbol, company name, and cookie file path (for Agent A only) so agents can construct URLs directly (see "Source fetching guide").
Every agent must follow these rules:
- Use the Source fetching guide URL patterns to fetch data directly. Do not blindly web-search when a direct URL is available.
- For each metric collected, record:
metric name,value,source URL (the actual URL fetched, not just the site name),as-of date or reporting period. - If a metric is not found, return
DATA UNAVAILABLE— do not estimate or leave blank. - Search at least 2 different sources for every key metric. Record both values.
- If sources disagree, report both values and flag the conflict. Do not resolve it — the main agent resolves conflicts in Phase 2.
- Do not interpret or analyse. Just collect, attribute, and return.
Agent A — Price, size, and valuation
Collect:
- Live CMP, 52-week high, 52-week low, market cap (₹ Cr), face value
- P/E (TTM), P/B, EV/EBITDA — current values
- P/E, P/B, EV/EBITDA — sector averages
- P/E, P/B, EV/EBITDA — company's own 5-year high, low, and median
- Dividend yield (current), dividend per share (last 3 years), payout ratio
- Average daily trading volume (1-month, 3-month)
- Average daily traded value in ₹ Cr (1-month, 3-month)
Primary: NSE quote-equity + trade_info + sector index. Secondary: Screener.in consolidated. Cross-ref: Tickertape (EV/EBITDA, sector averages, MF holdings). See Source fetching guide for all URLs.
Agent B — Financials and health
Consolidated-level (always collect):
- Revenue, net profit, EBITDA — last 5 annual periods
- EPS (diluted) — last 8 quarters with YoY change
- EBITDA margin, net profit margin — last 5 annual periods
- Revenue CAGR (3Y, 5Y), net profit CAGR (3Y, 5Y), EPS CAGR (3Y, 5Y)
- Free cash flow — last 3 annual periods
- Debt-to-equity ratio, interest coverage ratio, current ratio — current and 5-year trend
- ROE and ROCE — current, 3-year average, 5-year average
- Any material one-time items, other-income spikes, or non-cash adjustments in recent results
Corporate action adjustment (mandatory): The main agent passes a list of splits/bonuses from Phase 0. For all per-share metrics (EPS, DPS, book value):
- Verify that historical values from Screener.in are split-adjusted. Screener.in usually adjusts automatically — confirm by checking if EPS shows a sudden discontinuity around a known split date. If pre-split EPS is ~10x (or Nx for an N:1 split) the post-split value, the data is NOT adjusted.
- If unadjusted data is detected, flag it:
[unadjusted: {split ratio} on {date}]. Do not compute CAGRs from unadjusted per-share data. - Revenue, net profit, EBITDA, and margins are NOT affected by splits/bonuses — only per-share metrics are.
Segment-level (collect only if Phase 0 classified the company as multi-segment):
- For each material segment (>15% of revenue):
- Segment revenue — last 3 annual periods
- Segment EBIT or EBITDA (whichever the company discloses) — last 3 annual periods
- Segment margin (EBIT/revenue or EBITDA/revenue) — last 3 annual periods
- Segment revenue CAGR (3Y)
- Segment capital employed or identifiable assets, if disclosed
- Source: annual report segment reporting note (Ind AS 108 / AS 17), investor presentations
Primary: Screener.in consolidated (10Y financials, quarterly results, balance sheet, cash flow, ROE, ROCE). Secondary: Tickertape (margins, ratios, FCF). Moneycontrol for quarterly commentary and one-time items. For segment data: web search annual report PDF / investor presentation. No NSE curl — Agent A handles NSE. See Source fetching guide for URLs.
Agent C — Peers and sector
Collect:
Peer identification — 3-step selection process:
Step 1 — Build a candidate list:
- Start with Screener.in's peer comparison page for the target company. This gives sector peers pre-filtered by the platform.
- Supplement with Tickertape's peer/competitor list for the same company.
- Combine into a single candidate list. Typically 8-15 names.
Step 2 — Score each candidate on 3 dimensions:
- Business-model similarity (most important): Do they earn revenue the same way? Same customer type (B2B/B2C/government)? Same core activity (manufacturing/services/platform/distribution)? A horizontal IT services company's peer is another horizontal IT services company, not an embedded software niche player.
- Market-cap proximity: Within 0.3x-3x of the target. Closer is better.
- Revenue-mix overlap: What % of the candidate's revenue comes from the same segment as the target's primary segment? Higher overlap = better peer.
Step 3 — Select the top 3:
- Rank candidates by business-model similarity first, then break ties by market-cap proximity, then revenue-mix overlap.
- For each selected peer, state in one line why it was chosen (e.g., "closest pure-play competitor in the same segment and market-cap band").
Special cases:
- Conglomerates / multi-segment companies: If the target has 2+ segments each contributing >25% of revenue, select peers for the primary segment (largest revenue share). Note in the report that peer comparison reflects the primary segment only.
- Monopolies or near-monopolies (e.g., IRCTC, CDSL, Coal India): If fewer than 2 legitimate business-model peers exist in India, do the following:
- Use whatever domestic peers exist (even if only 1 or 0).
- Fill remaining slots with the closest adjacent business-model peers and label them
[adjacent peer]— e.g., for IRCTC, an online travel platform like MakeMyTrip/EaseMyTrip, noting the business model differs. - State clearly:
True listed peers: [N]. Adjacent peers used to fill comparison: [N].Do not force-fit unrelated companies just to reach 3.
- Recently demerged or restructured entities: If the company was demerged in the last 2 years, peers should reflect the post-demerger business, not the pre-demerger parent's sector.
For each selected peer, collect:
- Company name, NSE ticker, market cap
- P/E, P/B, ROE (%)
- Revenue growth: 1Y and 3Y CAGR
- Debt-to-equity
- Why this peer was selected (1-line)
Sector-level context (separate from peer selection):
- Sector-level context: current cycle position (early/mid/peak/late/trough), major tailwinds, major headwinds
- Regulatory developments affecting the sector in the last 12 months
- Interest-rate, inflation, currency, and policy-risk sensitivity for the sector
Primary: Screener.in peers page. Cross-ref: Tickertape peers. For sector context: web search {SECTOR} India outlook {CURRENT_YEAR} from ET, Livemint, Business Standard, or industry bodies. No NSE curl — Agent A handles NSE. See Source fetching guide for URLs.
Agent D — Ownership, governance, and news
Collect:
- Latest shareholding pattern: promoter %, FII %, DII %, public %, government %
- Promoter pledging % (current and trend over last 4 quarters)
- Change in FII and DII holding over last 4 quarters (direction and magnitude)
- Board composition: number of independent directors vs total, any recent board changes
- Auditor name and any recent auditor changes
- Related-party transactions flagged in the latest annual report (if material)
- Management commentary: key quotes or themes from the latest 2 earnings calls or investor presentations
- Top 5 recent news items (last 6 months) relevant to long-term fundamentals — not daily price noise
- Any ongoing regulatory actions, SEBI orders, tax disputes, or litigation
Primary: Screener.in consolidated (shareholding trends, pledging). Secondary: Tickertape (shareholding, MF holdings, institutional depth). Cross-ref: Moneycontrol (detailed shareholding, board of directors). Web searches for: earnings call transcript (latest quarter), investor presentation (current year), SEBI/regulatory/litigation news, general news from ET/Livemint/Business Standard. See Source fetching guide for all URLs.
Agent failure protocol
When agents return, the main agent must triage before proceeding to Phase 2:
| Agent result | Action |
|---|---|
| Agent returns with data | Proceed normally to Phase 2. |
Agent returns with >50% of key metrics as DATA UNAVAILABLE |
Dispatch a replacement agent targeting the same metrics but using different sources (e.g., if Screener.in failed, try Tickertape + Moneycontrol). One retry only. |
| Agent crashes, times out, or returns an error | Log the failure. Proceed with remaining agents. The missing agent's metrics become explicit DATA UNAVAILABLE gaps in the report. Lower data confidence accordingly. |
| NSE session expired (Agent A returns empty/HTML) | Re-establish session (Step 1 curl) and dispatch Agent A again as a single retry. |
Rules:
- Maximum 1 retry per failed agent. Do not retry indefinitely.
- Never block on a retry — if a replacement agent is dispatched, proceed with Phase 2 using data from the agents that succeeded. Merge the replacement's data when it returns.
- If 2+ agents fail with no recovery, set data confidence to LOW or VERY LOW and note the blind spots prominently in the report header and View section.
Phase 2 — Review, cross-check, and merge (main agent)
After agents return (including any replacement agents), the main agent must:
- Cross-reference overlapping metrics. Agents A, B, and C will have some overlapping data points (e.g., P/E, market cap, ROE). Compare values across agents. If they match (within 5% tolerance for ratios, 2% for absolute values), use the value from the highest-priority source. If they diverge beyond tolerance, flag it in the report as a data note.
- Resolve conflicts using the source hierarchy. When two sources disagree:
- NSE/BSE filing > Screener.in > Tickertape > Moneycontrol > news articles
- More recent data > older data
- State which source was chosen and why if the divergence is material (>10%).
Reporting basis mismatch (consolidated vs standalone): This is not a data conflict — it is a basis mismatch. Before applying the source hierarchy, check whether both values use the same reporting basis (consolidated or standalone) as locked in Phase 0. Discard any value that uses the wrong basis, regardless of source rank. If Screener.in shows consolidated and Tickertape shows standalone, use the one matching Phase 0's locked basis — do not average or blend them. If a source's reporting basis cannot be determined, mark it
[basis unconfirmed]and deprioritize it.
- Tag data freshness. For each major section, note:
Data as of: [date or quarter]. If different metrics are from different periods, note this. - Identify gaps. List any metrics that came back as
DATA UNAVAILABLEfrom all agents. These become explicit blind spots in the report. - Validate internal consistency. Check that:
- Market cap ≈ CMP × shares outstanding
- P/E ≈ CMP / EPS (TTM)
- D/E direction is consistent with debt and equity trends
- Margin trends are consistent with revenue and profit trends
- If any check fails, investigate and note the discrepancy.
- Validate split/bonus adjustment. Using the corporate action list from Phase 0:
- Check that EPS, DPS, and book value series do not show sudden Nx jumps around known split/bonus dates.
- If a discontinuity is found, do NOT use the unadjusted figures for CAGR calculations or scenario analysis. Either adjust manually (divide pre-action values by the ratio) or mark the affected CAGRs as
DATA UNAVAILABLE — unadjusted historical data.
- Compile the merged dataset. Only after cross-checking, proceed to analysis and report writing.
Do not begin writing the report until Phase 2 is fully complete.
Multi-segment company rules
This section activates ONLY when Phase 0 classifies the company as multi-segment (2+ segments each >15% of revenue). For single-segment companies, skip this entirely.
Segment contribution table
Include this table in section 1.1 (Company and business):
| Segment | Revenue (₹ Cr) | % of total | EBIT/EBITDA margin | 3Y Rev CAGR | Primary sector |
|---|
How segments modify core analysis sections
Valuation (§2): Add subsection "Segment-level valuation context". For each segment, note the typical pure-play valuation range and state whether the consolidated multiple is dragged down or inflated by segment weighting. Do NOT compute sum-of-the-parts or implied per-segment value — explain the direction of blending only.
Growth (§3): After the consolidated growth table, add a segment growth table:
| Segment | Rev 3Y CAGR | Margin trend (expanding/stable/compressing) | Growth driver (1-line) |
|---|
Identify the primary growth engine vs drag. Note if segment mix is shifting (e.g., "High-margin segment's share grew from 30% to 42% over 3Y").
Health (§4): If segment-level debt/capital employed is disclosed, note which segments carry most leverage. If not: Segment-level debt attribution not disclosed. Consolidated D/E reflects the blended group.
Returns (§5): If segment-level capital employed is available, note which segments earn highest/lowest ROCE and whether consolidated ROCE is pulled up by a capital-light segment or dragged down by a capital-heavy one.
Scenario analysis (§6): Build scenarios at the consolidated level but add one bullet per scenario naming which segment drives the outcome.
What NOT to do for multi-segment companies
- Do not treat each segment as a separate stock. The analysis is still about the consolidated entity.
- Do not compute segment-level P/E, P/B, or EV/EBITDA (these require segment-level market cap or EV, which don't exist for a single listed entity).
- Do not speculate on demerger probability or value unlocking.
Qualitative red flags
Assess only material, source-based red flags such as:
- Management over-promising vs actual delivery
- Frequent auditor changes or accounting policy shifts without clear justification
- Unusual related-party transactions
- Weak board independence or regulatory-compliance concerns
- Persistent high receivables or inventory days vs peers
- Repeated capex write-downs, project delays, restructurings, or strategy drift
- One-time items, other-income spikes, or non-cash gains inflating profits
- Regulatory, tax, labour, environmental, or governance controversies
Do not add unsupported "gut-feel" warnings.
Sector-cycle and macro awareness
Assess: sector position (early/peak/late/trough), interest-rate sensitivity, inflation and input-cost exposure, currency and import/export impact, policy-risk dependence. Do not forecast interest rates, GDP, or future stock prices. Explain how these factors affect business quality, margins, balance-sheet risk, or valuation perception.
Liquidity analysis
Include a short liquidity and market-structure subsection.
Liquidity classification
| Classification | Criteria |
|---|---|
| HIGHLY LIQUID | Avg daily traded value >₹50 Cr AND in Nifty 500 AND held by 30+ MF schemes |
| MODERATELY LIQUID | Avg daily traded value ₹5-50 Cr OR in a broad index but below ₹50 Cr daily value |
| POORLY LIQUID | Avg daily traded value <₹5 Cr OR not in any major index OR held by <5 MF schemes |
If data is insufficient to classify, default to MODERATELY LIQUID and note: Liquidity classification based on limited data.
Institutional depth proxy
Instead of bid-ask spread (unavailable), use these as proxies for institutional depth:
- FII + DII combined holding >30% → strong institutional depth
- Number of MF schemes >50 → high retail-institutional overlap
- F&O eligibility → exchange considers it liquid enough for derivatives
- State whether the stock is F&O eligible.
Classification framework
Use these labels where appropriate, always with a one-line explanation:
- Valuation: CHEAP / FAIR / EXPENSIVE / MIXED
- Growth: ACCELERATING / STEADY / SLOWING / DECLINING
- Health: SAFE / WATCH / RISK / LEVERAGED
- Returns: GOOD / AVERAGE / WEAK
- Peers: LEADING / MID-PACK / LAGGING
- Liquidity: HIGHLY LIQUID / MODERATELY LIQUID / POORLY LIQUID
- Overall fundamental quality: STRONG / MODERATE / WEAK
Scenario analysis
Build 3 illustrative scenarios — Bear, Base, Bull. The same anchoring applies to both the 5Y and 10Y horizons; the difference is the compounding implication.
What to model
Each scenario covers exactly 3 metrics: Revenue CAGR, EBITDA margin (average), EPS CAGR.
How to anchor each scenario
Do not invent growth rates. Derive from the company's own history:
| Scenario | Revenue CAGR anchor | Margin anchor | EPS CAGR anchor |
|---|---|---|---|
| Bear | Worst rolling 3Y CAGR from the last 10 years (or available history) | Lowest annual EBITDA margin in the last 5 years | Worst rolling 3Y EPS CAGR from available history |
| Base | 5Y trailing CAGR (most recent) | 5Y average EBITDA margin | 5Y trailing EPS CAGR |
| Bull | Best rolling 3Y CAGR from the last 10 years | Highest annual EBITDA margin in the last 5 years | Best rolling 3Y EPS CAGR from available history |
If 10 years of data is not available, use whatever history exists and note the limitation.
How to compute rolling 3Y CAGRs
Agent B collects annual revenue, net profit, and EPS for the last 5–10 years. The main agent computes rolling CAGRs during report writing (not during data collection).
Given annual data points [Y0, Y1, Y2, ..., Yn] where Y0 is the oldest year:
- A 3Y CAGR starting at Yi =
(Y(i+3) / Yi)^(1/3) - 1 - Slide the window: compute for every possible 3Y span in the dataset
- From the resulting list, pick the worst (bear) and best (bull)
Example with 6 years of revenue (FY20–FY25):
Windows: FY20→FY23, FY21→FY24, FY22→FY25
CAGRs: 12.1%, 8.3%, 18.7%
Bear anchor: 8.3% (FY21→FY24)
Bull anchor: 18.7% (FY22→FY25)
The Base case uses the most recent 5Y CAGR: (FY25 / FY20)^(1/5) - 1.
Important: Use split-adjusted per-share values for EPS CAGR (see Phase 2 step 6). Revenue and EBITDA are not affected by splits.
Output format
| Scenario | Rev CAGR | EBITDA margin | EPS CAGR | Historical basis |
|---|---|---|---|---|
| Bear | X% | Y% | Z% | [which period this mirrors, e.g., "mirrors FY19-22 slowdown"] |
| Base | X% | Y% | Z% | [e.g., "trailing 5Y average"] |
| Bull | X% | Y% | Z% | [e.g., "mirrors FY16-19 expansion phase"] |
After the table, add 6 bullets — two per scenario (one for 5Y, one for 10Y):
- 5Y implication: What this scenario means if sustained for 5 years — near-term compounding quality, margin risk, relevance for medium-term investors.
- 10Y implication: What this scenario means if sustained for 10 years — long-term structural compounding, whether the business model endures, relevance for patient capital.
The same CAGR compounding at different horizons tells very different stories. A bear-case 5% EPS CAGR is tolerable over 5Y but devastating over 10Y for a stock trading at 40x P/E.
Hard prohibitions
- Do NOT compute a future stock price, implied market cap, or target valuation under any scenario.
- Do NOT multiply projected EPS by any P/E multiple.
- Do NOT use words like "likely", "expected", "should reach", "target", or "guaranteed".
- Do NOT extrapolate beyond 10 years.
- If the company has fewer than 3 years of history (recently listed), skip scenario analysis entirely and state:
Scenario analysis omitted — insufficient operating history.
Insight rules
Insight quality
- Every section must go beyond raw numbers and explain what those metrics mean for a long-term investor.
- Use plain-English insight bullets to show what is strong, what is weak, and why it matters.
- Avoid generic statements unless backed by metrics, comparisons, and explanation.
- If valuation looks unusually cheap or expensive, explain what the market may be pricing in.
Insight in every section
After every major metric table, add 1-2 short bullets explaining: how the point affects long-term risk, return potential, and why it matters relative to surrounding metrics.
Pros and cons discipline
In the final View section: 3-5 key strengths, 3-5 key risks/watch points, 1 concise balanced summary sentence. Keep the tone neutral and analytical.
Writing style
No hard word limit. Every section must be present in full. Quality is not compromised for brevity. But density is mandatory — every sentence must carry data or insight. Apply these rules:
Tables first, prose second
- Lead every section with the standardized table. The table is the primary content.
- Insight bullets follow the table. They explain why the data matters, not what the data says — the reader can read the table.
- Do not restate table values in prose. "
ROE is 22.4%" after a table row showing ROE = 22.4% is waste.
One bullet, one point
- Each insight bullet makes exactly one claim backed by one data point or comparison.
- Bad: "The company has strong margins, good returns, and solid growth." — three claims, zero data.
- Good: "EBITDA margin (28.3%) is 6pp above the 5Y sector median (22.1%) — suggests pricing power." — one claim, two data points, one inference.
No filler
Do not write:
- "It is worth noting that..." — just state it.
- "As mentioned earlier..." — don't reference other sections.
- "Overall, the company..." — the View section summarizes; other sections don't need mini-summaries.
- "This is an important metric because investors often look at..." — the reader knows; skip the preamble.
- "Let us now look at..." / "Moving on to..." — section headings handle transitions.
Plain English
- Write for a reader who understands finance but prefers clarity over jargon.
- Prefer "debt is 1.8x equity" over "the leverage ratio stands at 1.8x."
- Prefer "FII holdings fell 3.2pp in 2 quarters" over "There has been a notable decline in foreign institutional investor participation."
Data density
- Every insight bullet must contain at least one number, percentage, ratio, or comparison.
- Bullets without data are not insights — they are opinions. Remove them.
- If a section has nothing quantitative to say, mark it
DATA UNAVAILABLErather than filling it with qualitative padding.
Output contract
You MUST write the final report to a file. This is not optional.
- Build the full Markdown report in memory.
- Save using the Write tool to
{TICKER}_{YYYY-MM-DD}.mdin the current working directory. NSE ticker uppercase, today's date. - Confirm the file path to the user.
Do not output the full report to chat, wrap in code fences, output HTML, or ask whether to save — just save it. If the Write tool fails, output the report to chat with: ⚠ FILE SAVE FAILED — copy this output manually.
Fixed heading template
If multi-segment (per Phase 0): add segment tables in §1.1, §2, §3, §4, §5 as specified in Multi-segment company rules.
Use this exact structure:
[Stock Name] – Fundamental Analysis1. Snapshot
1.1 Company and business
1.2 Key price and size metrics
1.3 Liquidity and market structure
2. Valuation
2.1 Multiples vs sector and history
2.2 Valuation signal
2.3 Why the market may be pricing this way
3. Growth
3.1 Revenue, profit, EPS, margin trends
3.2 EPS – last 8 quarters
3.3 Growth insight (pros and cons)
4. Health
4.1 Balance-sheet and liquidity
4.2 Free cash flow and coverage
4.3 Health insight (pros and cons)
5. Returns
5.1 ROE, ROCE, dividend metrics
5.2 Return quality signal
5.3 Return-quality insight (pros and cons)
6. Scenario analysis
6.1 Bear / Base / Bull table
6.2 Scenario insight (5Y and 10Y implications per scenario)
7. Peers
7.1 Peer comparison table
7.2 Peer standing and edge
7.3 Peer insight (where this stock wins and loses vs peers)
8. Ownership
8.1 Promoter, FII, DII, pledging
8.2 Management commentary and governance notes
8.3 Ownership and governance insight (pros and cons)
9. View
9.1 Overall fundamental quality
9.2 Key strengths (3-5 pros)
9.3 Key risks / watch points (3-5 cons)
9.4 Red-flag and governance highlights
9.5 Sector-cycle and macro sensitivity insight
9.6 1-sentence summary (balanced)
10. Source Appendix
Standardized tables
Use exactly these column layouts:
Valuation: | Metric | Current | Sector avg | 5Y history | Signal | Why it matters (1-line) | Growth: | Metric | 3Y CAGR | 5Y CAGR | Trend | Insight (1-line) | 8-quarter EPS: | Quarter | EPS (₹) | YoY Δ% | Insight (1-line) | Health and coverage: | Metric | Value | 5Y trend | Signal | Insight (1-line) | Liquidity: | Metric | Value | Source | Insight (1-line) | Required rows: Avg daily traded value (₹ Cr), free-float market cap, MF schemes count, index membership, F&O eligibility. Optional rows: impact cost, delivery %. Peers: | Company | Type | P/E | P/B | ROE (%) | Rev growth (%) | D/E | Why selected (1-line) | Edge (1-word) | Insight (1-line) |
Type column values: peer (true business-model peer) or adjacent (closest available, different business model).
If the target is a monopoly/niche with no true peers, add a note row: True listed peers: [N]. Adjacent peers used: [N].
Data confidence and summary snapshot
At the top of the report include, in this order:
- A confidence note:
Data confidence: [HIGH / MODERATE / LOW / VERY LOW] — based on number of metrics backed by live sources. - The freshness block (see "Data freshness — Level 1" for exact format).
- A summary snapshot table:
| Aspect | Verdict (Signal) | Why it matters (1-line) |
|---|---|---|
| Business quality | STRONG / MODERATE / WEAK | [1-line] |
| Growth trend | ACCELERATING / STEADY / SLOWING | [1-line] |
| Financial health | SAFE / MODERATE / RISK | [1-line] |
| Valuation | CHEAP / FAIR / EXPENSIVE | [1-line] |
| Liquidity | HIGH / MODERATE / POOR | [1-line] |
| Overall quality | STRONG / MODERATE / WEAK | [1-line] |
Failure handling
If data is incomplete or weak: mark missing items DATA UNAVAILABLE, do not estimate or backfill, lower the data confidence rating, and mention material blind spots in the relevant section and the View section.
If the stock is too obscure, recently listed, thinly traded, or poorly covered: say so clearly, focus on available filings/ownership/liquidity/risk notes, and avoid false precision.
Data freshness
Financial data comes from different reporting periods. The report must make this visible to the reader at three levels:
Level 1 — Report header
At the top of the report, immediately after the data confidence note, add:
Report generated: [today's date]
Price data as of: [date/time CMP was fetched]
Latest quarterly results: [quarter, e.g., Q3 FY26 (Dec 2025)]
Latest annual report: [year, e.g., FY25]
Shareholding pattern as of: [quarter end date]
Level 2 — Section-level tags
Each major section (Valuation, Growth, Health, Returns, Peers, Ownership) must open with: Data as of: [reporting period or date]. Source: [primary source]. If mixing periods: Data as of: CMP [date], financials [quarter/year]. Source: [sources].
Level 3 — Inline flags for stale or mixed-vintage data
When a metric is materially older than surrounding data, append: [stale: Q2 FY26] (2+ quarters behind), [latest] (most recent filing), or [intraday] (live price). Example: | Debt-to-equity | 0.42 [stale: FY25 AR] | Declining | SAFE | Latest balance sheet is 9 months old; verify with Q3 filing |
Cross-referencing with freshness
During Phase 2 merge: if values differ from different reporting periods, it is a vintage mismatch — use the more recent value and note the discrepancy. If values differ from the same period, it is a true conflict — resolve using the source hierarchy.
Source appendix
Use this exact table format, grouped by source:
| Source | URL / endpoint fetched | Sections supported | Data as of |
|---|---|---|---|
| NSE quote-equity API | /api/quote-equity?symbol=TCS |
§1.2, §2.1 | 04-Apr-2026 |
| Screener.in | screener.in/company/TCS/consolidated/ |
§3, §4, §5, §7, §8 | FY25 AR |
| ... | ... | ... | ... |
Keep it to actual sources fetched — not sources listed in the skill. If a source was attempted but returned DATA UNAVAILABLE, do not include it.
Completion checklist
Before you consider this task done, verify every item:
File output:
- The
.mdfile was saved using the Write tool (not just printed to chat) - The file name matches
{TICKER}_{YYYY-MM-DD}.md - The file path was confirmed to the user
Report structure:
- All 10 sections (§1–§10) are present in the report
- Summary snapshot table is at the top of the report, immediately after the data confidence note
- Scenario analysis table exists — or is explicitly skipped with
Scenario analysis omitted — insufficient operating history - Peer table has exactly 3 peers — or has a documented exception (
True listed peers: [N]. Adjacent peers used: [N].) - No
DATA UNAVAILABLEappears in the summary snapshot table without an explanation in the corresponding "Why it matters" column
Data quality:
- Every section has a
Data as oftag - The report header includes the freshness block
- If corporate actions (splits/bonuses) occurred, all per-share CAGRs use adjusted data or are marked
DATA UNAVAILABLE — unadjusted
If any box is unchecked, you are not done. Go back and complete it.
Final note
This is a view based on fundamentals only, not investment advice.