{
  "openapi": "3.0.1",
  "info": {
    "title": "Tennis Live Scores Scraper: ATP, WTA, Sets, Stats and Rankings",
    "description": "Scrape live tennis scores, fixtures, rankings and match stats across ATP, WTA, Challenger and ITF. Set-by-set scores, surface, seeds, serve stats and point-by-point server data. Works with Google Sheets, Zapier, or as an MCP tool for AI agents. No login needed. From $0.79 per 1,000 results.",
    "version": "0.4",
    "x-build-id": "1fXyhjbTIqlN8Nowy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~tennis-live-scores-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-tennis-live-scores-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/getascraper~tennis-live-scores-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-tennis-live-scores-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/getascraper~tennis-live-scores-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-tennis-live-scores-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",
        "properties": {
          "mode": {
            "title": "Scrape mode",
            "enum": [
              "live",
              "schedule",
              "matchDetail",
              "rankings",
              "search"
            ],
            "type": "string",
            "description": "What to scrape. 'Live' returns all in-play matches right now. 'Schedule' returns fixtures and results across a date range. 'Match detail' returns deep stats and an optional point-by-point breakdown for specific matches. 'Rankings' returns the current ATP or WTA singles ranking list. 'Search' looks up a player by name.",
            "default": "live"
          },
          "tourLevel": {
            "title": "Tour level filter",
            "enum": [
              "all",
              "atp",
              "wta",
              "challenger",
              "itf"
            ],
            "type": "string",
            "description": "Only keep matches from this tour. Applies to Live and Schedule modes.",
            "default": "all"
          },
          "statusFilter": {
            "title": "Status filter",
            "enum": [
              "all",
              "live",
              "scheduled",
              "finished"
            ],
            "type": "string",
            "description": "Only keep matches with this status. Applies to Live and Schedule modes.",
            "default": "all"
          },
          "includeOdds": {
            "title": "Include betting odds",
            "type": "boolean",
            "description": "Attach pre-match and in-play bookmaker odds to each match: the market, every selection with its price (fractional and decimal), and whether the price is drifting out or shortening. Works in Live, Schedule and Match detail modes. Off by default because it adds one request per match. Odds are omitted for matches with no open market, never guessed.",
            "default": false
          },
          "dateFrom": {
            "title": "Date from (Schedule mode)",
            "type": "string",
            "description": "First day to fetch fixtures and results for. Leave empty to use today (UTC). Only used in Schedule mode."
          },
          "dateTo": {
            "title": "Date to (Schedule mode)",
            "type": "string",
            "description": "Last day to fetch fixtures and results for (inclusive). Leave empty to use the same day as 'Date from'. Only used in Schedule mode."
          },
          "matches": {
            "title": "Matches (Match detail mode)",
            "type": "array",
            "description": "SofaScore match IDs (e.g. 12836554) or full match URLs to fetch deep detail for. Copy the numeric 'id' from a Live or Schedule mode run. Only used in Match detail mode.",
            "items": {
              "type": "string"
            }
          },
          "includeStatistics": {
            "title": "Include match statistics",
            "type": "boolean",
            "description": "Attach serve stats: aces, double faults, first/second serve percentage, break points, winners and more. Not available for every match.",
            "default": true
          },
          "includePointByPoint": {
            "title": "Include point-by-point",
            "type": "boolean",
            "description": "Attach a full set/game/point breakdown, including tiebreak points and who served each game. Costs one extra request per match.",
            "default": false
          },
          "rankingTour": {
            "title": "Ranking tour (Rankings mode)",
            "enum": [
              "atp",
              "wta"
            ],
            "type": "string",
            "description": "Which singles ranking list to fetch. Only used in Rankings mode.",
            "default": "atp"
          },
          "query": {
            "title": "Search query (Search mode)",
            "type": "string",
            "description": "Name of a player to look up. Only used in Search mode."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of records to push to the dataset. Use 0 for no limit. You are billed per record returned.",
            "default": 25
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The Actor starts on cheap datacenter proxies and switches to residential automatically when SofaScore refuses them, so the default works for most runs. Add your own proxy URLs only if you need a fixed exit.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}