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 need | This free API | Bet Better Data |
| Leagues | 13 sports, the games we publish picks on | 29 competitions, every game the books price |
| Numbers | Win probability and fair odds | Spread, total, win chance, fair prices, player props with over / under chances, alternates |
| Timing | When our picks publish | From 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 |
| Delivery | JSON, no key | JSON 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).
| Field | Type | Meaning |
game | string | Fixture, formatted Away @ Home. |
gameTimeUtc | ISO 8601 | Scheduled start, UTC. |
market | string | Market type, e.g. Head to Head, Spread, Total Points. |
selection | string | The team, player or outcome being rated. |
line | number|null | Handicap or total the selection is measured against. |
modelProbabilityPct | number|null | Our estimated chance the selection lands, 0–100. |
fairOdds | number|null | Decimal odds implied by our probability — the break-even price. Always 100 / modelProbabilityPct, rounded to 2 decimals. It is our number, never a bookmaker price. |
confidence | string | HIGH, LEAN or LONG-SHOT. |
verdict | string | One plain-English sentence summarising the above. |
locked | boolean | true on a members' pick (game, start time and market only). |
unlocksAtUtc | ISO 8601|null | On a locked pick: the kickoff, when it leaves the free feed. null on free picks. |
lockedPicks | integer | On 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.
| League | Base path | Feeds |
| 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).