Bet Better BET BETTER PRO

Bet Better Open Model API

A free, open, read-only JSON feed of our sports model's win probabilities and fair odds across 13 sports. No API key, no sign-up, no rate limit worth worrying about.

No key required CC BY 4.0 CORS enabled HTTPS 13 sports

Building a business on the numbers? Bet Better Data licenses the full feeds: our newest number for every game and player prop in 29 competitions, every version timestamped; Line Moves, calls on which way prices move before they move; and Storylines, checked facts or ready-made posts and articles in your voice.

What you needThis free APIBet Better Data
Leagues13 sports, the games we publish picks on29 competitions, every game the books price
NumbersWin probability and fair oddsSpread, total, win chance, fair prices, player props with over / under chances, alternates
TimingWhen our picks publishFrom days before the start, re-priced through the week, every version kept
Line moves-A call on each line before it moves, slow-book alerts
Facts and content-Storylines: facts for every player, team and game, or finished pieces
DeliveryJSON, no keyJSON API with your key, files, live spreadsheet link, signed webhooks

See every league and market →

Just want tonight's answer?

This feed is the raw model. The finished version — the one bet it backs hardest tonight, in plain English — is free on the site.

See tonight's free pick →

Quick start

Append ?format=json to any picks page on the site. That is the whole API.

Free picks are live; the rest are for members. Each league's free picks are live for everyone. Every other pick is for members: its row shows the game, the start time and the market, with locked: true and unlocksAtUtc (the kickoff, when it leaves the free feed); its selection, confidence and verdict are empty strings and its numbers are null.

curl "https://betbetter.world/afl/picks?format=json"

What the model publishes

Every entry is our model's own estimate for one selection: how likely we think it is to happen, and what odds would make that a fair price. Each pick appears once: one row per game, market, selection and line (locked picks on the same market share one row).

FieldTypeMeaning
gamestringFixture, formatted Away @ Home.
gameTimeUtcISO 8601Scheduled start, UTC.
marketstringMarket type, e.g. Head to Head, Spread, Total Points.
selectionstringThe team, player or outcome being rated.
linenumber|nullHandicap or total the selection is measured against.
modelProbabilityPctnumber|nullOur estimated chance the selection lands, 0–100.
fairOddsnumber|nullDecimal odds implied by our probability — the break-even price. Always 100 / modelProbabilityPct, rounded to 2 decimals. It is our number, never a bookmaker price.
confidencestringHIGH, LEAN or LONG-SHOT.
verdictstringOne plain-English sentence summarising the above.
lockedbooleantrue on a members' pick (game, start time and market only).
unlocksAtUtcISO 8601|nullOn a locked pick: the kickoff, when it leaves the free feed. null on free picks.
lockedPicksintegerOn a locked row only: how many members' picks the row stands for. Locked picks on the same game and market (and player, on prop feeds) look the same, so they share one row.

Example response

{
  "site": "Bet Better",
  "sport": "AFL",
  "type": "picks",
  "updatedUtc": "2026-07-26T04:10:00.0000000Z",
  "licence": "CC BY 4.0 — free to use with attribution to Bet Better (https://betbetter.world)",
  "attribution": "Bet Better — https://betbetter.world",
  "docs": "https://betbetter.world/api/",
  "disclaimer": "Model estimates for research. Not a guarantee. 18+. Please gamble responsibly.",
  "count": 1,
  "picks": [
    {
      "game": "Geelong Cats @ Collingwood Magpies",
      "gameTimeUtc": "2026-07-29T23:30:00.0000000Z",
      "market": "Head to Head",
      "selection": "Geelong Cats",
      "line": null,
      "modelProbabilityPct": 54.9,
      "fairOdds": 1.82,
      "confidence": "LEAN",
      "verdict": "As of Jul 26, 2026, Bet Better's model rates Geelong Cats a 54.9% chance to land, which is fair value at odds of 1.82. Confidence: LEAN.",
      "locked": false,
      "unlocksAtUtc": null
    }
  ]
}

Endpoints

Three feed shapes exist for each league. best-bets returns game lines only, prop-bets returns player props only, and picks returns both, ranked. Add ?format=json to any of them.

