Skip to content

Alerts

Alerts are the cross-cutting trigger system that lives behind the Watchlist, the News panel, and the price-target sub-panel of the Security dashboard. One backend service, three call sites. Implemented at backend/routes/alerts.py.

Alert types

Price thresholds

Trigger when a symbol's last quote crosses an absolute level (above or below). The most common alert. Backed by the WebSocket channel (backend/routes/websocket.py) that streams Finnhub quotes — alerts evaluate on every tick during market hours.

Volume spikes

Trigger when intraday volume exceeds a multiple of 30-day average. Useful for catching unusual interest before the price reflects it.

News keyword triggers

Trigger when a story matching your keyword filter (and optionally tagged with a symbol from your watchlist) lands in the news feed. Composes with News panel screens.

Price-target / consensus shifts

Trigger when sell-side analyst consensus revises up or down beyond a threshold. Driven by EODHD analyst-estimates feed.

Composing an alert

The bell icon in the Watchlist, the Alert me action in News, and the Watch this target button in Price target all open the same composer modal. Inputs:

FieldNotes
TriggerOne of the four types above
Symbol or keywordRequired; auto-filled from caller context
ThresholdAbsolute price, % change, or volume multiplier
WindowAlways-on, market-hours-only, or custom schedule
ChannelIn-app toast, email, or both

Delivery channels

  • In-app toasts — surface in the right rail with the offending data point.
  • Email — sent from the configured SMTP provider; verify your address in Settings → Profile.
  • Webhook delivery is on the roadmap — not yet shipped.

State and history

Alerts have three states: active, tracking (within 1% of trigger), inactive (paused or fired-once). See status.* keys in frontend/src/i18n/en.json. Past triggers are listed in the alerts panel; you can re-arm a one-shot alert from history.

Limits

  • Soft cap: ~100 active alerts per user. There's no hard limit, but the composer warns above that.
  • News keyword alerts evaluate every ~5 minutes on the news feed cadence — they're not instant.
  • The free tier has email-only delivery; in-app toasts are universal.

Tips

  • For a stop-loss-like alert, set a price threshold ~5% below your average cost from the Market panel Portfolio view.
  • For breakouts, combine a price threshold with a volume spike alert on the same symbol — fire only when both are true (composer supports AND combinator).
  • Don't forget to disarm alerts on closed positions — they don't auto-prune.

Released under the project license. Public sources only — no proprietary or restricted data.