{
  "openapi": "3.0.1",
  "info": {
    "title": "🍷Wine Searcher data scraper",
    "description": "price, ratings, critic score, and the full per-merchant offers table (merchant name, location, price, bottle size, verified status) for each wine.",
    "version": "0.3",
    "x-build-id": "faI5OgslxglBNUX9X"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mrdoe~wine-searcher-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mrdoe-wine-searcher-data-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/mrdoe~wine-searcher-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mrdoe-wine-searcher-data-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/mrdoe~wine-searcher-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mrdoe-wine-searcher-data-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "wine-searcher.com URLs to scrape directly - either listing/search pages (e.g. https://www.wine-searcher.com/find/opus+one) or specific vintage detail pages (e.g. https://www.wine-searcher.com/find/opus+one+napa+valley+county+north+coast+california+usa/2019). Listing pages have their wine links extracted and queued as detail pages automatically.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Plain wine search terms, e.g. \"opus one\" or \"chateau margaux 2015\" - each is turned into a wine-searcher.com search URL automatically. Alternative to pasting full startUrls.",
            "items": {
              "type": "string"
            }
          },
          "scrapeWholeSite": {
            "title": "Scrape whole site",
            "type": "boolean",
            "description": "If enabled, ignores startUrls/searchQueries as a fixed list and instead crawls outward from them (or from the site's region/producer index pages if none given), following every /find/ link discovered, until maxItems detail pages have been scraped or no more links remain. This can scrape a very large number of pages - use maxItems to bound it.",
            "default": false
          },
          "maxItems": {
            "title": "Max detail pages to scrape",
            "minimum": 1,
            "type": "integer",
            "description": "Stop once this many wine detail pages have been scraped.",
            "default": 3
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Number of pages processed in parallel. Each one runs a full real Chrome browser - verified live that going above 1-2 causes actual browser crashes under default memory, not just slowness. Raise this only alongside more memory in Run options.",
            "default": 1
          },
          "maxOffers": {
            "title": "Max offers per wine",
            "minimum": 0,
            "type": "integer",
            "description": "How many individual merchant offers (merchant, price, currency, availability) to include per wine. The default (1) costs nothing extra - it's already on the page fetched for the wine's other fields. Anything beyond what's on that first page (up to 50) triggers extra page loads by following the site's own offer pagination, so raise this only as high as you actually need - set it very high to effectively get every offer. 0 leaves offers out entirely.",
            "default": 1
          },
          "maxReviews": {
            "title": "Max reviews per wine",
            "minimum": 0,
            "type": "integer",
            "description": "How many individual critic reviews (critic name, score, tasted date, tasting note) to include per wine - free, no extra page loads. wine-searcher.com does not publish individual written user reviews on its public pages, only critic reviews. 0 leaves reviews out entirely.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "wine-searcher.com shows per-merchant offer prices in whatever currency it detects from the scraping session's location - a US exit is what makes prices come back in USD. Leave empty for the Actor's own default: a cheaper Apify Proxy exit on the first attempt at each page, escalating to a residential exit (blocked noticeably less often, but more expensive) only if that page gets blocked. Setting this yourself uses exactly what you set for every attempt, with no escalation."
          },
          "maxRuntimeSecs": {
            "title": "Max scraping time (seconds)",
            "minimum": 60,
            "maximum": 3000,
            "type": "integer",
            "description": "Stops scraping after this many seconds and returns the wines collected so far, so a blocked or slow run never keeps running until the platform timeout. Every page uses a fresh ~20-40s browser start, so keep this comfortably above (pages wanted) x 40s.",
            "default": 480
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}