LeagueBase pathFeeds
AFL/afl/best-bets, prop-bets, picks
MLB/mlb/best-bets, prop-bets, picks
NBA/nba/best-bets, prop-bets, picks
NFL/nfl/best-bets, prop-bets, picks
NHL/nhl/best-bets, prop-bets, picks
NCAAF/ncaaf/best-bets, prop-bets, picks
NRL/nrl/best-bets, prop-bets, picks
Cricket (IPL, Big Bash, The Hundred, CPL, T20 internationals, ODIs)/cricket/best-bets, picks
NCAAB (College Basketball)/ncaab/best-bets, prop-bets, picks
UFC/ufc/best-bets, prop-bets, picks
WNBA/wnba/best-bets, prop-bets, picks
Tennis (WTA)/tennis/wta/prop-bets, picks
Soccer (EPL, Championship, La Liga, Serie A, Bundesliga, Ligue 1, MLS, Brasileirão, A-League, World Cup)/soccer/{league}/best-bets, prop-bets, picks

Predicted scores (CSV and JSON)

The model's numeric score prediction for every game it prices — one page per sport at /predicted-scores/{sport}, machine-readable with ?format=csv or ?format=json. Fixed columns: date_utc, time_utc, away_team, home_team, pred_away_score, pred_home_score, home_margin, total, home_win_prob. home_margin is home minus away; times are UTC; college team names carry no nicknames. Rows without a margin are omitted so parsers never meet blanks. Soccer is the one exception: the soccer model prices win chances, not scores, so soccer rows carry home_win_prob with the score, margin and total columns empty. home_win_prob is filled for the next three games of each sport and left blank for the rest (every game's win chance is in the Predictions feed). The columns will not change without notice — prediction trackers and aggregators are welcome to poll (results are cached for 15 minutes).

curl "https://betbetter.world/predicted-scores/nfl?format=csv"

Sports: nfl, ncaaf, nba, ncaab, mlb, nhl, afl, nrl, wnba, soccer, cricket.

Fantasy projections (CSV and JSON)

Projected fantasy points per player, one page per sport at /fantasy/{sport}, machine-readable with ?format=csv or ?format=json. Fixed columns: rank, player, team, position, then one fpts_<format> column per scoring system the sport offers (NFL: ppr, half, std, dk, fd; AFL: afl_fantasy; NBA/NHL/WNBA: dk, fd), then the projected stat line. Filter with ?pos=rb (NFL) or ?scoring=half. Rows are players the model has priced for the upcoming window; the scoring rules are printed on each page. Cached for one hour.

curl "https://betbetter.world/fantasy/nfl?format=csv"

Sports: nfl, afl, nba, nhl, wnba. Hub: /fantasy.

What this API deliberately does not include

No bookmaker prices. You will not find a bookmaker name, a market price, or an implied probability anywhere in this feed, and there is no plan to add them. Our odds data is licensed from a third-party provider under terms that permit us to publish work derived from it but not to redistribute the feed itself.

Everything here is our own model's output. If you need live market odds, license them directly from an odds provider.

Licence and attribution

Published under CC BY 4.0. You may use, transform and redistribute it, including commercially, provided you credit the source. A link back to betbetter.world is the simplest way to do that.

Caching and fair use

Status and changelog: when each feed last got new data, and what changed.

  • Responses are cacheable for 15 minutes; underlying model output refreshes several times a day.
  • No authentication and no hard rate limit. Please cache rather than polling in a tight loop.
  • Fixtures already started are excluded, so a feed is empty out of season. That is expected, not an error.
  • On a data error the feed returns a valid document with an error field rather than a 500.

Open data

We also publish a free dataset of 206,722 AFL player-match records from 2000 to 2023, with weather, attendance and advanced tracking statistics, under the same CC BY 4.0 licence. It contains no odds data.

Model context

Probabilities come from per-sport models retrained on historical results. They are estimates, not predictions of certainty — a 70% selection is meant to lose roughly three times in ten. Read how the model works and how our pages are made before relying on any of it.

18+. Gambling involves risk and most people lose money. This API is provided for research and analysis. It is not betting advice and not a guarantee of any outcome. If gambling is causing you harm, support is available at Gambling Help Online (AU) or 1-800-GAMBLER (US).

Get tomorrow's free pick by email

Free. One email a day, tops. Unsubscribe in one tap.

18+ only. Please gamble responsibly.