Authoritative reference combining all prior coverage documents and current subscriptions. Scoped to Beyond Markets as an analysis report platform — not a real-time trading execution bot. Real-time streaming, L2 order book, broker execution, and intraday tick data are out of scope and excluded from gap analysis.
Last updated: 2026-07-10 (Alpha Vantage removed — enabled but never invoked; commodities/crypto downgraded to partial via FMP batch quotes. ETF.com etf_flows retired — scrape now HTTP 403, no working ETF-flow source; ETF fund-flow coverage now a gap.)
| Provider | Module key | Plan | Cost/month | Auth |
|---|---|---|---|---|
| Alpaca (market data) | alpaca_mktdata |
Algo Trader Plus (data API) | $99 | ALPACA_API_KEY_PAPER |
| Alpaca (trading) | n/a (routes only) | Paper + Live | $0 | ALPACA_API_KEY_PAPER/LIVE |
| Articles (local archive) | articles |
Internal | $0 | none |
| BEA (Bureau of Economic Analysis) | macro_calendar |
Public | $0 | BEA_API_KEY |
| Benzinga (pro.benzinga.com) | benzinga |
Paid | TBD | BEZINGA_API_KEY |
| BIS | imf |
Public | $0 | none |
| BLS (Bureau of Labor Statistics) | macro_calendar |
Public | $0 | BLS_API_KEY (optional) |
| ECB | imf |
Public | $0 | none |
| EODHD (eodhistoricaldata.com) | eodhd |
Paid | TBD | EODHD_API_KEY |
| Financial Modeling Prep | fmp |
Premium | $49.00 | FMP_API_KEY |
| FINRA REGSHO | finra_short |
Public | $0 | none |
| FinViz Elite | finviz |
Elite | $39.50 | FINVIZ_API_TOKEN |
| Forex Factory | economic_calendar |
Public | $0 | none |
| FRED (St. Louis Fed) | fred |
Public | $0 | FRED_API_KEY |
| GDELT | gdelt |
Free | $0 | none |
| iborrowdesk | iborrowdesk |
Public | $0 | none |
| IMF DataMapper | imf |
Public | $0 | none |
| NewsAPI.ai (Event Registry) | newsapi_ai |
5K | $90.00 | NEWSAPI_AI_KEY |
| NewsAPI.org | newsapi |
Developer | $0 | NEWSAPI_ORG_KEY |
| NewsData.io | newsdata |
Free | $0 | NEWSDATA_API_KEY |
| OpenFIGI | openfigi |
Free | $0 | OPENFIGI_API_KEY (optional) |
| Polygon.io | polygon |
Advanced | $29.00 | POLYGON_API_KEY |
| SEC EDGAR | sec + 13f |
Public | $0 | none |
| SEC FTD (REGSHO fails-to-deliver) | sec_ftd |
Public | $0 | none |
| Seeking Alpha | — not integrated | Premium | $20.83 ($250/yr) | n/a (no public API) |
| TrendSpider | inbound webhook only (webhook_store) |
Premium | $137.00 | TRENDSPIDER_WEBHOOK_SECRET (no public API — push only) |
| Unusual Whales | uw |
Paid | $64.75 | UNUSUAL_WHALES_EMAIL / UNUSUAL_WHALES_PASSWORD (session login) |
Integrated data-feed spend: $272.25 + EODHD
Non-integrated subscriptions (manual / UI tools, no data feed): TrendSpider $137.00 + Seeking Alpha $20.83 = $157.83/month. These are paid for but not wired into the pipeline — see How Providers Are Integrated below for why and how they could be.
Every integrated provider is a tool module (tools/data_ingestion_*.py) exposing TOOL_DEFINITIONS + run_tool(name, input), called through the shared SQLite TTL cache. They fall into a few integration patterns:
| Pattern | How it works | Providers |
|---|---|---|
| Authenticated REST API | HTTPS calls with an API key from .env; JSON responses parsed into tool results |
FMP, Polygon, EODHD, NewsAPI.ai, NewsData.io, NewsAPI.org, FinViz Elite (token), Benzinga, OpenFIGI, BEA, BLS, FRED |
| Session-authenticated REST | Headless Playwright login → cached session bearer token, then live REST calls to phx.unusualwhales.com. No offline fallback (tools/uw_session.py + data_ingestion_external_data.py). |
Unusual Whales (uw) |
| Public REST, no auth | Open government / institutional endpoints, no key needed | SEC EDGAR, SEC FTD, FINRA REGSHO, IMF, ECB, BIS, GDELT, iborrowdesk |
| Web scrape | HTML/CSV fetched and parsed (no official API) | Forex Factory (calendar) |
| Downloaded files / local archive | Files fetched on a schedule or stored locally, read from disk | Articles (Economist archive) |
| Broker SDK | Official alpaca-py SDK with per-tenant keys (trading) / env keys (market data) |
Alpaca |
Not integrated (paid, but no data feed wired in):
| Provider | Why not integrated | How it could be integrated |
|---|---|---|
| TrendSpider | Still no queryable API on the Premium plan — nothing can be pulled. But it can push, and that half is now wired in (see Inbound webhooks below). The market data it shows (equities, options, futures, FX, crypto) is already covered by Polygon, EODHD and Alpaca, so only the alerts are worth taking. | Pull-side would need manual CSV export + a one-off importer. Its unique capability (no-code backtesting / variance testing) can't be pulled programmatically at all. |
| Seeking Alpha | No official public API, and scraping is actively blocked. Its analyst ratings, price targets, transcripts and dividends already come from Benzinga / FMP / Polygon. | Its unique Quant Ratings & Factor Grades and earnings-call transcripts would require cookie-authenticated scraping — the same pattern the articles module already uses for the Economist archive. This is the realistic path if transcripts (see gap below) become a priority. |
Tools with no queryable API can still fire alerts at us. webhook_store.py is the
shared landing zone: a source-keyed table in .data/webhooks.db holding one row per
pushed ticker, expiring after 24 hours by read-time cutoff (same model as the news
store). Each source gets a receiver in routes/webhooks.py.
| Source | Receiver | Read back as | Setup |
|---|---|---|---|
| TrendSpider | POST /api/webhooks/trendspider |
navbar bell / admin only | Settings → Notifications → Webhook for alerts, URL https://beyondmarkets.ai/api/webhooks/trendspider?secret=<TRENDSPIDER_WEBHOOK_SECRET>&symbol={{ticker}}. The URL is account-wide — every alert with Webhook ticked hits it, so filter on the TrendSpider side. |
| TradingView | POST /api/webhooks/tradingview |
GET /api/webhooks/tradingview (admin only) |
Alert → Notifications → Webhook URL, https://beyondmarkets.ai/api/webhooks/tradingview?secret=<TRADINGVIEW_WEBHOOK_SECRET>. Symbol comes from a symbol/ticker field in the JSON alert message, or ?symbol=. |
Neither source is a screener list any more. TrendSpider used to be one, backed by
webhook_store.SCREENER_SOURCES and a 1h window; it measured empty over 157 snapshots
(screener_updates.md) and the list, its read route and the whitelist were removed.
Both sources still write, and both are read back only by the navbar bell and the admin
view — so a chart alert cannot put a ticker in front of the trade proposer.
The symbol is always taken from ?symbol= or a JSON field, never parsed out of the
alert body: TrendSpider sends its free-text Note as the raw body, and BUY / LONG /
RSI all look like tickers. The body is stored verbatim as row context. An alert that
carries no resolvable symbol is rejected with 400 — the store is symbol-keyed, so
there is nothing to record without one.
Legend: ✅ Fully covered · ⚠️ Partial · ❌ Not covered · — Not applicable (out of scope for analysis platform)
| Data type | Status | Source |
|---|---|---|
| Previous day OHLCV | ✅ | polygon (polygon_prev_close), fmp |
| Historical OHLCV (daily/weekly/monthly) | ✅ | polygon (polygon_aggregates), fmp, finviz |
| Intraday candles (1min–4h) | ✅ | fmp (get_intraday_prices), polygon (5-min, Advanced plan — use ms timestamps) |
| Intraday bars extended hours (pre/post-market) | ✅ | polygon (04:00–20:00 ET), fmp |
| Live price snapshot (batch) | ✅ | alpaca_mktdata (get_stock_snapshots), alpaca (get_snapshots — per-tenant TLS) |
| Market movers (gainers/losers) | ✅ | fmp (get_market_movers), alpaca_mktdata (get_market_movers) |
| Most active stocks | ✅ | alpaca_mktdata (get_most_active) |
| Pre/after-hours price | ✅ | fmp (get_aftermarket_quote) |
| Bid/ask (L1) | ✅ | fmp (get_quote_l1) |
| ⚠️ | Available in polygon_aggregates daily bar; no intraday VWAP |
|
| Company reference data (market cap, shares out, SIC) | ✅ | polygon (polygon_ticker_details), fmp |
| Dividends | ✅ | polygon (polygon_dividends), fmp |
| Stock screener | ✅ | finviz (screener), fmp (screen_stocks) |
| Sector / group performance | ✅ | fmp (get_sector_performance), finviz (group_performance) |
| Data type | Status | Source |
|---|---|---|
| US interest rates (Fed funds, yield curve) | ✅ | fred, fmp (get_treasury_rates) |
| CPI / PCE / PPI inflation | ✅ | fred (get_inflation) |
| GDP (real & nominal) | ✅ | fred, imf |
| Labor market (unemployment, NFP, JOLTS) | ✅ | fred (get_labor_market) |
| Credit conditions (OAS spreads, lending standards) | ✅ | fred (get_credit_conditions) |
| Money supply (M2) | ✅ | fred (get_money_supply) |
| Housing data | ✅ | fred (get_housing) |
| Consumer sentiment | ✅ | fred (get_consumer_indicators) |
| ✅ | fred (get_market_indicators), fmp |
|
| Dollar index (DXY) | ✅ | fmp |
| Forex (EUR, GBP, JPY, CHF, CNY) | ✅ | imf (ECB FX rates), fmp (batch quotes) |
| Commodities (oil, gold, silver, ag) | ⚠️ | fmp (batch quotes accept major commodity symbols; no dedicated feed) |
| Crypto (BTC, ETH, SOL) | ⚠️ | fmp (batch quotes accept major crypto symbols; no dedicated feed) |
| International macro (GDP, CPI, debt, current account) | ✅ | imf (241 countries, WEO projections to 2031) |
| Euro area monetary data | ✅ | imf (ECB: HICP, yield curve, €STR, bank lending) |
| BIS financial stability indicators | ✅ | imf (BIS: credit gaps, debt service, property prices) |
| Macro liquidity regime score | ✅ | macro_liquidity (composite: real rates, CB balance sheet, credit, funding stress) |
| Economic calendar (CPI/NFP/FOMC dates + forecast) | ✅ | economic_calendar (Forex Factory, current week) |
| Multi-week macro calendar look-ahead | ✅ | macro_calendar (macro_calendar_upcoming) — FRED release dates, any look-ahead |
| Data type | Status | Source |
|---|---|---|
| Income statement (revenue, EPS, margins) | ✅ | fmp, sec |
| Balance sheet (assets, debt, cash) | ✅ | fmp, sec |
| Cash flow statement (FCF) | ✅ | fmp, sec |
| Key metrics (P/E, EV/EBITDA, P/S, ROE) | ✅ | fmp (get_key_metrics, get_financial_ratios) |
| DCF valuation | ✅ | fmp (get_dcf_valuation) |
| ESG data | ✅ | fmp (get_esg) |
| XBRL financial facts | ✅ | sec (get_sec_company_facts) |
| Full filing history (10-K, 10-Q, 8-K links) | ✅ | sec (get_sec_submissions), fmp |
| Full-text SEC filing search | ✅ | sec (search_sec_filings) |
| Data type | Status | Source |
|---|---|---|
| Next earnings date | ✅ | fmp (get_analyst_data), finviz |
| EPS / revenue estimates | ✅ | fmp (get_analyst_data) |
| Earnings beat/miss history | ✅ | fmp |
| Analyst upgrades / downgrades | ✅ | fmp (get_analyst_data), finviz, benzinga (benzinga_ratings) |
| Price target changes | ✅ | fmp |
| Consensus rating | ✅ | fmp |
| Estimate revision velocity/breadth | ⚠️ | FMP has individual revisions; no breadth/velocity aggregation |
| Earnings transcripts | ❌ | Not available |
| Data type | Status | Source |
|---|---|---|
| Financial / market news search | ✅ | newsapi_ai, newsdata, gdelt, fmp, alpaca_mktdata (get_alpaca_news) |
| Company-specific news | ✅ | newsapi_ai (get_company_news), fmp, finviz, alpaca_mktdata |
| Macro / central bank news | ✅ | newsapi_ai, gdelt |
| Geopolitical news | ✅ | newsapi_ai, gdelt (get_gdelt_geo_news) |
| Article sentiment scoring | ✅ | newsapi_ai (−1.0 to +1.0 per article), newsdata |
| Sentiment timeline / trend | ✅ | gdelt (get_gdelt_sentiment) |
| News coverage volume trend | ✅ | gdelt (get_gdelt_coverage_volume) |
| Top headlines (US) | ✅ | newsapi (disabled by default) |
| Low-latency / real-time news push | ⚠️ | benzinga (pull-based REST; websocket push not yet wired) |
| Local article archive (Economist, Reuters) | ✅ | articles |
| Data type | Status | Source |
|---|---|---|
| Options flow / unusual prints | ✅ | uw (ext_get_options_flow) |
| Options sweeps | ✅ | uw (ext_get_options_flow — large prints) |
| Dark pool prints | ✅ | uw (ext_get_dark_pool) — per-ticker only; no market-wide aggregate |
| Put/call ratio | ✅ | uw (ext_get_options_screener, ext_get_net_premium) |
| Market tide (net call vs put premium) | ✅ | uw (ext_get_net_premium) |
| Open interest (flow level) | ✅ | uw (ext_get_oi_changes) |
| Open interest snapshot (full chain) | ⚠️ | OI available in flow/chain data; no full chain OI snapshot by expiry/strike |
| Implied volatility (per trade) | ✅ | uw (in ext_get_options_flow records; IV rank via ext_get_net_premium) |
| IV rank / IV percentile | ⚠️ | eodhd (eodhd_hist_volatility) — HV rank proxy; IV rank needs options add-on |
| IV term structure / skew | ❌ | Options add-on not on current EODHD plan |
| Delta / gamma per position | ⚠️ | Per-trade delta in flow; gamma-exposure (GEX) summary via uw (ext_get_net_premium) |
| Net premium ticks (intraday) | ⚠️ | uw (ext_get_net_premium) — net-premium summary only; no intraday tick series |
| Options screener | ✅ | finviz (options_screen), uw (ext_get_options_screener) |
| Congress trades | ✅ | fmp |
| Data type | Status | Source |
|---|---|---|
| Cost to borrow (daily series) | ✅ | iborrowdesk |
| Shares available to borrow | ✅ | iborrowdesk |
| Borrow utilization signal | ✅ | iborrowdesk (High/Medium/Low from fee rate) |
| Daily short volume ratio | ✅ | finra_short (finra_short_volume) — T+1, free |
| Official biweekly short interest | ✅ | finra_short (finra_short_interest) — FINRA REGSHO, biweekly |
| Short interest % of float (screener) | ⚠️ | finviz (screener field, delayed snapshot) |
| Short interest time series | ⚠️ | finra_short gives biweekly history; no daily trend |
| Near-live short interest estimates | ❌ | Requires ORTEX or S3 Partners (paid) |
| Failure-to-deliver (FTD) data | ✅ | sec_ftd (sec_ftd_get, sec_ftd_trend) — SEC REGSHO bimonthly files |
| Data type | Status | Source |
|---|---|---|
| 13F holdings (current quarter) | ✅ | 13f (SEC EDGAR, 45-day lag inherent) |
| 13F new/added/reduced/closed positions | ✅ | 13f (manager_new_positions) |
| Per-position type (long vs put vs call) | ✅ | generate_13f_positions.py script (CSV output) |
| Insider buying / selling (Form 4) | ✅ | fmp (get_insider_trades), sec, finviz |
| Insider transaction detail (role, size, type) | ✅ | fmp |
| 13D/13G activist filings | ⚠️ | sec (search_sec_filings) — unstructured text search; no clean API |
| Institutional ownership % | ✅ | fmp (get_company_profile), finviz |
| Fund ownership changes (quarter-over-quarter) | ✅ | 13f (via comparison of current vs prior quarter) |
| Fund-level drill-down (per manager, all holdings) | ✅ | 13f (generate_13f_positions.py CSV) |
| Data type | Status | Source |
|---|---|---|
| ETF fund flow (daily/weekly/monthly/YTD) | ❌ | No working source — ETF.com scrape returns HTTP 403 (etf_flows retired); FMP/EODHD don't publish ETF flows/AUM history |
| Top ETFs by inflow/outflow | ❌ | Same — no flows source |
| ETF holdings / sector weightings | ⚠️ | fmp (requires Ultimate plan for full flows; basic holdings available) |
| Sector ETF relative performance | ✅ | fmp, finviz (group_performance) |
| Leveraged ETF flows | ❌ | Not available |
| Data type | Status | Source |
|---|---|---|
| EMA (9/12/21/50/200) | ✅ | fmp (get_technical_indicator) |
| SMA (50/200) | ✅ | fmp |
| ✅ | fmp |
|
| ✅ | fmp |
|
| ADX / DMI | ✅ | fmp |
| Williams %R | ✅ | fmp |
| Standard deviation | ✅ | fmp |
| ⚠️ | Derivable from FMP EMAs — no direct MACD endpoint | |
| VWAP (intraday) | ⚠️ | Daily VWAP available in polygon_aggregates; intraday not available |
These are the remaining gaps that would meaningfully improve report quality for an analysis platform, ranked by impact. Items irrelevant to report generation (real-time streaming, execution APIs, L2 order book) are excluded.
True IV rank / term structure — EODHD Options add-on or ORATS (~$40–70/month)
The current EODHD plan provides historical (realised) volatility rank via eodhd_hist_volatility — a useful proxy, but not true implied volatility rank. IV rank and IV term structure require either upgrading the EODHD subscription to include the Options add-on, or subscribing to ORATS Core (~$40/month). This is the most impactful remaining gap for options analysis sections.
Earnings call transcripts — any provider
Currently the system can identify earnings dates, beats/misses, and revisions, but cannot read what management actually said. Transcripts would dramatically improve the qualitative section of equity reports. We now hold a Seeking Alpha Premium subscription (which includes transcripts), so the cheapest path is to integrate it via cookie-authenticated scraping — the same pattern the articles module already uses — at no extra subscription cost. Alternatives: Intrinio (API, ~$50/month). The articles module infrastructure already exists for this pattern.
sec-api.io for cleaner Form 4 / 13D feeds (~$50–150/month)
The current data_ingestion_sec.py hand-rolls XML parsing of EDGAR filings, which is brittle against format variations. sec-api.io delivers Form 4 insider transactions, 13D/13G activist filings, and all SEC filings as clean structured JSON. For an analysis platform the real-time aspect is secondary — the structured clean data is the value.
ORTEX for near-live short interest (~$50–100/month)
finra_short covers official biweekly short interest and daily short volume ratio. ORTEX would add near-live short interest % of float as a time series. Useful for more precise squeeze analysis but FINRA covers the essentials.
~~Benzinga API~~ — now integrated (benzinga module). Covers news, analyst ratings, earnings calendar, dividends, and guidance.
| Category | Status |
|---|---|
| Price / OHLC history | ✅ Complete |
| Macro series & calendar | ✅ Complete (FRED multi-week calendar + BLS + BEA) |
| Fundamentals & valuation | ✅ Complete |
| Earnings & analyst estimates | ✅ Complete |
| News & sentiment | ✅ Complete (pull-based; Benzinga adds structured finance events) |
| Options flow & dark pool | ✅ Complete |
| Short interest & borrow | ✅ Complete (official FINRA + iborrowdesk) |
| Institutional 13F holdings | ✅ Complete |
| Insider trading | ✅ Complete |
| ETF fund flows | ❌ Gap — ETF.com scrape now HTTP 403 (etf_flows retired); no working source |
| Technical indicators | ✅ Complete |
| HV rank (realised vol proxy) | ✅ eodhd (eodhd_hist_volatility) — HV rank/percentile from EOD prices |
| IV rank / term structure (true IV) | ⚠️ Partial — requires EODHD Options add-on or ORATS |
| Earnings call transcripts | ❌ Gap — Seeking Alpha Premium now owned; integrate via cookie-auth scrape (no extra cost) or Intrinio API |
| Multi-week macro calendar | ✅ macro_calendar (macro_calendar_upcoming) — FRED release dates |
| Failure-to-deliver data | ✅ sec_ftd (sec_ftd_get, sec_ftd_trend) |
| Near-live short interest % of float | ⚠️ Partial — FINRA biweekly covers it; ORTEX for near-live |
| Structured insider/activist filings | ⚠️ Partial — EDGAR works; sec-api.io cleaner |