{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenTable Review Scraper",
    "description": "Extract customer reviews from OpenTable restaurant listings for sentiment analysis, CX insights, or competitive tracking.",
    "version": "0.0",
    "x-build-id": "vb5Fjw5fgtQwa1d1b"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vertivine~opentable-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vertivine-opentable-review-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/vertivine~opentable-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-vertivine-opentable-review-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/vertivine~opentable-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-vertivine-opentable-review-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": [
          "proxyConfiguration"
        ],
        "properties": {
          "runMode": {
            "title": "Run mode",
            "enum": [
              "PRODUCTION",
              "DEVELOPMENT"
            ],
            "type": "string",
            "description": "This property indicates the scraper's mode of operation. In DEVELOPMENT mode, the scraper ignores page timeouts, doesn't use sessionPool, opens pages one by one and enables debugging via Chrome DevTools. PRODUCTION mode disables debugging and enables timeouts and concurrency.",
            "default": "PRODUCTION"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "OpenTable restaurant URLs to scrape reviews from. Example: https://www.opentable.com/r/restaurant-name",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "startDate": {
            "title": "Start Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Start of the date range for filtering reviews (inclusive). Format: YYYY-MM-DD. Leave empty to include all reviews from the beginning."
          },
          "endDate": {
            "title": "End Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "End of the date range for filtering reviews (inclusive). Format: YYYY-MM-DD. Leave empty to include all reviews up to today."
          },
          "keepUrlFragments": {
            "title": "URL #fragments identify unique pages",
            "type": "boolean",
            "description": "Indicates that URL fragments should be included when checking whether a URL has already been visited.",
            "default": false
          },
          "respectRobotsTxtFile": {
            "title": "Respect the robots.txt file",
            "type": "boolean",
            "description": "If enabled, the crawler will consult the robots.txt file for the target website before crawling each page.",
            "default": false
          },
          "linkSelector": {
            "title": "Link selector",
            "type": "string",
            "description": "A CSS selector for pagination links. Leave empty to only scrape the first page."
          },
          "globs": {
            "title": "Glob Patterns",
            "type": "array",
            "description": "Glob patterns to match links for pagination.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "glob"
              ],
              "properties": {
                "glob": {
                  "type": "string",
                  "title": "Glob of a web page"
                }
              }
            }
          },
          "pseudoUrls": {
            "title": "Pseudo-URLs",
            "type": "array",
            "description": "Pseudo-URLs for link matching.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "purl"
              ],
              "properties": {
                "purl": {
                  "type": "string",
                  "title": "Pseudo-URL of a web page"
                }
              }
            }
          },
          "excludes": {
            "title": "Exclude Glob Patterns",
            "type": "array",
            "description": "Glob patterns to exclude from crawling.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "glob"
              ],
              "properties": {
                "glob": {
                  "type": "string",
                  "title": "Glob of a web page"
                }
              }
            }
          },
          "pageFunction": {
            "title": "Page function",
            "type": "string",
            "description": "JavaScript function executed on each page. Not used in this scraper.",
            "default": "() => {}"
          },
          "injectJQuery": {
            "title": "Inject jQuery",
            "type": "boolean",
            "description": "If enabled, jQuery will be injected into each page.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy configuration for the scraper.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyRotation": {
            "title": "Proxy rotation",
            "enum": [
              "RECOMMENDED",
              "PER_REQUEST",
              "UNTIL_FAILURE"
            ],
            "type": "string",
            "description": "Strategy for proxy rotation.",
            "default": "RECOMMENDED"
          },
          "sessionPoolName": {
            "title": "Session pool name",
            "pattern": "[0-9A-z-]",
            "minLength": 3,
            "maxLength": 200,
            "type": "string",
            "description": "Name for the session pool to share sessions across runs."
          },
          "initialCookies": {
            "title": "Initial cookies",
            "type": "array",
            "description": "Initial cookies to set before loading pages.",
            "default": []
          },
          "useChrome": {
            "title": "Use Chrome",
            "type": "boolean",
            "description": "Use real Chrome instead of Chromium.",
            "default": false
          },
          "headless": {
            "title": "Run browsers in headless mode",
            "type": "boolean",
            "description": "Run browsers in headless mode for better performance.",
            "default": true
          },
          "ignoreSslErrors": {
            "title": "Ignore SSL errors",
            "type": "boolean",
            "description": "Ignore SSL/TLS certificate errors.",
            "default": false
          },
          "ignoreCorsAndCsp": {
            "title": "Ignore CORS and CSP",
            "type": "boolean",
            "description": "Ignore Content Security Policy and CORS settings.",
            "default": false
          },
          "downloadMedia": {
            "title": "Download media files",
            "type": "boolean",
            "description": "Download images, videos, and other media files.",
            "default": false
          },
          "downloadCss": {
            "title": "Download CSS files",
            "type": "boolean",
            "description": "Download CSS stylesheets.",
            "default": true
          },
          "maxRequestRetries": {
            "title": "Max page retries",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of retries per page on error.",
            "default": 3
          },
          "maxPagesPerCrawl": {
            "title": "Max pages per run",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of pages to crawl. Set to 0 for unlimited.",
            "default": 0
          },
          "maxResultsPerCrawl": {
            "title": "Max result records",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of review records to save. Set to 0 for unlimited.",
            "default": 0
          },
          "maxCrawlingDepth": {
            "title": "Max crawling depth",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum depth for following links.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages processed in parallel.",
            "default": 50
          },
          "pageLoadTimeoutSecs": {
            "title": "Page load timeout",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum time to wait for page load in seconds.",
            "default": 60
          },
          "pageFunctionTimeoutSecs": {
            "title": "Page function timeout",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum execution time for page function in seconds.",
            "default": 60
          },
          "waitUntil": {
            "title": "Navigation waits until",
            "type": "array",
            "description": "Events to wait for before considering page loaded.",
            "default": [
              "networkidle2"
            ]
          },
          "preNavigationHooks": {
            "title": "Pre-navigation hooks",
            "type": "string",
            "description": "Functions to run before navigation."
          },
          "postNavigationHooks": {
            "title": "Post-navigation hooks",
            "type": "string",
            "description": "Functions to run after navigation."
          },
          "breakpointLocation": {
            "title": "Insert breakpoint",
            "enum": [
              "NONE",
              "BEFORE_GOTO",
              "BEFORE_PAGE_FUNCTION",
              "AFTER_PAGE_FUNCTION"
            ],
            "type": "string",
            "description": "Location to insert debugging breakpoint in development mode.",
            "default": "NONE"
          },
          "closeCookieModals": {
            "title": "Dismiss cookie modals",
            "type": "boolean",
            "description": "Automatically dismiss cookie consent modals.",
            "default": true
          },
          "maxScrollHeightPixels": {
            "title": "Maximum scrolling distance in pixels",
            "type": "integer",
            "description": "Maximum distance to scroll to load content. Set to 0 to disable scrolling.",
            "default": 5000
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Enable debug logging.",
            "default": false
          },
          "browserLog": {
            "title": "Browser log",
            "type": "boolean",
            "description": "Include browser console messages in logs.",
            "default": false
          },
          "customData": {
            "title": "Custom data",
            "type": "object",
            "description": "Custom data passed to page function.",
            "default": {}
          },
          "datasetName": {
            "title": "Dataset name",
            "type": "string",
            "description": "Name of dataset for storing results."
          },
          "keyValueStoreName": {
            "title": "Key-value store name",
            "type": "string",
            "description": "Name of key-value store for records."
          },
          "requestQueueName": {
            "title": "Request queue name",
            "type": "string",
            "description": "Name of request queue for URLs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}