# Tabelog Japan Restaurant Market Stats — Budget & Score by Area (`jpmarketdata/tabelog-restaurant-market-checker`) Actor

Restaurant-market stats for any Tabelog area in one call: how many restaurants, the dinner and lunch budget bands, the score and review-count spread, the genre and nearest-station mix. Review text is never collected. 食べログのエリア相場を1コールで。日本最大的餐厅点评网站的商圈行情，一次调用返回预算区间与评分分布。

- **URL**: https://apify.com/jpmarketdata/tabelog-restaurant-market-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 area analyzeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Tabelog Japan Restaurant Market Stats — Budget & Score by Area

**What does the restaurant market of this Japanese neighbourhood actually look like?** One call per area answers it: how many restaurants Tabelog lists there, what people pay for dinner and for lunch, how the Tabelog scores are spread, which genres dominate and which stations they cluster around.

This Actor reads [Tabelog](https://tabelog.com/) (食べログ — Japan's largest restaurant review site, ~900,000 listed restaurants) and returns **one compact market record per area**, not a raw dump you have to aggregate yourself.

- **`dinnerBudgetBands` / `lunchBudgetBands`** — the real price structure of the area as Tabelog's own budget bands (`～￥999` … `￥30,000～`), ordered by price with a count each, plus the **median band** (an ordinal median — averaging two band labels would be meaningless) and yen statistics for the band bounds
- **`tabelogScore` + `scoredShare`** — min / p25 / median / p75 / max / average of the scores **and the share of restaurants that actually carry one**. Many Tabelog restaurants are unrated, and a score distribution that silently drops them is a lie
- **`reviewCount` + `reviewCountKnown`** — how much attention the area gets (a **count** only; see below), and how many of the sampled restaurants that statistic is actually computed on
- **`genreTop` / `stationTop` / `distanceMeters` + `distanceMetersKnown`** — the genre mix, the nearest-station mix, and how far restaurants sit from a station over the restaurants whose cassette states a distance
- **Every statistic states its own denominator.** `scoredShare`, `reviewCountKnown` and `distanceMetersKnown` sit next to the statistic they belong to, against `sampledRestaurants` — no number in the record is silently computed over "whatever happened to parse"
- Optionally every sampled restaurant, and optionally **detail-page enrichment** (address, postal code, phone, latitude/longitude, price range, cuisine, seats, opening hours, reservation policy, transport) for lead generation

**Review text is never collected.** No review bodies, no reviewer names, no reviewer page links, no review photos — this Actor returns business facts about restaurants only. Review *counts* (a number) are included.

No login, no API key, nothing stored between runs. HTTP only, no browser, 256 MB.

### Input

| Field | Example | Notes |
|---|---|---|
| `areas` | `["tokyo/A1301/A130101"]` | Area path `<prefecture>/<large area>/<medium area>`. A full `https://tabelog.com/...` URL works too and is normalised down to the area path. **1–10 areas per run** — each area is a separate billable unit ($0.02 each) and its own set of requests 2 s apart, so keeping runs short is what keeps them inside the 300 s timeout. Split a bigger job into several runs |
| `genre` | `"sushi"` | Optional genre slug, used as a path segment: `sushi`, `ramen`, `izakaya`, `yakitori`, `washoku`, `japanese`, `seafood`, `soba`, `unagi`, `okonomiyaki`, `monjya`, `yoshoku`, … Empty = all genres |
| `sort` | `"newest"` | `newest` (新着順) / `rating` (点数の高い順) / `standard`. See the note below on why `standard` is not the default |
| `pagesPerArea` | `3` | 20 restaurants per page, 1–10 pages. 3 pages = up to 60 restaurants |
| `includeIndividualItems` | `false` | Off by default. Enable to also get one record per sampled restaurant (+$0.002 each) |
| `fetchDetails` | `false` | Off by default. Enable to fetch detail pages and add address / phone / lat-lng / seats / hours (+$0.002 each) |
| `maxDetails` | `10` | How many detail pages per area (1–20). One extra request, 2 s apart, per restaurant |

**Finding an area code:** open the area on Tabelog and copy the URL — `https://tabelog.com/tokyo/A1301/A130101/rstLst/` is Ginza; `A1304` Shinjuku, `A1303` Shibuya, `A1307` Roppongi, `osaka/A2701/A270101` Umeda. Pasting the whole URL into `areas` works.

### Output

One `type: "area_summary"` record per area:

```json
{
  "type": "area_summary",
  "area": "tokyo/A1301/A130101",
  "areaUrl": "https://tabelog.com/tokyo/A1301/A130101/rstLst/?SrtT=nod",
  "genre": null,
  "sort": "newest",
  "totalRestaurantsFound": 2671,
  "sampledRestaurants": 60,
  "pagesFetched": 3,
  "tabelogScore": {"min": 3.0, "p25": 3.06, "median": 3.14, "p75": 3.3, "max": 3.62, "average": 3.19},
  "scoredShare": 0.6167,
  "reviewCount": {"min": 1, "p25": 4, "median": 12, "p75": 48, "max": 1204, "average": 61},
  "reviewCountKnown": 37,
  "dinnerBudgetBands": [{"band": "～￥999", "count": 2}, {"band": "￥6,000～￥7,999", "count": 14}, {"band": "￥15,000～￥19,999", "count": 9}],
  "dinnerBudgetMedianBand": "￥6,000～￥7,999",
  "dinnerBudgetP25Band": "￥4,000～￥4,999",
  "dinnerBudgetP75Band": "￥15,000～￥19,999",
  "dinnerBudgetLowerJpy": {"min": 6000, "p25": 6000, "median": 8000, "p75": 15000, "max": 30000, "average": 11200},
  "dinnerBudgetUpperJpy": {"min": 999, "p25": 7999, "median": 9999, "p75": 19999, "max": 29999, "average": 12480},
  "lunchBudgetBands": [{"band": "～￥999", "count": 11}, {"band": "￥1,000～￥1,999", "count": 20}],
  "lunchBudgetMedianBand": "￥1,000～￥1,999",
  "genreTop": [["寿司", 12], ["日本料理", 9], ["居酒屋", 7]],
  "stationTop": [["銀座一丁目駅", 21], ["東銀座駅", 14]],
  "distanceMeters": {"min": 32, "p25": 120, "median": 210, "p75": 380, "max": 1200, "average": 268},
  "distanceMetersKnown": 58,
  "detailsFetched": 0,
  "checkedAt": "2026-07-27T09:00:00+00:00",
  "sourceUrl": "https://tabelog.com/tokyo/A1301/A130101/rstLst/?SrtT=nod"
}
````

**Reading the statistics — every one of them states its denominator.** `sampledRestaurants` is the whole sample; the three fields next to it say how much of that sample each distribution actually covers, because Tabelog leaves these fields blank on many cassettes:

| Field | Denominator for | Means |
|---|---|---|
| `scoredShare` | `tabelogScore` | Share (0–1) of the sampled restaurants that carry a Tabelog score at all — the rest render 「-」 |
| `reviewCountKnown` | `reviewCount` | **Count** of sampled restaurants whose cassette states a review count |
| `distanceMetersKnown` | `distanceMeters` | **Count** of sampled restaurants whose cassette states a walking distance from a station |

So `reviewCount.median` with `reviewCountKnown: 37` and `sampledRestaurants: 60` is the median over 37 restaurants, not 60. `pagesFetched` plays the same role for `sampledRestaurants` itself, and a run cut short by the time budget also carries `truncatedForTimeLimit: true`.

With `includeIndividualItems: true`, one `type: "restaurant"` record per sampled restaurant:

```json
{
  "type": "restaurant",
  "area": "tokyo/A1301/A130101",
  "tabelogId": "13108000",
  "name": "おたる政寿司 銀座",
  "url": "https://tabelog.com/tokyo/A1301/A130101/13108000/",
  "score": 3.47,
  "reviewCount": 596,
  "station": "銀座一丁目駅",
  "distanceMeters": 62,
  "genres": ["寿司", "日本料理", "海鮮"],
  "dinnerBudgetBand": "￥15,000～￥19,999",
  "lunchBudgetBand": "￥4,000～￥4,999"
}
```

With `fetchDetails: true`, one `type: "restaurant_detail"` record for the first `maxDetails` restaurants — the same fields plus `address`, `postalCode`, `addressRegion`, `addressLocality`, `streetAddress`, `telephone`, `latitude`, `longitude`, `priceRange`, `servesCuisine`, `seats`, `openingHours`, `reservationPolicy`, `transport`.

### Pricing — from $0.02 per area, no subscription

| Event | Price | When |
|---|---|---|
| Area market summary (`area-analyzed`) | **$0.02** | Per area analyzed |
| Individual restaurant (`restaurant-scraped`) | **$0.002** | Only if you enable **Include individual restaurants** |
| Restaurant detail record (`restaurant-detail-scraped`) | **$0.002** | Only if you enable **Fetch restaurant detail pages** |

**Individual restaurant records and detail records are OFF by default**, so a default run (1 area, 3 pages, summary only) costs a flat **$0.02** and takes about 6 seconds. **An area that returns zero restaurants is never charged** — it fails the area instead, so you never pay for a typo in an area path or genre slug.

### Notes & limits

- **Review text is never collected.** Review bodies, reviewer names, reviewer page links and review photos are never parsed, stored or emitted. Every field is read out of the one element that carries its own class token, so review text cannot leak into a record even by accident. Review **counts** (a number) are included
- **`sort: "standard"` is Tabelog's own recommended order and is ad/PR weighted.** That is why `newest` (新着順) is the default here — the same trap as SUUMO's おすすめ順. Use `standard` only if you deliberately want the promoted ordering, and read every statistic produced from it as "the promoted end of this market". Every record states the `sort` it was produced with
- **The sample is a sample.** `totalRestaurantsFound` is the whole area; `sampledRestaurants` is what the statistics are computed on (`pagesPerArea` × 20). Raise `pagesPerArea` for a more representative distribution
- **Tabelog caps a result set at 100 pages / 2,000 restaurants** — page 101 returns HTTP 400. Areas larger than that (Ginza alone has ~2,700) must be sliced with `genre` to be enumerated exhaustively
- **`scoredShare`, `reviewCountKnown` and `distanceMetersKnown` matter.** A large share of Tabelog restaurants have no score, no review count or no station distance at all. `tabelogScore` covers only the scored ones, `reviewCount` only the ones with a count and `distanceMeters` only the ones with a distance — and each of the three says exactly how many that was, against `sampledRestaurants`
- **A list page is 20 cassettes, and some of them are ads.** PR/ad cassettes carry no restaurant link, so a full page can yield 19 records. The page loop counts cassettes, not records, when it decides whether it has reached the end of the area — otherwise a single ad on page 1 would end the run one page in
- The hit count is live and drifts by a few between requests, so `totalRestaurantsFound` is a snapshot, not a stable key
- **An unknown `genre` slug does not 404 on Tabelog** — it returns a different page. The slug is passed through as given and an area that comes back with zero restaurants **fails** rather than returning a summary for the wrong query
- Read-only and throttled (1 request / 2.0 s). A run has a 95-second soft budget and `areas` is capped at 10, which is what keeps a worst case inside the Actor's 300-second timeout. **Page 1 of every area always runs**, so every area produces a record; the follow-up list pages and the detail-page enrichment are what get skipped once the budget is spent, and the affected summary keeps what it collected and carries `truncatedForTimeLimit: true` with a smaller `pagesFetched`
- If **every** area fails, the run fails — never a silent empty success
- **No personal data.** Restaurant business information only: name, address, phone, coordinates, seats, hours. No reviewers, no customers

### Use cases

- **B2B lead lists for the restaurant industry** — POS, reservation SaaS, food wholesale, payments: pull an area, filter by budget band and genre, enrich the top N with address and phone
- **Site selection & competitive density** — how many sushi restaurants are within 300 m of this station, and at what price point
- **Price positioning** — what dinner budget band the neighbourhood actually sits in before you set your own menu prices
- **Market monitoring** — schedule the Actor per area and track the median band, the score distribution and the restaurant count over time
- **Inbound-tourism and delivery planning** — genre mix and budget mix per station area

***

### 日本語ガイド

**食べログのエリア相場を、エリア1件につき1レコードで返す Actor です。**

- **概要**: エリア(`<都道府県>/<大エリア>/<小エリア>`、例 `tokyo/A1301/A130101` = 銀座)を指定すると、そのエリアの**掲載店舗数・夜/昼の予算帯分布・食べログ点数の分布・口コミ件数の分布・ジャンル構成・最寄駅構成・駅からの距離**を1レコードで返します。予算帯は食べログの帯(`～￥999`〜`￥30,000～`)をそのまま安い順に並べ、**中央値の帯**(帯は順序尺度なので平均ではなく順位の中央値)と帯の上限/下限の円建て統計を併せて返します。
- **点数の扱い**: 食べログは**点数の付いていない店が多数**あります。`tabelogScore` は点数のある店だけの分布で、`scoredShare` がその割合です(点数無しの店を黙って落とした分布は嘘になるため必ず併記します)。同様に **`reviewCount` には `reviewCountKnown`、`distanceMeters` には `distanceMetersKnown`**(いずれも「その統計に実際に寄与した店舗数」)を必ず併記します。分母は `sampledRestaurants` です。
- **使い方**: `areas` にエリアパスを入れます。食べログの URL をそのまま貼っても構いません(自動で正規化します)。`genre` でジャンルを絞れます(`sushi` / `ramen` / `izakaya` など、URL のパスセグメントと同じスラッグ)。個別店舗のレコードが必要なときだけ `includeIndividualItems`、住所・電話・緯度経度・席数・営業時間まで必要なときだけ `fetchDetails` を ON にします。
- **料金**: エリアサマリー1件 **$0.02**、個別店舗レコード **$0.002/件**、詳細レコード **$0.002/件**。**個別レコードと詳細取得は既定 OFF** なので既定実行は $0.02 固定です。**0件のエリアには課金されません**(そのエリアは失敗として扱います)。
- **並び順の注意**: `standard` は食べログの「標準」= **予約・PR店舗優先の広告加重順**です。SUUMO のおすすめ順と同型の罠のため既定にはせず、**既定は新着順(`newest` = `SrtT=nod`)** です。どの並び順で取得したかは全レコードの `sort` に必ず記録されます。
- **口コミ本文は一切取得しません。** 口コミ本文・投稿者名・投稿者ページへのリンク・口コミ写真は、パースも保存も出力もしません。取得するのは店舗の事業所情報のみで、口コミは**件数(数値)だけ**を扱います。
- **上限**: 1ページ20件・**最大100ページ(2,000件)**が食べログ側の硬い上限です(101ページ目は HTTP 400)。銀座だけで約2,700件あるため、全件を数え上げたい場合は `genre` で分割してください。リクエスト間隔は 2.0 秒固定です。**`areas` は1回の実行につき最大10件**(1件ごとに課金・リクエストが増えるため)。実行時間の上限に達した場合は、以降のリストページ取得を打ち切り、取得済みの分でサマリーを返して `truncatedForTimeLimit: true` と実際の `pagesFetched` を記録します(各エリアの1ページ目は必ず取得します)。

***

### 中文指南

**日本最大的餐厅点评网站「食べログ(Tabelog)」的商圈行情，一次调用返回一条汇总记录。**

- **功能**: 指定商圈(`<都道府県>/<大区>/<小区>`，例如 `tokyo/A1301/A130101` = 银座)，即可获得该商圈的**餐厅总数、晚餐/午餐预算区间分布、Tabelog 评分分布、点评数量分布、菜系构成、最近车站构成与步行距离**。预算区间按食べログ原始档位(`～￥999` 至 `￥30,000～`)由低到高排列，并给出**中位数档位**(档位是序数，因此取排名中位数而非平均值)与档位上下限的日元统计。
- **评分说明**: 食べログ上有**大量餐厅没有评分**。`tabelogScore` 仅统计有评分的餐厅，`scoredShare` 表示其占比 —— 悄悄丢弃无评分餐厅的分布是不诚实的。同理，`reviewCount` 配 **`reviewCountKnown`**、`distanceMeters` 配 **`distanceMetersKnown`**(均为实际参与该统计的餐厅数量)，分母为 `sampledRestaurants`，让每项统计都有明确的覆盖范围。
- **用法**: 在 `areas` 中填入商圈路径，直接粘贴完整的食べログ网址也可以(会自动规范化)。用 `genre` 限定菜系(`sushi` / `ramen` / `izakaya` 等，与网址中的路径段一致)。需要单店记录时开启 `includeIndividualItems`；需要地址、电话、经纬度、座位数、营业时间时开启 `fetchDetails`。
- **价格**: 商圈汇总每条 **$0.02**，单店记录每条 **$0.002**，详情记录每条 **$0.002**。**单店记录与详情抓取默认关闭**，因此默认运行固定为 $0.02。**零结果的商圈不收费**(该商圈会被判定为失败)。
- **排序提醒**: `standard` 是食べログ自家的「标准」排序，**带广告/推广加权**，因此本 Actor 默认使用**最新开业顺序(`newest` = `SrtT=nod`)**。每条记录都会记录实际使用的 `sort`。
- **绝不采集点评正文。** 点评正文、点评人昵称、点评人主页链接与点评照片一律不解析、不存储、不输出，只采集餐厅的经营信息；点评仅使用**数量(数字)**。
- **上限**: 每页 20 家，\*\*最多 100 页(2,000 家)\*\*为网站硬上限(第 101 页返回 HTTP 400)。仅银座就约有 2,700 家，需要穷举时请用 `genre` 拆分。请求间隔固定 2.0 秒。**每次运行最多 10 个 `areas`**(每个商圈单独计费、单独发起请求)。达到运行时间预算后将停止抓取后续列表页，用已获取的数据生成汇总并标记 `truncatedForTimeLimit: true`(`pagesFetched` 如实记录)；每个商圈的第 1 页始终会抓取。

# Actor input Schema

## `areas` (type: `array`):

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'.

## `genre` (type: `string`):

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, so an area that comes back with zero restaurants fails instead of being billed.

## `sort` (type: `string`):

Which order Tabelog returns the area in. 'newest' (新着順) is the default and is the neutral one. 'rating' (点数の高い順) puts the highest-scoring restaurants first. 'standard' is Tabelog's own recommended order — it is ad/PR weighted (the same trap as SUUMO's おすすめ順), so it is offered but never the default; use it only if you explicitly want the promoted ordering.

## `pagesPerArea` (type: `integer`):

How many list pages to sample per area. Tabelog serves 20 restaurants per page, so 3 pages = up to 60 restaurants. More pages mean a more representative budget-band and score distribution but a longer run (one request per page, 2 s apart). If the run's time budget is reached the remaining list pages are skipped, the area summary keeps what was already collected and is marked 'truncatedForTimeLimit' with a smaller 'pagesFetched'. Tabelog itself caps a result set at 100 pages / 2,000 restaurants — page 101 returns HTTP 400.

## `includeIndividualItems` (type: `boolean`):

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.

## `fetchDetails` (type: `boolean`):

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.

## `maxDetails` (type: `integer`):

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'.

## Actor input object example

```json
{
  "areas": [
    "tokyo/A1301/A130101"
  ],
  "sort": "newest",
  "pagesPerArea": 3,
  "includeIndividualItems": false,
  "fetchDetails": false,
  "maxDetails": 10
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "areas": [
        "tokyo/A1301/A130101"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/tabelog-restaurant-market-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "areas": ["tokyo/A1301/A130101"] }

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/tabelog-restaurant-market-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "areas": [
    "tokyo/A1301/A130101"
  ]
}' |
apify call jpmarketdata/tabelog-restaurant-market-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jpmarketdata/tabelog-restaurant-market-checker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tabelog Japan Restaurant Market Stats — Budget & Score by Area",
        "description": "Restaurant-market stats for any Tabelog area in one call: how many restaurants, the dinner and lunch budget bands, the score and review-count spread, the genre and nearest-station mix. Review text is never collected. 食べログのエリア相場を1コールで。日本最大的餐厅点评网站的商圈行情，一次调用返回预算区间与评分分布。",
        "version": "0.1",
        "x-build-id": "xdi1xk5HdwyQEUrpC"
    },
    "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'.",
                        "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, so an area that comes back with zero restaurants fails instead of being billed."
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "newest",
                            "rating",
                            "standard"
                        ],
                        "type": "string",
                        "description": "Which order Tabelog returns the area in. 'newest' (新着順) is the default and is the neutral one. 'rating' (点数の高い順) puts the highest-scoring restaurants first. 'standard' is Tabelog's own recommended order — it is ad/PR weighted (the same trap as SUUMO's おすすめ順), so it is offered but never the default; use it only if you explicitly want the promoted ordering.",
                        "default": "newest"
                    },
                    "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. More pages mean a more representative budget-band and score distribution but a longer run (one request per page, 2 s apart). If the run's time budget is reached the remaining list pages are skipped, the area summary keeps what was already collected and is marked 'truncatedForTimeLimit' with a smaller 'pagesFetched'. Tabelog itself caps a result set at 100 pages / 2,000 restaurants — page 101 returns HTTP 400.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
