Value Dividend Screener
Overview
This skill identifies high-quality dividend stocks that combine value characteristics, attractive income generation, and consistent growth using a two-stage screening approach:
- FINVIZ Elite API (Optional but Recommended): Pre-screen stocks with basic criteria (fast, cost-effective)
- Financial Modeling Prep (FMP) API: Detailed fundamental analysis of candidates
Screen US equities based on quantitative criteria including valuation ratios, dividend metrics, financial health, and profitability. Generate comprehensive reports ranking stocks by composite quality scores with detailed fundamental analysis.
Efficiency Advantage: Using FINVIZ pre-screening can reduce FMP API calls by 90%, making this approach ideal for free-tier API users.
When to Use
Invoke this skill when the user requests:
- "Find high-quality dividend stocks"
- "Screen for value dividend opportunities"
- "Show me stocks with strong dividend growth"
- "Find income stocks trading at reasonable valuations"
- "Screen for sustainable high-yield stocks"
- Any request combining dividend yield, valuation metrics, and fundamental analysis
Workflow
Step 1: Verify API Key Availability
For Two-Stage Screening (Recommended):
Check if both API keys are available:
import os
fmp_api_key = os.environ.get('FMP_API_KEY')
finviz_api_key = os.environ.get('FINVIZ_API_KEY')
If not available, ask user to provide API keys or set environment variables:
export FMP_API_KEY=your_fmp_key_here
export FINVIZ_API_KEY=your_finviz_key_here
For FMP-Only Screening:
Check if FMP API key is available:
import os
api_key = os.environ.get('FMP_API_KEY')
If not available, ask user to provide API key or set environment variable:
export FMP_API_KEY=your_key_here
FINVIZ Elite API Key:
- Requires FINVIZ Elite subscription (~$40/month or ~$330/year)
- Provides access to CSV export of pre-screened results
- Highly recommended for reducing FMP API usage
Provide instructions from references/fmp_api_guide.md if needed.
Step 2: Execute Screening Script
Run the screening script with appropriate parameters:
Two-Stage Screening (RECOMMENDED)
Uses FINVIZ for pre-screening, then FMP for detailed analysis:
Default execution (Top 20 stocks):
python3 scripts/screen_dividend_stocks.py --use-finviz
With explicit API keys:
python3 scripts/screen_dividend_stocks.py --use-finviz \
--fmp-api-key $FMP_API_KEY \
--finviz-api-key $FINVIZ_API_KEY
Custom top N:
python3 scripts/screen_dividend_stocks.py --use-finviz --top 50
Custom output location:
python3 scripts/screen_dividend_stocks.py --use-finviz --output /path/to/results.json
Script behavior (Two-Stage):
- FINVIZ Elite pre-screening:
- Market cap: Mid-cap or higher
- Dividend yield: 3%+
- Dividend growth (3Y): 5%+
- EPS growth (3Y): Positive
- P/B: Under 2
- P/E: Under 20
- Sales growth (3Y): Positive
- Geography: USA
- FMP detailed analysis of FINVIZ results (typically 20-50 stocks):
- Dividend growth rate calculation (3-year CAGR)
- Revenue and EPS trend analysis
- Dividend sustainability assessment (payout ratios, FCF coverage)
- Financial health metrics (debt-to-equity, current ratio)
- Quality scoring (ROE, profit margins)
- Composite scoring and ranking
- Output top N stocks to JSON file
Expected runtime (Two-Stage): 2-3 minutes for 30-50 FINVIZ candidates (much faster than FMP-only)
FMP-Only Screening (Original Method)
Uses only FMP Stock Screener API (higher API usage):
Default execution:
python3 scripts/screen_dividend_stocks.py
With explicit API key:
python3 scripts/screen_dividend_stocks.py --fmp-api-key $FMP_API_KEY
Script behavior (FMP-Only):
- Initial screening using FMP Stock Screener API (dividend yield >=3.0%, P/E <=20, P/B <=2)
- Detailed analysis of candidates (typically 100-300 stocks):
- Same detailed analysis as two-stage approach
- Composite scoring and ranking
- Output top N stocks to JSON file
Expected runtime (FMP-Only): 5-15 minutes for 100-300 candidates (rate limiting applies)
API Usage Comparison:
- Two-Stage: ~50-100 FMP API calls (FINVIZ pre-filters to ~30 stocks)
- FMP-Only: ~500-1500 FMP API calls (analyzes all screener results)
Step 3: Parse and Analyze Results
Read the generated JSON file:
import json
with open('dividend_screener_results.json', 'r') as f:
data = json.load(f)
metadata = data['metadata']
stocks = data['stocks']
Key data points per stock:
- Basic info:
symbol, company_name, sector, market_cap, price
- Valuation:
dividend_yield, pe_ratio, pb_ratio
- Growth metrics:
dividend_cagr_3y, revenue_cagr_3y, eps_cagr_3y
- Sustainability:
payout_ratio, fcf_payout_ratio, dividend_sustainable
- Financial health:
debt_to_equity, current_ratio, financially_healthy
- Quality:
roe, profit_margin, quality_score
- Overall ranking:
composite_score
Step 4: Generate Markdown Report
Create structured markdown report for user with following sections:
Report Structure
# Value Dividend Stock Screening Report
**Generated:** [Timestamp]
**Screening Criteria:**
- Dividend Yield: >= 3.5%
- P/E Ratio: <= 20
- P/B Ratio: <= 2
- Dividend Growth (3Y CAGR): >= 5%
- Revenue Trend: Positive over 3 years
- EPS Trend: Positive over 3 years
**Total Results:** [N] stocks
---
## Top 20 Stocks Ranked by Composite Score
|------|--------|---------|-------|-----|------------|-------|
| 1 | [TICKER] | [Name] | [%] | [X.X] | [%] | [XX.X] |
| ... |
---
## Detailed Analysis
### 1. [SYMBOL] - [Company Name] (Score: XX.X)
**Sector:** [Sector Name]
**Market Cap:** $[X.XX]B
**Current Price:** $[XX.XX]
**Valuation Metrics:**
- Dividend Yield: [X.X]%
- P/E Ratio: [XX.X]
- P/B Ratio: [X.X]
**Growth Profile (3-Year):**
- Dividend CAGR: [X.X]% [β Consistent / β One cut]
- Revenue CAGR: [X.X]%
- EPS CAGR: [X.X]%
**Dividend Sustainability:**
- Payout Ratio: [XX]%
- FCF Payout Ratio: [XX]%
- Status: [β Sustainable / β Monitor / β Risk]
**Financial Health:**
- Debt-to-Equity: [X.XX]
- Current Ratio: [X.XX]
- Status: [β Healthy / β Caution]
**Quality Metrics:**
- ROE: [XX]%
- Net Profit Margin: [XX]%
- Quality Score: [XX]/100
**Investment Considerations:**
- [Key strength 1]
- [Key strength 2]
- [Risk factor or consideration]
---
[Repeat for other top stocks]
---
## Portfolio Construction Guidance
**Diversification Recommendations:**
- Sector breakdown of top 20 results
- Suggested allocation strategy
- Concentration risk warnings
**Monitoring Recommendations:**
- Key metrics to track quarterly
- Warning signs for each position
- Rebalancing triggers
**Risk Considerations:**
- Market cap concentration
- Sector biases in results
- Economic sensitivity warnings
Step 5: Provide Context and Methodology
Reference screening methodology when explaining results:
Key concepts to explain:
- Why these specific thresholds (3.5% yield, P/E 20, P/B 2)
- Importance of dividend growth vs. static high yield
- How composite score balances value, growth, and quality
- Dividend sustainability vs. dividend trap distinction
- Financial health metrics significance
Load references/screening_methodology.md to provide detailed explanations of:
- Phase 1: Initial quantitative filters
- Phase 2: Growth quality filters
- Phase 3: Sustainability and quality analysis
- Composite scoring system
- Investment philosophy and limitations
Step 6: Answer Follow-up Questions
Anticipate common user questions:
"Why did [stock] not make the list?"
- Check which criteria it failed (yield, valuation, growth, sustainability)
- Explain the specific filter that excluded it
"Can I screen for specific sectors?"
- Filtering capability exists in script (modify line 383-388)
- Suggest re-running with sector parameter additions
"What if I want higher/lower yield threshold?"
- Script parameters are adjustable
- Trade-offs between yield and growth
- Recommend re-screening with new parameters
"How often should I re-run this screen?"
- Quarterly recommended (aligns with earnings cycles)
- Semi-annually sufficient for long-term holders
- Market conditions may warrant more frequent checks
"How many stocks should I buy?"
- Diversification guidance: minimum 10-15 for dividend portfolio
- Sector balance considerations
- Position sizing based on risk tolerance
Resources
scripts/screen_dividend_stocks.py
Comprehensive screening script that:
- Interfaces with FMP API for data retrieval
- Implements multi-phase filtering logic
- Calculates growth rates (CAGR) over 3-year periods
- Evaluates dividend sustainability via payout ratios and FCF coverage
- Assesses financial health (debt-to-equity, current ratio)
- Computes quality scores (ROE, profit margins)
- Ranks stocks by composite scoring system
- Outputs structured JSON results
Dependencies: requests library (install via pip install requests)
Rate limiting: Built-in delays to respect FMP API limits (250 requests/day free tier)
Error handling: Graceful degradation for missing data, rate limit retries, API errors
references/screening_methodology.md
Compre