{
  "name": "betbetter-open-data",
  "title": "Bet Better open data",
  "description": "Free, no-key sports data from Bet Better (betbetter.world), a sports analytics site in Australia: the daily bookmaker margin index and the model's predicted scores per sport. CC BY 4.0, free to reuse with a credit to Bet Better. Model estimates for research; not betting advice.",
  "version": "2026.09.29",
  "created": "2026-09-29",
  "homepage": "https://betbetter.world/api/",
  "licenses": [{ "name": "CC-BY-4.0", "path": "https://creativecommons.org/licenses/by/4.0/", "title": "Creative Commons Attribution 4.0" }],
  "contributors": [{ "title": "Edward Glush", "role": "author", "organization": "Bet Better", "path": "https://orcid.org/0009-0008-4074-369X" }],
  "sources": [{ "title": "Bet Better multi-bookmaker odds archive and model output", "path": "https://betbetter.world/api/" }],
  "keywords": ["sports betting", "bookmaker margin", "overround", "predicted scores", "win probability", "open data"],
  "resources": [
    {
      "name": "margin-index",
      "title": "The Bet Better Margin Index (daily)",
      "description": "One row per day, market class and market shape: measured bookmaker margins aggregated across 50+ bookmakers. Aggregates only; no prices or bookmaker names. Lines starting with # are comments.",
      "path": "https://betbetter.world/studies/margin-index?format=csv",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "dialect": { "delimiter": ",", "header": true, "commentChar": "#" },
      "schema": {
        "fields": [
          { "name": "as_of_date", "type": "date", "format": "%Y-%m-%d", "description": "Day the prices were measured (UTC)." },
          { "name": "market_class", "type": "string", "description": "h2h, spreads, totals, 3way or props." },
          { "name": "shape", "type": "string", "description": "2way or 3way market." },
          { "name": "markets_n", "type": "integer", "description": "Markets measured that day in the group." },
          { "name": "books_n", "type": "integer", "description": "Bookmakers contributing." },
          { "name": "mean_pct", "type": "number", "description": "Average margin, percent." },
          { "name": "median_pct", "type": "number", "description": "Median margin, percent." },
          { "name": "dropped_pct", "type": "number", "description": "Share of markets excluded by quality checks, percent." }
        ],
        "primaryKey": ["as_of_date", "market_class", "shape"]
      }
    },
    {
      "name": "predicted-scores-nfl",
      "title": "Bet Better NFL predicted scores (daily)",
      "description": "The model's projected final score, margin, total and home-win chance for every upcoming NFL game it has priced. Same columns for every sport: swap nfl for nba, mlb, nhl, afl, nrl, ncaaf, ncaab, wnba, cricket or soccer.",
      "path": "https://betbetter.world/predicted-scores/nfl?format=csv",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "dialect": { "delimiter": ",", "header": true },
      "schema": {
        "fields": [
          { "name": "date_utc", "type": "date", "format": "%Y-%m-%d", "description": "Game date, UTC." },
          { "name": "time_utc", "type": "time", "format": "%H:%M", "description": "Start time, UTC." },
          { "name": "away_team", "type": "string" },
          { "name": "home_team", "type": "string" },
          { "name": "pred_away_score", "type": "number", "description": "Model's projected away score." },
          { "name": "pred_home_score", "type": "number", "description": "Model's projected home score." },
          { "name": "home_margin", "type": "number", "description": "Projected home score minus away score." },
          { "name": "total", "type": "number", "description": "Projected combined score." },
          { "name": "home_win_prob", "type": "number", "description": "Model's chance the home team wins, 0 to 1.", "constraints": { "minimum": 0, "maximum": 1 } }
        ]
      }
    }
  ]
}
