Section 01
Purpose & scope
What this site is — and what it isn't.
Prediction markets like Kalshi let individuals trade contracts on real-world outcomes. Retail participation has grown quickly, but public performance data is scarce — most traders have no way to prove their track record, and observers have no standardized way to evaluate whether a cohort of retail traders is collectively skilled or lucky over a fixed window.
Kalshi Retail Tracker addresses that gap. We track a voluntary cohort of Kalshi participants for exactly 28 calendar days, ingest every trade automatically via read-only API keys, and publish aggregate and per-trader performance on a public dashboard.
Section 02
Challenge design
Fixed window, voluntary participation, equal treatment.
Window length
28 days
Fixed start & end
Cohort size
Open
Anyone with API key
Treatment
Identical
No exclusions or weighting
Each participant is tracked from an admin-configured start date through an end date 28 days later. Trades before the start date are excluded from ROI calculations. There is no login or account system on this site — anyone can view public results, and tracking begins on your approval date or the cohort start date, whichever is later.
Section 03
How to join
Five steps from sign-up to public profile.
- 1Create a read-only API key in your Kalshi account settings. Grant only Read permissions — never trading or withdrawal access.
- 2Set a 30-day key expiration so access auto-revokes shortly after the challenge ends.
- 3Click Join tracker and submit your email, Kalshi username, API key ID, and private key. Display name is optional — leave it blank to appear as Anonymous.
- 4Your submission is saved to a pending queue. An administrator reviews your API key and approves your profile manually.
- 5After admin approval, sync jobs pull your fills and positions. Your public profile goes live.
Section 04
Data collection
What we pull, what we never touch.
Collected
- Trade fills (market, side, price, qty, fees, time)
- Open positions & mark-to-market
- Closed positions with realized P&L
- Public market metadata & outcomes
- Balance history (where available)
Never collected
- Kalshi login passwords
- Bank, deposit, or withdrawal details
- Trading-enabled API keys
- Private messages or account settings
- PII beyond your email and chosen display name
Raw API responses are stored in a JSON column on each trade row for reproducibility. Trades are immutable once ingested — neither participants nor administrators can edit historical fills retroactively. Sync runs are logged with timestamps, user counts, and error messages.
Section 05
Ingestion pipeline
From your fills to the dashboard, in five steps.
After approval, our server uses your read-only API key to poll Kalshi's trade API. On Vercel Hobby tier, syncs are triggered manually from the admin panel; on Pro tier, a scheduled cron automates this every few hours.
Step 1
Fetch
New fills since tracking start
Step 2
Upsert
Dedupe by Kalshi fill ID
Step 3
Snapshot
Refresh open & closed positions
Step 4
Aggregate
Recompute daily metrics
Step 5
Audit
Log sync run with status
Section 06
P&L & performance metrics
Every formula, defined once and applied to everyone.
Realized P&L
settlement − cost basis − feesFor resolved markets only.
Unrealized P&L
(mark − avg price) × qtyOpen positions, marked to mid.
ROI
(realized + unrealized) ÷ volume × 100Common denominator across users.
Win rate
wins ÷ resolved positionsOpen positions excluded.
Max drawdown
peak − trough on cumulative ROIReported in percentage points.
Volatility
stdev of daily returnsHigher = wilder swings.
The dashboard chart plots daily cumulative ROI for the retail cohort average. Time ranges are limited to 1W, 2W, 3W, 4W, and All — matching the challenge length. Values are net of estimated fees.
Section 07
Leaderboard ranking
Default sort, alternates, and tie-breaks.
The default sort is cumulative ROI over the challenge window. Alternative sorts include absolute P&L, risk-adjusted return, volume, win rate, and number of distinct markets traded. Rankings update after each successful sync.
Ties are broken by higher absolute P&L, then earlier join date. Participants who deactivate or are removed by an admin remain in historical data but are excluded from live leaderboard views.
Section 08
Public vs private data
What anyone can see — and what stays server-side.
| Field | Visibility |
|---|---|
| Display name, Kalshi username | Public |
| P&L, ROI, trades, positions | Public |
| Leaderboard rank, category stats | Public |
| API key ID & private key | Server-only |
| Sync logs, approval audit trail | Admin-only |
Section 09
Mock vs live data modes
Two views, identical formulas, different participants.
Mock demo
20 fictional traders
~1,200 synthetic trades across politics, economics, crypto, and sports markets. Useful for exploring the UI before real participants join.
Live data
Approved real traders
Only participants who submitted valid read-only Kalshi API keys and were approved by an administrator.
Demo users are flagged with is_demo = true. Live users have a stored API key and is_demo = false. The two cohorts never mix in a single view.
Section 10
Known limitations
Things to keep in mind when reading the numbers.
- Kalshi fee schedules may differ slightly from our estimates in edge cases (partial fills, fee promotions).
- Mark-to-market on illiquid contracts can swing unrealized P&L without a trade.
- Read-only keys prove account ownership but cannot prevent someone from creating a fresh Kalshi account solely for the challenge.
- Sync frequency on Hobby Vercel is manual — there may be hours between updates unless an admin triggers a sync.
- Four weeks of performance does not predict future results. Sample size for any single trader may be too small for statistical significance.
Section 11
Disclaimer
Read this before drawing any conclusions.
Section 12
Reproducibility & contact
If a number looks wrong, we want to know.
Methodology, metric definitions, and ingestion code are published in the project repository. If you believe a number on the dashboard is incorrect, note the participant slug, date, and metric — we can trace it to the underlying fill rows and raw API payload.
Last updated: May 2026 · Challenge window: 28 days · Data source: Kalshi Trade API (read-only)