Data Sources
Every external feed the platform reads, what it is used for, and where it lands. Rows are checked against source; anything unverified is marked or left out.
Market data
Massive (formerly Polygon.io — same API host and key) is the primary market-data vendor. The backend code comments name the subscription the Advanced stocks plan; the stream is real-time, not delayed.
Massive (ex-Polygon)
Advanced plan · real-time| Source | What | Used by | Writes to |
|---|---|---|---|
| Stocks WebSocket (single connection) | Minute aggregates + trades for all tickers; quotes for a small capped watch set only. The LULD channel is no longer subscribed (removed 2026-09-14). | Backend: volume/price catalyst detection, price-target tripwires, system health | in-memory bar + last-trade cache |
| Daily bars | After the close an EOD job persists the session’s bars from the stream; a grouped-daily REST path backs acceptance and repair. Per-ticker aggregates serve history. | Backend (EOD writer), pipeline (training/inference) | daily_bars |
| Snapshots & reference | Ticker snapshots, ticker reference/metadata, market status and holidays | Backend scanner and quote surfaces | ticker_data_cache |
| Ratios, float, income statements | Valuation ratios and share float. Ratios come back empty for ADRs (foreign filers have no XBRL); Finnhub /stock/metric is the fallback for those names. | Backend data collector, pipeline features | ticker_fundamentals |
| Short interest & short volume | FINRA bi-weekly short interest and daily short volume | Backend, pipeline model features | ticker_short_data, daily_short_volume |
| Splits | Split events; prices are adjusted at query time rather than rewritten in place | Backend price and grading queries | stock_splits |
| Dividends | Cash dividends by ex-date, credited to Paper book positions | Backend paper ledger | book_dividend_credits |
| Economy endpoints | Treasury yields, inflation, inflation expectations, labor market. The pipeline has an optional FRED fallback that is skipped when no key is configured. | Backend macro-environment snapshot | macro_snapshots |
Fundamentals & estimates
Finnhub serves estimates and price targets as snapshots with no history, so the backend records each daily observation itself to build a point-in-time revision series going forward.
Finnhub
Plan unverified| Source | What | Used by | Writes to |
|---|---|---|---|
| /stock/eps-estimate, /stock/price-target | EPS estimates and analyst price targets, swept daily; append-only, rows are never updated or deleted | Backend daily estimates sweep | analyst_estimates_history |
| /stock/recommendation | Monthly analyst recommendation counts (current snapshot plus point-in-time history) | Backend consensus refresh; model features | analyst_consensus, analyst_consensus_history |
| /stock/upgrade-downgrade | Individual analyst rating changes | Backend analyst-action collection | analyst_action_events |
| /stock/insider-transactions | Insider buys and sells; also a pipeline gap-fill beside the Form 4 feed | Backend backfill, pipeline sec_forward | insider_transactions, sec_filings_form4 |
| /calendar/earnings, /stock/earnings | Upcoming earnings dates and past surprises | Backend data collector, pipeline | earnings_calendar |
| /stock/metric | Valuation ratios for ADRs where Massive has none; also a pipeline fallback | Backend data collector, pipeline | ticker_fundamentals |
| /quote, /stock/peers, /stock/profile2 | Spot quote lookup, peer lists, industry classification | Backend market-data handler and backfills, pipeline | — |
| /company-news | Per-ticker news gap-fill (see News) | Pipeline news_forward | news_articles |
Filings & halts
| Source | What | Used by | Writes to |
|---|---|---|---|
| SEC filings via Massive | 8-K text and Form 4 insider transactions. The filings are SEC documents served pre-parsed by Massive’s filings API; the pipeline polls hourly for the active universe and labels new 8-Ks with DeepSeek. | Pipeline sec_forward loop → filing features | sec_filings_8k, sec_filings_form4, ticker_features_daily |
| SEC EDGAR (direct) | Fallback 8-K backfill straight from sec.gov, run on demand; not the routine path | Pipeline backfill endpoint | sec_filings_8k |
| Massive 8-K disclosure labels Planned | Vendor-labelled 8-K disclosures were chosen (2026-09-12) over building an in-house labeler. No code on main consumes the endpoint yet. | — | — |
| Nasdaq Trader halts RSS Live | The official trading-halt feed, polled about once a minute on market days. This is the halt source since 2026-09-14. | Backend halt detector (halt / resume events) | in-process events |
| Quote-based halt detection Shadow | Massive quote indicators on a capped watch set, recorded for comparison against the Nasdaq feed | Backend shadow watcher | halt_quote_detections |
LULD messages are price-band publications for every stock, not halts. Reading them as halts (2026-05-25 to 2026-09-14) was a defect; that subscription is gone.
News
| Source | What | Used by | Writes to |
|---|---|---|---|
| Massive news Live | Roughly hourly sweep of symbol-tagged news for the active universe | Pipeline news_forward loop | news_articles |
| Finnhub company news Live | Gap-fill for universe tickers the Massive sweep did not surface; rows are source-tagged | Pipeline news_forward loop | news_articles |
| DeepSeek labeler | Labels fresh articles regardless of source; every label is appended, then aggregated into article-level model features | Pipeline labeling + feature aggregation | news_article_labels, ticker_features_daily |
| Ticker news display | Reads the store first; falls back to a live Massive call only when the store has nothing for a ticker | Backend → iOS and web | read-only |
| Brave Search Disabled | Disabled 2026-06-01: free-text search attributed news to the wrong ticker. Dormant code only, no live caller. | — | — |
| Reddit Not a source | No Reddit client remains in the pipeline source; only legacy data-model definitions survive | — | — |
Crypto
Crypto is data-only. The LLM crypto verdict loop was removed in 2026-08; no crypto verdicts are produced. The one crypto Paper book (42, btc_trend, rules-based, no model) is active.
| Source | What | Used by | Writes to |
|---|---|---|---|
| Massive crypto snapshots | Prices and day bars for a fixed 30-token universe, refreshed every 10 minutes | Backend market-refresh loop → crypto feed | crypto_analysis (market-data columns) |
| CoinGecko, OKX, Hyperliquid, DefiLlama, Fear & Greed | Optional enrichment: market cap and supply, funding rate, open interest, TVL and stablecoin supply, sentiment index. A miss logs a warning and the sweep continues. | Same loop | crypto_analysis |
| Coinbase holdings | SnapTrade’s Coinbase connection is primary; a direct Coinbase CDP read is the fallback during bridge outages. No Coinbase order code exists. | Backend portfolio sync | user_portfolio_positions |
Brokerage & auth
| Source | What | Used by | Writes to |
|---|---|---|---|
| SnapTrade — portfolio sync Live | Brokerage connection and periodic holdings sync; accounts are tagged by asset class | Backend → portfolio surfaces | user_brokerage_connections, user_portfolio_positions |
| SnapTrade — user orders | A user-initiated order path (market / limit) exists for trade-enabled connections and can be restricted to an allowlist | Backend order endpoints | user’s own brokerage account |
| SnapTrade — Auto-Pilot live routing Gated off | The code path exists behind two separate switches and is off by default. Auto-Pilot places no live orders; every Auto-Pilot book is a Paper book. | — | — |
| Firebase Auth | The backend verifies Firebase JWTs; auth-required routes fail closed when auth is not configured. The web client wires Google, Apple and email/password sign-in. | Backend middleware, web, iOS | — |
Models
Verdicts are pure quant: no LLM sits in the verdict path (the per-decision reviewer was removed 2026-06-14). LLMs label, narrate and flag.
| Source | What | Used by | Writes to |
|---|---|---|---|
| LightGBM ensemble (in-house) | Two production cohorts: tradeable_v2 (market cap ≥ $300M) and tradeable_mid_large (market cap ≥ $2B plus an average-volume floor). Horizons served: 1d / 5d / 20d / 60d. Only cohorts whose universe contains a ticker contribute to its prediction. | Pipeline serves; backend requests predictions and ranks | action_decisions |
| Feature substrate | Per-(ticker, date) feature cache built by the backend from the sources above; the pipeline adds news and filing aggregates and reads it for training and inference | Backend writes, pipeline reads | ticker_features_daily |
| DeepSeek (direct API) | Two backend tiers addressed by alias: worker (deepseek-v4-flash) and analyzer (deepseek-v4-pro); pipeline labelers send deepseek-chat. Roles: labeler, narrator, risk flagger. | Backend, pipeline | llm_calls, news_article_labels |
| Anthropic No caller | No production path has called Opus since 2026-09-14. The provider client and a legacy alias remain in code. | — | — |
| OpenAI Fallback only | No declared role targets a GPT model; the last one (a macro-news classifier) was removed 2026-09-12. The client remains as the router’s fallback when the DeepSeek key is absent. | — | — |
Model names are vendor aliases. DeepSeek retired V4-Flash on 2026-09-10 and temporarily routes the legacy name to a successor model, so the name sent is not proof of the model that answered.
Costs
Only line items that a source in the repositories names are listed. No amount is printed without a verifiable source, and there is no total.
| Line item | Plan, as named in source | Amount |
|---|---|---|
| Massive stocks data | Advanced plan, real-time | unverified |
| Finnhub | unverified | unverified |
| DeepSeek API | usage-based | unverified |
| SnapTrade | paid per connected user | unverified |
| Anthropic, Brave Search | no production caller | — |
Verified against vibebullish-docs@0a4edb1, vibebullish-backend@07c641de,
vibebullish-data-pipeline@ee230ea, vibebullish-web@ce8ec92 on 2026-09-29.
Runtime observations are dated inline; a source sha does not vouch for deployed configuration or database contents.