BetsAPI Alternative: Get Bet365 Odds Plus 350+ More Books (Free Tier)
BetsAPI Gives You Bet365. Here’s How to Get Bet365 Plus 350+ More.
If you searched for a Bet365 API, you found BetsAPI. It wraps Bet365’s inplay and prematch feed into clean JSON, adds livescores and results, and it has done that job well for years. The endpoint even carries the name: api.b365api.com.
The catch is in the shape of the data. BetsAPI hands you one book. When you want to know whether Bet365’s price is any good, you need something to compare it against, and a single-book feed can’t tell you. OddsPapi returns Bet365 alongside Pinnacle, the exchanges, and 350+ other bookmakers in one call, so the comparison is already done. This post shows the difference with live code and real prices off an MLB game, and it stays honest about the one thing BetsAPI does that OddsPapi doesn’t.
What BetsAPI Is, and Where It Stops
BetsAPI is a Bet365-first data provider. From its own docs, the core endpoints are Bet365-specific: /v1/bet365/inplay, /v1/bet365/inplay_filter, /v1/bet365/result, plus upcoming events and prematch odds. It also exposes a general events API and a handful of other books (BWin, Betfair, Sbobet, 1xBet, William Hill) through separate calls. You authenticate with a token query parameter, every response carries a success key, and standard access allows 3,600 requests per hour, scaling up through paid volume packages.
Two limits matter for pricing work:
- It’s one book at a time. The flagship feed is Bet365. To compare a line, you would call several book endpoints and stitch the results together yourself. There is no single “all books on this fixture” response.
- No free tier. BetsAPI is paid only. You get a $1 one-day trial to test, then monthly plans. Historical pricing for backtesting is not a free-tier feature anywhere in the product.
None of that makes BetsAPI bad. It makes it a different tool. It is built to read Bet365 deeply, including live scores and stats. OddsPapi is built to read the whole market at once.
Where BetsAPI Wins (Say It Plainly)
BetsAPI carries data OddsPapi does not. Its Bet365 inplay endpoint returns live scores, match stats, and settled results, updating every few seconds. OddsPapi’s feed is schedules, odds, and historical odds only. It has no box scores, no player stat lines, and no final results field.
So if your app needs to show a live score, grade a bet from the final result, or read inplay match stats, BetsAPI (or a dedicated stats feed) does that and OddsPapi does not. Many teams run both: a stats feed for scores and settlement, OddsPapi for multi-book pricing. Every OddsPapi fixture ships an externalProviders block with Betradar, Sofascore, and Pinnacle IDs, which is the join key to line the two feeds up. The free sports data API guide walks through that mapping.
| BetsAPI | OddsPapi | |
|---|---|---|
| Core coverage | Bet365 + a few books via separate endpoints | 350+ bookmakers in one call |
| Sharp books | Not the focus | Pinnacle, SBOBet |
| Exchanges | Betfair (separate endpoint) | Betfair, Kalshi, Polymarket in the same payload |
| Line shopping | Stitch book endpoints yourself | All books per fixture, one response |
| Live scores & results | Yes (Bet365 inplay + results) | No (odds only) |
| Free tier | No ($1 one-day trial) | Yes (250 requests/month, full book access) |
| Historical odds | Paid | Free |
| Auth | token query param |
apiKey query param |
The Single-Book Blind Spot, in Numbers
Here is what one book can’t show you. On a live New York Yankees vs Los Angeles Dodgers game, OddsPapi returned 17 bookmakers on the moneyline in a single call: Pinnacle and SBOBet (sharp), Kalshi and Polymarket (exchanges), the US retail books, and Bet365. The best price on each side did not come from a retail book:
| Side | Pinnacle (sharp) | Best available | Where |
|---|---|---|---|
| Yankees | 2.01 | 2.041 | Kalshi |
| Dodgers | 1.909 | 1.961 | Polymarket |
Strip the vig off Pinnacle’s line (2.13% margin) and the fair prices are 2.053 on the Yankees and 1.950 on the Dodgers. The two exchange prices sit right on top of that sharp fair number, and both beat every US sportsbook on the board. A Bet365-only feed never surfaces that, because the edge lives in books it doesn’t carry. This is best available price, not a value claim: shop it, don’t assume it.
One more honest detail from the same pull: Bet365’s US baseball coverage was thin, just a few first-inning and extra-inning markets, not even the moneyline. Bet365 prices soccer and tennis deeply, which is exactly where BetsAPI’s inplay feed shines, but leaning on a single book leaves gaps that an aggregate fills.
Build It: 350+ Books on One MLB Game in Python
All code below is tested against the live API. Auth is the apiKey query parameter, never a header. Baseball is sportId=13.
Step 1: Authenticate
import requests, time
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.oddspapi.io/v4"
def get(path, **params):
params["apiKey"] = API_KEY
r = requests.get(f"{BASE_URL}/{path}", params=params)
r.raise_for_status()
return r.json()
print(len(get("bookmakers")), "bookmakers live") # 381 at time of writing
Step 2: Find a Live Fixture
from datetime import date, timedelta
today = date.today()
fixtures = get("fixtures", sportId=13,
**{"from": today.isoformat(),
"to": (today + timedelta(days=2)).isoformat()})
mlb = [f for f in fixtures
if f.get("tournamentName") == "MLB" and f.get("hasOdds")]
fixture = mlb[0]
print(fixture["participant1Name"], "vs", fixture["participant2Name"])
Team names live directly on participant1Name and participant2Name. Only fixtures with hasOdds: true return a price payload.
Step 3: Pull Every Book in One Call
Leave the bookmakers filter off and you get the whole board back. This is the call BetsAPI has no equivalent for.
fid = fixture["fixtureId"]
time.sleep(1) # ~0.9s cooldown between calls to the same endpoint
data = get("odds", fixtureId=fid)
books = data["bookmakerOdds"]
print(len(books), "books:", sorted(books))
Step 4: Line-Shop the Moneyline
Moneyline is market 131, with outcome 131 for the home side and 132 for the away side. On game lines the price sits under the "0" player key. Filter on active so a suspended line never wins your best-price check.
def best_price(books, market_id, outcome_id):
best = None
for slug, book in books.items():
market = book.get("markets", {}).get(str(market_id))
if not market:
continue
outcome = market["outcomes"].get(str(outcome_id))
if not outcome:
continue
p = outcome["players"].get("0")
if p and p["active"] and p["price"] > 1:
if best is None or p["price"] > best[1]:
best = (slug, p["price"])
return best
print("Best home:", best_price(books, 131, 131)) # ('kalshi', 2.041)
print("Best away:", best_price(books, 131, 132)) # ('polymarket', 1.961)
Step 5: Benchmark Against the Sharp No-Vig Line
Pinnacle is the sharpest book on the board. De-vig its two-way price and you have a fair-probability yardstick for every other quote.
def devig(home, away):
ih, ia = 1 / home, 1 / away
total = ih + ia
return {
"vig_pct": round((total - 1) * 100, 2),
"fair_home": round(total / ih, 3),
"fair_away": round(total / ia, 3),
}
pin = books["pinnacle"]["markets"]["131"]["outcomes"]
home = pin["131"]["players"]["0"]["price"]
away = pin["132"]["players"]["0"]["price"]
print(devig(home, away))
# {'vig_pct': 2.13, 'fair_home': 2.053, 'fair_away': 1.950}
Any price above the fair number is beating the sharpest book’s own no-vig line. For the full margin-removal treatment, see the no-vig odds guide. To shop across every market and sport, not just the moneyline, read the line shopping tutorial.
Free Historical Odds for Backtesting
Backtesting a model means replaying how prices moved. BetsAPI keeps historical data on paid tiers. OddsPapi gives historical odds away on the free tier. The endpoint mirrors the live one, with one difference: each player key holds a list of timestamped snapshots instead of a single price, capped at three bookmakers per call.
hist = get("historical-odds", fixtureId=fid, bookmakers="pinnacle,bet365,draftkings")
# hist["bookmakers"][slug]["markets"][mid]["outcomes"][oid]["players"]["0"]
# -> [ {"createdAt": ..., "price": ..., "active": ...}, ... ]
That is opening-to-closing movement across three books, no invoice. If your interest is player props specifically, tools like jedibets.com run a props-focused screener with Discord alerts on top of this kind of data.
Which One Should You Use?
Use BetsAPI when Bet365 is the point: deep Bet365 inplay markets, live scores, match stats, and results you can settle bets against. Use OddsPapi when the market is the point: one call for 350+ books, sharp and exchange prices retail books can’t match, a no-vig benchmark, and free historical odds to backtest on. If you are building a real product, running both and joining them on the externalProviders IDs is a common and sensible setup. For the wider field, our best odds APIs comparison ranks six providers, and the Bet365 API guide and free API key get you pulling Bet365 lines against the field today.
Frequently Asked Questions
Is OddsPapi a replacement for BetsAPI?
For odds, yes, and with far more books. For live scores, match stats, and results, no. BetsAPI’s Bet365 inplay feed returns scores and stats that OddsPapi does not carry. If you need both pricing and results, run OddsPapi for odds and a stats feed for results, joined on the fixture’s externalProviders IDs.
Does BetsAPI have a free tier?
No. BetsAPI is paid, with a $1 one-day trial to test before you commit to a monthly plan. OddsPapi has a genuine free tier with 250 requests per month, full access to all 350+ bookmakers, and free historical odds, no credit card required.
Can I still get Bet365 odds through OddsPapi?
Yes. Bet365 is one of the 350+ books in the feed. The advantage is that it arrives alongside Pinnacle, Betfair, Kalshi, Polymarket, and every other book on the same fixture, so you can compare Bet365’s price against the sharp and exchange lines in a single response.
How many bookmakers and sports does OddsPapi cover?
381 bookmakers across 69 sports at the time of writing, including sharps (Pinnacle, SBOBet), exchanges (Betfair, Kalshi, Polymarket), US retail books, and crypto sportsbooks. The catalog grows most months, so query /v4/bookmakers and /v4/sports for the live count.
What is BetsAPI’s rate limit?
Standard access allows 3,600 requests per hour, and paid volume packages raise that ceiling substantially. OddsPapi’s free tier meters by monthly request count rather than per hour, with a short cooldown between calls to the same endpoint.
Get the Whole Market, Not One Book
Bet365 plus Pinnacle plus the exchanges plus 350+ more, as clean JSON, with free historical data to backtest against. Get your free API key and pull every book on your next fixture in one call.