Skip to content
datasportsAPI

04AI & data products

Feed your models whole seasons, not scraped pages.

Pull a league season as a single file, join it to our in-play win-probability model, and key everything on ids that stay put from one season to the next. One envelope and one key from the first notebook to production.

The play

Four calls. Final whistle: model ready.

Each marker is a request. Each run carries its ids to the next.

read it left to right
  1. 1

    Find the season

    List a league's seasons, newest first, to get the season id an export asks for.

    GETSeasons: /v2/leagues/{id}/seasonsAll plans
  2. 2

    Order the season

    On Business, start an export of one league season as JSON, CSV or Parquet: fixtures, standings, top players and top teams. It answers 202 and builds in the background.

    POSTCreate an export: /v2/exportsBusiness
  3. 3

    Collect the files

    Poll until the status reads ready, then download from links that stay valid for an hour. Ask again for fresh links. A cached season is ready in seconds, others in a few minutes.

    GETExport status: /v2/exports/{id}Business
  4. 4

    Add a live signal

    On Pro and Business, our own football model: where it stood before kick-off, the home/draw/away split right now, and the full curve, recomputed as the match goes on.

    GETWin probability: /v2/fixtures/{id}/win-probabilityPro + Business

In code

A season into your pipeline

Order the export, wait for the files, then add the live model for the matches you score. The same key and the same envelope throughout.

Install
pip install datasportsapi
Key
export DATASPORTSAPI_API_KEY=dsa_live_…
All SDKs and the CLI
import time
from datasportsapi import DataSportsAPI

client = DataSportsAPI()  # reads DATASPORTSAPI_API_KEY

season_id = client.leagues.seasons(league_id)["data"][0]["id"]
job = client.exports.create(league=league_id, season=season_id, format="parquet")["data"]

while job["status"] not in ("ready", "failed"):
    time.sleep(5)
    job = client.exports.get(job["id"])["data"]

for f in job["files"]:
    print(f["name"], f["url"])  # fixtures.parquet, standings.parquet

curve = client.fixtures.win_probability(fixture_id)["data"]

Field notes

Worth knowing before launch.

  1. Up to 20 exports per account per UTC day; finished files are kept for seven days.

  2. CSV and Parquet exports are two flat tables, fixtures and standings. JSON holds the whole season as the endpoints serve it.

  3. The win model is an analysis indicator, built without bookmaker odds. It is not betting advice.

Which plan

Goes live on Business.

Season exports and the full history, more than ten years on average, are Business features. If all you need is the live model, Pro serves the win-probability endpoint with six months of history.

  1. Free

    01

    $0/ month

    1,000 requests / day

    Learn the schema on a week of real data.

  2. Starter

    02

    $49/ month

    250,000 requests / month

    Thirty days of fixtures for a proof of concept.

  3. Pro

    03

    $199/ month

    1,000,000 requests / month

    Win-probability curves and six months of history through the REST endpoints.

  4. Fits this play

    Business

    04

    $999/ month

    10,000,000 requests / month

    Season exports in JSON, CSV or Parquet, the full history and 10M requests a month.

Prototype on a free key. Export on Business.

1,000 free requests a day during the beta. No card, no sales call.