{
  "openapi": "3.0.1",
  "info": {
    "title": "Rakuten Travel Hotel Rate Scraper",
    "description": "Captures Rakuten Travel (楽天トラベル) room x plan prices for every future check-in date at any Japanese hotel or ryokan — including the coupon-discounted price a guest actually sees, itemised per coupon, plus points, remaining rooms and sold-out dates.",
    "version": "0.1",
    "x-build-id": "9VSisU5FtyyyeYb4y"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cobocus~rakuten-travel-hotel-rate-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cobocus-rakuten-travel-hotel-rate-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/cobocus~rakuten-travel-hotel-rate-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cobocus-rakuten-travel-hotel-rate-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/cobocus~rakuten-travel-hotel-rate-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cobocus-rakuten-travel-hotel-rate-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": [
          "propertyUrls"
        ],
        "properties": {
          "propertyUrls": {
            "title": "Property URLs or hotel numbers",
            "type": "array",
            "description": "One or more Rakuten Travel properties. Any URL containing the hotel number works (https://hotel.travel.rakuten.co.jp/hotelinfo/plan/188779, https://travel.rakuten.co.jp/HOTEL/188779/188779.html), and a bare number like 188779 is accepted too.",
            "items": {
              "type": "string"
            }
          },
          "monthsAhead": {
            "title": "Months ahead",
            "minimum": 1,
            "maximum": 18,
            "type": "integer",
            "description": "Scan every day from today through this many months ahead. Ignored if both Start date and End date are set. Run this Actor daily to build a rolling 'today + N months' time series.",
            "default": 6
          },
          "startDate": {
            "title": "Start date (advanced)",
            "type": "string",
            "description": "Advanced: explicit range start, YYYY-MM-DD. Leave empty to start from today (recommended for daily monitoring). Dates before today are skipped — Rakuten Travel rejects them."
          },
          "endDate": {
            "title": "End date (advanced)",
            "type": "string",
            "description": "Advanced: explicit range end, YYYY-MM-DD, inclusive. Leave empty to use Start date + Months ahead."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of adult guests. Rakuten Travel prices a whole stay for this occupancy, so changing it changes every price.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Total children, mapped to Rakuten's 小学生 高学年 (upper-elementary) band. Use Child counts by age band below if you need a different mix.",
            "default": 0
          },
          "childCounts": {
            "title": "Child counts by age band (advanced)",
            "type": "object",
            "description": "Rakuten Travel's six child age-bands, which have different meal and bedding rules and therefore different prices. Keys: elementaryUpper (小学生 高学年), elementaryLower (小学生 低学年), preschoolMealAndBedding (幼児 食事・布団付), preschoolMealOnly (幼児 食事のみ), preschoolBeddingOnly (幼児 布団のみ), preschoolNeither (幼児 食事・布団不要). Overrides Children when any value is above zero."
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Number of rooms to price per booking.",
            "default": 1
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Nights per stay. 1 is the right choice for day-by-day rate monitoring; higher values price a multi-night stay starting on each scanned date.",
            "default": 1
          },
          "includeSoldOut": {
            "title": "Include sold-out dates",
            "type": "boolean",
            "description": "Keep a row for dates with nothing bookable. Recommended ON: knowing when a hotel sells out is itself valuable rate data.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency (advanced)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of page requests in flight at once, across all properties. Capped at 10 because each Rakuten listing page is a ~2 MB HTML document, and because a live production site should not be hit harder than that.",
            "default": 5
          },
          "runSummaryDatasetName": {
            "title": "Run summary dataset name",
            "type": "string",
            "description": "Optional. Name of a dataset to append this run's summary to, as a single row per run. Useful on a schedule: consecutive daily runs build one small table you can read at a glance to confirm each run collected every date and priced it with coupons, instead of aggregating tens of thousands of rate rows. Named datasets are retained indefinitely. The summary is always written to this run’s key-value store as OUTPUT regardless of this setting."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Enabled by default and effectively required when running on the Apify platform: Rakuten Travel sits behind Akamai Bot Manager and requests direct from datacenter IP ranges are liable to be blocked. Only disable this if you have confirmed your setup does not need it (e.g. a self-hosted run from a residential IP).",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}