Use case: positive EV
Positive EV betting API, with the sharp prices to measure against
A bet has positive expected value when its price is longer than the true chance deserves. You need two things to find one: an honest estimate of that chance, and every bookmaker's price to hold against it. One response carries both: the sharp book and the exchange for the estimate, and every Australian book to measure.
The formula
Expected value in one line
EV = fair chance × decimal price − 1
Suppose the fair price for an NRL side is 1.95, a 51.28% chance once the margin is gone, and one bookmaker is offering 2.05:
0.5128 × 2.05 − 1 = +5.13%
Over a long run of bets like that, the average return is about five cents per dollar staked. Any single bet still wins or loses outright; the edge only shows up across many.
What the feed gives you
The yardstick comes with the prices
- Pinnacle and the Betfair Exchange: the sharp inputs for a fair price, with the margin removed by the method you choose.
- One ID per outcome at every book, and a separate market for each line, so you always compare like with like.
- Every bookmaker's
decimal_odds,implied_probability,availableflag andobserved_at. - Props and alternate lines in the same response, where much of the soft pricing lives.
The Betfair Exchange comes with Rookie; Pinnacle and every Australian book come with Pro. How to remove the margin
Code
A +EV scanner in JavaScript
This takes Pinnacle's prices with the margin removed as the fair chance, holds every other book's price on the same outcome against it, and prints anything more than 2% above fair.
// Node 18+, run as an ES module
const res = await fetch(
"https://api.sockodds.com/v1/odds?league=nrl&markets=winner,handicap,total_points",
{ headers: { Authorization: `Bearer ${process.env.SOCKODDS_KEY}` } }
);
const { data } = await res.json();
const SHARP = "pinnacle";
for (const event of data) {
// Fair chance per outcome ID: the sharp book's prices with the margin removed.
const fair = {};
for (const book of event.bookmakers.filter((b) => b.key === SHARP)) {
for (const market of book.markets) {
if (market.outcomes.length < 2) continue; // every side is needed to remove the margin
const total = market.outcomes.reduce((sum, o) => sum + o.implied_probability, 0);
for (const o of market.outcomes) fair[o.id] = o.implied_probability / total;
}
}
// Every other book on the same outcome IDs: same market, same line, same side.
for (const book of event.bookmakers) {
if (book.key === SHARP) continue;
for (const market of book.markets) {
for (const o of market.outcomes) {
if (!o.available || !(o.id in fair)) continue;
const ev = fair[o.id] * o.decimal_odds - 1;
const line = o.line === null ? "" : " " + o.line;
if (ev > 0.02) {
console.log(`${event.name} | ${market.name}: ${o.name}${line} | ${book.name} ${o.decimal_odds} | +${(ev * 100).toFixed(1)}%`);
}
}
}
}
}
Good habits
Making the numbers mean something
Leave room for error. A fair price is an estimate. Many people ignore edges below two or three percent, because a small error in the fair price can wipe out a small edge.
Check the age. A stale quote can look generous because the market has moved on and the book has not been re-read yet. Read observed_at before trusting a big number.
Keep score. Record the fair price at the time of each bet and compare it with the closing price. Beating the close consistently is the clearest sign the edges are real. Opening and closing prices on Pro
Analysis, not advice. Positive expected value describes an average over many bets, not a promise about the next one. Fast Odds API is a data service; it does not take bets or tell anyone what to bet. If gambling stops being fun, Gambling Help Online is free and open around the clock.
Questions
+EV and the API
Why measure against a sharp book rather than the average of all the books?
An average of the bookmakers still has their margin inside it, so beating it only means beating a typical retail price. Pinnacle and the Betfair Exchange run thin margins and take big bets, so their prices with the margin removed make a stricter and more useful benchmark.
Do props have fair prices?
Only where Pinnacle or the exchange prices the prop, and many props are priced only by retail books. You can still remove the margin from a single book's over and under yourself, with the caveats on the fair odds page.
Which plan should a +EV tool use?
Rookie gives you the Betfair Exchange and ten major books. Pro adds Pinnacle and every Australian book, where more of the soft prices sit, plus unlimited objects and opening and closing prices for tracking closing lines.
Start now
Your first Australian price is one request away.
Free key, no card, AFL and NRL included. Keys are issued on sockodds.com.