Historical Options Flow Data API: Backtest Flow Signals | FlashAlpha
optionsflow · 11 min read

Historical Options Flow Data API: Backtest Flow Signals

FlashAlpha's Historical API replays the full options flow suite - raw tape, blocks, flow GEX, dealer risk, and scored flow signals - at any minute since 2017. What is replayable, the exact no-lookahead semantics, and a 2-year flow-signal backtest with downloadable artifacts.

T
Tomasz Dobrowolski Quant Engineer
Jul 24, 2026
11 min read
OptionsFlow HistoricalData Backtesting FlowReplay DealerPositioning Quant API

If you searched for historical options flow data, an options flow history API, or a way to backtest unusual options activity, you have probably hit the same wall everyone hits: flow products are live screens, and even where raw print archives exist, the derived state - the walls, the scored signals, the dealer risk - is not replayable. You cannot ask what the monitor said at 15:30 on August 5, 2024, which means you cannot test whether any of it predicts anything. FlashAlpha removes that wall.

50+
Replay routes on the Historical API
4.66B
Raw option tape prints since 2017
52
Symbols with flow replay
1 min
Replay resolution, 9:30-16:00 ET

What exactly replays

The Historical API at historical.flashalpha.com mirrors the live analytics AND flow endpoints - same paths, same fields, same response shapes - plus a required at timestamp (ET wall-clock). The flow suite specifically:

Route familyEndpointsWhat you get at ?at=
Raw options tape/v1/flow/options/{symbol}/recent, /summary, /blocks, /history, /cumulativeThe prints as they stood at that minute: per-trade records, block filter, minute buckets, session cumulative volume
Stock tape/v1/flow/stocks/{symbol}/... plus leaderboard and outliersUnderlying tape context for the same clock
Flow analytics/v1/flow/levels, /pin-risk, /summary, /gex, /dex, /dealer-risk, /oi, /signalsFlow-adjusted walls, pin magnets, live-flow GEX/DEX, dealer risk state, and the scored signal feed as-of that minute
Adjacent analyticsstrategies, liquidity, dispersion, expected move, exposure suiteEverything a flow signal needs for context, same clock

50+ routes on the live API reference have a historical twin on an identical path. See the Historical API docs for auth and coverage, and the flow-replay endpoint reference for the route-by-route walkthrough of the tape and the intraday OI simulator.

No lookahead, by construction

The property that makes replayed flow backtestable is that a request for timestamp T returns only what a live system could have known at T. Two semantics matter:

  • The tape is causal. A /summary or /history call at 12:30 counts prints through 12:30 and nothing after. The session cumulative rebuilds from the same prints a live monitor would have consumed.
  • Open interest is start-of-day. OI publishes once each morning, so replay serves the morning value for every minute of that session - the information set a live desk had, which is why size-vs-OI signal components replay correctly. More on point-in-time discipline in point-in-time options greeks.

Worked example: replaying the August 5, 2024 tape

August 5, 2024 - the yen carry unwind, VIX above 60 pre-open. Three calls, three moments of the same session:

import requests

BASE = "https://historical.flashalpha.com"
H = {"X-Api-Key": "YOUR_ALPHA_KEY"}

for t in ("10:00", "12:30", "15:30"):
    r = requests.get(f"{BASE}/v1/flow/options/SPY/summary",
                     params={"at": f"2024-08-05T{t}:00"}, headers=H).json()
    print(t, r["totalTrades"], r["netVolume"], r["contractsWithTrades"])
As-of (ET)Total tradesBuy volumeSell volumeNet volumeContracts traded
10:00174,618324,983337,709−12,7264,560
12:30566,7881,322,6581,367,376−44,7185,816
15:30929,1952,401,0382,426,330−25,2926,491

Every number above is a live production response, not a mock. The full week around this session is replayed as a pre-registered study in the carry-unwind event study. The same day's scored signal feed replays too: /v1/flow/signals/SPY?at=2024-08-05T15:30:00 returns the top-scored prints as of that minute (default limit 50) - each with a 0-100 score, conviction label, sweep/block structure, opening-vs-closing bias, and a bullish/bearish intent classification - plus the chain context (call wall, put wall, max pain, gamma flip) the monitor showed at the time.

