How this works
Every 10 minutes a free GitHub Actions job pulls prices from public APIs, runs the checks below, and publishes one file, data.json. The dashboard reads that file, re-scores everything for the amount you type in, and shows what to buy. Nothing ever logs in to your accounts or places a trade.
Every number is after fees, assuming you buy immediately at the displayed ask (the price someone is selling at right now). That's the conservative assumption: you pay the spread and the taker fee.
Kalshi fees in one line
Kalshi's fee schedule (effective July 7, 2026) charges takers 0.07 × contracts × price × (1 − price), rounded up to the next $0.0001, times a per-series multiplier the API reports (most are 1; a few year-end crypto series are 0). The fee is largest at 50¢ (1.75¢ per contract) and tiny near 1¢ or 99¢ (0.07¢). Settlement is free. Selling before settlement pays the fee again, which the dashboard never assumes you do.
1 · Kalshi bracket and ladder consistency live
Kalshi lists the same underlying at many levels. Some combinations must be priced consistently or free money appears. The scanner checks every open crypto, commodities, economics and financials event (about 20,000 contracts) four ways:
- Ladders. “BTC above $105k” can never be more likely than “BTC above $100k”. If it's priced higher, buy YES on $100k and NO on $105k. One of them always pays, and both pay if BTC ends between the two.
- Bracket sums. When ranges cover every possible price with no gaps, exactly one pays $1. If one YES of each costs under $1 including fees, the difference is locked in.
- NO sets. When at most one outcome can win (for example Fed “cut / hold / hike”), holding NO on k of them pays at least k − 1 dollars. Buy them for less than that and you're locked in.
- YES + NO on one contract always pays exactly $1.
Worked example (ladder). “BTC above $100,000” has an ask of 40¢. “BTC above $105,000” has a bid of 45¢, so it's priced as more likely than the lower strike. That's impossible.
Buy YES “above $100k” at 40¢ (fee 0.07 × 0.40 × 0.60 = 1.68¢) and NO “above $105k” at 55¢ (fee 0.07 × 0.55 × 0.45 = 1.7325¢, rounded up to 1.74¢). One set costs 98.42¢.
BTC ≤ $100k: the NO pays $1. BTC > $105k: the YES pays $1. In between: both pay, $2. Worst case $1.00 back for 98.42¢, a 1.6% locked gain per set. If it settles in 7 days, that's 1.6% × 365 ÷ 7 = 84% a year.
The scanner deliberately skips “buy YES on every outcome” for named outcomes such as “Who will acquire Pinterest?” or “When will the next recession start?”. There, it's common that none of the listed outcomes happens and every YES loses. On the first live scan that trap looked like a 226% “arbitrage”.
2 · Kalshi vs listed options live
Options on IBIT (Bitcoin), ETHA (Ethereum), GLD (gold), SLV (silver), SPX/XSP (S&P 500) and NDX (Nasdaq-100) put their own price on the same events Kalshi lists, like “Bitcoin above $150,000 on Jan 1”. When the two markets disagree, you buy each side where it's cheap:
- Side 1, Kalshi: the YES or NO that's too cheap. It pays $1 in its region (e.g. BTC ≤ $150k).
- Side 2, Robinhood: a debit option spread that pays its full width in the other region (BTC above $150k). The strikes sit slightly inside Side 1's region, so the two overlap instead of leaving a gap. Only debit spreads are used, so there's no margin.
Sized so one spread (100 × its width in dollars) covers the same dollars of Kalshi contracts, every normal outcome pays $1 per contract. If both sides together cost less than $1, that difference is your profit.
Worked example (from a live scan). Kalshi's “Bitcoin $150,000 or above at the end of 2026” trades at 2.5¢, while IBIT options price it around 1.8%. IBIT is 0.0005674 BTC per share, so $150k Bitcoin ≈ IBIT $85.11.
Side 1: buy 500 Kalshi NO at 97.5¢ = $487.50 (this series has no Kalshi fee). Side 2: buy the IBIT Dec 18 $75 call and sell the $80 call for 5¢ per share = $5. The spread pays $500 once IBIT is at $80 or above (Bitcoin ≈ $141k).
Bitcoin below $150k: Kalshi pays $500. Bitcoin well above: the options pay $500. Between about $141k and $150k both pay. Cost $492.50, so +$7.50 in every normal outcome.
Why it's not locked in: the options expire Dec 18 but Kalshi settles Jan 1. If Bitcoin sits under $141k on Dec 18, then jumps past $150k by New Year's, both sides lose. The simulation, using the options' own volatility, puts that at about 0.5%. Expected profit ≈ $13 over 3 months ≈ 10% a year. That's under the 14% hurdle for a can-lose trade, so it's rated MARGINAL.
How the “options say” probability is made: the live price, the options' implied volatility at that strike (which keeps the market's view of fat tails), no drift, measured at Kalshi's settle time. How losses are estimated: 20,000 simulated price paths through both dates, plus a small tracking error between the ETF and what Kalshi settles on.
When trades are built: only while options trade (9:30am–4pm ET, weekdays). Outside those hours option prices are frozen at the last close while Kalshi and crypto keep moving, which would create fake edges. The single-bets table still runs, using live prices.
Best matches: S&P 500 and Nasdaq-100 end-of-day contracts against SPX/XSP/NDX options that expire the same day. They settle on the exact same official close, so the timing risk is zero.
3 · Kalshi vs Polymarket US live
Polymarket US (polymarket.us) is a separate, CFTC-regulated exchange from the offshore polymarket.com — it's legal and open to NY residents, and it lists the same kind of year-end BTC/ETH price brackets Kalshi does. The check is the same ladder logic as section 1, just run across two venues instead of within one: if a Polymarket bracket sits strictly inside a Kalshi range (or vice versa), buying the wide side's YES and the narrow side's NO always pays at least $1.
Why this one is treated more cautiously than section 1. Two venues can each be internally consistent and still disagree with each other, for two separate reasons this scanner checks before ever calling a pairing "locked":
- Same settlement index and method? Both platforms' own contract text is pulled and diffed. As of this writing, Polymarket's BTC year-end brackets settle on a trimmed-mean average of the CF Benchmarks BRTI (excluding the top/bottom 20%), while Kalshi's documented methodology is a plain, untrimmed average of the same index. Same index family, different math — a real discrepancy, not a hypothetical one.
- Same settlement instant? Even same-index contracts can measure at different moments. The scanner parses each platform's stated settlement time and skips the pairing entirely if the two are more than 3 days apart (that's not basis risk, it's comparing two different questions) and only calls a pairing genuinely locked when they land within about 3 hours of each other.
Short of both checks passing, a mispriced-looking pair is shown as positive expected value that can still lose to a settlement mismatch — the same honesty the Kalshi-vs-options module (section 2) already applies to timing gaps between Kalshi and option expiries.
Worked example (from a live scan). Both platforms list a BTC "$19,999.99 or below" year-end bracket. Kalshi's is under 1¢; Polymarket's NO is priced at 99¢, so YES-Kalshi + NO-Polymarket costs about 99.7¢ for a $1 payout.
That looks like a lock, but Polymarket's own market description states a trimmed-mean BRTI settlement while Kalshi's is untrimmed — the same real discrepancy above. So the card shows the trade as can-lose, not locked, even though the settlement instants themselves line up to within a few hours.
Order-book depth from both platforms is pulled before sizing any trade, and the fillable size shown is the thinner of the two books — a locked-looking price at the top of book means nothing if only one contract is actually resting there.
4 · Fed and economic contracts vs futures coming in stage 3
Fed funds futures settle on the average fed funds rate for their month, so price = 100 − expected average rate. If a meeting falls partway through the month, the rate after the meeting is backed out from the days before and after it. The size of the implied move divided by 0.25 gives the probability of a quarter-point change.
Worked example. The rate is 3.58% today. The December meeting is on the 9th: 9 days at the old rate, 22 at the new one. The December future trades at 96.50, so the expected December average is 3.50%.
Rate after the meeting = (3.50 − 3.58 × 9/31) ÷ (22/31) = 3.467%. That's 0.113 points lower, and 0.113 ÷ 0.25 = 45% chance of a 25bp cut. If Kalshi's “cut” YES sells for 38¢, the gap is 7 points. You'd buy YES at 38¢: positive expected value that can still lose.
Honest caveat for stage 3: live fed funds futures quotes aren't reliably free. If no free source supports this calculation properly, the module will say “limited data” rather than show fake precision.
5 · Crypto futures basis (cash-and-carry) coming in stage 3
When a crypto future trades above spot, you can buy the coin and sell the future. At expiry they converge and you keep the gap. It's close to locked, but not fully: the short future needs margin, and if the price spikes the broker can demand more cash or liquidate your short. That breaks the hedge at the worst moment.
Worked example. BTC spot $84,000, December future $85,500, 90 days to expiry. The gap is 1.79%, which looks like 7.2% a year.
Now the costs: Coinbase Advanced charges 1.20% to take liquidity at the lowest volume tier, plus futures fees and the cost of cash parked as margin. Net ≈ 0.5% over 90 days ≈ 2% a year: less than T-bills. NOT WORTH IT, even though the headline looked good.
6 · Metal ETFs vs the actual metal coming in stage 2
GLD and SLV hold physical metal. Big institutions can create or redeem shares for metal whenever the price drifts, which keeps the gap to a few hundredths of a percent. Closed-end trusts like PHYS and PSLV can't be redeemed as easily, so they can trade at real premiums or discounts for months.
Worked example. A GLD share holds about 0.09 oz of gold (the fund publishes the exact figure daily). With gold at $4,286, the metal behind a share is worth about $393. A 0.1% gap is noise, not a trade.
If PSLV trades 3% below the value of its silver, buying it is a discount trade, not arbitrage: it may not close. NAV is published once a day, so the comparison can lag by up to a trading day.
7 · Cash-hurdle comparison live, on every card
Money tied up in a trade could be earning the T-bill rate with no effort and no risk. So every opportunity is annualized (return × 365 ÷ days held) and compared with the current 3-month T-bill yield plus a margin: 1 point for locked trades, 10 points for can-still-lose trades (you can change these). Fall short and the card says NOT WORTH IT, however good the raw percentage looks.
Worked example, from the first live scan. Ethereum's year-end brackets could be bought for 96.8¢ a set. They pay exactly $1, and the series has zero fees. Only 44 sets were available at profitable prices, for $0.50 of guaranteed profit.
That's 1.16% over 96 days = 4.4% a year. T-bills pay 4.18%, so the hurdle is 5.18%. Verdict: MARGINAL. It's a real arbitrage, but locking up $43 for three months to beat a Treasury bill by a fraction of a point isn't worth your time.
Verdicts, alerts and confidence
- WORTH IT needs all three: at least $5 profit, at least 2% return, and an annualized return above the hurdle. MARGINAL is profitable but misses one. NOT WORTH IT loses money or trails T-bills.
- Email alerts: locked trades at 12%+ a year that clearly beat T-bills (Tier 1), or can-lose trades at 40%+ a year (Tier 2). Only high or medium confidence, at least $100 fillable, at least $5 profit, at most 5 emails a day, and never the same one twice unless its profit improves by more than 25%.
- Confidence drops when a leg hasn't traded in 24 hours, the market closes soon, depth is thin, or the return is over 25% (usually a stale or mistaken quote).
Why real arbitrage is rare, and how to avoid getting burned
- Other people run scanners too. Professional market makers watch these same prices constantly. Anything obvious is closed in seconds. What's left is usually tiny, thin, or far away in time.
- The data can be 10 to 25 minutes old. Always open the contract and check the live ask before buying. If it's gone, it's gone.
- Buy the thinnest leg first. Until every leg is filled you're not hedged. If the second leg's price jumps, you're holding an ordinary bet.
- Read the rules. Settlement sources, rounding and “what if none of these happens” clauses decide whether a “locked” trade really is.
- Too good to be true usually is. A 30% “risk-free” return almost always means a stale quote, a data error, or a rule you haven't read.
- Count the time. Tying up money for months to make 1% loses to a T-bill.
- Platform risk is real. Locked means locked against the market, not against an exchange halting, a disputed settlement, or a withdrawal delay.