Most GEX providers paywall the levels that actually matter. You can find a SPY screenshot on Twitter, but try pulling data for ARM or SLV and you hit a subscription prompt.
I've been building FlashAlpha on a different premise: the computed GEX data is free to view for every US ticker, free via API on the starter tier, and there's no time-limited trial.
This post is a developer-focused walkthrough — the chart, the endpoint, the limits, and what changes when you outgrow the free tier.
What "free" actually means
Three things that don't need a signup:
- Interactive GEX charts for any US-listed ticker — per-strike gamma, gamma flip, call/put walls.
- GEX-derived key levels surfaced on every ticker analytics page (net GEX, gamma flip, call wall, put wall).
- Free API tier — 5 requests/day against the GEX endpoint. Enough to watch a small watchlist daily.
Paid plans buy higher rate limits and adjacent endpoints (DEX, VEX, CHEX, historical, full-chain aggregation). The GEX values themselves are identical across tiers.
Hitting the API
Grab a key at flashalpha.com/profile — no card required.
curl -H "X-Api-Key: YOUR_KEY" \
"https://lab.flashalpha.com/v1/exposure/gex/SPY?expiration=2026-05-16"
The response gives you net GEX, gamma flip price, a regime label, and the per-strike array. If you only want the four headline levels (call wall, put wall, gamma flip, net GEX), there's a separate /v1/exposure/levels/{symbol} endpoint that returns them in one call.
Python SDK
pip install flashalpha
from flashalpha import FlashAlpha
client = FlashAlpha(api_key="YOUR_KEY")
gex = client.exposure.gex("SPY", expiration="2026-05-16")
print(f"Net GEX: {gex['net_gex']:,}")
print(f"Gamma flip: {gex['gamma_flip']}")
print(f"Regime: {gex['net_gex_label']}")
Also published as npm install flashalpha for JS/TS, plus C#, Go, and Java packages — same shape across all of them.
One free-tier gotcha
Full-chain GEX (all expirations aggregated into one number) is on the Growth plan. On the free tier, pass ?expiration=yyyy-MM-dd to scope to a single expiry — which is what most intraday work needs anyway.
5 calls/day works out to a morning pre-market scan over SPY, QQQ, and a few names on a watchlist. If you need to sweep a 50-ticker universe every few minutes, that's a Growth use case.
How fresh the data is
A few things worth knowing about how the levels get computed:
- Updated intraday. GEX shifts as options open and close. End-of-day snapshots miss the moves that matter most.
- Computed from full option chains. Every active strike is included, not a sampled subset.
- Dealer-sign convention. Positive GEX = dealers long gamma (suppresses moves). Negative GEX = dealers short gamma (amplifies moves). Matches how SpotGamma and the academic literature report it.
- 0DTE included. 0DTE strikes contribute to the per-strike profile like any other expiration.
Free vs paid — the honest comparison
| Free | Growth | |
|---|---|---|
| GEX values (per-strike + net) | Same data | Same data |
| Ticker coverage | All 6,000+ | All 6,000+ |
| Update cadence | Intraday | Intraday |
| API rate limit | 5/day | 2,500/day |
| Full-chain GEX via API | Single-expiry only | All expirations |
| DEX / VEX / CHEX via API | — | Full access |
| Historical GEX | — | Available |
If all you want is "today's call wall on TSLA," the free tier is the whole answer.
MCP server, if you live in Claude/Cursor
There's also an MCP server at https://lab.flashalpha.com/mcp if you want to query GEX from Claude Desktop, Cursor, or Windsurf without writing code. Same auth, same endpoints.
If you build something with it, tag me — I read every reply.
Originally published on FlashAlpha.
Top comments (0)