Skip to main content
Value Betting with the Odds-API: How Expected Value Works and How to Find It
Back to Blog

Value Betting with the Odds-API: How Expected Value Works and How to Find It

James Whitfield

James Whitfield

7 min read

Most bettors lose money because they bet on outcomes they think will happen. Value bettors make money because they bet on prices that are wrong.

That distinction matters. Value betting is not about predicting winners. It is about finding odds that are higher than they should be relative to the true probability of an outcome. If you can do that consistently, the math works in your favor over time, the same way it works in favor of the house at a casino.

We built the Value Bets endpoint at Odds-API.io to automate that process. This article explains what value betting actually is, how the math works, and how to use our API to find +EV opportunities across 250+ bookmakers.

What makes a bet a "value bet"

A value bet exists when a bookmaker's implied probability is lower than the true probability of an outcome. In simpler terms: the bookmaker is offering you better odds than the event warrants.

Here is the basic formula:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

If EV is positive, the bet has value. If you could make that same bet thousands of times, you would come out ahead.

The hard part is estimating true probability. Bookmakers spend millions on models to get this right, but they also have commercial pressures, regional biases, and slow reaction times. Those inefficiencies create value.

A concrete example

Say Bet365 is offering 3.50 on an away win in an EPL match. That implies a probability of about 28.6% (1/3.50). But the consensus across sharp bookmakers, after removing margins, suggests the true probability is closer to 35%.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

That is a strong value bet. You will not win every time, but over hundreds of bets at similar edges, you will be profitable.

Why consensus odds work as a proxy for true probability

No single model can perfectly estimate the true probability of a sporting outcome. But the aggregate of 250+ bookmakers gets remarkably close. When you strip the margin from each bookmaker's odds and average them, you get what is sometimes called "the wisdom of the market."

Our API uses this approach. We calculate a consensus fair price from the full set of bookmakers we track, then compare each individual bookmaker's odds against that consensus. When a bookmaker's odds are meaningfully above the fair price, that gets flagged as a value bet.

We tested this methodology against 3 months of EPL match data from the 2024/25 season. Bets flagged with an EV above 5% returned a positive ROI of roughly 8-12% depending on how aggressively you filtered. That is consistent with what academic research on value betting suggests.

Using the Value Bets API

The endpoint is straightforward. A single GET request returns all current value bets, optionally filtered by bookmaker:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Query parameters

  • apiKey (required): your API key
  • bookmaker (optional): filter to a specific bookmaker, e.g. Bet365, Pinnacle, DraftKings
  • includeEventDetails (optional): set to true to include match info (teams, league, sport, kickoff time)

Example response

Here is a real response from the API, showing a spread bet on a Turkish Cup match:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Reading the response

A few things to note in this response:

  • expectedValue: 110.73 means the EV is +10.73% above fair value (100 is break-even). This is a solid edge.
  • market.away: "1.671" is the consensus fair price for the away side of this spread. Bet365 is offering 1.850, which is significantly higher.
  • bookmakerOdds.href is a direct deep link to the bet on Bet365. You can use this in your app to send users straight to the bet slip.
  • market.max: 150 indicates the maximum stake (in the bookmaker's currency) that was available at the time of the snapshot.

The betSide field tells you which side of the market has value. In this case, backing the away team (Manisa FK) on the -1 spread at Bet365.

Building something useful with this

Here is a minimal Python script that polls the Value Bets endpoint every 60 seconds and prints any bets with EV above 5%:

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

This is obviously bare-bones. In production, you would want to:

  • Track which bets you have already seen (the id field is stable)
  • Filter by sport, league, or minimum odds
  • Send alerts via Telegram, Discord, or email
  • Log results to a database so you can track your actual ROI over time

What we cover

Our odds infrastructure tracks:

  • 250+ bookmakers globally, including Bet365, Pinnacle, DraftKings, William Hill, SingBet, and regional books
  • 20+ sports: football, basketball, tennis, baseball, ice hockey, esports, and more
  • 500+ market types: moneyline, Asian handicap, over/under, correct score, both teams to score, and others
  • Pre-match and live odds
  • Sub-150ms latency on odds updates
  • 99.9% uptime, SLA-backed

Getting started

Every plan includes a 10-day free trial with no credit card required. You get a full API key with access to all endpoints, including value bets.

If you need higher rate limits or dedicated infrastructure, we offer custom enterprise plans. Reach out at markus@odds-api.io.

Get your API key at odds-api.io

Common questions from developers

How is expected value calculated?

We derive a consensus fair probability from the full set of bookmaker odds we track, removing each bookmaker's margin. We then compare each individual bookmaker's odds against that fair price. The EV percentage represents how far above fair value the bookmaker's odds are.

How often are value bets updated?

The value bets endpoint reflects live odds data. When odds change at any bookmaker, the EV calculations update accordingly. Average latency from odds change to API availability is under 150ms.

Do value bets disappear quickly?

Yes. Sharp bookmakers adjust fast, and softer books follow. Many value bets have a lifespan of seconds to minutes. If you are building an automated system, poll frequently and act on the data quickly.

Can I filter by sport or league?

You can filter by bookmaker directly via query parameter. Sport and league filtering can be done client-side using the event details in the response. We are evaluating server-side sport filtering for a future release.

What does the max field in the market object mean?

It represents the maximum bet size (in the bookmaker's local currency) that was available at the time we captured the odds. This is useful for sizing your bets and avoiding markets where limits are too low to be worth the effort.