India Equity Research Report Skill
Generates institutional-quality Buy / Sell / Hold research reports for NSE/BSE-listed stocks, grounded entirely in live data fetched from authoritative sources. Never hallucinate financial figures.
0. Pre-flight: Read the data sources reference
Before writing a single word of the report, read /mnt/skills/user/india-equity-report/references/data-sources.md (or the bundled copy at references/data-sources.md) for the definitive list of approved sources and fetch URLs. Do not use any source not listed there.
1. Workflow
Step 1 — Identify the stock
- Resolve the company name → NSE ticker (e.g., RELIANCE, INFY, HDFCBANK).
- Confirm exchange: NSE preferred; BSE fallback (prefix
BSE: if NSE unavailable).
- If ambiguous, ask the user to confirm before proceeding.
Step 1.5 — Fetch the Live CMP (MANDATORY — do this before anything else)
⚠️ CRITICAL: Screener.in's page often displays a stale cached price (e.g., it may show "13 Feb - close price" even when the report is run on Feb 27). Never use the price shown on the Screener.in page as the CMP. It is unreliable.
⚠️ CRITICAL: Yahoo Finance (HDFCBANK.NS etc.) shows US-session delayed quotes that can differ from the NSE close price by 10–15%. Do NOT use Yahoo Finance as a CMP source. It is structurally unreliable for Indian stocks.
The canonical CMP fetch method
Claude cannot execute GOOGLEFINANCE (that runs only in a live Google Sheet). Instead, use web search — Google's search result card pulls from the same Google Finance data feed and is equally reliable:
Step-by-step:
- Run
web_search: "[TICKER] NSE share price [CURRENT MONTH YEAR]" (e.g., "HDFCBANK NSE share price March 2026")
- Read the price number from the Google Finance card in the search snippet — this is the current or last-close price from Google Finance.
- If the search snippet doesn't show a clear price, run
web_fetch: https://www.tickertape.in/stocks/[company-slug]-[TICKER] — Tickertape shows a clearly date-stamped last NSE closing price.
- As an additional fallback:
web_fetch: https://www.5paisa.com/stocks/[company-slug]-share-price — 5Paisa also shows confirmed NSE close with date.
- Confirm the date: The price must be from the most recent trading day. If the date shown is more than 3 trading days old, flag it as "last available closing price as of [DATE]".
- Record it as a concrete number: e.g.,
CMP: ₹869.05 [Source: Tickertape/NSE, 4 Mar 2026]
⚠️ DO NOT write raw formulas like =GOOGLEFINANCE("NSE:HDFCBANK","price") as the CMP in the report. Always resolve these to actual fetched numbers before writing the report. The report must display real prices (e.g., ₹869.05), never spreadsheet formulas.
Do not proceed to Step 2 until you have a concrete ₹ price with a date.
Step 2 — Fetch all raw data (do this BEFORE writing the report)
Use web_search and web_fetch tools sequentially. Fetch every section below. Log each fetch with the source URL so the report can cite it.
| Data needed |
Primary source |
Fallback |
| Current price, 52w high/low, market cap |
Step 1.5 above (dedicated CMP fetch — NOT Screener.in or Yahoo Finance) |
See Step 1.5 fallback chain |
| Quarterly & annual P&L, balance sheet, cash flow |
Screener.in — https://www.screener.in/company/[TICKER]/consolidated/ |
Tickertape.in |
| Key ratios (P/E, P/B, ROE, ROCE, D/E, EV/EBITDA) |
Screener.in same page |
Trendlyne.com |
| Promoter & institutional shareholding |
Screener.in shareholding tab |
BSE filings |
| Latest quarterly results (numbers + commentary) |
BSE corporate filings: https://www.bseindia.com/stock-share-price/[COMPANY]/[TICKER]/[BSE_CODE]/ |
NSE: https://www.nseindia.com/get-quotes/equity?symbol=[TICKER] |
| Annual report / investor presentation |
Company IR page (search: "[COMPANY]" investor relations annual report site:[company].com) |
BSE filings PDF |
| Management commentary & concall highlights |
Screener.in concall transcripts tab OR web_search: "[COMPANY] Q[N] FY[YY] earnings call transcript" |
Trendlyne concall |
| News (last 90 days) |
web_search: "[TICKER] news 2026" — use only ET Markets, Mint, Business Standard, Hindu BusinessLine, CNBCTV18, Moneycontrol |
— |
| Sector / industry data |
CMIE / MOSPI / RBI reports via web_search |
IBEF.org sector reports |
| Technical indicators |
web_search: "[TICKER] technical analysis tradingview" then fetch |
Chartink.com screener |
| Peer valuation (P/E, P/B, ROE vs sector peers) |
web_search: "[COMPANY] vs peers valuation comparison [SECTOR] 2026" then fetch Trendlyne peers tab OR Tickertape comparison |
Screener.in peer comparison |
| Analyst consensus target price |
web_fetch: https://trendlyne.com/equity/[TICKER]/ — look for analyst target section (e.g., "38 analysts, target ₹1,154") |
web_search: "[TICKER] analyst target price consensus 2026" |
| Credit ratings (if applicable) |
web_search: "[COMPANY] credit rating CRISIL ICRA CARE 2026" |
— |
| Regulatory / SEBI filings |
https://www.sebi.gov.in/ or BSE announcements |
— |
⚠️ Rule: Every number in the report must be followed by [Source: <URL or publication name, date>]. If a number cannot be sourced, write "data unavailable" — never estimate or infer.
Step 3 — Analyse
Run the analysis frameworks in references/analysis-frameworks.md.
Step 4 — Write the report
Follow the report template in references/report-template.md exactly.
Mandatory additions to the Valuation section (v1.1):
- Include a peer comparison table (minimum 3 peers) showing P/E, P/B, ROE, Revenue Growth for each peer alongside the subject stock. Source from Trendlyne peers tab or Screener.in comparison.
- Include the analyst consensus target (if fetched) as a reference data point alongside your independently derived target. Do not adopt it — just cite it as market context.
Step 5 — Quality Check (MANDATORY before publishing)
Before saving the .docx and presenting it to the user, perform a self-audit across these dimensions:
5a. Price & Formula Check
5b. Data Integrity Check
5c. Formatting & Structure Check
5d. Docx-Specific Check
If any check fails, fix it before presenting the report. Do not skip this step even under time pressure — a report with raw formulas or missing data is worse than a shorter but accurate one.
2. Hallucination Prevention Rules
- No fabricated figures — All EPS, revenue, margins, P/E ratios must come from fetched pages.
- Cite every number — Inline source tag
[Source: URL, date] mandatory.
- No stale data — If a fetch returns data older than 6 months for financials, flag it explicitly.
- No analyst consensus invention — Only cite consensus if fetched from Trendlyne, Bloomberg Quint, or Refinitiv (via news articles).
- Uncertainty disclosure — If a key data point (e.g., FY25 guidance) is not found after 2 search attempts, state "Not available at time of report."
- No price targets from thin air — Target price must be derived from a visible DCF, P/E re-rating, or EV/EBITDA model using fetched numbers.
- Never display raw spreadsheet formulas in the report — The CMP and all prices must appear as concrete ₹ numbers (e.g., ₹869.05) fetched via web search/Tickertape. Never write
=GOOGLEFINANCE(...) or any formula syntax in the report body — this is a spreadsheet tool, not a report element. Never use Screener.in's displayed CMP or Yahoo Finance — both are unreliable for current NSE prices. Always obtain CMP via the Step 1.5 procedure.
3. Output format
Deliver the report as a downloadable .docx file using the docx skill, AND paste a markdown summary in chat.
Read /mnt/skills/public/docx/SKILL.md before generating the .docx output.
Report length: 1,500–3,000 words (excluding data tables).
Mandatory: Include a Live Price Snapshot box
Every report must include a clearly visible Price Snapshot box near the top (in the cover/snapshot section) showing the actual fetched prices:
📊 PRICE SNAPSHOT (as of [DATE])
CMP: ₹[actual price]
Prev. Close: ₹[actual price]
52W High: ₹[actual price]
52W Low: ₹[actual price]
Market Cap: ₹[actual value] Cr
Source: Google Finance / Tickertape (NSE)
Note: Prices reflect last NSE close. Verify current price on NSE/BSE before trading.
⚠️ All values in this box must be real numbers fetched in Step 1.5 — never write raw spreadsheet formulas (e.g. =GOOGLEFINANCE(...)) anywhere in the report. Source must be Tickertape, Google Finance card, or 5Paisa — not Yahoo Finance.
4. Tone & Style
- Write in the style of a Tier-1 Indian brokerage research report (e.g., ICICI Securities, Kotak Institutional, Motilal Oswal style).
- The reference benchmark for style and depth is a Macfos Ltd. (BSE: 543787) style report — institutional quality, conviction-driven narrative, callout boxes for key insights and risks, specific dates/numbers throughout.
- Use callout boxes (blockquotes
>) for: key channel checks or "Practitioner's Edge" insights, ⚠️ critical financial risks (e.g. negative OCF paradox), valuation risk warnings, and anomaly explanations (one-time orders, base effects).
- The Executive Summary should open with the most interesting real-world observation about the company — not a generic "Company X is a leading provider of Y." Lead with WHY the stock matters NOW.
- The Investment Verdict section must include separate, actionable guidance for (a) existing holders and (b) new investors — with specific price levels, tranching strategy, and stop-losses.
- The Scenario Analysis table (Bull/Base/Bear) is mandatory in every report.
- The Valuation section must include a peer comparison table (≥3 peers) sourced from Trendlyne or Tickertape.
- End every report with the standard SEBI disclaimer as shown in the template.
5. Benchmark Quality Dimensions
Use these 5 dimensions to self-assess report quality before delivering:
| Code |
Dimension |
Pass criteria |
| D1 |
Data Sourcing |
CMP from Step 1.5 (Tickertape/Google Finance, not Yahoo/Screener); all financials from Q-period filings with dates |
| D2 |
Structure |
Price Snapshot box ✓, Bull/Base/Bear table ✓, split Verdict ✓, peer comparison table ✓ |
| D3 |
Anti-Hallucination |
100% of figures carry [Source: URL, date]; no invented consensus targets |
| D4 |
Actionability |
Specific ₹ entry/exit/tranche levels for both new investors and existing holders |
| D5 |
Output |
.docx file in /mnt/user-data/outputs/ + markdown summary in chat |
A report scoring < 5/5 on this rubric should not be delivered. Fix failing dimensions first.
1---2name: india-equity-report3description: Generate a detailed Buy/Sell/Hold equity research report for Indian stock market (NSE/BSE listed companies). Use this skill whenever the user asks for a stock analysis, equity research, investment recommendation, target price, fundamental analysis, technical analysis, or buy/sell/hold opinion on any Indian company or stock. Triggers on phrases like "analyse [stock]", "should I buy [stock]", "research report for [company]", "target price for [stock]", "is [stock] a good buy", "NSE/BSE stock analysis", etc. Always use this skill for any Indian equity research request — even if the user just names a stock ticker or company and asks "what do you think?"4---56# India Equity Research Report Skill78Generates institutional-quality Buy / Sell / Hold research reports for NSE/BSE-listed stocks, grounded entirely in **live data fetched from authoritative sources**. Never hallucinate financial figures.910---1112## 0. Pre-flight: Read the data sources reference1314Before writing a single word of the report, read `/mnt/skills/user/india-equity-report/references/data-sources.md` (or the bundled copy at `references/data-sources.md`) for the definitive list of approved sources and fetch URLs. **Do not use any source not listed there.**1516---1718## 1. Workflow1920### Step 1 — Identify the stock21- Resolve the company name → NSE ticker (e.g., RELIANCE, INFY, HDFCBANK).22- Confirm exchange: NSE preferred; BSE fallback (prefix `BSE:` if NSE unavailable).23- If ambiguous, ask the user to confirm before proceeding.2425### Step 1.5 — Fetch the Live CMP (MANDATORY — do this before anything else)2627> ⚠️ **CRITICAL**: Screener.in's page often displays a **stale cached price** (e.g., it may show "13 Feb - close price" even when the report is run on Feb 27). **Never use the price shown on the Screener.in page as the CMP.** It is unreliable.2829> ⚠️ **CRITICAL**: Yahoo Finance (HDFCBANK.NS etc.) shows **US-session delayed quotes** that can differ from the NSE close price by 10–15%. **Do NOT use Yahoo Finance as a CMP source.** It is structurally unreliable for Indian stocks.3031#### The canonical CMP fetch method3233Claude cannot execute GOOGLEFINANCE (that runs only in a live Google Sheet). Instead, use web search — Google's search result card pulls from the same Google Finance data feed and is equally reliable:3435**Step-by-step:**36371. Run `web_search: "[TICKER] NSE share price [CURRENT MONTH YEAR]"` (e.g., "HDFCBANK NSE share price March 2026")382. **Read the price number from the Google Finance card in the search snippet** — this is the current or last-close price from Google Finance.393. If the search snippet doesn't show a clear price, run `web_fetch: https://www.tickertape.in/stocks/[company-slug]-[TICKER]` — Tickertape shows a clearly date-stamped last NSE closing price.404. As an additional fallback: `web_fetch: https://www.5paisa.com/stocks/[company-slug]-share-price` — 5Paisa also shows confirmed NSE close with date.415. **Confirm the date**: The price must be from the most recent trading day. If the date shown is more than 3 trading days old, flag it as "last available closing price as of [DATE]".426. **Record it as a concrete number**: e.g., `CMP: ₹869.05 [Source: Tickertape/NSE, 4 Mar 2026]`4344> ⚠️ **DO NOT** write raw formulas like `=GOOGLEFINANCE("NSE:HDFCBANK","price")` as the CMP in the report. Always resolve these to actual fetched numbers before writing the report. The report must display real prices (e.g., ₹869.05), never spreadsheet formulas.4546**Do not proceed to Step 2 until you have a concrete ₹ price with a date.**4748### Step 2 — Fetch all raw data (do this BEFORE writing the report)4950Use `web_search` and `web_fetch` tools sequentially. Fetch **every** section below. Log each fetch with the source URL so the report can cite it.5152| Data needed | Primary source | Fallback |53|---|---|---|54| Current price, 52w high/low, market cap | **Step 1.5 above** (dedicated CMP fetch — NOT Screener.in or Yahoo Finance) | See Step 1.5 fallback chain |55| Quarterly & annual P&L, balance sheet, cash flow | Screener.in — `https://www.screener.in/company/[TICKER]/consolidated/` | Tickertape.in |56| Key ratios (P/E, P/B, ROE, ROCE, D/E, EV/EBITDA) | Screener.in same page | Trendlyne.com |57| Promoter & institutional shareholding | Screener.in shareholding tab | BSE filings |58| Latest quarterly results (numbers + commentary) | BSE corporate filings: `https://www.bseindia.com/stock-share-price/[COMPANY]/[TICKER]/[BSE_CODE]/` | NSE: `https://www.nseindia.com/get-quotes/equity?symbol=[TICKER]` |59| Annual report / investor presentation | Company IR page (search: `"[COMPANY]" investor relations annual report site:[company].com`) | BSE filings PDF |60| Management commentary & concall highlights | Screener.in concall transcripts tab OR `web_search: "[COMPANY] Q[N] FY[YY] earnings call transcript"` | Trendlyne concall |61| News (last 90 days) | `web_search: "[TICKER] news 2026"` — use only ET Markets, Mint, Business Standard, Hindu BusinessLine, CNBCTV18, Moneycontrol | — |62| Sector / industry data | CMIE / MOSPI / RBI reports via `web_search` | IBEF.org sector reports |63| Technical indicators | `web_search: "[TICKER] technical analysis tradingview"` then fetch | Chartink.com screener |64| **Peer valuation (P/E, P/B, ROE vs sector peers)** | `web_search: "[COMPANY] vs peers valuation comparison [SECTOR] 2026"` then fetch Trendlyne peers tab OR Tickertape comparison | Screener.in peer comparison |65| **Analyst consensus target price** | `web_fetch: https://trendlyne.com/equity/[TICKER]/` — look for analyst target section (e.g., "38 analysts, target ₹1,154") | `web_search: "[TICKER] analyst target price consensus 2026"` |66| Credit ratings (if applicable) | `web_search: "[COMPANY] credit rating CRISIL ICRA CARE 2026"` | — |67| Regulatory / SEBI filings | `https://www.sebi.gov.in/` or BSE announcements | — |6869> ⚠️ **Rule**: Every number in the report must be followed by `[Source: <URL or publication name, date>]`. If a number cannot be sourced, write "data unavailable" — never estimate or infer.7071### Step 3 — Analyse7273Run the analysis frameworks in `references/analysis-frameworks.md`.7475### Step 4 — Write the report7677Follow the report template in `references/report-template.md` exactly.7879**Mandatory additions to the Valuation section (v1.1):**80- Include a **peer comparison table** (minimum 3 peers) showing P/E, P/B, ROE, Revenue Growth for each peer alongside the subject stock. Source from Trendlyne peers tab or Screener.in comparison.81- Include the **analyst consensus target** (if fetched) as a reference data point alongside your independently derived target. Do not adopt it — just cite it as market context.8283### Step 5 — Quality Check (MANDATORY before publishing)8485Before saving the .docx and presenting it to the user, perform a self-audit across these dimensions:8687#### 5a. Price & Formula Check88- [ ] CMP is a real ₹ number (e.g., ₹869.05) — **not** a formula like `=GOOGLEFINANCE(...)`89- [ ] No spreadsheet formula syntax anywhere in the report body90- [ ] Price Snapshot box contains actual fetched numbers, not placeholders91- [ ] CMP date is the most recent trading day (flag if >3 days old)92- [ ] CMP source is Tickertape, Google Finance card, or 5Paisa — **NOT** Yahoo Finance or Screener.in price field9394#### 5b. Data Integrity Check95- [ ] Every financial figure has an inline source tag `[Source: URL, date]`96- [ ] No figures marked "data unavailable" that could reasonably be found with one more search — if so, do that search now97- [ ] Screener.in price field was ignored (only historical financials used from there)98- [ ] Yahoo Finance was not used for CMP99- [ ] No analyst consensus figures invented — only cited if fetched from Trendlyne or news articles100- [ ] Peer comparison table is present in the Valuation section with sourced figures101102#### 5c. Formatting & Structure Check103- [ ] All section headers from the report template are present104- [ ] Scenario Analysis table (Bull/Base/Bear) is included105- [ ] Investment Verdict has separate guidance for (a) existing holders and (b) new investors, with specific price levels106- [ ] Executive Summary opens with a specific, compelling observation — not a generic company description107- [ ] SEBI disclaimer is present at the end108- [ ] No misplaced or broken markdown (stray `#`, `**`, `>` outside intended sections)109- [ ] Tables are properly formatted and all columns align110111#### 5d. Docx-Specific Check112- [ ] Read `/mnt/skills/public/docx/SKILL.md` before generating the .docx113- [ ] File saved to `/mnt/user-data/outputs/` and presented via `present_files` tool114- [ ] Markdown summary also pasted in chat115116> If any check fails, fix it before presenting the report. Do not skip this step even under time pressure — a report with raw formulas or missing data is worse than a shorter but accurate one.117118---119120## 2. Hallucination Prevention Rules1211221. **No fabricated figures** — All EPS, revenue, margins, P/E ratios must come from fetched pages.1232. **Cite every number** — Inline source tag `[Source: URL, date]` mandatory.1243. **No stale data** — If a fetch returns data older than 6 months for financials, flag it explicitly.1254. **No analyst consensus invention** — Only cite consensus if fetched from Trendlyne, Bloomberg Quint, or Refinitiv (via news articles).1265. **Uncertainty disclosure** — If a key data point (e.g., FY25 guidance) is not found after 2 search attempts, state "Not available at time of report."1276. **No price targets from thin air** — Target price must be derived from a visible DCF, P/E re-rating, or EV/EBITDA model using fetched numbers.1287. **Never display raw spreadsheet formulas in the report** — The CMP and all prices must appear as concrete ₹ numbers (e.g., ₹869.05) fetched via web search/Tickertape. Never write `=GOOGLEFINANCE(...)` or any formula syntax in the report body — this is a spreadsheet tool, not a report element. **Never use Screener.in's displayed CMP or Yahoo Finance** — both are unreliable for current NSE prices. Always obtain CMP via the Step 1.5 procedure.129130---131132## 3. Output format133134Deliver the report as a **downloadable `.docx` file** using the `docx` skill, AND paste a markdown summary in chat.135136Read `/mnt/skills/public/docx/SKILL.md` before generating the .docx output.137138Report length: 1,500–3,000 words (excluding data tables).139140### Mandatory: Include a Live Price Snapshot box141142Every report must include a clearly visible **Price Snapshot** box near the top (in the cover/snapshot section) showing the actual fetched prices:143144```145📊 PRICE SNAPSHOT (as of [DATE])146 CMP: ₹[actual price]147 Prev. Close: ₹[actual price]148 52W High: ₹[actual price]149 52W Low: ₹[actual price]150 Market Cap: ₹[actual value] Cr151 Source: Google Finance / Tickertape (NSE)152Note: Prices reflect last NSE close. Verify current price on NSE/BSE before trading.153```154155> ⚠️ All values in this box must be **real numbers fetched in Step 1.5** — never write raw spreadsheet formulas (e.g. `=GOOGLEFINANCE(...)`) anywhere in the report. Source must be Tickertape, Google Finance card, or 5Paisa — not Yahoo Finance.156157---158159## 4. Tone & Style160161- Write in the style of a Tier-1 Indian brokerage research report (e.g., ICICI Securities, Kotak Institutional, Motilal Oswal style).162- The reference benchmark for style and depth is a Macfos Ltd. (BSE: 543787) style report — institutional quality, conviction-driven narrative, callout boxes for key insights and risks, specific dates/numbers throughout.163- Use **callout boxes** (blockquotes `>`) for: key channel checks or "Practitioner's Edge" insights, ⚠️ critical financial risks (e.g. negative OCF paradox), valuation risk warnings, and anomaly explanations (one-time orders, base effects).164- The **Executive Summary** should open with the most interesting real-world observation about the company — not a generic "Company X is a leading provider of Y." Lead with WHY the stock matters NOW.165- The **Investment Verdict section** must include separate, actionable guidance for (a) existing holders and (b) new investors — with specific price levels, tranching strategy, and stop-losses.166- The **Scenario Analysis table** (Bull/Base/Bear) is mandatory in every report.167- The **Valuation section** must include a peer comparison table (≥3 peers) sourced from Trendlyne or Tickertape.168- End every report with the standard SEBI disclaimer as shown in the template.169170---171172## 5. Benchmark Quality Dimensions173174Use these 5 dimensions to self-assess report quality before delivering:175176| Code | Dimension | Pass criteria |177|------|-----------|---------------|178| D1 | **Data Sourcing** | CMP from Step 1.5 (Tickertape/Google Finance, not Yahoo/Screener); all financials from Q-period filings with dates |179| D2 | **Structure** | Price Snapshot box ✓, Bull/Base/Bear table ✓, split Verdict ✓, peer comparison table ✓ |180| D3 | **Anti-Hallucination** | 100% of figures carry `[Source: URL, date]`; no invented consensus targets |181| D4 | **Actionability** | Specific ₹ entry/exit/tranche levels for both new investors and existing holders |182| D5 | **Output** | `.docx` file in `/mnt/user-data/outputs/` + markdown summary in chat |183184A report scoring < 5/5 on this rubric should not be delivered. Fix failing dimensions first.