Sports Betting Arbitrage Explained
How to find guaranteed-profit opportunities when sportsbooks disagree on odds. The math, the formulas, and the code to detect them automatically.
Sports betting arbitrage is a strategy that guarantees profit by betting on all outcomes of an event across different sportsbooks, at odds where the combined implied probability is below 100%. When Book A offers Team X at +150 (40% implied) and Book B offers Team Y at -130 (56.5% implied), the total is 96.5% — leaving a 3.5% guaranteed profit margin. You calculate optimal stakes for each side to lock in equal returns regardless of which team wins.
How Arbitrage Works
Every sportsbook sets odds independently. When two books disagree enough on an outcome, you can bet both sides and guarantee a profit. The key metric is the total implied probability across all outcomes:
If ∑ implied probabilities < 100% → ARBITRAGE
Single-book scenario (no arb): DraftKings offers Lakers -150 (60%) and Celtics +130 (43.5%). Total = 103.5%. That 3.5% above 100% is the book's vig (their profit margin). No arbitrage possible within a single book.
Cross-book scenario (arb): DraftKings offers Lakers +150 (40%) and BetMGM offers Celtics -130 (56.5%). Total = 96.5%. The 3.5% below 100% is your guaranteed profit.
Full Worked Example
EVENT: Lakers vs Celtics
Book A (DraftKings): Lakers +150 (decimal: 2.50)
Book B (BetMGM): Celtics -130 (decimal: 1.769)
Step 1: Calculate implied probabilities
Lakers: 1/2.50 = 0.400 (40.0%)
Celtics: 1/1.769 = 0.565 (56.5%)
Total = 96.5% ← Below 100% = ARBITRAGE EXISTS
Step 2: Calculate profit percentage
Profit% = (1/0.965 - 1) x 100 = 3.63%
Step 3: Calculate optimal stakes ($1,000 total)
Lakers stake: (1/2.50) / (1/2.50 + 1/1.769) x $1,000
= 0.400 / 0.965 x $1,000 = $414.51
Celtics stake: (1/1.769) / 0.965 x $1,000 = $585.49
Step 4: Verify guaranteed profit
If Lakers win: $414.51 x 2.50 = $1,036.28 → profit $36.28
If Celtics win: $585.49 x 1.769 = $1,035.73 → profit $35.73
Guaranteed profit: ~$36 on $1,000 (3.6%)
Regardless of who wins.The Staking Formula
total_inverse = (1 / odds_A) + (1 / odds_B)
stake_A = (1 / odds_A) / total_inverse × bankroll
stake_B = (1 / odds_B) / total_inverse × bankroll
This formula distributes your bankroll so that the payout is equal regardless of which outcome wins. The total_inverse being less than 1.0 is what makes the arb profitable. For 3-way markets (draw included), add a third term.
Why Arbitrage Opportunities Exist
Speed Differences
Sharp books (Pinnacle) react to new information in seconds. Recreational books (DraftKings, FanDuel) may take 30-60 seconds to update. That delay window creates arbs.
Different Models
Each sportsbook uses its own pricing model and weighs factors differently. One book might price an NFL spread based on offensive metrics while another weights defense more heavily.
Promotional Odds
Books sometimes boost odds for marketing purposes (e.g., "Boosted to +200!"). These boosts can create arbs against books offering standard odds on the other side.
Regional Differences
A UK book and a US book may price the same soccer match differently based on their customer base's bias. European books may shade toward the home team while US books shade toward the favorite.
Arbitrage vs. +EV Betting
| Aspect | Arbitrage | +EV Betting |
|---|---|---|
| Risk | Risk-free (guaranteed profit) | Individual bets can lose |
| Profit per trade | 1-5% typically | 2-10% edge per bet |
| Capital requirement | Higher (bet both sides) | Lower (one-sided bets) |
| Sportsbook detection | High risk of limits/bans | Lower risk (looks like normal betting) |
| Opportunity frequency | Less frequent, brief windows | More frequent, longer duration |
Learn more in our +EV betting guide.
Finding Arbs Automatically
Manually scanning odds tables for arbitrage is impractical — opportunities appear and disappear in seconds. You need real-time data and automated detection. SharpAPI's arbitrage endpoint does this for you:
Example: Detect Arbs (TypeScript)
import SharpAPI from '@sharp-api/sdk'
const client = new SharpAPI({ apiKey: process.env.SHARPAPI_KEY })
// Get arbitrage opportunities
const arbs = await client.arbitrage.list({
sport: 'basketball_nba',
})
for (const arb of arbs.data) {
console.log(`${arb.event}: ${arb.profit_percent.toFixed(1)}% profit`)
console.log(` Leg 1: ${arb.leg1.outcome} @ ${arb.leg1.bookmaker} ${arb.leg1.odds}`)
console.log(` Leg 2: ${arb.leg2.outcome} @ ${arb.leg2.bookmaker} ${arb.leg2.odds}`)
console.log(` Stake split: $${arb.leg1.stake.toFixed(0)} / $${arb.leg2.stake.toFixed(0)}`)
}SharpAPI computes arbitrage across all covered sportsbooks in real-time. The arbitrage API returns pre-calculated opportunities with stake splits, or stream them via SSE for instant alerts.
Practical Risks & Mitigation
Line Movement (Partial Execution)
The odds might move between placing your first and second bet, destroying the arb. Mitigation: Place the bet at the less liquid book first (more likely to move). Use real-time data to detect and act within seconds.
Account Limitations
Sportsbooks flag accounts that consistently take arb-shaped action (both sides, sharp timing). Mitigation: Mix arb bets with normal recreational bets. Round stake amounts to natural numbers. Don't always bet the mathematical optimal amount.
Bet Voiding
Books can void bets placed on obviously erroneous lines, leaving you exposed on the other side. Mitigation: Be cautious of arbs above 10% — they often indicate a pricing error. Avoid arbs where one side is a clearly mispriced prop.