How PredictMarketCap sources data, matches markets across platforms, models fees, and handles edge cases. This page is intended as a citable reference for analysts, researchers, and journalists.
We ingest live data from each platform's public API. No private or paid feeds are used.
gamma-api.polymarket.com. Markets, events, prices, volumes, and order book snapshots.api.elections.kalshi.com/trade-api/v2. Markets, events, contract specifications, prices, and per-outcome open interest.Each platform's sync runs on its own schedule:
The hard problem in prediction-market aggregation is identifying when two contracts on different platforms are pricing the same underlying event. Polymarket and Kalshi never use the same contract title, market structure, or outcome names. Our pipeline solves this in three layers:
Stable IDs of the form ce_{eventType}_{year}_{party}_{keyterms} ensure the same canonical event is not created twice across runs. A separate process flags conflicts for human review.
Each canonical event stores a list of canonical outcome names — the most disambiguated version of each option. Per-platform contracts map their local outcome names to canonical names through a stored outcome mapping. Comparison tables, arbitrage detection, and price spreads all operate against canonical outcomes, so a Polymarket "Trump" contract and a Kalshi "Donald Trump" contract appear as the same row.
liquidity_dollars figure for the entire pool. We use per-outcome open_interest when allocating per-outcome liquidity figures.The arbitrage scanner deducts platform fees before reporting net profit and annualized return.
min(7¢, 7% × price × (1 − price) × 100) per contract, charged on both buy and sell. Fees peak at ~7¢ per $1 notional near 50/50 prices and approach zero at extreme prices.net_profit_pct × (365 / days_to_resolution) — a simple (non-compounding) annualization, since the same arb cannot be reinvested.The single largest hidden risk in cross-platform prediction-market arbitrage is that two platforms can resolve the same nominal event differently. The textbook example: in 2024, Polymarket and Kalshi both listed a market on whether Cardi B would perform at the Super Bowl. Polymarket resolved YES based on her stadium appearance; Kalshi resolved NO because she did not perform on the official halftime stage. Both platforms followed their published rules.
We surface a settlement-risk banner on the arbitrage scanner and flag known-different rule sets where applicable, but contract terms can change. Always read the resolution criteria on each platform before executing an arbitrage trade. See our deep-dive on settlement risk for a longer treatment.
Analysis articles are written from the data up. Every claim is grounded in a specific number, a specific market, or a specific transaction. Articles include:
We do not publish forecasts of our own. The prediction markets are the forecast; the editorial layer reports what they say.
Market metadata, prices, and volumes sync every 30 minutes from each platform's public API. The arbitrage scanner re-evaluates cross-platform spreads every 5 minutes against the most recent prices. Trade feeds for the whale tracker pull on a tighter loop. Resolved markets are flagged and frozen as soon as the underlying platform marks them resolved.
We use an LLM-based canonicalization pipeline. For every market with $10K+ in lifetime volume that is not already linked to a canonical event, the model generates a structured identity (event type, year, party, key terms). We then search the target platform with multi-term OR queries for likely matches, validate scope (e.g. an Eastern Conference market is not the NBA Finals), and require the match confidence to clear a threshold before the link is stored. Each link records the LLM's reasoning and confidence so matches can be audited.
The spread is the absolute difference, in percentage points, between the highest and lowest YES (or equivalent outcome) price on the same canonical event across platforms. A 5pp spread means one platform is pricing the event 5 points higher than another. Spreads do not account for fees on their own — the arbitrage scanner does that calculation separately.
Polymarket: 0% trading fee — cost is the bid/ask spread, which we approximate as zero for opportunity surfacing. Kalshi: a price-dependent fee of min(7¢, 7% × price × (1 − price) × 100) per contract, charged on both buy and sell sides. Fees are highest near 50/50 prices (~7¢ per $1 notional) and approach zero at extreme prices. The scanner deducts these fees from the gross spread before reporting net profit and annualized return.
Settlement risk is the chance that a "matching" market on two platforms resolves differently because the platforms used different rules (e.g. Cardi B at the Super Bowl resolved YES on Polymarket and NO on Kalshi due to different definitions of "performed"). We surface a settlement-risk banner on the arbitrage scanner and flag known-different rule sets where applicable, but cross-platform contract terms can change at any time. Always read the resolution criteria on each platform before executing an arbitrage trade.
Each platform reports volume in its own way. Polymarket reports trade volume in USDC; Kalshi reports per-outcome contract volume; Limitless reports differently again. We normalize to USD-equivalent total dollar volume traded across all outcomes within a market. Multi-outcome events sum across all child markets, so the event total may exceed any single market shown on a platform UI.
Each canonical event stores a list of "canonical outcome" names — the most disambiguated version of each option. Per-platform contracts then map their local outcome names to canonical names (so "Trump" on Polymarket and "Donald Trump" on Kalshi resolve to the same canonical outcome). Comparison tables, arbitrage detection, and price spreads all operate against canonical outcomes.
No. Trade links route directly to the originating market on each platform without referral parameters or revenue-sharing tags. PredictMarketCap is not affiliated with any platform.
When a platform marks a market as resolved, we freeze the final price, capture the winning outcome, and stop syncing live prices. Resolved markets remain visible at their canonical URL and contribute to the upset/accuracy tracker that compares early prices against final outcomes.
Methodology corrections, data-quality reports, or research collaborations: reach us on X.