Eyewall Markets Market Compendium
Reference § 00 · Methodology · Public document
Information only

How the Market Compendium is made

Methodology

Revised on the engine's own cadence Provenance versioned per event-link row

Storm is a market-data and research service. It reads published prices from several prediction-market venues, maps the same real-world event across those venues into a single canonical record, and reports the published price difference normalised for each venue's posted fees — the net_edge_bps field — on every page that shows a price. This document explains how each of those steps works, and where the method has real limits.

The site does not place orders, custody funds, or recommend buying or selling any contract. It records what the venues themselves publish, normalises it, and presents the comparison.

§ 1. How we aggregate

Storm pulls public market data on a fixed cadence from each venue's own API. No account linking, no order routing, no private endpoints. The current coverage set is:

  • Polymarket — Gamma API, public read. CFTC-registered designated contract market via the QCX acquisition; resident access is broker-dependent and geographically constrained (see §6).
  • Kalshi — unauthenticated /v1/* BFF (the same surface kalshi.com serves to logged-out visitors). US-regulated CFTC designated contract market.
  • Betfair Exchange — unauthenticated consumer BFF, delayed market data. UK Gambling Commission regulated; geo-blocks US residents at the venue level.
  • ForecastEx — three public CSV downloads (pairs, prices, summary). End-of-day cadence; CFTC-registered DCM + DCO under IBKR.
  • Manifold Markets — public REST API. Play-money platform; prices are displayed as a wisdom-of-crowds reference and explicitly excluded from arb-edge math.
  • Futuur — public /markets/ endpoint. Offshore (Curaçao). USDC-real-money and OOM-play-money sides exposed separately; the OOM/USDC divergence on the same orderbook is recorded as a distinct insider-proxy signal.
  • PredictIt — undocumented public REST feed. Operated under CFTC No-Action Letter; per-contract caps make this useful as a long-tail US-political signal rather than as a deep arb venue.

Cadence: 90s for Polymarket, 120s for Kalshi, 180s for the secondary venues. Each poll upserts the venue's raw market record and updates the outcome-level current price plus a separate columnar price-snapshot table that backs the per-event sparklines. Newsfeed ingestion runs separately on its own slower cadences (15 min – 24 h, source-dependent).

Scope note. Storm covers binary and categorical prediction-market contracts on the venues above. Sportsbook lines (DraftKings, FanDuel) are out of scope — no public API — and any single-venue market without a cross-venue analogue is noted on the event page but produces no spread.

§ 2. Matching markets to canonical events

The matching layer is the product's actual moat — raw prices are public, but deciding that Polymarket's “Will Trump win 2024?” and Kalshi's PRES-24-DJT are the same canonical event, with aligned outcome labels, requires per-pair judgement. Storm's pipeline runs three passes:

  1. Rule-based first pass. Normalized question text is scored against the canonical event ontology via title-token Jaccard, outcome-alias overlap, category heuristics, and a set of refuse discriminators that recognize known false-positive shapes before the score is even returned — cross-state (Texas Senate vs NY Governor), deadline-conditional ("Warsh by May 1" vs unconditional), sports cross-team, scope (state-level vs federal), geopolitics-topic (deal vs ceasefire), and inverse-polarity (where Yes-of-A maps to No-of-canonical).
  2. Auto-approve high-confidence. Rule-based proposals scoring at or above a configurable threshold (default 0.90) are auto-linked with matched_by = 'rule'.
  3. Tiered LLM review. Mid-confidence link proposals, event-discovery proposals (cluster→new canonical event), and outcome-expansion proposals (add a candidate to an existing categorical event) each flow through their own LLM-agent reviewer on independent cadences. Each tier has approve/reject authority; outcome-expansion adds a third "keep_pending — re-evaluate next tick" verdict for cases where the cluster is plausibly correct but evidence is thin. Accepted links are written with matched_by = 'agent' and a review timestamp.
  4. Re-review. A weekly sweep re-runs the current prompts against previously-approved links and demotes any the agent now rejects — drift-correction for prompt changes that have tightened the approval bar since a link was first written.

No human is in the loop at any tier. A backfill task fires when a new canonical event is created, scanning the dark surface of unmatched markets and proposing outcome-expansion for every candidate name that matches the new event's title — the LLM reviewer drains those proposals and the event self-populates from a thin seed.

Every event_link row carries its provenance — rule vs LLM vs agent — confidence, and an outcome_mapping JSON that describes which venue outcome labels correspond to which canonical outcomes. When venues subdivide differently (one lists a Super Bowl winner market, a sportsbook lists individual team futures), the canonical event represents the coarser shared concept and the finer-grained markets are tagged accordingly. See the per-event page for the full mapping record on any given link.

§ 3. What a spread is

A cross-venue price difference is the gap between the implied probabilities a venue publishes for the same outcome. When venue A publishes 0.52 and venue B publishes 0.46 for the same outcome, the gross gap in basis points is:

The gross mid-vs-mid number does not account for venue fees. The net figure Storm reports normalises by the published ask on the cheap-side venue and the published 1 − bid complement on the other (which equals the opposite-side ask there). The normalised cost-to-enter Storm reports when both venues publish orderbook depth:

For venues that don't expose ask depth on their public read path (Polymarket's Gamma API, Manifold, ForecastEx, Futuur, PredictIt), the calculation falls back to mid-based math and the resulting row is annotated (mid-based) on the event page so the reader knows the printed edge is approximate. Fees are the venue's published taker rate (typical_taker_fee_bps on the venue record). Gas is computed from typical_gas_cost_usd against a reference notional of $1,000 — illustrative, not a recommendation; effective bps impact scales inversely with position size. Spreads where either leg's price falls below 0.005 are dropped from display: at those levels the bid-ask gap typically erases the printed edge regardless of fees.

The edge-badge colour on every page follows a fixed threshold:

  • ≥ 100 bps Meaningful after fees — worth a look on a liquid event.
  • 30 – 100 bps Thin. Watch for it to widen or tighten.
  • < 30 bps Noise at reference size; fees likely dominate.
  • Negative Fees and gas exceed the gross spread. Not an opportunity.

§ 4. Confidence and review

Every event-link record carries a match_confidence score in [0, 1], a matched_by channel (rule / llm / agent), and a timestamp. At thresholds below 0.90, the mapping is presented as proposed rather than confirmed, and the corresponding spread is not alerted on until Storm clears it. Review is done by Storm using a second LLM pass with cross-checking; no human in the loop.

When a link is superseded — because the underlying market was re-listed under a new ID, or an ontology merge reshaped the canonical event — the old row is marked status = 'superseded' rather than deleted, so the historical spread series remains attributable.

§ 5. Resolution-basis risk

A published cross-venue price difference does not imply that the two contracts will pay out the same way. Nominally-same markets can and do resolve differently across venues because each venue writes its own resolution source into its own contract. The clean archetype is the 2020 Georgia call:

One venue called Georgia for Biden three days earlier than another, on the strength of a different source's projection.

Storm records the resolution_basis on every event-link row so the divergence is never silent — but the risk is live and there is no universal fix. The per-venue resolution text is published on every event page; when two venues disagree on resolution basis, the event page flags it explicitly.

§ 6. Jurisdictional notes

  • Polymarket. CFTC-registered via the QCX acquisition, but retail US access is brokered and jurisdictionally gated. Geoblocked or broker-blocked users cannot transact on the venue even when the price comparison is visible here. Storm does not police this; the subscriber is responsible for venue eligibility at every venue.
  • Kalshi. US-native, CFTC designated contract market. Open to US residents without a broker intermediary.
  • Betfair Exchange. UK / international. Geoblocks US residents. Price data is shown here for reference comparisons; trading eligibility is the user's responsibility.
  • Futuur. Offshore (Curaçao). Operates outside US regulatory oversight. Listed here because the venue's USDC orderbook and OOM play-money orderbook trade on the same questions; the divergence between them is recorded as a distinct insider-proxy signal — a pseudonymous play-money price diverging from the same venue's real-money price can express information that wouldn't legally surface on the CFTC-regulated venues. Not advice that any US resident is eligible to trade Futuur directly.
  • Manifold Markets. Play-money. Displayed as a wisdom-of-crowds reference and explicitly excluded from net_edge_bps calculations. Any published price gap against a real-money venue is a sentiment divergence, not a fee-normalised price comparison.
  • PredictIt. Operated by Victoria University of Wellington under CFTC No-Action Letter 14-130. Per-trader $850-per-contract caps make this a long-tail political signal rather than a deep arb venue; PredictIt's bulk feed doesn't publish per-contract volume or liquidity, so those columns render as "—" on the event panel.

§ 7. Limitations

Eyewall Markets is information only. The service does not:

  • Hold user funds, route orders, or sign trades on any venue.
  • Log in to any venue on behalf of a user.
  • Recommend a bet size. net_edge_bps and liquidity are facts; position sizing is the user's decision.
  • Guarantee that any spread will still exist at the moment a user opens a venue tab. Spreads frequently close in seconds.
  • Substitute for a broker, financial advisor, tax advisor, or legal counsel.

The cross-venue mapping is curated autonomously by Storm — it has errors. Every page displays the match_confidence for the underlying link; corrections sent to [email protected] reach Storm's support inbox and are read by the agent, not a person. Resolution-basis divergence (§5) is a live risk, not an edge case. Liquidity figures are a 30-second snapshot from the venue API and do not guarantee fillable depth at the listed price.

Every alert email repeats the core disclaimer: informational only, spreads may close before you can act, venue eligibility is the user's responsibility, Eyewall Markets holds no position in any market described.