{
  "openapi": "3.0.1",
  "info": {
    "title": "Tennis Point-by-Point Scraper - Every Point, Stats, ATP & WTA",
    "description": "For tennis modellers and bettors: every point of each finished ATP, WTA and Challenger match (server, score, break, set and match points) plus match and set stats, one row per match. 3 of 3 matches matched Flashscore's page point for point. Pick days, players or events; monitor new ones.",
    "version": "0.1",
    "x-build-id": "ZH3bWxj6hJBdTqZM3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~tennis-point-by-point-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-tennis-point-by-point-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/neverempty~tennis-point-by-point-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-tennis-point-by-point-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/neverempty~tennis-point-by-point-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-tennis-point-by-point-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": {
          "days": {
            "title": "Days",
            "type": "array",
            "description": "Which days to read finished matches from: today, yesterday, a number of days from today (-7 to 0), or a date as YYYY-MM-DD. Flashscore's daily list covers the last 7 days; other days are refused before anything is requested. Empty = yesterday (in monitoring mode: yesterday and today; with match IDs: all of the last 7 days and today). All matches of every day asked for are read in one run.",
            "items": {
              "type": "string"
            }
          },
          "matchIds": {
            "title": "Match IDs or links (optional)",
            "type": "array",
            "description": "Only these matches. A Flashscore match ID (8 letters and digits, e.g. ILuYNkiU) or a flashscore.com match link (the ID is the mid= part or the part after /match/). The match must be in Flashscore's daily list of the days read (the last 7 days). Empty = every finished match of the days read that fits the filters below.",
            "items": {
              "type": "string"
            }
          },
          "players": {
            "title": "Only these players",
            "type": "array",
            "description": "Keep a match only if one of these appears in either side's name or name slug (case-insensitive, partial). Flashscore writes names as 'Sinner J.' and slugs as 'sinner-jannik', so sinner or jannik both work. Doubles partners are matched too.",
            "items": {
              "type": "string"
            }
          },
          "tournaments": {
            "title": "Only these tournaments",
            "type": "array",
            "description": "Keep a match only if the tournament header contains one of these (case-insensitive, partial). Example: us open, shanghai, qualification.",
            "items": {
              "type": "string"
            }
          },
          "tours": {
            "title": "Tours",
            "type": "array",
            "description": "Keep only these tours. Empty = all. Point-by-point is published for ATP, WTA and Challenger matches; for ITF matches only for some (9 of 16 finished on 2026-09-20). Individual Davis Cup rubbers are listed under ATP.",
            "items": {
              "type": "string",
              "enum": [
                "atp",
                "wta",
                "challenger-men",
                "challenger-women",
                "itf-men",
                "itf-women",
                "other"
              ],
              "enumTitles": [
                "ATP",
                "WTA",
                "Challenger Men",
                "Challenger Women (WTA 125)",
                "ITF Men",
                "ITF Women",
                "Other (anything Flashscore adds later)"
              ]
            },
            "default": []
          },
          "matchTypes": {
            "title": "Singles or doubles",
            "type": "array",
            "description": "Keep only these. Empty = both. Team ties as a whole (Davis Cup, Billie Jean King Cup) carry no point-by-point and are never returned; their individual rubbers are.",
            "items": {
              "type": "string",
              "enum": [
                "singles",
                "doubles"
              ],
              "enumTitles": [
                "Singles",
                "Doubles"
              ]
            },
            "default": []
          },
          "utcOffsetHours": {
            "title": "Time zone (hours from UTC)",
            "minimum": -12,
            "maximum": 14,
            "type": "integer",
            "description": "Where a day starts and ends, as on Flashscore when your browser is in that time zone. 0 = UTC. Example: -5 for New York in winter, 1 for Paris in winter, 9 for Tokyo. startTime is always in UTC.",
            "default": 0
          },
          "maxMatches": {
            "title": "Maximum matches to return",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many match rows to return. One row = one finished match with every point and the statistics table. You are charged only for the rows you receive. On Sunday 2026-09-20 Flashscore listed 126 finished ATP, WTA and Challenger matches. Not used in monitoring mode, which returns every newly finished match that fits your input.",
            "default": 25
          },
          "includeRound": {
            "title": "Add the round (Final, 1/16-finals...)",
            "type": "boolean",
            "description": "The round is not in Flashscore's feeds. On = one extra small request per returned match to read it from the match page (only the first 24 KB are requested). Off = faster, round is null.",
            "default": true
          },
          "monitoringMode": {
            "title": "Monitoring mode: return only newly finished matches",
            "type": "boolean",
            "description": "Off = return the finished matches that fit your input. On = remember which matches were already returned and, on later runs, return only matches that finished since. The first run returns every finished match that fits. Each finished match not returned before is a check with a small fee once Flashscore answers for it (then its row, if it has point-by-point); matches already returned, matches not finished yet and refused requests are not charged. Remembered per input, for 10 days.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget what was already returned",
            "type": "boolean",
            "description": "Clear the remembered matches for this input before this run, so every finished match counts as new again.",
            "default": false
          },
          "useProxy": {
            "title": "Use an Apify proxy if Flashscore refuses a request",
            "type": "boolean",
            "description": "The feeds answered from a plain Apify datacentre address when this Actor was built (2026-09-21). On = if Flashscore answers 401, 403, 429 or 503, the request is retried through a proxy. Off = retried directly, then reported in a free row.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}