Table of Contents
- Why this guide (and a personal note)
- What you can do with live tennis data + an exchange
- Watch scores first — free Tennis Trader Board
- What you cannot (or should not) do
- Compliance, licences and who may use what
- Betfair API cost (and where the tennis feed sits)
- Where Live Tennis API fits (and why subscribe)
- Practical stack choices
- Verdict — subscribe if you are building event-driven tennis bots
Quick answer: For Betfair tennis trading bots, pair exchange prices with a point-by-point WebSocket so you wake on score commits — not a polling loop. Subscribe to Live Tennis API Ultra for the live stream + win-probability, keep Betfair Delayed (£0) for learning, and only pay for a Betfair Live App Key when you are ready to execute. Benchmark score commits against Match Odds movement on the exchange. Want the score layer without coding first? Open our free Tennis Trader Board.
Disclosure: Live Tennis API provided BotBlog with free Ultra access to evaluate the feed. Links to Live Tennis API in this article are affiliate links — we may earn a commission if you subscribe, at no extra cost to you. Use our link or enter code botblog at checkout for 10% off. Editorial verdict stays independent. Full disclosure.
Get the feed this guide uses — Ultra includes WebSocket live scores + AI win-probability (ATP, WTA, Challenger, ITF).
Subscribe to Live Tennis API (10% off) →
Affiliate link — or enter code botblog at checkout for 10% off. Disclosure
Why this guide (and a personal note)
I’m Stephane — I run BotBlog, I’m a keen tennis player, and I’m a proper fan of the tour. That mix matters here. On court you feel how a single break point changes the match; on the exchange you see the same moment as a Match Odds spike. Betfair tennis trading only makes sense if you respect both: the sport’s score logic and the market’s liquidity.
This is not a tipster pitch. It is a real map of what you can build, what you should not, what licences and API costs look like in 2026 — and why I use a dedicated tennis WebSocket (Live Tennis API) instead of polling scrapers.
Related reads: Tennis Trader Board guide · free live tennis scores for Betfair trading · break-point trading playbook · beginner live tennis scores dashboard · BFBM tennis in-play · 15–40 tennis strategy · Betfair API key (Delayed vs Live) · bot certification · building a Betfair bot.
What you can do with live tennis data + an exchange
| Idea | Realistic? | Notes |
| Wake a bot on each score commit (WebSocket) | Yes | Needs Ultra — this is the whole point |
| Trigger on break point / tie-break / deciding set | Yes | Core of most BFBM tennis rules |
| Compare model win % vs exchange implied price | Yes (diagnostic) | Ultra win-probability vs Match Odds |
| Log feed time vs Match Odds move | Yes | Best first personal project after you subscribe |
| Run rules in Simulation before Real | Yes | BFBM Simulation or paper logs |
| Trade liquid ATP/WTA Match Odds with tight stakes | Yes, carefully | Variance is brutal after breaks |
| Learn Python on a free Betfair Delayed key | Yes | Functional testing only — pair with a live tennis feed for score events |
| Watch live scores + break alerts with no coding | Yes | Free Tennis Trader Board on BotBlog |
If you only do one project this month: get an Ultra key, subscribe the WebSocket to one live match, open Match Odds, and write a CSV of score_commit_time, point, best_back, best_lay. That file teaches more than any tipster channel.
Watch scores first — free Tennis Trader Board
Before you wire a bot, you need to see the same score states your rules will fire on. We shipped a free hosted tool for that: the Tennis Trader Board.
- Live ATP/WTA scores — sets, games, points, server
- Break-point alerts — filter or pin 15–40, 0–40, 30–40, deuce, tiebreak (same moments as the 15–40 guide)
- Model win % from the feed, plus an optional P1 odds field so you can compare a Betfair decimal price to the model in percentage points
- No API key required to watch — we run Live Tennis API on the BotBlog server
Use the board on a second monitor next to your ladder while you trade manually. When you are ready to automate those same score commits, come back here for Ultra + exchange wiring. Beginners who want a private DIY scoreboard on their PC should follow the build-your-own dashboard guide instead.
Free live tennis scores for exchange traders — alerts, filters and model % in the browser.
What you cannot (or should not) do
| Temptation | Reality |
| Treat one bookmaker TV board as the only latency benchmark | Live Tennis API races several sources (freshest-wins) — compare commits to exchange Match Odds instead |
| Profit from delayed Betfair data in-play | Delayed keys are for development; live tennis moves too fast |
| Automate thin ITF Match Odds | Coverage may exist; fills often do not |
| Sell your bot without a vendor licence | Breaches Betfair Developer terms |
| Ship “trading alerts” as tips to strangers | Tipster territory — compliance risk |
| Scrape TV apps / ToS-blocked sites for “edge” | Account-ban risk — use a licensed API instead |
| Skip staking, stops and Simulation | One bad set sequence wipes a month of small wins |
Live Tennis API runs several score sources concurrently and serves whichever commits first. On any given point that can be ahead of or behind a single bookmaker board — the useful bot question is whether score commits arrive before the exchange finishes repricing Match Odds. That is why you subscribe to a push feed rather than poll.
Compliance, licences and who may use what
Keep personal projects and commercial products in different boxes.
Betfair — personal vs commercial
- Personal betting / DIY bot for your account — Developer Program → free Delayed key to learn → apply for Live App Key when you need real-time data and
placeOrders. Details: Betfair API key guide. - Selling software to other customers — Betfair vendor / certification path required. See bot certification.
- Age & jurisdiction — 18+ only; respect UKGC rules and Betfair API region limits.
- Data licence — exchange + third-party tennis data are for permitted use under each vendor’s terms — not for republishing tip boards.
Matchbook — personal API projects
I use Matchbook for market-side experiments (I do not currently hold a Betfair data subscription). Registered customers can start with the API; heavy usage may incur volume fees. Read their Fair Usage Policy and pricing.
Live Tennis API — the score layer you subscribe to
Live Tennis API is a separate data subscription. It does not replace Betfair/Matchbook terms. You still need a lawful exchange path to trade. For bots in this guide, plan on Ultra (WebSocket + win-probability).
| Plan | Approx. | Bot relevance |
| Basic | ~$10/mo | REST live scores — OK for experiments, not event-driven bots |
| Pro | ~$30/mo | Adds market prices / events — still no WebSocket |
| Ultra | ~$100/mo | WebSocket + win-probability — what this tutorial needs |
Choose a plan & get your API key (10% off) →
Affiliate link — code botblog also gives 10% off at checkout. Disclosure. Cancel anytime on their site.
Betfair API cost (and where the tennis feed sits)
Confirm fees on official pages before you pay.
| Layer | Typical cost | What you get |
| Betfair Delayed App Key | £0 | Development only — not a live tennis edge |
| Betfair Live App Key | £499 one-off (current Developer Program figure) | Live data + live orders after approval |
| Betfair vendor certification | Separate fees | Only if you sell a bot |
| Matchbook API | £0 to start; volume fees if heavy | Personal market clock |
| Live Tennis API Ultra | Monthly subscription | Point-by-point WebSocket + model — subscribe here for bots |
| BF Bot Manager / ladders | Subscription | Execution without your own order engine |
| VPS (optional) | Monthly | BFBM VPS |
Official Betfair note (Jul 2026): Live App Key activation is listed at £499 one-off (Developer Program costs). Older posts may still say £299 — trust Betfair’s page on the day you apply.
Recommended build order
- Betfair Delayed key and/or Matchbook — prove you can read tennis Match Odds.
- Subscribe to Live Tennis API Ultra — stream score commits; log only at first.
- Map break points / tie-breaks the way you would as a player (see 15–40).
- Then either automate in BFBM or pay for Betfair Live and keep stakes tiny.
Where Live Tennis API fits (and why subscribe)
Live Tennis API is REST + WebSocket tennis data (ATP, WTA, Challenger, ITF) with live score state and, on Ultra, win-probability. Docs: API reference.
Think Futodds-for-tennis: live state in → your rules decide → exchange executes. Without a push feed, your “bot” is just a slow poller.
Ready to wire the WebSocket? Ultra is the plan that matches this article.
Subscribe to Live Tennis API Ultra (10% off) →
Affiliate link — or checkout code botblog for 10% off. Disclosure
1) Event-driven scores vs polling
Polling every few seconds looks fine until a break converts. Ultra’s WebSocket sends a frame per score commit.
import json
import os
import websocket
KEY = os.environ["LIVETENNISAPI_KEY"]
URL = f"wss://api.livetennisapi.com/api/public/v1/ws?token={KEY}"
def on_open(ws):
ws.send(json.dumps({"topics": ["live-scores"]})) # or match:12345
def on_message(ws, message):
msg = json.loads(message)
if msg.get("type") == "score":
s = msg["score"]
print(msg["match_id"], s.get("sets"), s.get("games"), s.get("points"),
"server", s.get("server"), "wp1", s.get("win_probability_p1"))
websocket.WebSocketApp(URL, on_open=on_open, on_message=on_message).run_forever()
Keep keys in .env — never in a public repo. Get a key when you subscribe.
2) Model probability vs market price
Ultra exposes win_probability_p1. Log the gap vs exchange implied probability — as a filter or journal, not a tip service.
def implied_prob(decimal_odds: float) -> float:
return 1.0 / decimal_odds
# gap = model_p1 - implied_prob(best_back_p1)
Worked example — Live Tennis API × Matchbook (live snapshot)
On 21 Jul 2026 ~13:08 UTC I cross-checked both feeds from the same machine:
- Live Tennis API —
GET /matches?status=live+ per-match/score(Ultra win-probability) - Matchbook Exchange API — open tennis events with prices (sport-id 9), authenticated operator session
Result: 44 live LT matches, 96 open Matchbook tennis events, 18 name-matched overlaps (fuzzy match on player names; event titles are often reversed).
Sample rows at that timestamp (P1 = Live Tennis API player 1; Matchbook backs aligned to that player):
| Match (LT P1 vs P2) | Score snapshot | LT model P1 | MB best back P1 | MB implied P1 | Gap |
| Quentin Halys vs Laslo Djere | Sets 1–0 · 6–2 · 0–0 · Halys serving | 0.943 | 1.11 | 0.901 | +0.042 |
| Miomir Kecmanovic vs Sebastián Báez | Sets 1–1 · 4–5 · 0–15 · Baez serving | 0.062 | 13.00 | 0.077 | −0.015 |
| Maria Lourdes Carle vs Jule Niemeier | Sets 0–0 · 4–5 · 40–40 · Niemeier serving | 0.517 | 1.94 | 0.516 | +0.002 |
| Gonzalo Bueno vs Tiago Pereira | Sets 1–1 · 4–5 · 40–15 · Pereira serving | 0.328 | 2.06 | 0.485 | −0.158 |
| Sergey Fomin vs Yanki Erel | Sets 1–1 · 5–5 · 0–0 · Erel serving | 0.439 | 2.58 | 0.388 | +0.052 |
How to read the gap: model − market. Near zero (Carle) means model and Matchbook agree. A large negative gap (Bueno −0.16) means the market implies a higher win chance for P1 than the model — worth logging, not auto-firing a tip. Halys shows a small positive gap while already a short price after winning the first set.
What this proves for bot builders:
- You can join score commits + win-probability to live Match Odds in one loop
- Name matching and runner orientation matter (Matchbook often lists
B vs Awhen LT hasA vs B) - Not every live LT match has a liquid Matchbook market — 18/44 overlaps in this slate
- This is a journal / research pattern, not a signal product
Reproduce the idea: subscribe Ultra → stream scores → poll Matchbook moneyline backs → write CSV. I keep a local helper script for regenerating snapshots when updating this guide.
How often does each feed refresh? (methodology)
A single snapshot table is useful, but it is not a full latency study. Odds and scores move on different clocks. Here is how to compare them properly — and what we measured on the same slate.
| Feed | Update model | What “fresh” means | Practical bot cadence |
| Live Tennis API — WebSocket (Ultra) | Push on each score commit (+ keep-alive pings) | A frame arrives when the point is committed in their feed | No polling loop for scores — wake on message |
Live Tennis API — REST /score | Pull — you choose the interval | Response body + timestamp field on the score object | Fine for research; WebSocket is better for bots |
| Matchbook events + prices | Pull REST (GET /edge/rest/events with include-prices) | Best back/lay at request time — no push stream in this setup | Poll in-play moneyline every 0.5–2s per watched event (respect fair usage) |
Matchbook fair-usage caps (per account, from their API Fair Usage Policy): Events group 700 requests/minute, Account 300/min, Security 200/min. Exceeding limits can trigger a ~10 minute block. So “poll every market every 100ms” is not a plan — watch a shortlist of in-play Match Odds only.
Live Tennis rate limits (plan-dependent on their site): Basic ~60 req/min, Pro ~300, Ultra ~600 — plus the WebSocket so you are not burning REST quota on every point.
Timed probe (same match, both APIs)
Immediately after the snapshot above, I polled Sergey Fomin vs Yanki Erel for 45 seconds at 1 Hz (Live Tennis REST score + Matchbook event prices for the matched event id):
| Metric | Live Tennis /score | Matchbook prices |
| HTTP latency (median) | ~105 ms | ~82 ms |
| HTTP latency (min / max) | 81 / 141 ms | 70 / 1103 ms |
| Payload changes in 45s | 3 score/model updates (4 distinct timestamp values) | 12 price-ladder changes |
What that means in plain English:
- Matchbook odds tick more often than the score. The ladder moves on orders even when the point score is unchanged — so a “gap” can open or close without a new tennis point.
- Score commits are rarer but decisive. In this window we saw a game finish (
30-40→0-0); Matchbook’s first-runner best back then stepped 1.50 → 1.41 within ~1–2 seconds on our 1 Hz poll (so the true exchange move could be faster than 1s — our sample interval is the floor). - REST latency ≈ 80–110 ms for both APIs on this path is small vs a full second of poll lag. The design choice that matters is push scores (WebSocket) + disciplined Matchbook polling, not shaving 20 ms off HTTPS.
- This probe used REST for tennis scores so both feeds were on the same timer. In production, switch LT to WebSocket and timestamp each Matchbook poll against the last score-commit time.
# Proper compare loop (sketch)
# 1) WebSocket: on score frame → store (t_score, point, wp1)
# 2) Every 0.5–1.0s: GET Matchbook moneyline for that event → (t_odds, back, lay)
# 3) Log rows where t_odds >= t_score; measure delay = t_odds - t_score after breaks
# Do not treat a random mid-game gap as a signal without the score context.
Limits of this test: one match, 45 seconds, 1 Hz polls, first runner’s top of book only, no commission adjustment. Treat it as a method demo — re-run on ATP/WTA main-draw matches you actually trade before you trust any edge story.
3) Trigger states that move prices
- Break points — same moments as the 15–40 framework
- Tie-breaks (
is_tiebreak) — pause or cut size - Deciding sets — re-check green-up / stop-loss
Prefer ATP/WTA; liquid Challenger only when fillable. Skip ITF for v1 automation.
Practical stack choices
| If you want… | Start here |
| Live scores + break-point alerts with zero setup | Free Tennis Trader Board |
| Event-driven tennis scores in Python | Live Tennis API Ultra |
| A personal DIY scoreboard (beginner) | Build a live scores dashboard |
| Fastest rule-based tennis bots | BF Bot Manager tennis + Simulation |
| Personal project on a budget | Delayed Betfair / Matchbook + Ultra logger (no live stakes yet) |
| Live DIY Python on Betfair | Live App Key + Ultra + tiny stakes |
| To sell a bot | Certification first |
Verdict — subscribe if you are building event-driven tennis bots
Betfair tennis trading bots are buildable if you respect score states, licences and liquidity. The missing piece for most DIY traders is not another odds poll — it is a point-by-point push feed.
That is why I point readers to Live Tennis API: WebSocket score commits, Ultra win-probability, clean JSON, and ATP/WTA/Challenger coverage. It will not replace Betfair’s Live key — but used properly it is the tennis equivalent of the live-stats layer football bots already take for granted.
If you are still learning which score states matter, start on the free Tennis Trader Board, then graduate to Ultra when you are ready to log commits against Match Odds.
Subscribe to Live Tennis API (10% off) →
Affiliate link — use code botblog at checkout for 10% off. Disclosure
Keep building with the free board, BFBM tennis and the API key guide.
Automate this with BF Bot Manager
Betfair-certified automation — Lay the Draw, horse racing, dutching, goals markets and more. No coding. From £29.95/month or £119.95/year after a 7-day free trial.
Affiliate link — we may earn a commission at no extra cost to you. Full disclosure
Run bots 24/7 on a VPS
Low-latency hosting keeps BF Bot Manager and other software online when your PC is off. See our VPS guide for setup notes.
Affiliate link — we may earn a commission at no extra cost to you. Full disclosure