sportscore
Python client for the free SportScore sports-data API — live scores, match details, standings, top scorers, brackets and player stats across football, basketball, cricket and tennis.
- No API key. CORS-open. Free forever for reasonable usage (~10,000 req / 24h / IP).
- Free in exchange for one thing: a visible
"Powered by SportScore"dofollow backlink on any page that renders the data. Commercial / white-label (no attribution) available at sportscore.com/developers/terms/. - Sync + async, typed,
py.typedshipped.
Install
pip install sportscore
Requires Python 3.9+.
Quickstart
Sync
from sportscore import SportScoreClient
with SportScoreClient() as sc:
matches = sc.get_matches("football", limit=5)
for m in matches["data"]:
print(m["home_team"], m["score"], m["away_team"])
standings = sc.get_standings("football", "premier-league")
scorers = sc.get_top_scorers("football", "premier-league", limit=10)
messi = sc.get_player("football", "lionel-messi")
# Surface the free-tier attribution line anywhere you render the data:
print(sc.attribution_html())
# <a href="https://sportscore.com/" rel="dofollow" ...>Powered by SportScore</a>
Async
import asyncio
from sportscore import AsyncSportScoreClient
async def main():
async with AsyncSportScoreClient() as sc:
matches = await sc.get_matches("basketball", limit=3)
print(matches)
asyncio.run(main())
API surface
Every method returns the parsed JSON body from the SportScore API. Non-2xx
responses raise SportScoreError with status_code, body, and url
attributes.
| Method | Description |
|---|---|
get_matches(sport, limit=10) |
Live + recent matches for a sport |
get_match_detail(sport, slug) |
Full data for one match |
get_team_schedule(sport, slug, limit=10) |
Team fixtures (past + upcoming) |
get_standings(sport, slug) |
League / competition table |
get_top_scorers(sport, slug, limit=20, stat="goals") |
Top scorers or assisters |
get_player(sport, slug) |
Player stats + metadata |
get_bracket(sport, slug) |
Knockout tournament bracket |
get_tracker(sport, match_id) |
Live match tracker (football) |
sport is one of "football", "basketball", "cricket", "tennis".
Configuration
SportScoreClient(
api_base="https://sportscore.com",
user_agent="my-app/1.0",
timeout=15.0,
http_client=None, # pass your own httpx.Client if you want pooling
)
No API keys, no required env vars.
Anonymous install-ping (opt-out)
On the first SportScoreClient() instantiation per process, the library
fires one fire-and-forget POST to https://sportscore.com/api/mcp/ping/
on a background thread:
{
"client": "sportscore-py",
"version": "0.2.0",
"transport": "python",
"host": "linux",
"python": "3.12.1"
}
That's the whole payload — no user id, no IP, no cookies, no per-call telemetry. We use it to see rough weekly-active-installs and Python/OS spread so we know what to support. The ping runs on a daemon thread and has a 3 s timeout — it cannot delay your program.
Opt out by setting SPORTSCORE_NO_TELEMETRY=1 in your environment:
export SPORTSCORE_NO_TELEMETRY=1
Attribution — how the free tier works
The service is free in exchange for a visible dofollow backlink to
https://sportscore.com/ on any page that renders the returned data. The
client ships helpers so the one line of code you need is literally one line:
client.attribution_html()
# <a href="https://sportscore.com/" rel="dofollow" title="Sports data by SportScore">Powered by SportScore</a>
Prefer a pre-designed badge? Pick any of the six variants (dark pill, light pill, minimal, tiny circle, amber accent, stat-block footer) at sportscore.com/developers/#badges.
Full terms: sportscore.com/developers/terms/.
Commercial / white-label removal: api@sportscore.com.
Error handling
from sportscore import SportScoreClient, SportScoreError
with SportScoreClient() as sc:
try:
sc.get_standings("football", "made-up-league")
except SportScoreError as exc:
print(exc.status_code, exc.body)
Related projects
sportscore-mcp— the same 8-tool surface exposed as a Model Context Protocol server for Claude, Cursor, Zed, etc.- OpenAPI spec — full REST spec if you'd rather skip the client altogether.
- Interactive API reference — Redoc-rendered docs with live "Try it" for every endpoint.
Contributing
Bugs, PRs, and example code all welcome: github.com/Backspace-me/sportscore-py.
Run the tests:
pip install -e ".[dev]"
pytest
License
MIT — client code. Remote API usage is governed by the SportScore API Terms of Use.
Metadata
Release files for sportscore 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sportscore-0.2.0.tar.gz | 8.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sportscore-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.7 kB
Release files / sportscore-0.2.0.tar.gz
| Download URL | sportscore-0.2.0.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
207256395014d9916c29d74c4cafef4a590877a239192d3dab0632e9622a9e5f
|
|
BLAKE2b-256 checksum How to use checksums |
ceb66a257c702f3a5a42f8fe017faf0e72ebe3b6cd71b8de7abeb807c954bf32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 23, 2026.
Transparency logRelease files / sportscore-0.2.0-py3-none-any.whl
| Download URL | sportscore-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ef13542a20852511f69483005338ad54888a06f74711147d40b09d5b4ed6a7c
|
|
BLAKE2b-256 checksum How to use checksums |
e1bcad74bdef520f7ec47bd156e9ca32a3ff71a3a42d7f0f6346b5a545671598
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 23, 2026.
Transparency log