{
  "openapi": "3.0.1",
  "info": {
    "title": "Tabelog Japan Scraper - Restaurants, Ratings, Menus & Reviews",
    "description": "Scrape Tabelog (tabelog.com) restaurants in Japan by keyword, area or URL. Extract names, cuisines, ratings, reviews, lunch and dinner budgets, stations, addresses, GPS, phone numbers, hours, seating, photos, smoking policies, closed days and reservation availability.",
    "version": "0.1",
    "x-build-id": "gDbGWtFI36aggJFzO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~tabelog-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-tabelog-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/abotapi~tabelog-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-tabelog-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/abotapi~tabelog-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-tabelog-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search runs a keyword and area search. URL mode reads the Tabelog pages you paste.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Cuisine, dish or restaurant name, for example ramen, sushi or yakiniku. Leave empty to list every restaurant in the area.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Areas",
            "type": "array",
            "description": "Where to search, by plain name: a prefecture (Tokyo, Osaka, Kyoto, Hokkaido) or an area (Shibuya, Akihabara, Ginza, Shinjuku, Sapporo, Nagoya). Area codes (A1310) and paths (tokyo/A1310) also work, and \"all\" searches the whole country. A name that cannot be matched is reported in the log and skipped, never guessed. Every keyword is searched in every area.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "ranking",
              "rating",
              "reviews"
            ],
            "type": "string",
            "description": "Order of the results. Most reviews reads the first 10 list pages of each search (about 200 restaurants) and orders those by review count, because the site has no review-count order of its own.",
            "default": "ranking"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep only restaurants rated at least this value (Tabelog scores run roughly 2.5 to 4.5). 0 keeps everything.",
            "default": 0
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only restaurants with at least this many reviews. 0 keeps everything.",
            "default": 0
          },
          "smoking": {
            "title": "Smoking policy",
            "enum": [
              "any",
              "nonSmoking",
              "designatedArea",
              "allowed",
              "heatedTobaccoOnly"
            ],
            "type": "string",
            "description": "Narrow the search to one smoking policy.",
            "default": "any"
          },
          "reservableOnly": {
            "title": "Online reservation only",
            "type": "boolean",
            "description": "Keep only restaurants that take online reservations.",
            "default": false
          },
          "urls": {
            "title": "Tabelog links",
            "type": "array",
            "description": "Multi-URL mode. Paste any Tabelog link: a restaurant page (its review, menu, photo and map pages work too), a keyword search list, an area or prefecture page, a cuisine list, a station list or a ranking list. Links in any language version of the site are read in English. The filter fields above are ignored and pagination walks forward. Links that are not restaurant or list pages are skipped with a warning.",
            "default": [
              "https://tabelog.com/en/tokyo/A1310/A131002/13011452/",
              "https://tabelog.com/en/tokyo/rstLst/?sw=ramen",
              "https://tabelog.com/en/tokyo/A1303/",
              "https://tabelog.com/en/rstLst/ramen/",
              "https://tabelog.com/en/tokyo/A1310/A131002/13011452/dtlrvwlst/"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Add restaurant details",
            "type": "boolean",
            "description": "Open each restaurant page to add address, postal code, coordinates, phone number, business hours, payment methods, seats, transportation and facilities, plus the newest reviews (see Max reviews per restaurant). Billed as a separate detail event per restaurant. Restaurants pasted as links in URL mode are always read this way.",
            "default": false
          },
          "maxReviews": {
            "title": "Max reviews per restaurant",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many of the newest reviews to attach to each restaurant whose own page is read (Add restaurant details, or a restaurant link in URL mode). Default 20, 0 skips reviews. Each delivered review is billed as one review event.",
            "default": 20
          },
          "fullReviewText": {
            "title": "Full review text",
            "type": "boolean",
            "description": "Reviews carry the site's preview text, which is cut off on long reviews and marked textTruncated. Turn on to open each cut-off review for its complete text. Slower; no extra charge.",
            "default": false
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional page limit per search. Leave empty or 0 for no page limit (default). This does not cap the run: it defers to Max items, which is the one default cap."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "The one default cap: maximum number of restaurants to return across the whole run (default 20). 0 means unlimited. Max pages per search has no default limit and defers to this value.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy settings. The default Apify proxy works on every plan and reads this site reliably. Residential is recommended for the most reliable results on large or frequent runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Run ID (or dataset ID) of a previous run of this Actor. Restaurants already collected there are skipped, so this run returns only the delta. Leave empty for a normal run. For recurring daily or weekly monitoring of the same search, use Incremental changes below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. A restaurant is returned as UPDATED when a tracked field changes (rating, budget, closed days, genre, smoking policy, photos, details). Not compared: rank, page, review count, the reservation calendar and the newest-reviews list. The first run returns every matching restaurant as NEW; later runs return only NEW, UPDATED and REAPPEARED restaurants. State is kept separately for each search and filter setup; use State key to name or share a campaign.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search and filter settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged restaurants (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return restaurants that have not changed since the last run, marked UNCHANGED. These extra rows are billed like any other row.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired restaurants (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return restaurants seen in an earlier run but no longer found, marked EXPIRED. Only produced after a run that read every page to its end, not when Max items capped it or Resume was used. These extra rows are billed like any other row.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names whose changes alone should not make a restaurant UPDATED. Rank, page, review count, the reservation calendar and the newest-reviews list are already ignored by default.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}