Stocks Flow Leaderboard API - Top Equity Buyers and Sellers | FlashAlpha
  1. Leaderboard

Stocks Flow Leaderboard API

Cross-symbol stock-flow buyers and sellers ranked by net notional over a rolling window.

Endpoint

GET /v1/flow/stocks/leaderboard
Auth required (X-Api-Key) Rate Limited: Yes Plan: Alpha+

Parameters

Name In Type Required Default Description
n query integer 10 Rows per side; effective max is 50. Non-numeric values return a 400 problem-details body. Out-of-range values are clamped to the supported range.
windowMinutes query integer 240 Lookback window, clamped to 1..10080. Non-numeric values return a 400 problem-details body.

Request

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/stocks/leaderboard?n=10&windowMinutes=240"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/stocks/leaderboard",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Top buyer: {data['buyers'][0]['symbol']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/stocks/leaderboard",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log("Top buyer: " + data.buyers[0].symbol);

Try it live

Runs on live market data and uses 1 request from your daily quota.

GET

Response

{
  "generatedUtc": "2026-10-30T13:46:04.2053096Z",
  "n": 10,
  "windowMinutes": 240,
  "buyers": [
    {
      "symbol": "MU",
      "netVolume": 1552387,
      "netNotional": 1406789344,
      "buyVolume": 1849182,
      "sellVolume": 296795,
      "vwap": 906.21,
      "tradeCount": 81240,
      "lastTradeUtc": "2026-10-30T13:46:00Z"
    },
    {
      "symbol": "NVDA",
      "netVolume": 2219527,
      "netNotional": 462401897,
      "buyVolume": 4115407,
      "sellVolume": 1895880,
      "vwap": 208.33,
      "tradeCount": 154117,
      "lastTradeUtc": "2026-10-30T13:46:04.1761172Z"
    }
  ],
  "sellers": [
    {
      "symbol": "MNQ=F",
      "netVolume": -34758,
      "netNotional": -1000512948,
      "buyVolume": 227694,
      "sellVolume": 262452,
      "vwap": 28785.11,
      "tradeCount": 281458,
      "lastTradeUtc": "2026-10-30T13:46:00Z"
    },
    {
      "symbol": "INTC",
      "netVolume": -10303300,
      "netNotional": -688514092,
      "buyVolume": 8086728,
      "sellVolume": 18390028,
      "vwap": 66.82,
      "tradeCount": 387240,
      "lastTradeUtc": "2026-10-30T13:46:00Z"
    }
  ],
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa4",
    "equity_feed": "2026-10-30T13:46:03.529Z",
    "equity_options_feed": "2026-10-30T13:46:02Z",
    "index_feed": "2026-10-30T13:46:03.107Z",
    "index_options_feed": "2026-10-30T13:46:03Z",
    "futures_feed": "2026-10-30T13:45:53.139Z",
    "futures_options_feed": "2026-10-30T13:45:49.971Z",
    "flow_feed": "2026-10-30T13:45:00Z",
    "oi_feed": "2026-10-29T20:00:00Z",
    "macro_feed": "2026-10-29T21:00:20Z"
  }
}

Sending request…

See this endpoint on live data

Send this exact request and the real response shows up here, right next to the example.

Response Fields

Field Type Description
generatedUtcstringGeneration timestamp
nintegerEffective rows per side
windowMinutesintegerEffective lookback window
buyers[]arrayPositive net-notional rows: symbol, netVolume, netNotional, buyVolume, sellVolume, vwap, tradeCount, lastTradeUtc
sellers[]arrayNegative net-notional rows (same schema as buyers[])
buyers[].symbolstringUnderlying symbol
buyers[].netVolumenumberBuy volume minus sell volume
buyers[].netNotionalnumberBuyers: net notional
buyers[].buyVolumenumberVolume classified as buyer-initiated
buyers[].sellVolumenumberVolume classified as seller-initiated
buyers[].vwapnumberVolume-weighted average price
buyers[].tradeCountnumberNumber of trades
buyers[].lastTradeUtcstringBuyers: last trade (UTC)
sellers[].symbolstringUnderlying symbol
sellers[].netVolumenumberBuy volume minus sell volume
sellers[].netNotionalnumberSellers: net notional
sellers[].buyVolumenumberVolume classified as buyer-initiated
sellers[].sellVolumenumberVolume classified as seller-initiated
sellers[].vwapnumberVolume-weighted average price
sellers[].tradeCountnumberNumber of trades
sellers[].lastTradeUtcstringSellers: last trade (UTC)
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Errors

Status Error When
400-A query value has the wrong type, or a required value is missing. The body is an RFC 7807 problem-details object with errors.<param>.
401-Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON.
403tier_restrictedYour plan is below Alpha. The body includes current_plan and required_plan.
429Quota exceededDaily quota used up. Retry-After gives the seconds until the reset at 00:00 UTC. Rejected requests (including 403) count toward the quota.
502-Upstream flow data source unavailable.

About

Ranks the equity universe by net notional over the window and returns top buyers and sellers in one payload. Refreshes about every 30 seconds. The schema mirrors the options leaderboard with vwap replacing avgPremium.

Common Use Cases

  • Run a universe-wide flow scanner - render buyers[] and sellers[] ranked by netNotional over a rolling windowMinutes lookback to surface where money is rotating
  • Size the imbalance - read each row's buyVolume vs sellVolume behind the signed netVolume to judge whether a name's ranking is one-sided or merely high-turnover
  • Add execution context - pull vwap per row for slippage estimates before chasing a leaderboard name
  • Cross-check against options - pair a top equity buyer with its rank on the options leaderboard to confirm conviction across both tapes
  • Confirm liveness - gate alerts on lastTradeUtc and tradeCount so stale or thinly-traded names do not top the list
  • Ship a daily digest - cap rows with n and post the top accumulating/distributing symbols to Slack or email

Related reading

Complementary endpoints

Ready to build with FlashAlpha?

Get your free API key and start pulling live options data in 60 seconds.

No credit card required Setup in 60 seconds Secure & reliable