Investing
Shankar Nath's GARP Strategy fetched 115% return! How?

FabTrader
GARP (Growth at a Reasonable Price) investing is a strategy that sits between value investing and growth investing, aiming to balance growth potential with reasonable valuation metrics. Popularized by legendary investor Peter Lynch, GARP seeks to identify companies where growth is undervalued rather than simply searching for cheap stocks.
In this article, I will revisit the GARP framework put forth by one of my favorite financial educator and YouTuber, Shankar Nath. He has done an excellent job of analyzing multiple frameworks already in vogue and has come forth with his own version, which, based on his back test, had yielded a whopping 115% return per year and managed to beat all other methodology.
I have built an automated python screen that will download the eligible stocks based on his framework and am hoping it will be of some use to you! In the video below, I also share my current profit/loss position of a small portfolio that I built using this method and promise to keep you posted on the progress every quarter, as part of my re-balancing ritual! Read on....
Understanding GARP Investing
Value Investing:
- Focuses on companies trading below their intrinsic value.
- Asks: "What is the stock worth today?"
- Associated with Benjamin Graham’s investment philosophy.
Growth Investing:
- Seeks companies with above-average growth potential.
- Asks: "What will the stock be worth a few years from now?"
- Linked to Philip Fisher’s investment strategy.
GARP Investing:
Focuses on companies whose growth is underpriced rather than simply cheap companies.

The PEG Ratio: A Core Component of GARP
One of the key metrics in GARP investing is the PEG ratio, calculated as:
PEG = Price-to-Earnings (PE) Ratio / EPS Growth Rate
- PEG < 1: Undervalued stock
- PEG = 1: Fairly valued stock
- PEG > 1: Overvalued stock
Traditional growth investing primarily focuses on Earnings Per Share (EPS), but this approach has flaws. A company's growth rate changes over time, making EPS an inconsistent measure. Instead, GARP investors consider revenue growth alongside the PEG ratio for a more comprehensive valuation.
GARP Strategies Explored by Shankar Nath
Shankar Nath, a well-known YouTuber, explored multiple GARP investing methodologies. Here’s a breakdown of his analysis:
(Historical PE 3 Year / EPS Growth 3 years) < 1 and (EPS last year / EPS preceding year) > 20% and
Market Cap > 1000083 stocks selected with 113% annual return, with no stocks delivering negative returnsSOIC GARP FrameworkMarket Cap > 50000 crores and
YOY Quarterly sales growth > 15% and
YOY Quarterly profit growth > 20% and
Price to Earning < 3047 stocks selected with
110% annual returnEconomic Times FrameworkMarket Cap > 1000 and
Sales > 1000 and
Profit growth 5 years > 15% and
Expected Quarterly net profit > Net profit 3 quarters back and
PEG ration < 1131 stocks selected with a sample analysis of 10 stocks showed a 51% annual returnS&P 500 GARP Index ApproachGrowth (EPS and sales-per-share growth rates)
Quality (financial leverage, return on equity)
Value (earnings-to-price ratio)No back test was conducted for this model.
Shankar Nath’s Optimized GARP Strategy
Based on learnings from the above methods, Shankar Nath created his own GARP methodology with the following criteria:

- Market Cap > 1,000 crores
- Sales Revenue > 1,000 crores
- PEG Ratio between 0 and 2
- Sales Growth:
- Last year > 15%
- 3-year CAGR > 15%
- 5-year CAGR > 15%
- EPS Growth:
- Last year > 15%
- 3-year CAGR > 15%
- 5-year CAGR > 15%
- EPS (Last Year / Preceding Year) > 1.15
- Expected Quarterly Net Profit > Net Profit 2 Quarters Ago
Backtest Result:
- 27 stocks selected
- 115% annual return, outperforming all previous strategies
Access this Screener online for Free
You can access this screener for free on our community toolset page.

