Matched betting API
Match bet365 free bets against exchange lay odds programmatically
For: Matched-betting services, community tools, private communities
The problem
Matched betting depends on finding bet365 back prices that line up with an exchange lay price. Manually scanning 200 fixtures a day is impossible. You need a programmatic feed that delivers every market, every few minutes, with no restrictions on the sports you're scanning.
How TickOdds helps
TickOdds' Starter tier gives you full prematch coverage across all 30+ sports at 200 req/min — more than enough to power a matched-betting scanner that refreshes every 5–10 minutes. Pair with a Betfair Exchange data feed to compute qualifying-loss and free-bet-conversion percentages.
Recommended: Starter tier
Based on the throughput this workload needs.
See pricing →Workflow
- 1Poll /api/v1/matches every 5 minutes for the full upcoming slate
- 2For each match, pull /api/v1/matches/{fixtureId} to get full-depth markets
- 3Pair each bet365 back price with the corresponding Betfair lay price
- 4Surface matches above a qualifying-loss threshold to your subscribers
Code example
python
import requests
from datetime import datetime
API = "https://api.tickodds.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_KEY"}
def scan_matched_betting():
r = requests.get(f"{API}/matches?sport=soccer", headers=HEADERS)
for match in r.json()["data"]:
detail = requests.get(
f"{API}/matches/{match['fixtureId']}", headers=HEADERS
).json()["data"]
for market in detail["markets"]:
back_odds = market["odds"]
lay_odds = fetch_betfair_lay(market["id"])
if lay_odds and qualifying_loss(back_odds, lay_odds) < 0.05:
yield {"match": match["name"], "qualifying_loss_pct": ...}
for opportunity in scan_matched_betting():
print(opportunity)Related endpoints
- GET /api/v1/matches
- GET /api/v1/matches/{fixtureId}
- GET /api/v1/competitions/{sportId}/{compId}/matches