Trade the spread nobody else measures.

Sub-block latency on a 100ms chain, and the premium/discount signal that nobody else computes.

Your problem

The parts you keep working around.

01

By the time a block publishes, the sequencer has known for tens of milliseconds — and every provider is polling RPC instead of reading the feed.

02

The onchain price of a stock token and the price of the underlying equity disagree by construction, and no vendor publishes the spread.

03

Liquidity is split across an AMM, a propAMM and two perp venues, so no single venue's quote means anything on its own.

The proof

Sub-block latency, published unedited.

The measured gap between a transaction appearing on the sequencer feed and landing in a block, with the p99 on the chart rather than hidden behind a p50.

Stream delivery overheadp50 / p95 / p99 · ms · log scale

12:00p504.12 msp958.68 msp9920.03 ms

Worst window in range: p99 114.09 ms (16:00). Percentiles are published unedited, and degraded windows stay on the chart. Illustrative series in the published-benchmark format.

Archive row · trades dataset

manual Parquet / CSV / JSONL export

block_timetimestamp2026-06-09T08:14:02.418Z
coinstringBTC
pxstring67012.0
szstring0.14523
notionalstring9732.15
sidestringB
userstring0x7c4e…a3f9
closed_pnlstring182.337041
feestring2.433037
crossedbooltrue
tiduint64442191083327011

Live message · StreamSwaps

stream.robinhoodrpc.io:443 · gRPC

"block_time": "2026-06-09T08:14:02.418Z",
"coin": "BTC",
"px": "67012.0",
"sz": "0.14523",
"notional": "9732.15",
"side": "B",
"user": "0x7c4e…a3f9",
"closed_pnl": "182.337041",
"fee": "2.433037",
"crossed": true,
"tid": 442191083327011

Hover a field. It is the same field, byte for byte, on both sides. Raw export fields stay aligned with the stream field model.

Integration sketch

The tape, subscribed.

One gRPC stream carries every venue, with premium snapshotted at execution and confirmation state on every print. Backfill and live arrive through the same interface.

Read the docs
import grpcfrom rhrpc.v1 import tape_pb2, tape_pb2_grpc channel = grpc.secure_channel(    "grpc.robinhoodrpc.io:443",    grpc.ssl_channel_credentials(),)metadata = (("authorization", "Bearer YOUR_KEY"),) # Consolidated tape across every venue, backfill then live.stub = tape_pb2_grpc.TapeStub(channel)for print_ in stub.StreamTape(    tape_pb2.StreamTapeRequest(token_symbols=["AAPL"]),    metadata=metadata,):    # premium_bps is snapshotted at execution, not recomputed later    if abs(float(print_.premium_bps_at_print.value)) > 25:        signal(print_)
Where to start

The plan that fits.

Scale

$200/moRecommended

gRPC streaming, full history, and every sink.

Scale adds gRPC streaming, the sequencer feed, and consolidated quotes. Desks needing private throughput or a dedicated region go Enterprise.

Compare both plans

Put the premium under your model.

Scale adds gRPC, the sequencer feed and consolidated quotes. Start free and upgrade when latency starts mattering.