How Prediction Market Arbitrage Works (Polymarket, Kalshi)

Buy YES and NO for less than a dollar. One of them pays out a dollar. Keep the difference.

Trevor I. Lasn Trevor I. Lasn
· 4 min read
Founder & CEO of 0xinsider.com — the Bloomberg terminal for prediction markets.

Polymarket and Kalshi are prediction markets. You trade on the outcome of real events — elections, economic data, whether it’ll snow in April. Every question has two contracts: YES and NO.

Each contract pays out $1 if it’s right, $0 if it’s wrong. You buy at whatever price the market sets.

Here’s where it gets interesting. In a perfectly efficient market, YES + NO always equals $1.00. But markets aren’t always efficient.

Take a question like “Will Bitcoin hit $100k by March?”

ContractPrice
YES$0.42
NO$0.55
Total$0.97

YES + NO = $0.97. That’s less than a dollar.

You buy both. One YES contract for $0.42 and one NO contract for $0.55. Total cost: $0.97.

Now think about what happens:

  • Bitcoin hits $100k → YES pays $1.00, NO pays $0. You get $1.00.
  • Bitcoin doesn’t hit $100k → YES pays $0, NO pays $1.00. You get $1.00.

Either way, you get $1.00 back. You paid $0.97. That’s $0.03 profit per pair, no matter what happens.

YOU
pay $0.97
┌────┴────┐
▼ ▼
YES NO
$0.42 $0.55
│ │
▼ ▼
┌─────────────────┐
│ ONE of these │
│ pays out $1.00 │
└────────┬────────┘
You get $1.00
Profit: $0.03

This is arbitrage. You’re not predicting anything. You’re exploiting a pricing gap.

Why the Gap Exists

In theory, YES + NO should always equal $1.00. In practice, they drift apart:

Efficient market After news breaks
YES $0.50 YES $0.58 ← buyers rush in
NO $0.50 NO $0.39 ← hasn't adjusted
────────── ──────────
Sum $1.00 Sum $0.97 ← gap opens

New information hits. A news story breaks and traders rush to buy YES. The YES price jumps, but NO hasn’t adjusted yet. For a brief moment, the sum drops below $1.00.

Low liquidity. If barely anyone is trading a market, prices get stale. One side updates while the other lags behind.

Different platforms. Polymarket might price YES at $0.45 while Kalshi prices NO on the same event at $0.52. Same event, different markets, different prices.

Same event: "Will X happen?"
Polymarket Kalshi
┌──────────┐ ┌──────────┐
│ YES $0.45│ │ YES $0.51│
│ NO $0.58│ │ NO $0.52│
└──────────┘ └──────────┘
Buy YES here ───────────────────► Buy NO here
$0.45 + $0.52
──────────
Total: $0.97
Payout: $1.00
Profit: $0.03

Three cents doesn’t sound like much. But it scales linearly.

PairsCostPayoutProfit
1$0.97$1.00$0.03
100$97$100$3
1,000$970$1,000$30
10,000$9,700$10,000$300

The return is small per unit, but it’s risk-free. The only question is how many pairs you can buy before the price moves.

The Catches

Fees. Polymarket only charges taker fees — if you place a limit order that sits on the book (maker), you pay zero fees. You only pay when you take someone else’s order. Kalshi charges a transaction fee on your expected earnings, and some markets also have maker fees on resting orders (common during elections, big sporting events, awards). A $0.03 gap can disappear after fees eat into it, so how you place orders matters. Maker orders on Polymarket keep the full spread.

Slippage. The price you see isn’t always the price you get. If you try to buy 1,000 YES contracts at $0.42, there might only be 200 available at that price. The rest fill at $0.43, $0.44, and now your gap is gone.

Order book for YES:
Price Available
$0.42 200 contracts ← you want 1,000
$0.43 300 contracts
$0.44 500 contracts
───
1,000 total
Average price: $0.434, not $0.42
Your gap just shrank from $0.03 to $0.016

Speed. These windows last seconds, not minutes. By the time you spot the gap and click buy, someone else already took it. This is why most prediction market arbitrage is done by bots — programs that watch prices across markets and execute trades in milliseconds.

Liquidity. Thin markets have bigger gaps but you can’t buy enough pairs to make meaningful money. Liquid markets have smaller gaps but can absorb larger orders.

The gap has to be large enough to survive fees, slippage, and execution time. In practice, that means most opportunities aren’t worth it for humans clicking buttons. But for automated systems watching hundreds of markets simultaneously, the small edges add up.

Prediction markets are becoming a real-time layer on top of everything — politics, crypto, macro. The interesting part isn’t the arbitrage itself, it’s what the pricing tells you about how information moves through markets. We dig into these kinds of signals at 0xinsider.com.


Trevor I. Lasn

Founder & CEO of 0xinsider.com — the Bloomberg terminal for prediction markets. Product engineer based in Tartu, Estonia, building and shipping for over a decade.


Found this article helpful? You might enjoy my free newsletter. I share dev tips and insights to help you grow your coding skills and advance your tech career.


Check out these related articles that might be useful for you. They cover similar topics and provide additional insights.

Webdev
3 min read

scrollbar-width & scrollbar-gutter: CSS Properties for Layout Control

Prevent content shifts and refine scrollable UIs with scrollbar-width and scrollbar-gutter

Dec 19, 2024
Read article
Webdev
3 min read

CSS ::target-text for Text Highlighting

A look at how browsers can highlight text fragments using CSS ::target-text, making text sharing and navigation more user-friendly

Dec 17, 2024
Read article
Webdev
8 min read

View Transitions API: Smooth animations between DOM states

Create animated transitions between different states of your app without complex animation libraries.

Nov 11, 2025
Read article
Llm
3 min read

Chrome DevTools MCP: Let Your AI Agent Debug Your App

Give your AI agent access to your running application. They can see errors, inspect the network tab, check the DOM, and debug issues while you work.

Nov 10, 2025
Read article
Tech
2 min read

Now is the best time to break into tech

With AI tooling, a developer with 1 year of experience can match the output of someone with 10 years. The playing field has never been more level.

Oct 20, 2025
Read article
Javascript
4 min read

Promise.try: Unified Error Handling for Sync and Async JavaScript Code (ES2025)

Stop mixing try/catch with Promise chains - JavaScript's new Promise.try handles return values, Promises, and errors uniformly

Nov 10, 2024
Read article
Javascript
6 min read

Understanding JavaScript Closures With Examples

Closures are essential for creating functions that maintain state, without relying on global variables.

Sep 6, 2024
Read article
Node.js
4 min read

Node.js Corepack: Version Control for Package Managers

Manage yarn and pnpm versions consistently across your team

Nov 19, 2024
Read article
Webdev
6 min read

Inside the CSS Engine: CSSOM Explained

A deep dive into how browsers parse and manipulate CSS, its impact on web performance, and why it matters

Oct 25, 2024
Read article

This article was originally published on https://www.trevorlasn.com/blog/how-prediction-market-polymarket-kalshi-arbitrage-works. It was written by a human and polished using grammar tools for clarity.