DEV Community

tomasz dobrowolski
tomasz dobrowolski

Posted on • Originally published at flashalpha.com

Free GEX Data — Gamma Exposure Levels for 6,000+ US Tickers (No Signup, No Credit Card)

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
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']}")
Enter fullscreen mode Exit fullscreen mode

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)