eodhd-screen
Skill47 starsChanged 4 months agoMITView on GitHub
Screen stocks by fundamental and technical criteria using the EODHD screener — market cap, P/E, dividend yield, sector, exchange, and signals, with currency- aware thresholds. Invoke as /eodhd-screen <criteria>.
In this repository13 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- company-briefSkill
- earnings-monitorSkill
- eodhd-analyzeSkill
- eodhd-apiSkill
- eodhd-compareSkill
- eodhd-macroSkill
- eodhd-marketSkill
- macro-dashboardSkill
- market-overviewSkill
- options-analyzerSkill
- portfolio-riskSkill
- stock-screenerSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
When filtering/sorting by an absolute-money field, scope to one market — add ["exchange","=","us"] (or the user's intended exchange) so the …
- Very specific: line 58
Use the stock-screener skill workflow:
- Distinctive: line 59
Run screener with translated filters (limit 20)
- Distinctive: line 71
If criteria are vague, ask for clarification or suggest reasonable defaults.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Screen stocks using EODHD screener based on these criteria: $ARGUMENTS
Translate the user's criteria into EODHD screener filters.
Filter format (critical): filters is a JSON array of [field, operation, value] triples, NOT
dot-notation and NOT a JSON object. A JSON object is rejected with HTTP 422 ("must be an array").
Operations: =, !=, >, >=, <, <=, match.
Sort format: --sort field.direction, e.g. market_capitalization.desc or pe.asc. A bare field name
(or a separate order flag) is rejected with HTTP 422 ("sort.0.direction is required").
Currency caveat (important): absolute-money fields — market_capitalization, revenue, ebitda — are
reported in each listing's local currency, not normalized to USD. So a raw threshold leaks huge non-USD
companies (e.g. a Vietnam-listed firm shows "3.88T" ₫ ≈ $150M but passes a >= 10B filter). Each result row
carries a currency_symbol field telling you the currency. Therefore:
- When filtering/sorting by an absolute-money field, scope to one market — add
["exchange","=","us"](or the user's intended exchange) so the threshold is currency-consistent. - For multi-market screens, you cannot 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 (important — the screener has NO type filter): there is no field to restrict
results to common stock. Passing ["type", ...] is rejected with HTTP 422 (filters.0.field is invalid).
Two kinds of junk leak into unscoped screens, especially dividend screens:
- OTC / foreign cross-listings — the combined
["exchange","=","us"]virtual exchange includes OTC grey-market listings (codes ending inF/Y, e.g.TCANF,RNECF) with brokendividend_yield(55–110%). Scope to a real venue instead —["exchange","=","nyse"]or["exchange","=","nasdaq"]— to drop them. (usis still fine when you only need currency consistency, not clean common stock.) - Preferred shares / baby bonds — these list on NYSE/NASDAQ too, carry a
-incode(e.g.JPM-PD,DLR-PJ) and a coupon rate inname, and dominate high-yield screens. The API can't filter them, so post-filter the results: for a common-stock screen, drop rows whosecodecontains-. - Sanity-cap broken yields — for any dividend screen add
["dividend_yield","<=",0.25](no real common stock yields >25%) to discard rows with corrupt data.
Common mappings (note: dividend_yield is a fraction — 0.03 = 3%):
- "large cap" →
["market_capitalization",">=",10000000000] - "mid cap" →
["market_capitalization",">=",2000000000],["market_capitalization","<=",10000000000] - "small cap" →
["market_capitalization","<=",2000000000] - "high dividend" →
["dividend_yield",">=",0.03],["dividend_yield","<=",0.25](upper cap drops broken-data OTC/preferred rows) - "low P/E" or "cheap" →
["pe",">",0],["pe","<",15]+--sort pe.asc - "tech" →
["sector","=","Technology"] - "healthcare" →
["sector","=","Healthcare"] - US stocks →
["exchange","=","nyse"]or["exchange","=","nasdaq"]for clean common stock (avoids OTC junk); use["exchange","=","us"]only when you need currency consistency, not a clean instrument set - Sector names, industry names, exchange codes as additional
[field,"=",value]triples
Example: "high dividend large cap (US)" →
--filters '[["dividend_yield",">=",0.03],["dividend_yield","<=",0.25],["market_capitalization",">=",10000000000],["exchange","=","nyse"]]' --sort dividend_yield.desc
(then drop result rows whose code contains - — those are preferred shares, not common stock)
Use the stock-screener skill workflow:
- Run screener with translated filters (limit 20)
- Unless the user explicitly wants preferred shares/ETFs, drop result rows whose
codecontains-(preferred shares) before presenting — the API has no instrument-type filter to do this server-side - For top 5-10 results, fetch fundamentals for deeper detail
- Fetch recent price data for performance context
Present:
- Filters Applied — show the JSON filter used
- Results Table — ticker, name, sector, market cap (with its
currency_symbol), P/E, dividend yield, price, 30d change. Show the currency next to any cap/revenue figure; never present a non-USD cap as if it were USD. - Top 5 Deep Dive — expanded valuation and growth metrics for best matches
- Summary — key themes and patterns in results
If criteria are vague, ask for clarification or suggest reasonable defaults.
Include disclaimer: "This is not financial advice. Data is for informational purposes only."
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

