{
  "openapi": "3.0.1",
  "info": {
    "title": "Baseball Savant Statcast Scraper: MLB Exit Velo & xStats",
    "description": "Scrape MLB Statcast leaderboards: exit velocity, launch angle, barrels, hard-hit rate, sweet-spot %, and expected stats (xBA, xSLG, xwOBA). Filter by season, team, batter or pitcher. Optional AI scouting insight. Export to JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "iLkDJgg5fw928vKcC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~baseball-savant-statcast-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-baseball-savant-statcast-scraper",
        "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/scrapers_lat~baseball-savant-statcast-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-baseball-savant-statcast-scraper",
        "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/scrapers_lat~baseball-savant-statcast-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-baseball-savant-statcast-scraper",
        "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",
        "required": [
          "leaderboard"
        ],
        "properties": {
          "leaderboard": {
            "title": "Leaderboard",
            "enum": [
              "statcast",
              "expected_statistics"
            ],
            "type": "string",
            "description": "Which Baseball Savant leaderboard to pull. 'statcast' = advanced batted-ball metrics (exit velocity, launch angle, barrels, hard-hit %). 'expected_statistics' = expected stats (xBA, xSLG, xwOBA vs actual).",
            "default": "statcast"
          },
          "playerType": {
            "title": "Player Type",
            "enum": [
              "batter",
              "pitcher"
            ],
            "type": "string",
            "description": "Pull the batter or the pitcher version of the leaderboard.",
            "default": "batter"
          },
          "year": {
            "title": "Season (year)",
            "minimum": 2015,
            "maximum": 2026,
            "type": "integer",
            "description": "MLB season to pull, for example 2025. Statcast data is available from 2015 onward."
          },
          "team": {
            "title": "Team",
            "type": "string",
            "description": "Optional. Three-letter team abbreviation to filter by, for example NYY, LAD or BOS. Leave empty for all teams."
          },
          "minBattedBallEvents": {
            "title": "Minimum (qualifier)",
            "type": "string",
            "description": "Minimum threshold to qualify. Use 'q' for the qualified players only (default), or a number for a minimum count of batted-ball events / plate appearances.",
            "default": "q"
          },
          "playerName": {
            "title": "Player Name Filter",
            "type": "string",
            "description": "Optional. Keep only players whose name contains this text (case-insensitive), for example 'judge' or 'ohtani'."
          },
          "includeExpectedStats": {
            "title": "Merge expected stats (paid add-on)",
            "type": "boolean",
            "description": "Opt-in paid add-on (statcast leaderboard only). Merges each player's expected stats (xBA, xSLG, xwOBA and their gap vs actual) onto the row. Billed once per run when merged. Disabled for free Apify plans.",
            "default": false
          },
          "withAiSummary": {
            "title": "Add AI scouting summary (paid add-on)",
            "type": "boolean",
            "description": "Opt-in paid AI add-on. For each player, writes a scouting insight (power profile, contact quality, over/underperformance vs expected stats and a short summary). Billed per player only when a usable summary is produced. Disabled for free Apify plans.",
            "default": false
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of players to collect. Free Apify plans are capped at 10 per run."
          },
          "leaderboardPath": {
            "title": "Custom leaderboard path (advanced)",
            "type": "string",
            "description": "Power users: a raw Baseball Savant leaderboard path such as 'statcast' or 'expected_statistics'. Overrides the leaderboard selector above when set."
          },
          "extraQuery": {
            "title": "Extra query parameters (advanced)",
            "type": "string",
            "description": "Power users: extra URL query parameters appended to the leaderboard request, for example 'position=OF&batSide=R'. Do not include the csv parameter."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}