{
  "openapi": "3.0.1",
  "info": {
    "title": "Skiresort.com Scraper: Ski Resort Directory & Comparison Data",
    "description": "Scrape Skiresort.com's ski resort directory: elevation, slope km, lift count, ski pass price, and rating for 530 US resorts plus Europe/worldwide. Filter by country, rating, elevation, slope, or lift count. Full-detail mode adds lift/ticket breakdowns and season date. $3.50/1,000 records.",
    "version": "0.1",
    "x-build-id": "TRbYnIoHjkVp3M0ax"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~skiresort-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-skiresort-com-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/getascraper~skiresort-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-skiresort-com-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/getascraper~skiresort-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-skiresort-com-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": {
          "listingUrls": {
            "title": "Listing URLs",
            "type": "array",
            "description": "Skiresort.com country or region directory pages to crawl, such as the USA or Europe listing. The scraper follows the site's own pagination (/page/2/, /page/3/, ...) automatically until it reaches Max Resorts, so you do not need to add each page yourself.",
            "default": [
              {
                "url": "https://www.skiresort.com/en/ski-resorts/usa/"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "resortUrls": {
            "title": "Direct Resort URLs (optional)",
            "type": "array",
            "description": "Specific Skiresort.com resort pages to scrape directly, without crawling a country listing first, such as https://www.skiresort.com/en/ski-resort/kitzski-kitzbuehel-kirchberg/. Use this when you already know which resorts you want instead of paging through a directory.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "countryFilter": {
            "title": "Country Filter (optional)",
            "type": "string",
            "description": "Only keep resorts whose parsed country matches this text, such as France or Switzerland (case-insensitive, partial match). Handy when crawling a broad directory like Europe but you only want one country's resorts, without needing that country's own listing URL. A resort with no parsed country is left out when this is set, since it cannot be checked either way."
          },
          "minRating": {
            "title": "Minimum Rating (optional)",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only keep resorts with a Skiresort.com test rating of at least this many stars out of 5, for example 4 keeps only 4- and 5-star resorts."
          },
          "minTopElevationM": {
            "title": "Minimum Top Elevation (optional)",
            "minimum": 0,
            "maximum": 6000,
            "type": "integer",
            "description": "Only keep resorts whose highest point reaches at least this many meters above sea level. Useful for filtering out lower-elevation resorts that are more exposed to unreliable snow."
          },
          "minSlopeTotalKm": {
            "title": "Minimum Total Slope Length (optional)",
            "minimum": 0,
            "maximum": 1000,
            "type": "number",
            "description": "Only keep resorts with at least this many kilometers of total marked slopes, the site's own combined total across all difficulty levels."
          },
          "minLiftCount": {
            "title": "Minimum Lift Count (optional)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Only keep resorts with at least this many lifts in total, combining gondolas, chairlifts, t-bars, and every other lift type the resort has."
          },
          "maxItems": {
            "title": "Max Resorts",
            "minimum": 1,
            "maximum": 530,
            "type": "integer",
            "description": "Maximum number of resorts to return in total, counting both the listing crawl and any Direct Resort URLs. Keep this low for a quick test run; raise it once you know the output looks right.",
            "default": 20
          },
          "fetchFullDetail": {
            "title": "Fetch Full Resort Detail Page",
            "type": "boolean",
            "description": "When enabled, also opens each resort's own detail page to add the slope breakdown by difficulty (easy, intermediate, difficult, ski routes, with percent of total), lift counts by type (gondola, chairlift, t-bar, people mover, cat-skiing, etc), day-ticket ski pass prices for adults, youth, and children, the season start date, and the full resort description. When disabled, only the summary fields already shown on the listing page are returned (name, region, rating, elevation range, total and by-color slope km, lift count, and skipass price). The season start date and any lift/slope status reflect the page's content at scrape time, not a live feed, since these can go stale outside the winter season.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Skiresort.com is fully server-rendered and returns HTTP 200 under both a normal browser user agent and the Googlebot user agent, with no anti-bot challenge observed, so Apify's cheaper datacenter proxy group is used by default. Residential proxy is not required for this target.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}