Skip to content
Data
Skill

/stock-screener

Screen stocks by fundamental and technical criteria using EODHD screener — filter by market cap, P/E, dividend yield, sector, signals, and more. Use when the user wants to find stocks matching specific criteria.

From plugin
eodhd-api
4913 skills1 agent1 MCP

Claude Code

$ npx -y skills add EodHistoricalData/eodhd-claude-skills --skill stock-screener --agent claude-code

SKILL.md

stock-screener.SKILL.md
name: stock-screener
description: >-
  Screen stocks by fundamental and technical criteria using EODHD screener —
  filter by market cap, P/E, dividend yield, sector, signals, and more.
  Use when the user wants to find stocks matching specific criteria.
version: 0.4.0

Skill: stock-screener

Purpose

Find stocks matching user-defined criteria using EODHD's screener endpoint, then enrich top results with detailed fundamentals and price data for comparison.

Trigger

Activate when the user asks for:

  • Stock screening or filtering ("find stocks with P/E under 15")
  • "Best dividend stocks" or "cheap growth stocks"
  • Sector-specific stock lists
  • Signal-based screening (new highs, oversold, etc.)
  • Comparative analysis of filtered stocks
  • "What should I invest in?" (screen first, then analyze)

Workflow

1. **Translate criteria to filters** — map user language to EODHD screener JSON filters 2. **Run screener** — `screener` endpoint with filters, sort, signals, limit 3. **Review results** — present initial list with key metrics 4. **Enrich top picks** — `fundamentals` for detailed data on top 5-10 results 5. **Add price context** — `eod` for recent price trends 6. **Compile screener report**

Filter Format (critical)

`filters` is a **JSON array of `[field, operation, value]` triples** — NOT dot-notation (`market_capitalization.gte`) and NOT a JSON object. If the shape is wrong, the EODHD API silently ignores the filter and returns unfiltered, irrelevant results.

Operations: `=`, `!=`, `>`, `>=`, `<`, `<=`, `match`. A JSON object is rejected with HTTP 422.

[["market_capitalization",">=",10000000000],["sector","=","Technology"]]

**Sort:** `--sort field.direction` (e.g. `market_capitalization.desc`, `pe.asc`). A bare field name is rejected with HTTP 422 ("sort.0.direction is required").

**Currency caveat (important):** absolute-money fields — `market_capitalization`, `revenue`, `ebitda` — are in each listing's **local currency**, not USD. A raw threshold leaks huge non-USD companies (e.g. a Vietnam-listed firm at "3.88T" ₫ ≈ $150M passes `>= 10B`). Each result row has a `currency_symbol` field indicating its currency. So:

  • Filtering/sorting by an absolute-money field → **scope to one market** with `["exchange","=","us"]` (or the

intended exchange) so the threshold is currency-consistent.

  • Multi-market screens → don't compare raw caps across rows; group/label by `currency_symbol`.
  • Ratio/percent fields (`pe`, `pb`, `ps`, `peg`, `roe`, `roa`, `beta`, `dividend_yield`) are

currency-independent and safe to compare across markets.

**Instrument-type noise (the screener has NO `type` filter — `["type",...]` → HTTP 422):** the combined `["exchange","=","us"]` includes OTC foreign cross-listings (codes ending `F`/`Y`, broken 55–110% `dividend_yield`) and preferred shares (codes with a `-`, e.g. `JPM-PD`). For a clean common-stock screen: scope to a real venue (`["exchange","=","nyse"]`/`"nasdaq"`), add `["dividend_yield","<=",0.25]` on dividend screens, and post-filter result rows whose `code` contains `-`.

Available Filters

The screener supports these filter fields:

  • `market_capitalization` — market cap in the listing's **local currency** (see currency caveat; scope by `exchange` for a consistent threshold)
  • `earnings_share` — EPS
  • `dividend_yield` — dividend yield as a **fraction** (0.03 = 3%, not 3)
  • `sector` — sector name (exact match)
  • `industry` — industry name (exact match)
  • `exchange` — exchange code (e.g., `us`)
  • `pe` — P/E ratio
  • `wallstreet_target_price` — analyst target price
  • Plus many more fundamental fields (see endpoint reference)

