# Tabelog 日本美食点评 Japan Restaurant Market Stats by Area (`jpmarketdata/tabelog-restaurant-market-cn`) Actor

日本美食、日本餐厅的商圈行情一次调用即得：指定食べログ（Tabelog，日本最大的餐厅点评网站）的商圈，返回餐厅总数、晚餐/午餐预算档位分布、评分分布与有评分占比、点评数量、菜系构成、最近车站与步行距离。绝不采集点评正文。适合访日美食内容、选址调研与餐饮B2B获客。Restaurant-market stats per Tabelog area, from $0.02 per area, no subscription.

- **URL**: https://apify.com/jpmarketdata/tabelog-restaurant-market-cn.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** Lead generation, E-commerce, Automation
- **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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Japan Restaurant Market Stats by Area — for Chinese-Speaking Users

**中文 · English · 日本語** —— 指定一个日本商圈，一次调用就拿到那里的餐厅行情：有多少家店、晚餐和午餐各花多少钱、评分怎么分布、什么菜系、离哪个车站近。

***

### 中文说明

#### 这是给谁用的（Who this is for）

**中国大陆、香港、台湾的访日游客是日本最大的入境客群**，而「日本美食」「日本餐厅」「日本必吃」这类查询是实打实的、每天都在发生的搜索需求——但绝大多数结果是图文推荐，不是**可计算的商圈数据**。这个 Actor 把日本最大的餐厅点评网站食べログ（Tabelog，约 90 万家在册餐厅）的商圈行情，变成一条可以直接进表格、进模型、进选品逻辑的记录：银座的晚餐预算中位数落在哪一档、涩谷有多少家拉面店、心斋桥的评分分布长什么样。

面向三类使用者：

- **内容与行程创作者**——用真实的预算档位与评分分布写「东京哪个区吃饭最贵/最划算」，而不是凭印象。
- **餐饮选址与竞品密度分析**——某个车站 300 米内有多少家寿司店、集中在哪个价格带。
- **餐饮 B2B 获客**——POS、订位 SaaS、食材批发、支付：按商圈拉名单，用预算档位和菜系筛选，再对前 N 家补齐地址与电话。

