Choose an odds API in Australia on four tests: the bookmakers and markets it carries, the age of its prices, how it maps events across bookmakers, and what its history, limits and licence allow. An odds API returns prices and places no bets, so software that bets needs a second, separate API.
The answers matter more than the headline number on a pricing page. Two sports odds APIs that each list, say, 30 bookmakers can differ in which 30, in the markets they carry at each, and in how stale their prices run. Those differences decide whether your model, screen or alert works on the accounts you actually hold.
Coverage: bookmakers, sports, markets and racing codes
Get coverage as a grid you can check against your accounts: one row per sport, market and racing code (thoroughbred, harness and greyhound), one column per bookmaker. A bookmaker can be "covered" for head to head prices on the main leagues and nothing else, and a racing feed can carry thoroughbred win prices with no greyhounds at all.
Then score the grid against what you will use. With an illustrative need of five markets at the six bookmakers you hold accounts with, called A to F:
| Market you need | Of your 6 bookmakers, covered | Missing |
|---|---|---|
| AFL head to head | 6 | None |
| AFL line | 5 | F |
| AFL player disposals | 3 | B, D, F |
| Thoroughbred win and place | 6 | None |
| Greyhound win | 2 | A, C, E, F |
| Total | 22 of 30 | 8 gaps |
Across all 30 cells, coverage is 22 / 30 = 73%. If player disposals are what your model is built on, the figure that matters is 3 of 6, not 73%. Test in season, too: a sport with no markets up has nothing to carry, so an off-season sample tells you little.
Check that every bookmaker listed may take your bet
An API built for customers in many countries can carry offshore operators beside Australian ones. It is illegal for an operator without an Australian state or territory licence to offer online sports betting to people here (Interactive Gambling Act, s 15AA). ACMA warns that customers of illegal operators may not be paid their winnings, and that Australian regulators cannot help them. A best price from one of them is not one to build anything on.
Check each bookmaker on the list against ACMA's register of licensed wagering providers, as how to check a bookmaker is licensed sets out step by step, and filter the rest out before any comparison runs.
Freshness: polling, streaming and a time on every price
Two things set how old a price is when your code uses it: how often the provider reads each bookmaker, and how often you collect from the provider, by polling or over a stream. Odds data feeds explained covers how each delivery works; for choosing, the arithmetic decides.
Your polling cannot make a price fresher than the provider's own read. With an illustrative provider that reads each bookmaker every 20 seconds, and 12 events watched for 8 hours a day:
| Your setting | Requests a day | Worst-case price age |
|---|---|---|
| Poll every 60 seconds | 12 x 60 x 8 = 5,760 | 20 + 60 = 80 seconds |
| Poll every 15 seconds | 12 x 240 x 8 = 23,040 | 20 + 15 = 35 seconds |
| Poll every 5 seconds | 12 x 720 x 8 = 69,120 | 20 + 5 = 25 seconds |
| Streaming | One open connection | About 20 seconds, plus delivery |
The worst case is a price that changes just after the provider's read, then waits a full read cycle and a full poll interval to reach you. Going from 15 to 5 seconds triples the requests and takes 10 seconds off the worst case. The other 20 seconds belong to the provider, and only a faster read on its side removes them. Ask whether one request returns one event or a whole sport, because that changes every figure in the middle column.
Insist on a read time on every price, set when the provider read the bookmaker, not when it sent the reply. Without one, a price kept from the last good read an hour ago arrives looking exactly like one read this cycle, and nothing in your code can tell them apart. Test it before you pay: poll one busy event every few seconds for an hour and note how often each bookmaker's read time moves on, because that interval is the read cycle you would be buying.
Normalising events and markets across bookmakers
Each bookmaker names the same game, market and selection its own way: team order, player name formats, market titles and how a line is written all differ. A comparison only works if the API maps every version to one event and one market. Ask how it matches events: on the teams and the start time, or on the event name as text. Ask too what it does with a market it cannot map (drops it, returns it raw, or guesses), and whether it returns the bookmaker's own label beside the mapped one so you can check.
A wrong map costs more than a missing one. With illustrative prices, Bookmaker A lists a game as Team A v Team B, Bookmaker B lists it as Team B v Team A, and the API maps by position:
| Shown under Team A | Shown under Team B | |
|---|---|---|
| Bookmaker A (Team A v Team B) | $1.60 | $2.40 |
| Bookmaker B (Team B v Team A), mapped by position | $2.35, really Team B's price | $1.62, really Team A's price |
| Best price the API shows | $2.35 | $2.40 |
The best prices shown add up to 1 / 2.35 + 1 / 2.40 = 0.4255 + 0.4167 = 0.8422. An arbitrage check reads that 84.2% book as a profit of 1 / 0.8422 - 1 = 18.7% of the total staked. There is no arbitrage: both prices belong to Team B, so the two "legs" are two bets on one team, and both lose if Team A wins. Spot-check a sample of events against each bookmaker before you trust any gap an API shows.
History, request limits, pricing and licence terms
History
Ask what the API keeps: every price it read or only the changes, opening and closing prices, how far back it goes, and whether you can download it in bulk. Price history is how you check whether you beat the closing price, and a hole in it stays invisible unless the API marks it. Historical odds data covers which past prices are fit for testing.
Request limits
Every plan has limits: requests a minute, requests a month, open connections, and sometimes bookmakers or sports held back for dearer plans. Ask what happens when you reach one. A clear refusal, such as an HTTP 429 "too many requests" reply, is easy to handle. An API that keeps answering with its last cached prices is not, because your code carries on with stale prices and no sign that anything changed.
Pricing
Providers charge by the month with a request quota, per request, by sport or bookmaker bundle, or extra for streaming. Turn every plan into a monthly cost at the polling rate you need. With two made-up plans, not any provider's prices, and the 12-event pattern above over 30 days:
- Plan X: $79 a month for 100,000 requests, then $1 per 1,000 requests beyond that, charged pro rata (0.1c a request).
- Plan Y: $249 a month for 1,000,000 requests.
| Polling | Requests a month | Plan X | Plan Y |
|---|---|---|---|
| Every 60 seconds | 5,760 x 30 = 172,800 | 79 + 72.8 x 1 = $151.80 | $249.00 |
| Every 15 seconds | 23,040 x 30 = 691,200 | 79 + 591.2 x 1 = $670.20 | $249.00 |
The cheaper plan flips with the polling interval, so settle the freshness you need before you compare prices.
Licence terms
Ask in writing what you may do with the data: use it in your own models only, show it on a website or app, store it, or pass it on. Racing fields, form and results carry rights of their own, which what a racing odds API should carry covers.
Odds APIs return prices; placing bets needs a different API
Three kinds of API get called "betting APIs", and only one of them puts a bet into a bookmaker account:
| Kind of API | What it gives you | Can it place a bet? |
|---|---|---|
| Odds data API | Prices and market details from many bookmakers | No |
| An exchange's own API | That exchange's prices and your orders on it | Only on that exchange, in your exchange account |
| Bet placement API | The results of bets your code sends | Yes, in bookmaker accounts you hold |
Choosing an odds API settles where your prices come from. If your software will also bet, the placement side has its own checks, from duplicate bets after a timeout to reconciling every bet with the bookmaker, set out in bet placement API. Many bookmakers restrict automated betting in their terms and can limit stakes, void bets or close an account under them; that is a question about each bookmaker, not about the odds API.
Where odds API choices go wrong
Each of these is cheap to check before you pay and expensive to find afterwards. With illustrative figures:
| Mistake | What it costs |
|---|---|
| Choosing on the bookmaker count | Two of your six bookmakers missing leaves a third of your accounts out of every comparison |
| Acting on prices with no read time | A $50 bet sent at $4.00 that is $3.70 when it lands returns 50 x 3.70 = $185 if it wins, not $200 |
| Polling faster than you need | Plan X costs $670.20 a month at 15-second polling against $151.80 at 60 seconds |
| Trusting a mapped market without its raw label | A phantom 84.2% book that is really two bets on one team |
| Leaving offshore operators in the comparison | A best price from an operator that may not lawfully offer it to you, with no Australian protections |
| Not asking what happens at the request limit | Hours of decisions made on cached prices |
When an odds API is the wrong tool
An API is only worth its setup when code will use the prices. In these cases something else does the job:
- Comparing prices and placing a few bets by hand needs no code: an odds screen does it.
- Testing a method on past races or games calls for bulk history, not a live API.
- Tote dividends cannot come from any API before the race, because a dividend is declared after the result.
- Getting bets placed takes a placement API, fed by prices your rules already trust.
Odds APIs sit underneath many other betting tools in Australia, from odds screens to bots, so the same questions apply when you buy a finished tool rather than raw data.
Where B337's API Odds fits
B337 sells odds data as API Odds: live racing and sports odds from Australian bookmakers and Betfair, delivered over the B337 API for your own models, tools and strategies. It places no bets and includes Terminal View.
Coverage and access are agreed at setup, and coding is required. The team confirms the price, including any charges on top of the plan price, before you pay, so put these coverage, freshness and licence questions to the team first. The API Odds summary on the automation page has the outline. Betting from code is a separate product, the Execution API, and bets placed through B337 use credits. Betfair is a trade mark of its owner; B337 is not affiliated with it.
Risk: Betting involves risk. A price from any feed can be gone by the time you act on it, a model fed clean data still loses bets, and there is no guarantee of profit. See responsible gambling for limits and support.
For free and confidential support call 1800 858 858 or visit gamblinghelponline.org.au.