{
  "openapi": "3.0.1",
  "info": {
    "title": "Basketball Scraper — NBA, EuroLeague, Box Scores",
    "description": "NBA, EuroLeague and NCAA basketball: live scores, player box scores, betting odds with bookmaker margin and 21 stats broken out by quarter — field goal splits, three-point and free-throw accuracy, rebounds, turnovers. Head-to-head history and arena included. No login, no browser, callable as an API.",
    "version": "1.1",
    "x-build-id": "divxjfw1DckP9iudh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scapypuppy~basketball-scraper-nba/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scapypuppy-basketball-scraper-nba",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scapypuppy~basketball-scraper-nba/runs": {
      "post": {
        "operationId": "runs-sync-scapypuppy-basketball-scraper-nba",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scapypuppy~basketball-scraper-nba/run-sync": {
      "post": {
        "operationId": "run-sync-scapypuppy-basketball-scraper-nba",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "dateRange": {
            "title": "Days",
            "enum": [
              "today",
              "yesterday",
              "tomorrow",
              "yesterday-today",
              "today-tomorrow",
              "last-3-days",
              "next-3-days",
              "last-week",
              "next-week",
              "whole-window",
              "custom"
            ],
            "type": "string",
            "description": "The source keeps results 7 days back and fixtures 7 days ahead. Ignored when From/To date, league URLs, teams or match IDs are set.",
            "default": "today"
          },
          "tours": {
            "title": "Competitions",
            "type": "array",
            "description": "Pick from the list or type any name as Flashscore writes it: 'COUNTRY: League' pins one league, a bare name matches it in every country. Leave empty for all.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "USA: NBA",
                "EUROPE: Euroleague",
                "USA: WNBA",
                "EUROPE: Eurocup",
                "EUROPE: Champions League",
                "SPAIN: ACB",
                "ITALY: Lega A",
                "TURKEY: Super Lig",
                "FRANCE: LNB",
                "AUSTRALIA: NBL",
                "CHINA: CBA"
              ],
              "enumTitles": [
                "NBA",
                "EuroLeague",
                "WNBA",
                "EuroCup",
                "Champions League (FIBA)",
                "Liga ACB (Spain)",
                "Lega A (Italy)",
                "Super Lig (Turkey)",
                "LNB (France)",
                "NBL (Australia)",
                "CBA (China)"
              ]
            }
          },
          "matchStatuses": {
            "title": "Match status",
            "type": "array",
            "description": "Leave empty for all. Live now alone reads the live feed first and returns only matches in play; add Live state for the score in play.",
            "items": {
              "type": "string",
              "enum": [
                "scheduled",
                "live",
                "finished",
                "postponed",
                "canceled",
                "abandoned",
                "interrupted"
              ],
              "enumTitles": [
                "Scheduled",
                "Live now",
                "Finished",
                "Postponed",
                "Canceled",
                "Abandoned (called off, no result)",
                "Interrupted (may resume later)"
              ]
            },
            "default": []
          },
          "maxMatches": {
            "title": "Max matches",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Most matches per run (monitor mode: matches checked). Top competitions come first among the days read; without filters, reading stops once there are enough.",
            "default": 200
          },
          "teamFilter": {
            "title": "Team or player in the daily list",
            "type": "array",
            "description": "Keep only matches of these teams or players from the selected days: names as whole words, or the 8-character IDs from Flashscore links. No extra requests. For a team's history beyond the 15-day window use Teams or players below.",
            "items": {
              "type": "string"
            }
          },
          "teamSide": {
            "title": "Where they play",
            "enum": [
              "any",
              "home",
              "away"
            ],
            "type": "string",
            "description": "With the team filter above: keep their home matches, away matches or both.",
            "default": "any"
          },
          "startsWithinHours": {
            "title": "Starts within",
            "minimum": 0.25,
            "maximum": 360,
            "type": "number",
            "description": "Keep only matches that start from now until this many hours ahead, for example 6. Days that cannot hold such matches are not read."
          },
          "includeStats": {
            "title": "Match statistics",
            "type": "boolean",
            "description": "Field goal, three-point and free-throw splits with attempts, makes and percentage, rebounds, assists, turnovers, steals, blocks and fouls — 21 metrics, per match, per quarter and for overtime. Every row also carries a stable key and the values as numbers.",
            "default": true
          },
          "includeSummary": {
            "title": "Match summary and events",
            "type": "boolean",
            "description": "Venue, town, attendance, referees and the score quarter by quarter, including overtime periods.",
            "default": true
          },
          "includeLineups": {
            "title": "Lineups",
            "type": "boolean",
            "description": "Rosters with shirt numbers and player match ratings where the source publishes them, plus missing players (injured, suspended or rested, with the reason) for NBA games. Not every competition has lineups.",
            "default": false
          },
          "includePlayerStats": {
            "title": "Player box score",
            "type": "boolean",
            "description": "A stat line for every player on the floor: points, rebounds, assists, minutes, shooting splits and more, with player ids and profile links. Billed per player line.",
            "default": false
          },
          "includeH2H": {
            "title": "Head-to-head history",
            "type": "boolean",
            "description": "Past matches of both sides and their direct meetings, plus a form summary per side with home and away records. Billed per row, at most 30 rows a match: the default depth usually reaches 30; the rest is free.",
            "default": false
          },
          "maxH2HRecords": {
            "title": "Head-to-head: past matches per side",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "How many past matches to keep for each side; 0 keeps everything the source publishes, up to 50 per side. Billed per row, at most 30 a match. The row of the match itself is free and not counted.",
            "default": 10
          },
          "maxH2HMeetings": {
            "title": "Head-to-head: direct meetings",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "How many direct meetings to keep; 0 (the default) keeps all, up to about 75 per pair, which clubs of one league reach. Billed per row, at most 30 a match with the past matches.",
            "default": 0
          },
          "includeLive": {
            "title": "Live state",
            "type": "boolean",
            "description": "For matches in play: the running score, the match clock as Flashscore shows it (the time inside the period) and the period. One request for the whole run, not one per match. Finished matches carry live: null and are not billed for it.",
            "default": false
          },
          "includePointByPoint": {
            "title": "Point by point",
            "type": "boolean",
            "description": "The running score point by point, quarter by quarter: every scoring step with the score after it, which side scored and the lead after it. The quarter in play is not billed. One extra request per match.",
            "default": false
          },
          "resolveRounds": {
            "title": "Match round",
            "type": "boolean",
            "description": "Adds the round of each match (Final, Semi-finals, Round 6), read from the tournament page and its season feed: two or three requests per tournament in your run, not per match. Matches in play and competitions without rounds stay empty.",
            "default": false
          },
          "includeNews": {
            "title": "Match news",
            "type": "boolean",
            "description": "News articles linked to the match: title, source outlet, image and publication time. Published for notable matches; smaller fixtures often have none.",
            "default": false
          },
          "includeHighlights": {
            "title": "Video highlights",
            "type": "boolean",
            "description": "Links to official video highlights (YouTube and other providers) with preview images. Appear after the match has been played.",
            "default": false
          },
          "includeBroadcasts": {
            "title": "TV and streaming listings",
            "type": "boolean",
            "description": "Where to watch: the TV channels and streaming services the source lists for the match, by country, plus bookmaker live streams. Billed only when at least one TV channel is listed.",
            "default": false
          },
          "includeTableContext": {
            "title": "League table position",
            "type": "boolean",
            "description": "Position, points, played, wins, losses and last results of both teams in the competition's table on the day of the run, not as of the game; in the NBA the conference table. Play-offs have none. One request per competition in the run; free.",
            "default": false
          },
          "includeOdds": {
            "title": "Match-winner odds",
            "type": "boolean",
            "description": "Match-winner prices of every bookmaker in the chosen countries, opening and current, with the average and best price, margin, no-vig probabilities, an arbitrage check and line movement. Matches in play keep their last pre-match prices. One request per match and country.",
            "default": false
          },
          "oddsCountries": {
            "title": "Odds countries",
            "type": "array",
            "description": "Whose bookmakers to show: licences are national. This Actor starts with the US (New Jersey), about 5 books; Great Britain has about 20. Several countries merge into one record; one request per country per match.",
            "items": {
              "type": "string",
              "enum": [
                "GB",
                "US",
                "CA",
                "IT",
                "ES",
                "SE",
                "ZA",
                "MX",
                "DE",
                "FR",
                "AR",
                "UA",
                "PL",
                "CZ",
                "NG",
                "AU",
                "NL"
              ],
              "enumTitles": [
                "Great Britain",
                "United States (New Jersey)",
                "Canada (Ontario)",
                "Italy",
                "Spain",
                "Sweden",
                "South Africa",
                "Mexico",
                "Germany",
                "France",
                "Argentina",
                "Ukraine",
                "Poland",
                "Czech Republic",
                "Nigeria",
                "Australia",
                "Netherlands"
              ]
            },
            "default": [
              "US"
            ]
          },
          "onlyWithOdds": {
            "title": "Only matches with odds",
            "type": "boolean",
            "description": "Skip matches with no bookmaker prices: they are neither returned nor billed, and the run checks up to 4 times as many candidates as Max matches to fill the rest. Needs Match-winner odds.",
            "default": false
          },
          "oddsFormat": {
            "title": "Odds format",
            "enum": [
              "decimal",
              "american"
            ],
            "type": "string",
            "description": "American adds prices such as +150 and -110 next to the decimal match-winner prices (homeAmerican and so on), in-play prices included; the price list stays decimal.",
            "default": "decimal"
          },
          "includeOddsMarkets": {
            "title": "Totals and handicaps",
            "type": "boolean",
            "description": "Every Over/Under total and handicap (spread) line with the average price and the number of bookmakers behind each line. No extra requests; billed only when the match has such a line.",
            "default": false
          },
          "includeLiveOdds": {
            "title": "Live odds for matches in play",
            "type": "boolean",
            "description": "In-play match-winner prices of every bookmaker taking live bets, up to 10, with each one's first in-play price and whether the price is now above or below it, next to the closing pre-match ones. One request per country plus one per live bookmaker for each match in play; no separate charge.",
            "default": false
          },
          "includeOddsOffers": {
            "title": "Every bookmaker price (all markets)",
            "type": "boolean",
            "description": "A flat list of every price of every bookmaker: all markets and parts of the match, with the line, opening and current price and movement. NBA games in October 2026 carried 1 394 to 1 690 rows. Narrow it with the two filters below. No extra requests.",
            "default": false
          },
          "oddsOfferMarkets": {
            "title": "Price list: markets",
            "type": "array",
            "description": "Keep only these markets in the price list; leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "HOME_DRAW_AWAY",
                "HOME_AWAY",
                "OVER_UNDER",
                "ASIAN_HANDICAP",
                "EUROPEAN_HANDICAP",
                "DOUBLE_CHANCE",
                "DRAW_NO_BET",
                "CORRECT_SCORE",
                "HALF_FULL_TIME",
                "ODD_OR_EVEN",
                "BOTH_TEAMS_TO_SCORE",
                "TO_QUALIFY",
                "NEXT_GOAL",
                "TOP_POSITION_MERGED",
                "TO_WIN_AND_TOP_POSITION",
                "WIN_EACH_WAY"
              ],
              "enumTitles": [
                "Match winner with draw (1X2)",
                "Match winner, no draw",
                "Over/Under",
                "Asian handicap",
                "European handicap",
                "Double chance",
                "Draw no bet",
                "Correct score",
                "Half-time/Full-time",
                "Odd/Even",
                "Both teams to score",
                "To qualify",
                "Next goal",
                "Top position",
                "To win and top position",
                "Win each way"
              ]
            },
            "default": []
          },
          "oddsOfferScopes": {
            "title": "Price list: parts of the match",
            "type": "array",
            "description": "Keep only these parts of the match in the price list; leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "FULL_TIME_OVER_TIME",
                "FIRST_HALF",
                "SECOND_HALF",
                "FIRST_PERIOD",
                "FIRST_QUARTER",
                "FIRST_SET",
                "SECOND_SET"
              ],
              "enumTitles": [
                "Full time",
                "Full time including overtime",
                "1st half",
                "2nd half",
                "1st period",
                "1st quarter",
                "1st set",
                "2nd set"
              ]
            },
            "default": []
          },
          "leagueUrls": {
            "title": "League or season URLs",
            "type": "array",
            "description": "Flashscore league pages, such as https://www.flashscore.com/basketball/usa/nba-2024-2025/ for a past season, or the same address without the years for the current one. Archives go back decades. From date and To date still apply.",
            "items": {
              "type": "string"
            }
          },
          "teams": {
            "title": "Teams or players",
            "type": "array",
            "description": "Team or player names such as 'Lakers', or Flashscore team or player links or 8-character IDs, which skip the name search. Returns the full known schedule and recent results of each. From date and To date still apply.",
            "items": {
              "type": "string"
            }
          },
          "teamResultsPages": {
            "title": "Past results pages per team",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Used with Teams or players. One page is about 40 past matches.",
            "default": 2
          },
          "matchIds": {
            "title": "Match IDs or URLs",
            "type": "array",
            "description": "Exact matches on any date: 8-character Flashscore IDs like 'tW4rOkzg' or match links. Overrides Days, league URLs, teams and all filters; Max matches and dates still apply. Unknown IDs are never billed.",
            "items": {
              "type": "string"
            }
          },
          "dateFrom": {
            "title": "From date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "First day to include. On its own it replaces Days, within the source window of seven days back and seven ahead; with Competitions it also reaches dates outside the window through the season archive of the league. With league URLs, teams or match IDs it keeps only their matches from this date, so a month of a season costs one month. Leave empty for no lower limit."
          },
          "dateTo": {
            "title": "To date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Last day to include, inclusive. Works like From date. Leave empty for no upper limit."
          },
          "dayOffsets": {
            "title": "Day offsets (Custom only)",
            "type": "array",
            "description": "Read only when Days is Custom. Offsets from today: -1 yesterday, 0 today, 2 the day after tomorrow. Values outside -7 to +7 are dropped."
          },
          "timezone": {
            "title": "Time zone",
            "type": "string",
            "description": "Where one day ends for Days and dates: a time zone name, daylight saving applied, or an offset like +05:30. Empty means America/New_York, for the US game day."
          },
          "timezoneOffset": {
            "title": "Day boundary (UTC offset, older field)",
            "minimum": -11,
            "maximum": 14,
            "type": "integer",
            "description": "Older field, use Time zone instead. Whole hours from UTC without daylight saving; 0 or empty means this Actor's default. Ignored when Time zone is set."
          },
          "monitorMode": {
            "title": "Monitor mode (deltas only)",
            "type": "boolean",
            "description": "Output only matches that are new or changed since the previous run with the same monitor name: new fixtures, kickoff changes, score and status updates, line moves, final results. The first run outputs everything. Records carry changeType and monitorChangedFields.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the monitor's memory, a key-value store in your account; empty means default. Use a different name per saved task or schedule so watchlists do not mix, and never run two monitors with one name at once: turn on the schedule's option that skips a run while the previous one is going."
          },
          "monitorKey": {
            "title": "Monitor key (older name)",
            "type": "string",
            "description": "Older name of Monitor name, kept hidden so saved tasks keep their monitor memory; Monitor name wins when both are set."
          },
          "omitEmptyFields": {
            "title": "Compact output (drop empty fields)",
            "type": "boolean",
            "description": "Leave out null values, empty lists and empty objects at every level, so each record carries only the data it has. Off by default: records of runs with the same options then have the same fields, which suits CSV and spreadsheets.",
            "default": false
          },
          "outputDatasetName": {
            "title": "Also append to dataset",
            "type": "string",
            "description": "Name of a dataset this Actor creates on its first run and fills with the same records as the run's dataset: one history across scheduled runs. Named datasets are kept until you delete them and their storage is billed by Apify. Letters, digits and hyphens."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Datacenter proxies are enough; residential proxies are not required.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}