本 Actor 是英文版 [Tabelog Japan Restaurant Market Stats](https://apify.com/jpmarketdata/tabelog-restaurant-market-checker) 的**中文语言包**：抓取逻辑与统计口径完全相同，只有标题、商店说明、文档和输入项标签改写成中文。

#### 概览 Overview

指定商圈（`<都道府県>/<大区>/<小区>`，例如 `tokyo/A1301/A130101` = 银座），每个商圈返回**一条汇总记录**：

- **`dinnerBudgetBands` / `lunchBudgetBands`** —— 用食べログ自家的预算档位（`～￥999` … `￥30,000～`）由低到高排列，每档给出家数，并给出**中位数档位**（档位是序数尺度，对两个档位标签取平均没有意义，所以取排名中位数）以及档位上下限的日元统计。
- **`tabelogScore` + `scoredShare`** —— 评分的最低/p25/中位数/p75/最高/平均，**以及真正带有评分的餐厅占比**。食べログ上有大量餐厅没有评分，悄悄丢掉它们的分布是不诚实的。
- **`reviewCount` + `reviewCountKnown`** —— 商圈的关注度（只取**数量**，见下），以及该统计实际是在多少家店上算出来的。
- **`genreTop` / `stationTop` / `distanceMeters` + `distanceMetersKnown`** —— 菜系构成、最近车站构成，以及在有距离信息的店里，餐厅离车站多远。
- **可选**：每家取样餐厅的单店记录；以及**详情页补充**（地址、邮编、电话、经纬度、价格区间、料理类别、座位数、营业时间、预约政策、交通方式），用于获客名单。

无需登录、无需 API Key，运行之间不存储任何数据。纯 HTTP，不开浏览器，256 MB。

#### 输入 Input

| 字段 | 示例 | 说明 |
|---|---|---|
| `areas` | `["tokyo/A1301/A130101"]` | 商圈路径 `<都道府県>/<大区>/<小区>`。直接粘贴完整的 `https://tabelog.com/...` 网址也可以，会自动归一化。**每次运行 1–10 个商圈**——每个商圈是独立计费单位（$0.02）且各自发起间隔 2 秒的请求，把运行控制得短一些才能稳在 300 秒超时内。更大的任务请分几次跑 |
| `genre` | `"sushi"` | 可选菜系 slug，作为路径段使用：`sushi`、`ramen`、`izakaya`、`yakitori`、`washoku`、`japanese`、`seafood`、`soba`、`unagi`、`okonomiyaki`、`monjya`、`yoshoku` 等。留空 = 全部菜系 |
| `sort` | `"rating"` | `rating`（点数の高い順 = `SrtT=rt`）/ `most-viewed` / `most-reserved` / `standard`。不提供最新开业顺序，原因见下方说明 |
| `pagesPerArea` | `3` | 每页 20 家，1–10 页。3 页 = 最多 60 家 |
| `includeIndividualItems` | `false` | 默认关闭。开启后每家取样餐厅额外输出一条记录（+$0.002/家） |
| `fetchDetails` | `false` | 默认关闭。开启后抓取详情页，补充地址/电话/经纬度/座位数/营业时间（+$0.002/条） |
| `maxDetails` | `10` | 每个商圈抓多少个详情页（1–20）。每家多一次间隔 2 秒的请求 |

**怎么找商圈代码**：在食べログ上打开该商圈，把网址复制过来即可——`https://tabelog.com/tokyo/A1301/A130101/rstLst/` 是银座；`A1304` 新宿、`A1303` 涩谷、`A1307` 六本木、`osaka/A2701/A270101` 梅田。整条网址直接粘进 `areas` 也能用。

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

#### 输出 Output

每个商圈一条 `type: "area_summary"` 记录（字段名保持英文，这是 API 接口）：

```json
{
  "type": "area_summary",
  "area": "tokyo/A1301/A130101",
  "areaUrl": "https://tabelog.com/en/tokyo/A1301/A130101/rstLst/?SrtT=rt",
  "genre": null,
  "sort": "rating",
  "totalRestaurantsFound": 2666,
  "sampledRestaurants": 60,
  "pagesFetched": 3,
  "sampledPages": [1, 31, 60],
  "enumerablePages": 60,
  "sourceLocale": "en",
  "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": "-JPY999", "count": 3}, {"band": "JPY6,000-JPY7,999", "count": 11}, {"band": "JPY40,000-JPY49,999", "count": 6}],
  "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/en/tokyo/A1301/A130101/rstLst/?SrtT=rt"
}
```

开启 `includeIndividualItems: true` 后，每家取样餐厅一条 `type: "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"
}
```

开启 `fetchDetails: true` 后，前 `maxDetails` 家餐厅各多一条 `type: "restaurant_detail"` 记录——同样的字段再加上 `address`、`postalCode`、`addressRegion`、`addressLocality`、`streetAddress`、`telephone`、`latitude`、`longitude`、`priceRange`、`servesCuisine`、`seats`、`openingHours`、`reservationPolicy`、`transport`。

#### 每项统计都注明它是在多少家店上算出来的

`sampledRestaurants` 是整个样本；旁边的三个字段说明每个分布**实际覆盖了样本的多少**，因为食べログ在很多店铺卡片上把这些字段留空：

| 字段 | 是谁的分母 | 含义 |
|---|---|---|
| `scoredShare` | `tabelogScore` | 取样餐厅中**带有食べログ评分**的比例（0–1），其余显示「-」 |
| `reviewCountKnown` | `reviewCount` | 卡片上写明点评数的餐厅**家数** |
| `distanceMetersKnown` | `distanceMeters` | 卡片上写明步行距离的餐厅**家数** |

所以 `reviewCount.median` 在 `reviewCountKnown: 37`、`sampledRestaurants: 60` 时，是 37 家的中位数，不是 60 家的。`pagesFetched` 对 `sampledRestaurants` 本身起同样的作用；被时间预算截断的运行还会带上 `truncatedForTimeLimit: true`。

#### 本 Actor 不做什么

- **绝不采集点评正文。** 点评正文、点评人昵称、点评人主页链接、点评照片一律不解析、不存储、不输出。每个字段都从带有自己 class 标记的那一个元素里读出，所以点评文字连意外混入记录的路径都没有。点评只使用**数量（数字）**。
- **不做全网站爬取。** 一次运行最多 10 个商圈，每页 20 家、最多 10 页。它是行情统计器，不是数据倾倒器。
- **不做个人数据。** 只有餐厅的经营信息：店名、地址、电话、经纬度、座位数、营业时间。没有点评人，没有顾客。
- **不做预约、不做菜单价格明细。** 预算是食べログ的档位，不是逐道菜的价格。
- **不做时间序列。** 每次运行是一个快照；要看趋势请自行定时运行并保存。

#### 价格 Pricing —— 每个商圈 $0.02 起，无订阅

| 计费事件 | 价格 | 何时发生 |
|---|---|---|
| 商圈行情汇总（`area-analyzed`） | **$0.02** | 每分析一个商圈 |
| 单店记录（`restaurant-scraped`） | **$0.002** | 仅当开启「输出单店记录」时 |
| 详情记录（`restaurant-detail-scraped`） | **$0.002** | 仅当开启「抓取餐厅详情页」时 |

**单店记录与详情抓取默认关闭**，因此默认运行（1 个商圈、3 页、只要汇总）固定 **$0.02**，约 6 秒完成。**零结果的商圈绝不收费**——该商圈会被判定为失败，所以你不会为写错的商圈路径或菜系 slug 付钱。Apify 每月赠送 $5 免费额度。

#### 注意事项 Notes & limits

- **数值和文字都取自食べログ的英文版(`/en/`)。** 店名、菜系、车站名会以英文返回，预算档位写作 `JPY8,000-JPY9,999`。ID、评分、点评数与价格与日文站完全相同（在 `sort: "rating"` 下逐页比对第 1、10、60 页，店铺 ID 与评分完全一致）。每条汇总都会用 `sourceLocale` 写明这一点。原因是通道而非偏好：自 2026-08-03 起，食べログ的日文列表路径会对数据中心 IP 返回 Cloudflare 验证，而多语言版路径不会
- **`sort: "standard"` 是食べログ的编辑推荐排序，带广告/PR 加权**——与 SUUMO 的おすすめ順是同型的陷阱，因此不作默认。默认是 `rating`（`SrtT=rt`）。**不提供最新开业顺序**：本 Actor 读取的页面会忽略该参数并改用编辑推荐顺序，标成 `newest` 就等于谎报取样顺序。每条记录都会记录实际使用的 `sort`。
- **样本终归是样本。** `totalRestaurantsFound` 是整个商圈，`sampledRestaurants` 才是统计的基础（`pagesPerArea` × 20）。想要更有代表性的分布就调高 `pagesPerArea`。
- **无论命中数是多少，食べログ对一个结果集只枚举到第 60 页 / 1,200 家**（在 2,666 家与 5,560 家的商圈上实测一致）。`totalRestaurantsFound` 仍是商圈实际数量，可枚举深度写在 `enumerablePages`。比这更大的商圈要穷举必须用 `genre` 拆分。
- **一个列表页是 20 张卡片，其中有些是广告。** PR/广告卡片没有餐厅链接，所以整页可能只产出 19 条记录。翻页循环用**卡片数**而不是记录数判断是否到达商圈末尾，否则第 1 页上的一张广告就会让运行提前一页结束。
- 命中数是实时的，两次请求之间会有几家的漂移，因此 `totalRestaurantsFound` 是快照而不是稳定主键。
- **未知的 `genre` slug 在食べログ上不会 404**——它会返回另一个页面。slug 原样传递，零结果的商圈会**失败**，而不是给出针对错误查询的汇总。
- 只读且限速（1 请求 / 2.0 秒）。单次运行有 95 秒软预算，`areas` 上限 10——这是最坏情况仍留在 300 秒超时内的原因。**每个商圈的第 1 页必定抓取**，被跳过的是后续列表页与详情页补充；受影响的汇总保留已收集的数据，并带上 `truncatedForTimeLimit: true` 与较小的 `pagesFetched`。
- 如果**所有**商圈都失败，整个运行失败——绝不返回看似正常的空结果。
- 与株式会社カカクコム（食べログ运营方）无任何关联。数据用于市场调研，重要决策前请自行核实。

#### 用途 Use cases

- **访日美食内容与行程规划**——按车站商圈给出菜系构成与预算构成，取代凭印象的推荐。
- **餐饮 B2B 名单**——POS、订位 SaaS、食材批发、支付：拉一个商圈，按预算档位与菜系筛选，再给前 N 家补齐地址与电话。
- **选址与竞品密度**——某个车站 300 米内有多少家寿司店，落在什么价位。
- **价格定位**——在定自家菜单价格之前，先看清这个街区实际处在哪个晚餐预算档位。
- **市场监测**——按商圈定时运行，跟踪中位数档位、评分分布与餐厅数量随时间的变化。

***

### English

#### Overview

Restaurant-market statistics for any Tabelog area, in one call: how many restaurants the area lists, the dinner and lunch budget-band distribution, the Tabelog-score distribution (with the share that actually carries a score), the review-count distribution, the genre mix and the nearest-station mix. Individual restaurant records and detail-page enrichment (address / phone / lat-lng / seats / hours) are optional add-ons for lead generation. **Review text is never collected** — review *counts* only.

This listing is the **Chinese-language package** of our English Actor [Tabelog Japan Restaurant Market Stats](https://apify.com/jpmarketdata/tabelog-restaurant-market-checker). The scraping and the statistics are identical; the documentation, store copy and input labels are written for Chinese-speaking users (日本美食 / 日本餐厅).

#### Input

| Field | Example | Notes |
|---|---|---|
| `areas` | `["tokyo/A1301/A130101"]` | `<prefecture>/<large area>/<medium area>`, or a full tabelog.com URL. 1–10 per run, $0.02 each |
| `genre` | `"sushi"` | Optional genre slug used as a path segment. Empty = all genres |
| `sort` | `"rating"` | `rating` (default) / `most-viewed` / `most-reserved` / `standard` (ad-weighted — never the default) |
| `pagesPerArea` | `3` | 20 restaurants per page, 1–10 pages |
| `includeIndividualItems` | `false` | Off by default; one record per sampled restaurant (+$0.002 each) |
| `fetchDetails` | `false` | Off by default; address / phone / lat-lng / seats / hours (+$0.002 each) |
| `maxDetails` | `10` | Detail pages per area (1–20) |

#### Output

One `type: "area_summary"` record per area — `dinnerBudgetBands` / `lunchBudgetBands` with the median band, `tabelogScore` + `scoredShare`, `reviewCount` + `reviewCountKnown`, `genreTop`, `stationTop`, `distanceMeters` + `distanceMetersKnown` — see the JSON example in the Chinese section. Optionally one `type: "restaurant"` record per sampled restaurant and one `type: "restaurant_detail"` record per enriched restaurant. **Every statistic states its own denominator**, against `sampledRestaurants`.

#### Pricing

| Event | Price |
|---|---|
| Area market summary (`area-analyzed`) | **$0.02** |
| Individual restaurant (`restaurant-scraped`) | **$0.002** each |
| Restaurant detail record (`restaurant-detail-scraped`) | **$0.002** each |

Individual and detail records are **OFF by default**, so a default run (1 area, 3 pages, summary only) is a flat **$0.02** and takes about 6 seconds. An area that returns zero restaurants is never charged. No subscription.

#### Notes & limits

- **The numbers and the strings come from Tabelog's English edition (`/en/`)** — names, genres and stations are in English and a band reads `JPY8,000-JPY9,999`. Ids, scores, review counts and prices are identical to the Japanese site (verified on pages 1, 10 and 60 under `sort: "rating"`). Every summary states it as `sourceLocale`.
- **Review text is never collected** — no review bodies, reviewer names, reviewer links or review photos. Counts only.
- `sort: "standard"` is Tabelog's own editorial order and is ad/PR weighted, so the default is `rating` (`SrtT=rt`). Newest-first is not offered — the pages read here ignore that parameter. Every record states the `sort` it was produced with.
- Tabelog stops enumerating a result set at page 60 / 1,200 restaurants whatever the hit count says (`enumerablePages`); slice larger areas with `genre`.
- A list page is 20 cassettes and some are ads, so a full page can yield 19 records; the page loop counts cassettes, not records.
- An unknown `genre` slug does not 404 on Tabelog — a zero-restaurant area **fails** instead of being billed for the wrong query.
- Read-only and throttled (1 request / 2.0 s), 95-second soft budget, `areas` capped at 10; page 1 of every area always runs and a truncated summary carries `truncatedForTimeLimit: true`.
- If every area fails, the run fails — never a silent empty success. No personal data: restaurant business information only.

***

### 日本語

#### 概要 Overview

食べログのエリア相場を、エリア1件につき1レコードで返します。掲載店舗数・夜/昼の予算帯分布・点数の分布・口コミ件数の分布・ジャンル構成・最寄駅構成・駅からの距離。中国語圏の利用者（日本美食 / 日本餐厅）向けに中国語で書き直したパッケージで、英語版は [Tabelog Japan Restaurant Market Stats](https://apify.com/jpmarketdata/tabelog-restaurant-market-checker)（取得・統計処理は同一）。

#### 入力 Input

`areas`（`<都道府県>/<大エリア>/<小エリア>`、食べログの URL 貼り付け可、1回10件まで）／`genre`（任意のジャンルスラッグ）／`sort`（既定 `rating` = 点数の高い順。新着順は提供しません）／`pagesPerArea`（既定 3、1〜10。結果集合全体に散らして取得）／`includeIndividualItems`（既定 OFF）／`fetchDetails`（既定 OFF）／`maxDetails`（既定 10）。

#### 出力 Output

エリアごとに `area_summary` を1件（予算帯分布と**中央値の帯**、`tabelogScore` と `scoredShare`、`reviewCount` と `reviewCountKnown`、`genreTop`、`stationTop`、`distanceMeters` と `distanceMetersKnown`）。**部分集合に対する統計には必ず母数を併記**します（分母は `sampledRestaurants`）。オプションで店舗ごとの `restaurant` レコード、詳細取得時は `restaurant_detail` レコード。

#### 料金 Pricing

エリアサマリー（`area-analyzed`）**$0.02**／個別店舗レコード（`restaurant-scraped`）**$0.002 / 件**／詳細レコード（`restaurant-detail-scraped`）**$0.002 / 件**。個別レコードと詳細取得は**既定 OFF** なので既定実行は $0.02 固定です。**0件のエリアには課金されません。** サブスクリプション不要。

#### 注意 Notes

数値も文字列も食べログの**英語版(`/en/`)**から取得しています（店名・ジャンル・駅名は英語、予算帯は `JPY8,000-JPY9,999` 表記。ID・点数・件数・価格は日本語サイトと同一値であることを1・10・60ページで確認済み。各サマリーの `sourceLocale` に明記）。**口コミ本文は一切取得しません**（本文・投稿者名・投稿者ページのリンク・写真はパースも保存も出力もせず、件数の数値のみ）。`standard` は食べログの編集推薦順 = 広告/PR 加重順のため既定にはせず、既定は `rating`（点数の高い順）です。新着順は、読み取るページが当該パラメータを無視するため提供しません。1ページ20件で、掲載件数によらず**列挙は60ページ(1,200件)まで**です。リクエスト間隔 2.0 秒、`areas` は1回10件まで、時間予算超過時は `truncatedForTimeLimit: true` を記録します。株式会社カカクコムとは無関係です。

# Actor input Schema

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

一个或多个食べログ商圈，格式为 '<都道府県>/<大区>/<小区>'，例如 'tokyo/A1301/A130101'（银座）、'osaka/A2701/A270101'（梅田）。直接粘贴完整的 https://tabelog.com/... 网址也可以，会自动归一化成商圈路径。每个商圈都是独立计费单位（$0.02），并各自发起间隔 2 秒的请求，因此请把单次运行控制在 10 个商圈以内，更多请分几次调用——达到时间预算后会停止抓取后续列表页并标记 'truncatedForTimeLimit'。

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

把商圈限定到某一个食べログ菜系。slug 就是网址中的路径段：'sushi'（寿司）、'ramen'（拉面）、'izakaya'（居酒屋）、'yakitori'（烤鸡串）、'washoku'、'japanese'、'seafood'、'soba'、'unagi'、'okonomiyaki'、'monjya'、'yoshoku' 等等。留空表示全部菜系。slug 原样传递——食べログ对未知 slug 不会返回 404，因此零结果的商圈会判定为失败而不是照常计费。

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

食べログ返回该商圈时使用的顺序。这里只提供页面真正会执行的排序。'rating'（SrtT=rt）是默认值：它是确定性的、不带广告加权，而且返回的名单与食べログ日文站完全一致——2026-08-05 在第 1、10、60 页逐页比对，餐厅 id 与评分完全相同。'most-viewed' 与 'most-reserved' 是食べログ面向访日客的自家榜单。'standard' 表示不发送任何排序参数，也就是食べログ的编辑推荐顺序：带广告/推广加权，而且每个语种版本都不一样，因此提供但绝不作为默认值。**不提供**「最新开业优先（新着順）」——本 Actor 读取的页面会忽略该参数并改用编辑推荐顺序，若标成 'newest' 就等于谎报了取样顺序。

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

每个商圈取样多少个列表页。食べログ每页 20 家餐厅，因此 3 页 = 最多 60 家。这些页是**均匀分散在整个结果集上**取的，而不是从头部连着取：排序对评分是单调的，头几页装的都是高分店，它们的预算与评分分布并不代表这个商圈。对一个 2,666 家的商圈取 3 页，实际取的是第 1、31、60 页，汇总里的 'sampledPages' 会如实写明取了哪几页。页数越多分布越细，但运行也越久（每页一次请求，间隔 2 秒）。达到运行时间预算后会跳过剩余页，商圈汇总保留已获取的数据并标记 'truncatedForTimeLimit'，同时如实记录较小的 'pagesFetched'。无论命中数写多少，食べログ对一个结果集只枚举到第 60 页 / 1,200 家（2026-08-05 实测），汇总里记为 'enumerablePages'。

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

默认关闭：一次运行每个商圈汇总固定 $0.02。开启后还会为每一家取样餐厅输出一条记录（店名、网址、食べログ ID、评分、点评数、最近车站、距离、菜系、晚餐与午餐预算档位），费用 +$0.002/家。只采集经营信息——点评正文与点评人昵称一律不采集。

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

默认关闭。开启后会再抓取前 N 家取样餐厅的详情页，补充地址、邮编、电话、经纬度、价格区间、料理类别、座位数、营业时间、预约政策与交通方式——正是获客名单需要的字段。费用 +$0.002/条，并且每家餐厅多一次请求（间隔 2 秒）。

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

开启「抓取餐厅详情页」时，每个商圈抓取多少个详情页。每一个都是间隔 2 秒的额外请求，因此这是运行时长的主要来源。达到运行时间预算后会跳过剩余详情页，并把该商圈的汇总标记为 'truncatedForTimeLimit'。

## Actor input object example

```json
{
  "areas": [
    "tokyo/A1301/A130101"
  ],
  "sort": "rating",
  "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-cn").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-cn").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-cn --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lyDD1DeVln1mhvoLz/builds/KpFfu5HgCamLmIDgd/openapi.json