Each result row also returns `currency_symbol` (currency of the absolute-money fields) and `exchange` — surface these when presenting caps.

Available Signals

  • `50d_new_hi` / `50d_new_lo` — 50-day new high/low
  • `200d_new_hi` / `200d_new_lo` — 200-day new high/low
  • `bookvalue_neg` — negative book value
  • `wallstreet_lo` / `wallstreet_hi` — at analyst low/high

Output Structure

Stock Screener Results — [Criteria Description]

**Filter Applied**

{filters_used}

**Results ([N] matches)** | # | Ticker | Name | Sector | Mkt Cap (ccy) | P/E | Div Yield | Price | |---|--------|------|--------|---------------|-----|-----------|-------|

Show the `currency_symbol` alongside Mkt Cap; never render a non-USD cap as USD. If the screen spans multiple currencies, say so in the Summary caveats.

**Top Picks — Detailed Analysis** For each top 5 result:

  • Valuation metrics (P/E, P/S, P/B, EV/EBITDA)
  • Growth metrics (Revenue growth, EPS growth)
  • Profitability (margins, ROE)
  • 30-day price trend
  • Analyst target vs current price

**Sector Distribution** | Sector | Count | Avg P/E | Avg Yield | |--------|-------|---------|-----------|

**Summary**

  • Key themes in results
  • Caveats and limitations

> This is not financial advice. Data is for informational purposes only.

Example Filters

# High-dividend large caps (dividend_yield is a fraction: 0.03 = 3%; nyse avoids OTC junk; <=0.25 caps broken yields)
python eodhd_client.py --endpoint screener --filters '[["dividend_yield",">=",0.03],["dividend_yield","<=",0.25],["market_capitalization",">=",10000000000],["exchange","=","nyse"]]' --sort dividend_yield.desc --limit 20
# then drop rows whose code contains '-' (preferred shares)

# Undervalued growth stocks
python eodhd_client.py --endpoint screener --filters '[["market_capitalization",">=",1000000000],["earnings_share",">=",1],["exchange","=","us"]]' --signals 200d_new_lo --limit 20

# Tech sector screening
python eodhd_client.py --endpoint screener --filters '[["sector","=","Technology"],["market_capitalization",">=",5000000000],["exchange","=","us"]]' --sort market_capitalization.desc --limit 30

Endpoints Used

| Endpoint | Purpose | Cost | |----------|---------|------| | `screener` | Filter and rank stocks | 1 call | | `fundamentals` | Detailed data for top picks | 10 call

Read more
@eodhistoricaldata
Ships witheodhd-api

Developer-first financial data for Claude — 150,000+ tickers across 70+ exchanges, powered by EODHD API and an OAuth-secured MCP Server. ⚠ Not financial advice. This plugin delivers AI-generated analysis on top of EODHD market data.

4913 skills1 agent1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
49
Star history of EodHistoricalData/eodhd-claude-skills on GitHub, a chart by star-history.com

Other skills on eodhd-api.

company-brief

company-brief

Generate a comprehensive company snapshot using EODHD data — profile, fundamentals, recent news, sentiment, insider transactions,…

eodhd-api

eodhd-api

Fetch financial data from EODHD API — historical prices, fundamentals, options, technical indicators, news, sentiment, macro…

eodhd-macro

eodhd-macro

Macro-economic dashboard using EODHD data — GDP, CPI, unemployment, interest rates, Treasury yield curve, real yields, and the…

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem08d69k
@mem0ai@mem0aiInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

posthog2w41k
@posthog@posthogInstall Skill

Questions about stock-screener.

Which coding agents can use stock-screener?
stock-screener installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.