⚠️ Cannot run from file:// — browsers block API calls when a page is opened directly from your desktop.
You need to serve it over http://localhost instead. Pick one of these one-liners, run it in the folder containing this file, then open http://localhost:8080:
Python 3python3 -m http.server 8080Python 2python -m SimpleHTTPServer 8080Node.jsnpx serve . -p 8080VS CodeInstall "Live Server" extension → right-click file → Open with Live Server
📚 Value Investor Screener
Graham · Buffett · Lynch · Al Brooks — pure-math scoring across 32 criteria.
Set up your API keys once and they're saved in your browser forever.
● Required
🤖
Anthropic API Key
Powers the 🧠 AI Summary — generates investment thesis, bull/bear case, entry strategy per stock. Without it scoring still works, just no AI narratives.
250 days of daily price history → real EMA20, EMA50, EMA200 calculations. Powers all 8 Al Brooks technical scoring criteria. Without it Tech score shows 0/8.
Import your stock positions from Robinhood CSV export. In Robinhood app: Account → Statements → Export. Upload the CSV here to auto-populate your Portfolio tab.
Save your Anthropic, Finnhub, and Twelve Data keys to launch.
📚 Value Investor Stock Screener
Graham · Buffett · Lynch · Al Brooks · Pure-math scoring · 🧠 AI on-demand · ●LIVE via Finnhub + Twelve Data
Working…
No stocks yet — enter a ticker above.
Signal
Total ≥
Tech ≥
Value
Entry
Ticker ↕
Company
Price ↕
Fair ↕
Entry ↕
Total /32 ↓
Fund /24 ↕
Tech /8 ↕
P/E ↕
ROE ↕
Gross Margin ↕
EPS Growth ↕
Trend
Signal ↕
Updated
●LIVE price via Finnhub · ●LIVE fundamentals direct from Finnhub API · ●LIVE options direct from MarketData.app · Not financial advice.
📊 Understanding the Scoring System
Every stock is scored out of 32 points across four frameworks — 8 points each. Each point is binary: pass or fail. No partial credit. This makes scores directly comparable across stocks and time.
🏦 Graham /8
Safety & value — low P/E, low P/B, strong balance sheet, dividend, growth history
Key insight: A stock can score high fundamentally but have poor technicals — great business, bad timing. Wait for the technical score to improve before entering. Conversely, strong technicals with weak fundamentals = momentum trade, not a value investment.
🚦 Reading BUY / HOLD / SELL Signals
✅ BUY — 22+ / 32
Strong across multiple frameworks. Best when both Fund /24 AND Tech /8 are strong. A BUY with poor technicals = wait for a better entry point.
⏳ HOLD — 13–21 / 32
Mixed signals. If you own it, hold. Don't add. If you don't own it, wait for fundamentals or technicals to improve before initiating a position.
🚫 SELL — 0–12 / 32
Fails most criteria. Review your thesis if you own it. Don't initiate new positions. Re-analyze in 1–2 quarters to check for improvement.
Confidence levels:★★★ High (26+) = strong conviction across all frameworks. ★★ Medium (20–25) = good but mixed signals. ★ Low / Avoid (<20) = weak evidence, treat the signal skeptically.
💰 Fair Price & Entry Price
Two price columns help you answer the most important questions before buying: "Is this a bargain?" and "What price should I pay?" Both are derived directly from formulas in The Intelligent Investor by Benjamin Graham and Trading Price Action: Ranges by Al Brooks.
Where g = expected annual growth rate (we cap at 15% to avoid unrealistic numbers on hot growth stocks). This is Graham's "foreshortened formula" for valuing growth stocks. The 8.5 represents the base multiplier for a company with zero growth — anything above that comes from earnings growth.
Fallback: Graham Number
Value = √(22.5 × EPS × BVPS)
Used when growth data is missing. Graham's defensive investor rule of thumb: P/E × P/B should not exceed 22.5. So fair value lies at the price where that product equals exactly 22.5. Conservative, lower than the growth formula.
Brooks' core principle: the highest-quality entries are pullbacks to support, not breakouts. Buying at support means you can place a tight stop and have a known reward-to-risk ratio.
▲ UPTREND
Entry = EMA50. Wait for a deep pullback to the 50-day EMA — Brooks favors this over EMA20 because it gives better risk/reward and filters out shallow pullbacks that often fail.
◀▶ SIDEWAYS
Entry = support level. Range trade: buy near the bottom of the range, sell near the top. Use the recent swing low as the entry trigger.
↗ MILD TREND
Entry = EMA20. When the trend is real but not strongly directional, the shorter EMA acts as nearby support. More conservative than waiting for EMA50.
▼ DOWNTREND
Entry = "wait". Brooks rule: don't try to catch falling knives. In a confirmed downtrend, wait for trend reversal before considering an entry. No specific price target.
🎨 Color Coding in the Table
Fair column
🟢 Green = >5% below fair (undervalued — bargain) 🟡 Yellow = within ±5% of fair (fairly valued) 🔴 Red = >5% above fair (overvalued — pricey)
Entry column
🟢 Green = price at or below entry (buy now) 🟡 Yellow = needs <5% pullback to entry ⚪ "wait" = downtrend — don't catch knives
How to use both together:
Fair Price tells WHAT to pay — the maximum reasonable price based on the business value
Entry Price tells WHEN to pay — the technical setup that gives you the best risk/reward
Best setup: Fair is green (undervalued) AND Entry is green (at/below technical support). This is rare — it means the market hates a stock that the math says is cheap and the chart says is at support.
Common setup: Fair is green but Entry needs pullback. The stock is cheap but you can get it cheaper. Set a price alert at entry level.
Avoid: Fair is red AND Entry says "wait." Overvalued in a downtrend. No reason to buy.
Honest limitations:
Graham's formula assumes growth will continue at the rate it has been — for declining businesses, it overestimates value
For unprofitable companies (negative EPS), the formula breaks down — we fall back to a book-value-based estimate
Entry Price assumes the trend continues — a strong trend reversal invalidates the setup
These are starting points for analysis, not buy signals. Always read the AI summary and check recent news.
🏦 Benjamin Graham — Safety & Value
Graham's approach: buy stocks trading significantly below intrinsic value with a margin of safety. He was Buffett's mentor and wrote The Intelligent Investor. His criteria filter for cheap, safe, financially sound companies.
P/E < 15
Price-to-earnings below 15x. Above 25x is expensive. The market is paying less than 15 years of earnings — classic value territory.
P/B < 1.5
Price-to-book below 1.5x. Buying assets close to balance sheet value. Under 1x means trading below book — deep value territory.
Current Ratio ≥ 2
Current assets are 2x current liabilities. Strong short-term financial health — won't need emergency financing anytime soon.
Debt/Equity ≤ 0.5
Conservative debt. Company can weather downturns without being crushed by interest payments. Graham's safety margin.
EPS Growth 10yr > 3%
Sustained earnings growth over a decade proves a durable business model, not a one-hit wonder or cyclical spike.
Dividend Yield > 0
Any dividend signals financial maturity and management's confidence in cash flow. Graham viewed dividends as proof of earnings quality.
Revenue Growth 5yr > 0
Top-line growth over 5 years. The company is expanding, not shrinking. Even modest growth beats stagnation.
Net Margin > 5%
Keeps more than 5 cents of every dollar as profit. Thin margins mean fragility — one cost spike wipes out earnings.
Best used for: Long-term buy-and-hold of undervalued blue chips. Look for Graham 5+/8 combined with Buffett 4+/8. Pure Graham stocks are often boring — utilities, financials, consumer staples — that the market ignores.
🎩 Warren Buffett — Quality & Moat
Buffett evolved Graham's approach: buy wonderful companies at fair prices. He looks for durable competitive advantages (moats), exceptional management, and businesses that generate consistent free cash flow for decades.
ROE ≥ 15%
Return on equity above 15%. The business earns excellent returns on shareholders' capital. Sustained ROE above 20% signals a genuine moat.
ROE Consistency ≥ 7yr
High ROE for 7+ consecutive years proves it's structural, not a fluke. This is the moat test — can they maintain it through cycles?
FCF > 0
Positive free cash flow — real cash after all capital expenditures. Buffett calls earnings without FCF "accounting fiction."
Gross Margin ≥ 40%
High gross margins = pricing power. Companies with 40%+ gross margins can raise prices without losing customers — the hallmark of a moat.
ROIC ≥ 12%
Return on invested capital. Measures how efficiently the business turns all capital (debt + equity) into profit. Above 12% = excellent.
Debt Payoff ≤ 3yr
Could the company pay off all debt in under 3 years using free cash flow? Yes = conservative balance sheet Buffett loves.
Mgmt Score ≥ 7/10
Computed from ROE + ROIC + FCF margin. High scores suggest disciplined capital allocation and management quality.
Moat Rating ≥ 3/5
Computed from gross margin + ROIC + revenue growth consistency. Rating of 3+ = meaningful competitive advantage exists.
Best used for: Core long-term holdings you'd own for 10+ years. Buffett 6+/8 stocks are rare — treasure them. Strong brands, network effects, switching costs, or cost advantages. A Buffett 7/8 or 8/8 deserves serious attention.
🔍 Peter Lynch — Growth at a Reasonable Price
Lynch managed Magellan Fund to 29% annual returns. His approach: find companies growing faster than their P/E ratio implies (low PEG), with insider buying, manageable debt, and a story a regular person can understand.
PEG < 1
Price/Earnings-to-Growth below 1. Paying less for growth than the market expects. PEG of 0.5 means you're getting the growth at half price.
EPS Growth YoY > 10%
Earnings growing 10%+ year-over-year. Lynch wanted fast growers — companies doubling earnings every 5–7 years.
Inventory vs Sales Growth
If inventory grows faster than sales, the company is struggling to sell products — a warning sign Lynch watched closely as an early recession signal.
Cash/Share > 0
Company holds cash per share — financial cushion that reduces risk and funds growth without needing to dilute shareholders.
LT Debt/Equity < 30%
Long-term debt under 30% of equity. Lynch preferred companies that didn't need heavy debt to fuel their growth story.
Insider Ownership ≥ 5%
Management owns 5%+ of the company. Skin in the game — executives lose real money if the stock drops. Aligns interests.
Sales Growth > 10%
Top-line revenue growing 10%+ YoY. Earnings can be manipulated; revenue growth is harder to fake.
Lynch Category 2–4
Stalwart (steady grower), Fast Grower, or Cyclical at the right point in cycle — Lynch's three favorite types to own.
Best used for: Finding growth stocks before Wall Street notices. Lynch 5+/8 with PEG under 1 is a strong signal. Often mid-cap companies in niche industries with strong earnings momentum and low analyst coverage.
📈 Al Brooks Technical Analysis
Al Brooks spent 30+ years developing a price action methodology. Unlike lagging indicators, his approach reads the raw bar-by-bar story the market tells. We compute 8 criteria from 250 days of real price data via Twelve Data.
Uptrend
Price making higher highs and higher lows. The most basic condition for a bullish position. Trade with the trend — never against it.
Price above EMA20
Above the 20-day EMA. Short-term momentum is bullish. This is the first line of support in a strong trend.
Price above EMA50
Above the 50-day EMA. Medium-term trend is bullish. Institutional money tends to buy dips to the 50 EMA in uptrending stocks.
Higher Highs & Lows
Each swing high is higher than the previous; each swing low is higher. Classic uptrend structure. Breaking this = trend weakening.
Recent Breakout
Price broke above a significant resistance level recently. Breakouts from consolidation patterns often lead to strong directional moves.
Pullback to EMA
Price recently pulled back to EMA20 or EMA50 and held — a low-risk entry point within an uptrend. Buy the dip, not the rip.
Strong Trend Bars
Recent bars have above-average range closing near their highs. Shows institutional conviction and buying pressure behind the move.
Not Trading Range
Market is not in sideways chop. Trading ranges chew up options premium and produce false signals — wait for the breakout.
How to use: Technical score 6+/8 = strong setup. 4–5 = proceed carefully. Below 4 = wait. Even perfect fundamentals (24/24) with Tech 1/8 means now is not the right time. Use SPY's technical score as a market regime filter.
💼 Long-Term Investing Strategy
A 5-step framework for building a long-term portfolio using the screener signals:
Step 1 — Screen for quality (Fund /24 ≥ 16)
Filter for stocks with fundamental score 16+/24. This means passing at least two frameworks strongly. These are your investable universe.
A fundamentally strong company at the wrong technical point will underperform. Wait for Tech 5+/8 — trending, above key EMAs, showing institutional buying. "Pullback to EMA" is your ideal entry trigger.
Step 3 — Read the AI summary
Click 🧠 Generate AI Summary. The AI uses your actual scores to write a thesis, bull/bear case, and entry strategy. Focus on Entry Strategy (specific price levels) and Catalysts (upcoming events).
Step 4 — Size by conviction
5–8%
BUY + Tech 6+/8 ★★★ High confidence
2–4%
BUY + Tech 4–5/8 ★★ Medium confidence
1–2%
HOLD or mixed ★ Low confidence
Step 5 — Monitor and rebalance quarterly
Hit ↻ Refresh all every 1–3 months. If a stock drops below 13 (SELL), review your thesis. If score improves to BUY while holding, consider adding to the position.
Golden combination: Graham 5+/8 + Buffett 5+/8 + Technical 5+/8 — rare but highly actionable. Use SPY's technical score as a market regime filter: if SPY scores below 4 technically, the market is in a downtrend — be more conservative with position sizes.
🎯 Options Strategy — 6-Month Calls
The screener focuses on buying call options with ~6 month expiry. Not day trading — a directional bet that a fundamentally strong, technically bullish stock will be higher in 6 months.
⚠ Risk warning: Options can expire worthless — you can lose 100% of the premium paid. Never risk more than 1–5% of your portfolio on a single options position. Only use options on stocks you'd be happy owning as shares.
Conservative — ATM Strike
At-the-money call. Highest delta (~0.5), most expensive premium, highest probability of profit. Best for high-conviction setups.
Moderate — ~5% OTM Strike
Slightly out-of-the-money. Cheaper premium, higher leverage. Needs a bigger move to profit. Good balance of risk/reward.
Aggressive — ~10% OTM Strike
Deep out-of-the-money. Cheapest, highest leverage, lowest probability. Only for strong BUY setups with clear upcoming catalysts.
Trade Management Rules
📅 Expiry
Buy options with ~6 months to expiry. This gives the trade time to work and reduces daily theta (time decay) impact.
✅ Take profit
Exit at 50–100% gain. Don't get greedy — options give up gains fast. Up 50% in 2 months? Consider taking half off the table.
🛑 Stop loss
Exit if down 50%. A 50% loss means the thesis is wrong — cut it rather than hoping for recovery. Max loss = premium paid.
📆 Time stop
Exit 30 days before expiry regardless of P&L. Theta decay accelerates massively in the last 30 days — even if stock moves your way.
⚡ Earnings warning
The screener flags earnings within 6 weeks. IV spikes before earnings then collapses after (IV crush) — can destroy option value even if the stock moves your way.
📊 IV context
If IV is elevated, options are expensive. Consider waiting for IV to drop, or use a spread instead of a naked call to reduce premium cost.
Practical workflow: Total /32 ≥ 22 + Tech ≥ 6 + Options verdict = GO → open Options tab → check earnings warning → look up ATM strike bid/ask on your broker → size 1–3% of portfolio → set calendar reminder 30 days before expiry to exit.
💼 Portfolio Tab — Track Your Real Positions
The Portfolio tab lets you log your real stock and option positions so you get live P&L tied to the screener's analysis. Use it to make data-driven decisions about your existing holdings.
Adding Positions
📂 Robinhood CSV Import
Robinhood app → Account → Statements → Export CSV. Upload here for one-click import of all stock positions with shares + average cost.
+ Add Stock
Manual entry: ticker, shares, entry price, date, notes. For positions outside Robinhood or for manual tracking.
+ Add Option
Options: ticker, call/put, strike, expiry, contracts, premium paid. Auto-tracks days to expiry and ITM/OTM status.
Auto Alerts on Each Position
⏰ Time Stop (Options)
Warning when an option is within 30 days of expiry. Theta decay accelerates — exit or roll.
🛑 Stop Loss (Options)
Triggers when premium is down 50%+. Means thesis is likely wrong — cut losses.
⚡ Earnings Soon
Heads-up if earnings are within 6 weeks. Plan around IV crush risk.
📊 Live P&L
Position value vs cost basis updated whenever screener data refreshes. For non-screener tickers, fetches live price from Finnhub.
AI Guidance — Two Levels
🧠 Per Position
Click "🧠 Ask AI" on any position card. Gets specific guidance: hold, add, trim, or exit — based on your entry price, current P&L, and live screener score.
🎯 Portfolio Review
"🧠 Review Portfolio" button. AI looks at all positions together — flags concentration risk, value traps, identifies what's working vs what's not.
Best workflow: Import CSV monthly. Click "Refresh all" on Screener to get fresh fundamentals. Then check Portfolio for any new alerts. Run "Review Portfolio" quarterly to spot bigger patterns (concentration, sector drift, losers piling up).
🔭 Discover Tab — Find New Stocks
Discover scans curated universes of ~50 quality candidates per category to surface stocks matching specific investment styles. Each scan takes ~7 minutes due to Twelve Data rate limits — results cached 24 hours.
🚀 Breaking Out (~50 stocks)
Liquid tech leaders + popular ETFs. AAPL, NVDA, AMD, COIN, PLTR, SHOP, etc.
Dividend stalwarts + boring blue chips. KO, PEP, MCD, JNJ, PG, MMM, VZ, etc.
Filter: Graham ≥5/8 + dividend ≥2% + revenue growth + Total ≥18/32
Use for: monthly dollar-cost averaging
How to Use Results
Top 20 matches per category are sorted by Total Score. Each card shows ticker, signal badge, price, score breakdown, and the specific reason it matched (e.g. "ROE 33% · GM 61%" or "Recent breakout · uptrend"). Click any card to add the stock to your screener for full analysis — useful for vetting before adding to your watchlist or portfolio.
Tip: Run scans during low-conflict times. Each scan takes 7 minutes and uses the full Twelve Data rate budget — you can't refresh stocks or run another scan simultaneously. Scan one category overnight or when not actively using the app.
🚀 Start Here — What this app does & how to use it
This is a value-investing stock screener for retail investors. It scores stocks across four classic frameworks (Graham, Buffett, Lynch, Brooks), gives you fair price + entry price targets grounded in those books, tracks your real portfolio positions, and uses AI to generate analysis on demand. The goal: bring disciplined, math-based stock research within reach without expensive Bloomberg-style tools.
🎯 What it answers for you
🔍 "Is this stock worth buying?"
A clear /32 score combining fundamentals, growth, and price action. Color-coded BUY/HOLD/SELL signal — see Scores & Signals tabs.
Import Robinhood CSV → live P&L, auto alerts on time stops & earnings, AI guidance per position — see Portfolio tab.
🔭 "What new stocks should I look at?"
5 curated universes scan for breakouts, quality, value, options setups — see Discover tab.
📋 Your first 10 minutes
Add API keys — click ⚙ API Keys in the top right. You need Anthropic (for AI), Finnhub (fundamentals), and Twelve Data (price history). All free tiers.
Wait for default watchlist to load — 15 popular stocks start analyzing automatically (~2 min). Watch the green progress bar at top.
Scan the table — green "BUY" badges + high scores = strongest candidates. Color-coded Fair/Entry columns tell you valuation + timing.
Click any row to expand — see the full breakdown across Graham/Buffett/Lynch/Technical tabs.
Click 🧠 Generate AI Summary on a stock that interests you — gets a thorough investment thesis with real web-searched catalysts (~10 sec).
Add your real positions — Portfolio tab → 📂 Import CSV (Robinhood: Account → Statements → Export). See live P&L immediately.
Try a Discover scan — Discover tab → click 🔍 Scan on any category (e.g. "Long-term Quality"). ~7 min to surface new candidates.
📖 The frameworks in plain language
🏦 Graham (Safety)
Is this stock cheap? Low P/E, low P/B, strong balance sheet, pays a dividend. Graham's defensive criteria filter out expensive and risky stocks.
🎩 Buffett (Quality)
Is this a great business? High ROE, strong free cash flow, fat margins, predictable returns. Buffett buys quality at fair prices, not garbage at cheap prices.
🔍 Lynch (Growth)
Is this growing? Reasonable price relative to growth (PEG < 1), expanding revenue and earnings. Lynch wants growth without overpaying.
📈 Brooks (Technicals)
Is the price action right? Trend direction, EMA positions, breakouts, pullbacks. Even a great business is a bad trade if you buy at the wrong time.
⏰ Suggested routine
📅 Daily (5 min)
1. Open Screener → glance at sorted scores. 2. Check Portfolio for new alerts (time stops, earnings warnings). 3. Act on anything urgent.
📆 Weekly (15 min)
1. Click ↻ Refresh all on Screener. 2. Sort by Total Score → spot anyone dropping from BUY to HOLD. 3. Run 🧠 AI Summary all to keep theses fresh. 4. Click 🧠 Review Portfolio to catch concentration risk early.
📊 Monthly (30 min)
1. Re-import Robinhood CSV. 2. Run one Discover scan (~7 min) — rotate categories. 3. Add interesting Discover results to watchlist. 4. Review per-position AI guidance, make trim/hold decisions deliberately.
🎯 Quarterly (1 hr)
1. Run all 5 Discover scans over a few days. 2. Compare portfolio to opportunities — anything to swap? 3. Tax loss harvesting check (Nov/Dec). 4. Rebalance if any one position is >20% of portfolio.
The 3 things this app helps you do well:
Resist hype — Scores tell you when fundamentals AND technicals align. The chart can lie, the numbers can lie, but rarely at the same time.
Catch problems early — Portfolio alerts surface issues before they become big losses (options near expiry, score deterioration).
Find better opportunities — Discover scans surface quality stocks you'd never have found scrolling Twitter or Reddit.
Honest disclaimers:
This is not financial advice. It's a research tool. You make every decision.
Scores are based on backward-looking data. Past metrics don't guarantee future returns.
The AI summary uses web search for current events, but can still get details wrong. Verify before acting.
Free API tiers limit how fast/often you can refresh. Plan around that.
For deeper info on any feature, click the relevant tab above.
Not financial advice. For educational and research purposes only. Always do your own due diligence. Past performance does not guarantee future results.
Import from Robinhood· Account → Statements → Export CSV
My Positions
Stock Positions
0
No stock positions yet — click + Add Stock to get started.
Options Positions
0
No options positions yet — click + Add Option to get started.
🧠
Portfolio AI Assistant
🔭 Discover Stocks
Curated universes scanned for breakouts, quality, value, and options setups. Results cached 24h. Click any stock to add it to the screener.
⭐ Manage Default Watchlist
These tickers are automatically analyzed when you open the screener for the first time. Changes take effect on next clear & reload.