{
  "openapi": "3.0.1",
  "info": {
    "title": "Vivino Scraper",
    "description": "[💰 $1.8 / 1K] Extract structured wine data from Vivino: name, winery, vintage, region, grape varieties, ratings, price, taste profile, food pairings, and optional user reviews. Search by keyword or paste wine URLs.",
    "version": "1.0",
    "x-build-id": "5oOXvM03KiJtAwyYV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~vivino-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-vivino-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/solidcode~vivino-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-vivino-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/solidcode~vivino-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-vivino-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": {
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Wine names or keywords to search on Vivino (e.g. 'Tignanello 2019', 'Barolo', or 'Penfolds Grange'). You can include the vintage year or leave it out. Each query runs independently. Leave empty if you only want to scrape specific URLs below.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Vivino URLs",
            "type": "array",
            "description": "Paste Vivino wine URLs directly (e.g. 'https://www.vivino.com/wineries/.../wines/...' or 'https://www.vivino.com/.../w/123456'). Each URL is fetched as a single wine.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of WINES to return across all queries and URLs. Set to 0 for unlimited (up to the site's own limits). Note: this caps wines only — if Include User Reviews is on, each wine can add up to 'Maximum Reviews per Wine' review rows on top of this number. Tip: start with 10-50 to test, then increase.",
            "default": 100
          },
          "vintageHandling": {
            "title": "Vintage Handling",
            "enum": [
              "auto",
              "name_and_vintage",
              "name_only"
            ],
            "type": "string",
            "description": "How to handle the vintage year when searching by name. 'Smart' detects a year in your query automatically. 'Match exact vintage' only returns the exact year you typed. 'Ignore vintage' returns the wine regardless of year (uses the latest or most-rated vintage).",
            "default": "auto"
          },
          "includeTasteProfile": {
            "title": "Include Taste Profile",
            "type": "boolean",
            "description": "Also collect the wine's taste profile: body, acidity, tannins, sweetness, fizziness, dominant flavor notes, and food pairings. On by default.",
            "default": true
          },
          "includeReviews": {
            "title": "Include User Reviews",
            "type": "boolean",
            "description": "Also collect user reviews for each wine. Off by default. When on, each review is returned as its own result, so the total result count grows with the number of reviews. Use the cap below to keep this predictable.",
            "default": false
          },
          "maxReviewsPerWine": {
            "title": "Maximum Reviews per Wine",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "When Include User Reviews is on, the maximum number of reviews to collect per wine (across all of its vintages). For example, 100 means at most 100 reviews for any single wine, no matter how many vintages it has. Each review is returned as its own result and counts toward your results. Ignored when reviews are off.",
            "default": 10
          },
          "countryCode": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "FR",
              "DE",
              "ES",
              "IT",
              "NL",
              "BE",
              "PT",
              "CH",
              "AT",
              "SE",
              "DK",
              "IE",
              "CA",
              "AU",
              "NZ",
              "JP",
              "HK",
              "SG",
              "BR",
              "MX",
              "ZA"
            ],
            "type": "string",
            "description": "Country market used for pricing and availability. Use the country your prices should reflect. Currency (below) always applies; country-level localization depends on regional availability and may fall back to the nearest market for some wines.",
            "default": "US"
          },
          "currencyCode": {
            "title": "Currency",
            "enum": [
              "USD",
              "GBP",
              "EUR",
              "CHF",
              "SEK",
              "DKK",
              "CAD",
              "AUD",
              "NZD",
              "JPY",
              "HKD",
              "SGD",
              "BRL",
              "MXN",
              "ZAR"
            ],
            "type": "string",
            "description": "Currency for wine prices (ISO 4217).",
            "default": "USD"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}