Options flow scanner

Whalefinder

Reads the entire US equity options flow tape and highlights the few prints each day worth acting on.

What is being tested

Somebody buys a large options position aggressively, lifting the offer instead of resting a bid. That leaves a print, and a vendor (Unusual Whales) publishes those prints in near-real time: roughly ten thousand a day across US-listed equities. The claim under test is that some of this is informed (or otherwise well-placed) money, and that its footprint arrives early enough to follow.

The academic evidence on naive flow-following is skeptical, and friction at retail size is worse than the claim usually admits. At one contract, a 15% relative spread costs about 9% round trip; a 25% spread needs a move above 22% to break even. Seeing the whales is not the problem, since the prints are published on a schedule. The issue is sifting through the noise to identify the actionable trades.

Settling that takes more than an alert feed. Most of this system exists to record what was knowable at the instant each signal fired, so the question can be answered from data months later instead of argued from memory.

The funnel · Thursday 13 August 2026

Tests 1–5: conviction · Tests 6–7: liquidity at one contract
Test Share surviving In Out
1. total premium ≥ $250,000 10,121 1,345
2. ≥ 70% of premium hit the ask 1,345 598
3. day volume > open interest 598 260
4. this order alone > open interest 260 154
5. not one leg of a spread 154 151
6. relative spread at fire ≤ 15% 151 134
7. bid > 0, volume ≥ 100, OI ≥ 250 134 46

Bar length is the share of each step's input that survived it, not a share of the original ten thousand. Steps 1–5 test conviction; steps 6–7 test whether the contract was tradable at retail size when the alert fired. Open interest is the count of contracts outstanding, so an order bigger than all of it cannot be a close.

Example alert · Tuesday 18 August 2026

18 SEP 26 IWM 293.00 PUT (traded 18 AUG 26, 09:50:17 ET)
Premium paid $12,294,574
On the ask side $12,294,258 · 99.997% of it
Order size 38,541 contracts
Open interest 2,494
Day volume / OI 15.45×
Quote at fire 3.12 / 3.20
Relative spread 2.53%
Underlying $302.02
Time to expiry 31 days
Prints in the group 7 · each filled higher
Score 20.50 · cut is 12.47
Next earnings none · index ETF
Why the clock matters

The same chain fired again at 11:28 with $5.3M more at the ask. By then the contract's mid had moved from 3.16 to 3.35, six percent more expensive in 98 minutes.

How a print is scored · the same IWM print, term by term

Criterion Max This print Why it counts
Order sizemin(premium / $1M, 3) × 2 6.00 6.00 Bigger checks mean more conviction. Capped, so one giant print cannot buy the whole score.
Volume vs open interestmin(volume / OI, 5) × 1.5 7.50 7.50 Day volume at a multiple of OI is new positioning, not existing contracts changing hands.
Aggression(ask-side share − 0.5) × 4 2.00 2.00 Paying the offer signals urgency. Premium sold into the bid scores negative.
Alert rule+2 for the RepeatedHits family 2.00 2.00 Repeated aggressive fills on one contract inside a tight window: someone working an order. Here the ascending variant: each fill printed higher.
Order vs open interestmin(size / OI, 10) × 0.1 1.00 1.00 This order alone against everything outstanding, not the day's accumulated tape.
Size vs the ticker's normsize / 30-day avg option volume, capped 1.00 1.00 6,000 lots is noise in SPY and an event in a small name. Read from the prior session's baseline, never the same day's.
Order vs day volumesize / volume 1.00 1.00 One order carrying most of the volume rules out two-way churn behind the volume test above. This order was 38,541 of the day's 38,542.
IV change across the alertcapped at ±0.02, × 50 1.00 0.00 Demand pushes implied vol. The weakest input: 72% of alerts show no change at all.
Multileg−3 if part of a spread −3.00 0.00 One leg of somebody's spread reads as directional and is not.
Score 21.50 20.50 Pushed as a phone alert at 12.47 and above.

A $12.3M order that was the day's entire volume to that minute pins seven of the nine terms at their caps; the caps are what keep even this print from drowning the model.

