{
  "openapi": "3.0.1",
  "info": {
    "title": "Japan Restaurants Scraper (Gurunavi)",
    "description": "Restaurants from r.gnavi.co.jp (Rakuten Gurunavi) by prefecture, area and genre — published business phone, address, budgets, hours, seats and facility info in a clean English schema. Unofficial; not affiliated with Gurunavi, Inc. No review content, no user data.",
    "version": "0.1",
    "x-build-id": "n97WaghT6bPYjrQ84"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jpopendata~japan-restaurants-gnavi/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jpopendata-japan-restaurants-gnavi",
        "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/jpopendata~japan-restaurants-gnavi/runs": {
      "post": {
        "operationId": "runs-sync-jpopendata-japan-restaurants-gnavi",
        "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/jpopendata~japan-restaurants-gnavi/run-sync": {
      "post": {
        "operationId": "run-sync-jpopendata-japan-restaurants-gnavi",
        "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": [
          "prefecture"
        ],
        "properties": {
          "prefecture": {
            "title": "Prefecture",
            "enum": [
              "Hokkaido",
              "Aomori",
              "Iwate",
              "Miyagi",
              "Akita",
              "Yamagata",
              "Fukushima",
              "Ibaraki",
              "Tochigi",
              "Gunma",
              "Saitama",
              "Chiba",
              "Tokyo",
              "Kanagawa",
              "Niigata",
              "Toyama",
              "Ishikawa",
              "Fukui",
              "Yamanashi",
              "Nagano",
              "Gifu",
              "Shizuoka",
              "Aichi",
              "Mie",
              "Shiga",
              "Kyoto",
              "Osaka",
              "Hyogo",
              "Nara",
              "Wakayama",
              "Tottori",
              "Shimane",
              "Okayama",
              "Hiroshima",
              "Yamaguchi",
              "Tokushima",
              "Kagawa",
              "Ehime",
              "Kochi",
              "Fukuoka",
              "Saga",
              "Nagasaki",
              "Kumamoto",
              "Oita",
              "Miyazaki",
              "Kagoshima",
              "Okinawa"
            ],
            "type": "string",
            "description": "REQUIRED. Choose one of the 47 prefectures by its English name (e.g. \"Tokyo\", \"Osaka\", \"Kyoto\"). Via API/CLI pass the English name exactly as listed (e.g. \"Tokyo\", not \"東京都\" / \"13\" / \"tokyo-to\" — the platform validates the list before the run starts and rejects anything else with the list of valid values). Cities are NOT prefectures: use \"Kanagawa\" for Yokohama, \"Aichi\" for Nagoya, \"Osaka\" for Osaka-shi. Gurunavi listings are prefecture-scoped; narrow further with area / genre.",
            "default": "Tokyo"
          },
          "area": {
            "title": "Area / neighbourhood",
            "type": "string",
            "description": "Optional. Leave EMPTY to scrape the whole prefecture (recommended for a first run). To narrow to a neighbourhood: (1) copy a Gurunavi area code from any r.gnavi.co.jp listing URL — e.g. \"areal2125\" from https://r.gnavi.co.jp/area/areal2125/rs/ (渋谷・原宿・青山); \"areal…\" = large area, \"aream…\" / \"areas…\" = medium / small area — this works for EVERY neighbourhood in Japan; or (2) for Tokyo use a built-in name: shinjuku, shibuya, ginza, ikebukuro, roppongi, ueno, asakusa, akihabara, ebisu, shinagawa, kichijoji, shinbashi, marunouchi, odaiba, kamata, tachikawa, machida … (Japanese 渋谷 / 新宿 also work). Do NOT put a city or prefecture name here (e.g. \"Osaka\", \"Yokohama\") — that is not an area and the run stops with an explanation."
          },
          "genre": {
            "title": "Genre",
            "enum": [
              "",
              "izakaya",
              "japanese",
              "sushi",
              "roastmeat",
              "western",
              "buffet",
              "curry",
              "chinese",
              "continental",
              "hotpots",
              "ethnic",
              "noodle",
              "beerandcuisine",
              "cafe",
              "entertainment",
              "casual",
              "others"
            ],
            "type": "string",
            "description": "Optional. Leave empty for all genres. One of the 17 Gurunavi genres (the slug used in listing URLs such as https://r.gnavi.co.jp/area/tokyo/izakaya/rs/). Common English words are mapped for API users: ramen → noodle, yakiniku / bbq → roastmeat, italian / french → western, bar → beerandcuisine, coffee / sweets → cafe, karaoke → entertainment, hotpot → hotpots, asian / thai / korean → ethnic; Japanese labels (居酒屋, 寿司, ラーメン …) are accepted too. Any other value stops the run immediately with the list of valid genres.",
            "default": ""
          },
          "detailFetch": {
            "title": "Fetch detail pages",
            "type": "boolean",
            "description": "Optional, default false. When true, each restaurant costs one extra upstream request and adds the published business info: street address with postal code, the shop's own published phone number, kana reading, business hours, closed days, total seats, smoking policy, private rooms, parking, accepted credit cards, amenities and coordinates. When false, the actor emits listing data only (name, genre, average budgets, access / nearest station, URL) — 30 records per request, fastest and cheapest.",
            "default": false
          },
          "maxItems": {
            "title": "Max records",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Optional, default 10. Stop after this many restaurant records (1..1000). Each listing page yields up to 30 records; with detailFetch each record also needs one detail request, so raise maxApiRequests accordingly (maxItems 60 with details ≈ 62 requests).",
            "default": 10
          },
          "maxApiRequests": {
            "title": "Max upstream requests",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Optional, default 15. Hard budget of HTTP requests to r.gnavi.co.jp for this run (1 per listing page of 30 restaurants + 1 per detail page). Requests are strictly serial with >= 1.2 s spacing. When the budget runs out the run still SUCCEEDS with the records collected so far and complete=false in RUN_SUMMARY (not an error).",
            "default": 15
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Apify proxy settings. Default: no proxy (direct connection works from Apify datacenter IPs as of 2026-09). Never used for rotation/evasion — a single serial session is kept per run. Set only if r.gnavi.co.jp starts refusing the runtime IP (HTTP 403)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}