Unusual options activity alerts in Slack
Scan your options watchlist every market close and get a written Slack alert when unusual volume points to a real conviction trade.
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.
What does this prompt do?
- Reads your watchlist of tickers from a Google Sheet so the universe stays under your control.
- Pulls every option contract on each ticker after the close and looks for volume that towers over open interest.
- Ranks the standout contracts by total premium, classifies each as bullish or bearish, and writes a short read on what the flow likely means.
- Posts a clean, signal-only summary to Slack and stays quiet on days when nothing crosses your thresholds.
What do I need to use this?
- A Massive account with an API key for options market data.
- A Google account with a watchlist sheet that lists the underlying tickers you care about.
- A Slack workspace and a channel where the alerts should be posted.
How can I customize it?
- Change the cutoffs. The defaults flag contracts where volume is more than three times open interest and total premium clears $25,000. Move either number up or down to fit how aggressive you want the feed to be.
- Edit the watchlist in your Google Sheet. Add or remove tickers any time without touching the workflow.
- Swap the destination channel, tweak the post time, or change how many top contracts get called out in each alert.
FAQs
When does the alert run?
What counts as unusual options activity?
Will I get a message every day?
How does it decide if flow is bullish or bearish?
Can I use this for a single ticker or do I need a watchlist?
Related templates
Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.
Work every partner tier decision from one board, with the revenue and commission numbers, clear promotion thresholds, and AI review briefs.
Open one board at month end to find every closed deal missing a commission, every commission with no deal behind it, and every amount that does not add up.
Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.
Work every return, damage and warranty claim in one queue, with the order, the delivery date and a policy-backed recommendation already on screen.
See warmup status, daily send volume, and bounce risk for every sending account in one grid, with the riskiest mailboxes floating to the top.
Stop scrolling options scanners after the bell.
Connect Massive, Google Sheets, and Slack once, and Geni delivers a written read on the day's unusual flow before you close your laptop.