In this article, I’m going to show you three approaches to screening for a great growth-at-a-reasonable-price (GARP) stock. Screening allows you to specify criteria that stocks must match, helping you narrow down a big population of stocks to a bite-size list. It’s a great way to find strong investment candidates outside of the usual suspects (such as AAPL and GOOGL). Plus, screening is fun and educational. You can edit the screening criteria as much as you like to home in on the stocks that best meet your goals.
The first method described below can be found in our Basic (free) membership, while the second two methods are possible only with a Premium subscription (which anyone can test out for free ). All screeners mentioned are available for you to download for free from the Library .
The simplest way to construct a screener is to set up a series of absolute filters—those are filters that compare a financial metric to a number. They follow this format: [metric] must be [greater or less] than [number]. For example, “Free Cash Flow must be greater than 0” will find you companies whose trailing twelve month free cash flow is non-negative.
Save a few filters together and you have a screener. Any stock that passes all the filters in your screener will appear in your screener results. It’s as easy as that.
So, to create a GARP screener using simple filters, just select a handful of metrics relevant for GARP goals and set minimums or maximums for each. Here is our standard GARP screener:
Since “G” is the primary part of GARP, this screener is tilted firmly toward growth stocks by requiring fairly high average annual increases in earnings, operating income, and sales over the past five years. Those filters will help us find companies that have a proven track record of growth. We also specify a minimum of a 15% expected increase in earnings growth over the next year in order to find companies who are expected to keep up the solid growth.
The “reasonable price” piece comes into play with earnings yield and PEGs. Here we’ve set a minimum earnings yield of 5%, meaning we’ll only see companies that have earned at least 5% of each dollar invested over the past year. By the way, earnings yield is the inverse of price/earnings (P/E)—so in this case it would be the same as searching for a stock with a P/E of less than 20. PEG Forward is a ratio of the current P/E to the expected earnings growth for the next 5 years. So, PEG Forward is kind of like a one-man band for GARP. Likewise for PEG Trailing, which uses past earnings growth rather than projected earnings growth. A PEG of 1 suggests that the stock is perfectly priced based on either its projected or past growth. A PEG of less than 1 suggests that the stock is inexpensive given its growth profile. In this case, stocks with PEGs of 1.1 or less will pass the screener.
If you run this screener, you’ll find it’s fairly restrictive—only 16 stocks pass at the time of writing, out of over 7,000 in the North American exchanges that we cover. What I like about this particular screener is how all the filters work together to make it selective. In Stock Rover, you can test each filter’s effect on the number of passing stocks by checking or unchecking it in the screener preview, as called out below. You’ll then see the number of passing stocks change depending on what you have checked or unchecked.
(Note that unchecking a filter as shown above will not actually disable it when the screener is run; to remove a filter from a screener, use the ‘X’ buttons on the right.)
I tested each of the above criteria and found that no single filter was responsible for dramatically narrowing the results. Each individually contributes to the overall restrictiveness of the screener.
If you have other goals you want to accomplish with this screener, you may need to relax some of the criteria in order to add in others. For example, if you are a quality investor, you might ease the value and high-growth aspects of the screener to make room for profitability metrics. Here is a quality-inflected GARP screener that I created:
It still has all of the growth and value metrics from the original GARP screener, but with relaxed minimums/maximums. That gave me room to add in a little Novy-Marx flair with the gross profits/total assets metric (also known as gross profitability). 30 stocks pass this modified screener, but only 4 pass both of the above screeners (which I was able to easily determine using the Screen Current Table  function). Here they are, by the way, if you are curious:
While both of the above screeners contain tried-and-true fundamental metrics, they are by no means the gospel. They are just screeners that we mortals at Stock Rover created after a bit of experimentation. Try them out for yourself and see what happens if you, say, sub in price/book for earnings yield, or ratchet up the value side while toning down the growth requirements. Even when you are just working with simple filters, you have a lot of control, a lot of knobs you can turn to find interesting and promising stocks.
At this point I must remind you that screening is merely a first step in the stock research process. We never recommend trading a stock based only on its passing or not passing a screener. For ideas on how to conduct follow-up research on a stock, see any of our deep-dive articles .
While there is no limit to the amount of tweaking you can do using our basic screener, you can exponentially increase your filtering flexibility with freeform equations. Instructions for setting up equations are here . A brief warning to the math-averse: some arithmetic follows, but don’t let that scare you off of equations. I think you’ll see that it is possible to use equations in simple, math-light ways that are very effective.
With equations, you can relate metrics to each other (or create a ratio of two metrics) and incorporate historical data. For example, our Buffetology Inspired screener requires that the current EPS must be greater than EPS in previous years, and that total debt must be less than or equal to 1/5th of net income. While criteria such as these are not complex, they are challenging if not impossible to construct using only simple filters.
Equations are a great way to get at the trend or directionality of financial indicators—meaning you can set up your screener to find companies who are experiencing rising or falling trends in earnings, sales, cash flow, P/E, dividends, or any other metric for which we have historical data. This might uncover sleeper stocks who may not yet have the highest or best numbers, but who are moving in the right direction.
So, let’s now approach GARP screening with this expanded set of tools. I will use equations to find stocks who are exhibiting positive trends in a number of key GARP metrics. I will also throw in a few absolute filters to make sure we are in the right ballpark (screening on trends alone can sometimes yield some pretty obscure stuff—not a bad thing, necessarily, but riskier).
Here is the equation GARP screener:
Bear with me. Equations can get a little messy looking, even when what they are expressing is straightforward. What we see above are the following criteria:
- EPS, sales, and operating income all must have increased for each of the past 3 years
- Last year’s growth in EPS must have outpaced the 5-year average growth in EPS
- Earnings yield must have increased for each of the past 2 years
- Both PEGs must be less than or equal to 1.2
You could also do a variation on this screener where you set a specific growth minimum over time, using a coefficient. For example, entering the equation “EPS [now] >= 1.2*EPS [Y8]” would find companies whose current EPS is at least 20% greater than it was 8 years ago. Or, you could enter “EPS 1-Year Change (%) > 1.1*EPS 5-Year Average (%)” to find companies whose EPS change over the past year was 10% higher than the average EPS increase over the past 5 years. This would be a way to find companies whose earnings growth has been accelerating.
Important side note: Notice that I did not enter the YoY growth requirements in one continuous string like “EPS [now] > EPS[TTM1] > EPS[TTM2].” Instead, these criteria must be entered as separate equations, either connected by the Boolean operator “and” in a single equation box, or as individual equations (like in the example above).
One handy feature I want to point out about the freeform equation editor is the ‘Test’ button, below the equation form. Clicking on ‘Test’ will open up a small window, as shown below, to let you know if your equation is valid, and if so, how many stocks pass it. You can also look up a ticker to see sample values in the criteria used in the equation. Use this feature to check an equation for any errors before adding it to your screener.
To get the ball rolling with equations, just start with a few straightforward goals. Think about what kinds of qualities you want to see in companies you invest in and let that be the basis for the first equations you create. Then as you get comfortable with the paradigm, you can get as fancy as you like.
The final method I want to show you, called ranked screening, is fundamentally different than the previous two. Whereas the above methods both employ filters—essentially, a series of tests that a stock must pass in order to be shown in your screener results—this third method allows you to weight criteria so that stocks are given an overall score based on how well they perform in all of the weighted metrics. They are then ranked on those scores. It’s like sorting stocks based on multiple metrics instead of just a single column of data.
Ranking doesn’t require you to set boundaries on what stocks pass your screener, you can just let the weights guide you to the stocks that have optimal combination of qualities that you want. Adding filters is optional. For step-by-step instructions on how to create a ranked screener, go here .
Now let’s make a GARP screener using ranking. I am going to take the first GARP screener we used, and instead of setting filters that stocks must pass, I am just going to weight each of those metrics and ask it to show me only the top 50. Here is my GARP ranked screener:
Notice that you can not only designate a weight for a metric, but also a preference for high or low values. So while I’m looking for stocks with the highest earning yield, I’m also looking for stocks with the lowest PEGs. Because this screener contains no filters, every stock in our screenable universe is eligible for ranking, but I will only see the top 50 (that is, the top 50 according to the weights above).
When I run this screener, Lannett (LCI ) ranks as my #1 stock. I can see why by mousing over its rank for the following tooltip:
Take a moment to interpret what is going on in the screenshot above. For each weighted metric, you see the company’s value and percentile. In each row, the percentile is multiplied by the weight I gave to the metric, and those products are added together to create the final score.
Note that LCI would not have passed the simple GARP screener I used in Approach #1 because its estimated EPS change for next year is 14%, not high enough to meet the >15% criterion. This illustrates how ranking can be useful for finding high-performing stocks that might be excluded by regular filter-based screeners.
Most of the time when you are using ranked screening, you’ll probably want to use a combination of filters and weights. The filters act as gatekeepers, keeping out any genres that you know you don’t want to be bothered with (for example, pink sheet stocks or stocks in a particular sector). The weights then sort the remaining population, giving you a clear place to start your research. Here is a second example, which uses both filters and ranking:
In this screener, weight is distributed across many metrics, but those metrics are complementary, so the overall effect is that the screener is distributing weight to four categories: growth, valuation, capital efficiency, and momentum.
There is also a single filter in place: market cap must be greater than $2 billion (filters are always listed in the ‘Criteria’ section above the weights). As long as a company meets that criterion, it can be scored by this screener.
Now, if you are wondering: Could I use these weights to rank stocks in any population, not just those that pass the screener? The answer is yes. You can apply these weights to a portfolio or watchlist, so that you see how stocks that you already care about score. Here  are instructions for applying a ranked screener to a portfolio or watchlist.
There are many ways to get a big population of stocks down to a smaller and more desirable group. In this article, I showed three different approaches toward the single goal of finding the best growth-at-a-reasonable price stocks.
- Simple filters: absolute maximums or minimums that passing stocks must meet. This is a straightforward way to set a bar that stocks must be able to clear in order to make it to the next step in your research process.
- Equation-based filters (Premium): filters that relate metrics to each other or to historical data. These provide more flexibility in creating the standards that stocks must meet, and they also make it possible to screen on certain financial trends over time.
- Ranking (Premium): weighted metrics that score and rank stocks. This feature makes it possible to find top-scoring stocks (i.e., top-scoring according to the criteria you’ve designated) in any population without having to set any specific minimums or maximums.
These methods can be used either in isolation or in combination to help you create a set of finely tuned screeners. Try them out! You can also explore the Stock Rover Library  for inspiration and for sample screeners you can import into your account for free.
May you find something good!
This article was created in partnership with bivio , which provides online tools to help investment clubs connect with members, manage accounting, prepare their annual tax forms, and more.