{
  "openapi": "3.0.1",
  "info": {
    "title": "TennisExplorer Scraper — ATP/WTA Results, Rankings, Players",
    "description": "Extract ATP, WTA, Challenger and ITF match results, upcoming schedules, player profiles and rankings from TennisExplorer, with derived match status and a pinned UTC day boundary.",
    "version": "0.1",
    "x-build-id": "ykIyD5lPGesqKErVU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/oswaldocarabano~tennisexplorer-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-oswaldocarabano-tennisexplorer-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/oswaldocarabano~tennisexplorer-scraper/runs": {
      "post": {
        "operationId": "runs-sync-oswaldocarabano-tennisexplorer-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/oswaldocarabano~tennisexplorer-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-oswaldocarabano-tennisexplorer-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": [
          "entityType"
        ],
        "properties": {
          "entityType": {
            "title": "What to scrape",
            "enum": [
              "results",
              "schedule",
              "players",
              "rankings"
            ],
            "type": "string",
            "description": "One entity type per run, so the dataset you download has one clean shape. Match results, upcoming matches, player profiles and rankings have genuinely different fields; run the Actor once per type if you need more than one.",
            "default": "results"
          },
          "dateFrom": {
            "title": "From date (UTC)",
            "type": "string",
            "description": "First day to collect, as YYYY-MM-DD. Days are cut at 00:00 UTC, always — the site's own day boundary moves with the visitor's timezone, and this Actor pins it so two runs of the same date return the same matches. History goes back to 1995. Accepts a date, or a relative one: today, yesterday, tomorrow, -7d, +3d. Leave empty for today."
          },
          "dateTo": {
            "title": "To date (UTC)",
            "type": "string",
            "description": "Last day to collect, as YYYY-MM-DD, inclusive. Accepts a date or a relative one (today, -1d). Leave empty to use the From date. One request covers one whole day and typically returns 150-600 matches."
          },
          "tours": {
            "title": "Tours",
            "uniqueItems": true,
            "type": "array",
            "description": "Which tours to include. Leave all selected to get everything in a single request per day, which is the cheapest option.",
            "items": {
              "type": "string",
              "enum": [
                "atp-single",
                "atp-double",
                "wta-single",
                "wta-double"
              ],
              "enumTitles": [
                "ATP singles",
                "ATP doubles",
                "WTA singles",
                "WTA doubles"
              ]
            },
            "default": [
              "atp-single",
              "atp-double",
              "wta-single",
              "wta-double"
            ]
          },
          "includeOdds": {
            "title": "Include betting odds",
            "type": "boolean",
            "description": "Home/Away odds shown in the results table. Off by default: odds are licensed from bookmakers and are the part of this site with the weakest reuse position. Match scores are facts; odds are not. Turn this on only if you have your own basis for using them.",
            "default": false
          },
          "includeMatchDetail": {
            "title": "Fetch match detail pages",
            "type": "boolean",
            "description": "Adds round, surface, full player names, both rankings and head-to-head, at the price of one extra request per match. A day of results is ~200-600 matches, so leave this off unless you need it.",
            "default": false
          },
          "rankingTour": {
            "title": "Ranking",
            "enum": [
              "atp-men",
              "wta-women"
            ],
            "type": "string",
            "description": "Which ranking table to read.",
            "default": "atp-men"
          },
          "rankingType": {
            "title": "Ranking type",
            "enum": [
              "singles",
              "doubles",
              "race"
            ],
            "type": "string",
            "description": "Singles, doubles, or the season race. Race tables only exist for the current season.",
            "default": "singles"
          },
          "rankingDate": {
            "title": "Ranking week",
            "type": "string",
            "description": "Historical ranking week as YYYY-MM-DD. Must be one of the publication dates the site offers; leave empty for the latest."
          },
          "playerUrls": {
            "title": "Player URLs",
            "type": "array",
            "description": "TennisExplorer player pages to read, for example https://www.tennisexplorer.com/player/fritz-f1aa7/. Leave empty to take the players from the ranking selected above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "playerMatchHistoryYears": {
            "title": "Years of match history per player",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "How many past seasons of match history to read per player. 0 reads the profile only. Each extra year is one extra request.",
            "default": 0
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on the number of results this run will deliver. You are only charged for results actually delivered. Raise it for bulk history runs — a full season is ~100,000 matches and the whole 1995-2026 archive is ~2.4 million.",
            "default": 10000
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Parallel requests. 8 is plenty for day-to-day use; raise it for large historical backfills. Requests are spread across a pool of sticky proxy sessions. Capped at 16 because that is the highest level actually measured against the site, and also capped to what fits in the memory you gave the run — a 512 MB run tops out around 10.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. This Actor already routes through its own residential proxy pool, so you do not need to configure anything — leave this empty and it just works. Set it only if you would rather use your own Apify proxy, or none at all."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}