A first flow-signal backtest: 2024-2025, daily

Does the scored signal feed predict anything? We ran the simplest possible test: snapshot /v1/flow/signals/SPY at 15:30 ET every session from 2024-01-02 through 2025-12-31, aggregate the high-conviction net intent premium (bullish minus bearish premium across signals scoring 70+), and compare against the next session's close-to-close return. No fills, no strategy - a signal study, stated as such.

502 sessions collected (20 skipped for holidays and half-days; the final session has no next-day return, so the quintiles below cover 501). First observation before any return math: SPY's 15:30 signal tape is structurally bearish-tilted - the net high-conviction intent premium is negative in three of five quintile ranges. Index put flow is dominated by hedging, and the scorer's intent labels inherit that. Then the quintile table:

Quintile (net HC intent premium)Range ($)NMean next-day return (bps)Median (bps)Sign agreement
1 (most bearish)-128.4M to -3.2M100+12.14+10.070.41
2-3.2M to -1.1M100+10.99+8.560.43
3-1.1M to -0.2M100+10.95+16.550.39
4-0.2M to +0.6M100+0.57+12.150.51
5 (most bullish)+0.7M to +879M101+4.45+7.960.57

The straight reading: the naive daily aggregate is not a direction signal. There is no monotone pattern, sign agreement hovers at coin-flip, and if anything the relationship leans contrarian - the most bearish-flow sessions preceded the best average next-day returns, which is what you would expect if heavy put premium marks hedging demand near local lows rather than informed direction. Two years of replayed signal feed just told us in an afternoon what a live-only product could never tell us at all. That is the point: the negative result is cheap now, and the obvious next iterations - exclude 0DTE prints, weight by the OI-confirmed opening flag, condition on the gamma regime that ships in the same response - are each one more loop over the same replay.

Reproduce it: summary_grid.csv (one row per session: signal aggregates, wall/flip context, close), signals_vs_returns.csv (the quintile table), and artifacts.zip including the collection script. The whole study is ~1,000 REST calls - an afternoon, not an infrastructure project.

FAQ

Can I get historical options flow data through an API?
Yes. FlashAlpha's Historical API replays the full flow suite - raw tape, blocks, flow analytics, and the scored signal feed - at any minute since January 2017, across 50+ replay routes on identical paths.
How far back does the options flow history go?
The raw tape holds 4.66 billion prints from 2017-01-03, and 52 symbols replay the full flow suite. GET /v1/tickers on the historical host returns the live inventory.
What subscription tier includes flow replay?
Alpha ($1,499/mo monthly, $1,199/mo billed annually). The same API key and SDKs work against both live and historical hosts.

Getting access

The Historical API - including the flow replay suite - is part of the Alpha tier. The same SDKs work against both hosts with a base-URL swap. If you want to validate the data before committing, the worked examples above are reproducible verbatim, and the study artifacts are free to download. Evaluating for a desk or fund? The quant-teams page collects the replay guarantees, bulk-export options, and team onboarding in one place.

ALPHA TIER - FLOW REPLAY
Backtest the tape yourself
50+ replay routes, the full flow suite, 4.66 billion prints since 2017 - the study above took about 1,000 API calls.
See Alpha pricing →

Flow data you cannot replay is anecdote; flow data you can replay is a dataset. The full FlashAlpha flow suite - raw tape, blocks, flow-adjusted GEX, dealer risk, and the scored signal feed - answers ?at= for any minute since 2017 with no lookahead. The first signal study is above, the artifacts are downloadable, and the same two lines of Python that ran it will run yours. Related: the complete quant backtesting guide, the Historical API overview, and the live flow API guide.

Live Market Pulse

Get fast visibility into market shifts with full-chain analytics over low-latency REST and MCP polling.

Intelligent Screening

Screen millions of option pairs per second using your custom EV rules, filters, and setups.

Export-Ready

Export structured signals to your own execution stack or broker integration - FlashAlpha delivers the analytics, you keep control of order routing.

Join the Community

Discord

Engage in real time conversations with us!

Twitter / X

Follow us for real-time updates and insights!

GitHub

Explore our open-source SDK, examples, and analytics resources!