{
  "openapi": "3.0.1",
  "info": {
    "title": "Tabelog Japan Restaurant Budget & Scores by Area",
    "description": "Pick a Tabelog area like Ginza and get one summary of the restaurants listed there. Returns how many restaurants are listed, then dinner and lunch budget bands, score median and range, top genres and stations from 60 sampled across the area. $0.02 per area, no results = no charge. Unofficial.",
    "version": "0.1",
    "x-build-id": "m6cKggTxMIO4aAf1i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jpmarketdata~tabelog-restaurant-market-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jpmarketdata-tabelog-restaurant-market-checker",
        "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/jpmarketdata~tabelog-restaurant-market-checker/runs": {
      "post": {
        "operationId": "runs-sync-jpmarketdata-tabelog-restaurant-market-checker",
        "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/jpmarketdata~tabelog-restaurant-market-checker/run-sync": {
      "post": {
        "operationId": "run-sync-jpmarketdata-tabelog-restaurant-market-checker",
        "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": [
          "areas"
        ],
        "properties": {
          "areas": {
            "title": "Tabelog areas",
            "maxItems": 10,
            "type": "array",
            "description": "One or more Tabelog areas as '<prefecture>/<large area>/<medium area>', e.g. 'tokyo/A1301/A130101' (Ginza), 'osaka/A2701/A270101' (Umeda). A full https://tabelog.com/... URL is accepted too and is normalised down to the area path. Each area is a separate billable unit ($0.02 each) and a separate set of requests 2 s apart, so keep runs short: at most 10 areas per run. Split a bigger job into several runs instead — a run that hits the time budget stops fetching further list pages and marks the affected areas 'truncatedForTimeLimit'. All three parts are required: 'tokyo/A1303' is rejected before any request. A medium-area code Tabelog does not know is not a 404 either — Tabelog answers with the area above it (measured 2026-08-18: 'tokyo/A9999/A999999' returns all of Tokyo) — so the run compares the page's breadcrumb trail with the area you asked for and fails that area instead of charging for it.",
            "default": [
              "tokyo/A1301/A130101"
            ],
            "items": {
              "type": "string"
            }
          },
          "genre": {
            "title": "Genre slug (optional)",
            "type": "string",
            "description": "Restrict the area to one Tabelog genre. The slug is a path segment: 'sushi', 'ramen', 'izakaya', 'yakitori', 'washoku', 'japanese', 'seafood', 'soba', 'unagi', 'okonomiyaki', 'monjya', 'yoshoku' and many more. Leave empty for all genres. The slug is passed through as given: an unknown slug does not 404 on Tabelog, it is silently dropped and the page answers with the whole area. Tabelog echoes the filters it applied back on the page, and an area whose genre is not among them fails instead of being billed."
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "rating",
              "most-viewed",
              "most-reserved",
              "standard"
            ],
            "type": "string",
            "description": "Which order Tabelog returns the area in. Only the orders the pages really honour are offered. 'rating' (SrtT=rt) is the default because it is deterministic, not ad-weighted, and returns exactly the same list as Tabelog's Japanese site — verified 2026-08-05 on pages 1, 10 and 60: identical restaurant ids and identical scores. 'most-viewed' and 'most-reserved' are Tabelog's own visitor rankings. 'standard' sends no sort at all, which is Tabelog's editorial 'recommended for visitors' order: ad/PR weighted and different in every language edition, so it is offered but never the default. Newest-first (新着順) is deliberately NOT offered — the pages this Actor reads ignore that parameter and answer with the editorial order instead, so a sample labelled 'newest' would not actually be in that order.",
            "default": "rating"
          },
          "pagesPerArea": {
            "title": "List pages per area",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many list pages to sample per area. Tabelog serves 20 restaurants per page, so 3 pages = up to 60 restaurants. The pages are spread across the whole result set rather than taken from the top: the sort is monotonic in score, so the first pages hold the highest-rated restaurants and their budget/score spread is not the area's. 3 pages of a 2,666-restaurant area are pages 1, 31 and 60, and the summary reports exactly which pages it used in 'sampledPages'. More pages mean a finer distribution but a longer run (one request per page, 2 s apart). If the run's time budget is reached the remaining pages are skipped, the area summary keeps what was already collected and is marked 'truncatedForTimeLimit' with a smaller 'pagesFetched'. Tabelog stops enumerating a result set at page 60 / 1,200 restaurants whatever the hit count says (measured 2026-08-05), reported as 'enumerablePages'.",
            "default": 3
          },
          "includeIndividualItems": {
            "title": "Include individual restaurants",
            "type": "boolean",
            "description": "Off by default: a run costs a flat $0.02 per area summary. Enable to also get one record per sampled restaurant (name, URL, Tabelog ID, score, review count, nearest station, distance, genres, dinner and lunch budget band) at +$0.002 per restaurant. Business facts only — no review text and no reviewer names are ever collected.",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch restaurant detail pages",
            "type": "boolean",
            "description": "Off by default. Enable to also fetch the detail page of the first N sampled restaurants and add address, postal code, phone, latitude/longitude, price range, cuisine, seats, opening hours, reservation policy and transport — the fields a lead list needs. +$0.002 per detail record, and one extra request (2 s) per restaurant.",
            "default": false
          },
          "maxDetails": {
            "title": "Max detail pages per area",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many detail pages to fetch per area when 'Fetch restaurant detail pages' is on. Each one is an extra request 2 s apart, so this is the main driver of run time. If the run's time budget is reached the remaining detail pages are skipped and the area summary is marked 'truncatedForTimeLimit'.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}