Python Implementation of the automated Screener
I have built this automated python screener that can fetch stocks per strategy rules with a single click of a button! I have included along with it 3,6,12 month returns for each of those stocks. Depending on your investment horizon, one could choose to select the stocks that have delivered the maximum return for that time period chosen. Try this out and let me know if its useful
PS: This is not investment advice. This is just an automation script and hence should not be construed as advice. Consult your financial advisor before taking any investing decision.
"""
Automated Screener for Fetching GARP Strategy
Reference: Refer to Shankar Nath's GARP Investing video for detailed rules
https://www.youtube.com/watch?v=dnPqlybspi0
-- Dependencies to be installed --
pip install beautifulsoup4==4.11.2
pip install openpyxl
pip install pandas
Disclaimer:
The information provided is for educational and informational purposes only and
should not be construed as financial, investment, or legal advice. The content is based on publicly available
information and personal opinions and may not be suitable for all investors. Investing involves risks,
including the loss of principal.
Credits / Courtesy : Shankar Nath
Queries on feedback on the python screener can be sent to :
FabTrader ([email protected])
www.fabtrader.in
YouTube: @fabtraderinc
X / Instagram / Telegram : @fabtraderinc
"""
import time
import pandas as pd
def fetchScreenerData(link):
cache_index = None
data = pd.DataFrame()
current_page = 1
page_limit = 100
while current_page < page_limit:
if current_page == 1:
url=link
else:
url = f'{link}?page={current_page}'
all_tables = pd.read_html(url, flavor='bs4')
combined_df = pd.concat(all_tables)
combined_df = combined_df.drop(
combined_df[combined_df['S.No.'].isnull()].index)
if len(combined_df.index) < 26:
data = pd.concat([data, combined_df], axis=0)
break
data = pd.concat([data, combined_df], axis=0)
current_page += 1
time.sleep(1)
data = data.iloc[0:].drop(data[data['S.No.'] == 'S.No.'].index)
return data
pd.set_option("display.max_rows", None, "display.max_columns", None)
# Fetch 3 month return
garp3_link = 'https://www.screener.in/screens/2115435/garp3months/'
garp3_df = fetchScreenerData(garp3_link)
garp3_df = garp3_df[['Name', 'CMP Rs.', '3mth return %']]
garp3_df['CMP Rs.'] = pd.to_numeric(garp3_df['CMP Rs.'], errors='coerce')
garp3_df['3mth return %'] = pd.to_numeric(garp3_df['3mth return %'], errors='coerce')
garp3_df = garp3_df[garp3_df['3mth return %'] > 0]
garp3_df.dropna(inplace=True)
# Fetch 6 month return
garp6_link = 'https://www.screener.in/screens/2115440/garp6months/'
garp6_df = fetchScreenerData(garp6_link)
garp6_df = garp6_df[['Name','6mth return %']]
garp6_df['6mth return %'] = pd.to_numeric(garp6_df['6mth return %'], errors='coerce')
garp6_df = garp6_df[garp6_df['6mth return %'] > 0]
garp6_df.dropna(inplace=True)
# Fetch 1 year return
garp12_link = 'https://www.screener.in/screens/2115445/garp12months/'
garp12_df = fetchScreenerData(garp12_link)
garp12_df = garp12_df[['Name','1Yr return %']]
garp12_df['1Yr return %'] = pd.to_numeric(garp12_df['1Yr return %'], errors='coerce')
garp12_df = garp12_df[garp12_df['1Yr return %'] > 0]
garp12_df.dropna(inplace=True)
# Merge 3 / 6 / 12 Months Returns data into a single dataset
merged_df = pd.merge(garp3_df, garp6_df, on='Name', how='inner')
merged_df = pd.merge(merged_df, garp12_df, on='Name', how='inner')
merged_df.dropna(inplace=True)
# Sort by 6 months return
merged_df.to_excel('D:/garp.xlsx', index=False)
merged_df = merged_df.sort_values(by=['6mth return %'], ascending=False)
# Save final result in an excel
merged_df.to_excel('D:/garp.xlsx', index=False)
print(merged_df)Conclusion:
GARP investing offers a powerful approach to stock selection, bridging the gap between growth and value investing. By considering the PEG ratio alongside revenue and profit growth, investors can better assess stocks with strong upside potential while avoiding overvaluation. Shankar Nath’s optimized GARP strategy demonstrated the highest backtested returns, making it a compelling methodology for investors looking for a balanced growth approach.
Current Position of the Model Portfolio (as of 31-Aug-2025)
Following is the current status of this portfolio. I have not managed to rebalance this yet. This investment started on the 26th of Sep 2024, which coincidentally was the time Nifty also plunged into a bear phase and has not recovered from that position yet. Nifty is down -7% and this portfolio is down 9.75%.

More from Investing
Beyond Returns: Why I Built a More Intelligent Midcap Mutual Fund Screener
Looking for the best midcap mutual funds in India? This article explains how our Midcap Mutual Fund Screener goes beyond traditional return-based...
How to Build a robust Passive Index Investing System that works
Passive investing has transformed the way investors build wealth. But with so many choices—from Nifty 50 Index Funds and Nifty Next 50...
A Simple, Peaceful ETF Rotation Strategy That Delivered 32% CAGR
Markets are constantly shifting leadership between sectors, asset classes, and global markets. Instead of trying to predict where the next opportunity might...