The context around it · the same IWM print, source by source

The score above stops at the print. A person deciding whether to act keeps going: the dark pool tape, insider and congressional buying, the earnings calendar, short pressure, news, retail chatter, SEC filings, the rest of the day's flow on the ticker, and whether open interest confirms the next morning. Since Monday 17 August the system gathers that context itself and scores it the same way it scores the print: transparent capped terms, summed.

The context score is computed after the push decision and cannot influence it, so no amount of tuning here can flatter the measured results. A missing input contributes zero, never a penalty, and every source carries a coverage flag, so "the source had nothing" and "the source was never fetched" stay different facts.

Criterion Range This print Why it counts
Dark pool blocksmin($1M+ prints, 10) × 0.1 0 to 1 1.00 Million-dollar prints crossing off-exchange the same session; IWM's tape had at least ten, the cap.
Insider net flownet 90-day premium / $10M, capped −1 to 1 0.00 Insiders net buying or selling their own name. An index fund has no insiders to file.
Congress buysmin(buys in 60 days, 3) / 3 0 to 1 0.00 Congressional purchase disclosures in the ticker over two months.
Earnings in life+1 if the next report lands before expiry 0 to 1 0.00 A scheduled report inside the contract's life is a catalyst with a date. An index fund reports nothing.
Short pressure(short volume ratio − 0.45) × 4 −1 to 1 0.96 Short volume ran near 69% of IWM's tape against a 45% norm, heavy pressure in the put's direction.
News attentioncount, majors, sentiment; 3-day window 0 to 1.5 0.00 Headlines naming the ticker, major outlets flagged, vendor sentiment taken as sent.
Reddit attention0.5 presence + 0.5 × mention growth 0 to 1 1.00 Retail attention by mention count, present and growing day over day. One vendor's number, never a blend.
SEC filingsmin(material filings in 14 days, 3) / 3 × 0.5 0 to 0.5 0.00 Material filings inside two weeks: 8-K, insider Form 4, 13D/G stakes and kin.
Same-day flowmin(other signals today, 5) / 5 0 to 1 0.20 Other signals on the ticker the same day. The 11:28 second push above is this term.
OI confirmation+1 if OI rose next morning, −0.5 if it fell −0.5 to 1 1.00 Open interest printed 57,016 the next morning, up from 2,494. The opening claim held.
Context scoreten capped terms, summed −2.5 to 10 4.16 Shown beside the primary score wherever a signal appears. It never decides what gets pushed.

At the 09:50 push this read 2.96: the second push had not happened yet and open interest publishes once a day. The next morning's pass counted both and settled the score at 4.16. Nine of eleven tracked sources had captured data; the two without any are flagged as uncovered rather than scored as if they had answered.

The week's top ten so far, marked forward · underlying move from the fire-time price

Below: Monday 17 August through Wednesday 19 August, tracking the move in the underlying from the price each alert fired at to later sessions' closes. Blue is with the bet, magenta against: seven of ten were with the bet at their latest mark. These are stock moves, not option returns.

Fired Signal Score Premium +1d +2d +3d
TueIWM 293 put, 18 Sep20.50$12.3M−0.1%··
MonIBIT 20 put, 15 Dec 2820.21$3.2M+0.9%+6.9%·
TueSOXX 500 put, 11 Sep20.00$3.8M−1.6%··
TueIWM 293 put, 18 Sep · 2nd push18.98$5.3M+0.2%··
TueMU 935 call, 21 Aug17.64$2.8M+0.4%··
MonSPCX 105 put, 15 Dec 2816.24$2.2M−3.0%−5.5%·
MonIREN 44.5 put, 21 Aug15.21$0.6M−6.0%−4.1%·
MonVIX 24 call, 16 Sep15.09$10.9M+7.1%0.0%·
TueMU 990 put, 19 Aug15.07$8.0M−0.2%··
TueTQQQ 62 put, 4 Sep15.04$0.3M−0.7%··

Closes are the vendor's daily marks; a dot is a mark that lands beyond Wednesday, where this week's data ends. VIX's flat Wednesday counts with neither side. The shaded row is the worked example above.