Unusual options activity alerts in Slack

By General Input

Scan your options watchlist every market close and get a written Slack alert when unusual volume points to a real conviction trade.

Integrations

  • Massive
  • Google Sheets
  • Slack

Type

Agentic Task

Categories

  • Finance
  • Personal Productivity

Build me an agent workflow that scans my options watchlist every US trading day right after the close and posts a written unusual-activity alert to Slack.

Trigger: cron, every weekday (Mon-Fri) at 4:30pm America/New_York. Skip US market holidays. The 4:30 ET timing is on purpose so end-of-day volume and open interest are settled.

Step 1. Read my watchlist from Google Sheets. Use the Get Values operation against a configurable spreadsheet ID and range (default range: a tab called 'Watchlist', column A, e.g. 'Watchlist!A2:A'). Treat each non-empty cell as one underlying US equity ticker (e.g. AAPL, NVDA, SPY).

Step 2. For each ticker, call Massive's Get Option Chain Snapshot to pull every live contract for that underlying. Capture, per contract: contract type (call/put), strike price, expiration date, day volume, open interest, implied volatility, delta, the underlying spot price, and the contract's day close or mid price so we can compute traded premium.

Step 3. Filter to 'unusual' contracts. Defaults (both configurable):

- volume / open_interest > 3 (require open_interest >= 100 so brand-new contracts with OI of 0 or 1 don't trivially pass)

- traded premium for the day > $25,000, where traded premium = volume * contract price * 100

- exclude contracts expiring the same day to cut 0DTE noise (optional toggle)

Step 4. Rank surviving contracts by total traded premium, descending, across the whole watchlist. Take the top 3 to 5 (configurable; default 5).

Step 5. Classify each standout as bullish, bearish, or mixed. Heuristic: calls with strike >= spot lean bullish, puts with strike <= spot lean bearish. Far-OTM short-dated contracts with very high IV should be flagged as 'speculative'. Be honest when the read is ambiguous.

Step 6. Compose one narrative Slack message and post it via Slack's Send a Message to a configurable channel (default #options-flow). Format:

- Header line with today's date and 'Unusual options activity'

- One short opening sentence summarizing the tape (e.g. 'Two names lit up today, both on the call side')

- One block per standout contract with: ticker, call or put, strike, expiration, day volume, open interest, V/OI ratio, implied volatility, total premium traded in dollars, and a one-line read on what the flow likely means for the underlying

- Use Slack mrkdwn (bold tickers, code blocks for the numbers) so it reads well on mobile

Step 7. If zero contracts clear the filter across the whole watchlist, do not post anything. The channel should stay signal-heavy. Log a short 'no unusual activity' line for the run record, but do not message Slack.

Configurable inputs to expose at the top of the workflow:

- watchlist_spreadsheet_id and watchlist_range

- slack_channel

- volume_to_oi_threshold (default 3)

- min_premium_usd (default 25000)

- top_n (default 5)

- exclude_0dte (default true)

Notes for the agent. Be defensive about rate limits on Massive's free tier (5 requests/minute); add small backoff between tickers if needed. Skip tickers that return no chain (e.g. non-optionable). Never invent contracts or numbers, if a field is missing from the snapshot, omit it from the Slack message rather than guess.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageWin back LiveChat visitors whose chats went unansweredLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardChat quality review board for LiveChat support leadsLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seats