# 타베로그 Tabelog 일본 식당 상권 — 지역별 예산·평점·장르 (`jpmarketdata/tabelog-restaurant-market-kr`) Actor

타베로그(Tabelog, 일본 최대 맛집 리뷰 사이트)의 상권을 하나 지정하면(예: 긴자) 그곳 식당의 요약 한 줄을 돌려줍니다. 식당 수, 저녁·점심 예산 구간과 중앙값 구간, 평점(중앙값, 범위, 평점 보유 비율), 리뷰 수, 주요 장르, 가까운 역과 도보 거리가 들어 있습니다. 상권당 $0.02, 식당별 레코드가 필요하면 한 곳당 +$0.002, 결과 없음 = 무료. Restaurant budget & score summary per Tabelog area, $0.02 per area. Unofficial.

- **URL**: https://apify.com/jpmarketdata/tabelog-restaurant-market-kr.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

## 타베로그 Tabelog 일본 식당 상권 — 지역별 예산·평점·장르

**하는 일:** 일본 최대 맛집 리뷰 사이트 타베로그(Tabelog)를 읽어 상권마다 요약 한 줄을 돌려줍니다: 식당이 몇 곳인지, 저녁과 점심에 얼마를 쓰는지, 평점이 어떻게 퍼져 있는지, 어떤 장르와 역이 많은지.

**입력:** 타베로그 상권 경로(또는 상권 URL) 하나 이상, 예: `tokyo/A1301/A130101` = 긴자. 선택으로 `sushi` 같은 장르.

**결과:** 상권당 한 줄: 식당 수, 저녁·점심 예산 구간과 중앙값 구간, 평점(중앙값, 범위, 평점 보유 비율), 리뷰 수, 주요 장르, 가까운 역, 도보 거리. 선택: 식당별 한 줄, 그리고 주소·전화·좌표.

**가격:** 상권당 $0.02. 식당별 레코드가 필요하면 한 곳당 +$0.002, 상세 페이지(주소·전화·좌표)가 필요하면 한 건당 +$0.002, 둘 다 기본 OFF. 결과 없음 = 무료.

**예시:** `tokyo/A1301/A130101`(긴자) 입력 → 식당 2,666곳 · 저녁 중앙값 구간 ¥6,000–7,999 · 점심 중앙값 구간 ¥1,000–1,999 · 평점 중앙값 3.14(범위 3.0–3.62) · 1위 장르 스시(표본 60곳 중 12곳)

**In English:** Reads Tabelog and returns one summary per area: restaurant count, dinner and lunch budget bands, score median and range, top genres and stations. Optional: one row per restaurant.

> 비공식 도구 / Unofficial — Tabelog와 무관하며 공개 페이지만 읽습니다. Not affiliated with Tabelog. Reads public pages only.

### 한국어 안내

#### 누구를 위한 것인가 (Who this is for)

**한국인 방문객은 일본 인바운드의 또 하나의 최대 방문객 그룹**이고, 「일본 맛집」은 매일 실제로 검색되는 질의입니다. 그런데 나오는 것은 대부분 추천 글이지 **계산할 수 있는 상권 데이터**가 아닙니다. 이 Actor는 일본 최대 맛집 리뷰 사이트 타베로그(Tabelog / 食べログ, 약 90만 곳 등록)의 상권 시세를, 스프레드시트·모델·기획서에 그대로 넣을 수 있는 레코드로 바꿔 줍니다. 긴자의 저녁 예산 중앙값이 어느 구간인지, 시부야에 라멘집이 몇 곳인지, 신사이바시의 평점 분포가 어떤 모양인지.

이런 분들을 위한 것입니다.

- **여행·미식 콘텐츠 제작자** — 「도쿄에서 밥값이 가장 비싼/저렴한 구는 어디인가」를 인상이 아니라 실제 예산대와 평점 분포로 씁니다.
- **외식 상권·경쟁 밀도 분석** — 이 역 반경 300 m에 스시집이 몇 곳이고 어느 가격대에 몰려 있는가.
- **외식 B2B 리드** — POS, 예약 SaaS, 식자재 도매, 결제: 상권을 한 번 뽑고 예산대·장르로 거르고, 상위 N곳만 주소와 전화번호까지 채웁니다.

이 리스팅은 영어판 [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 키도 필요 없고 실행 사이에 아무것도 저장하지 않습니다. HTTP만 사용하고 브라우저를 띄우지 않으며 256 MB로 돕니다.

#### 입력 Input

| 필드 | 예시 | 설명 |
|---|---|---|
| `areas` | `["tokyo/A1301/A130101"]` | 상권 경로 `<도도부현>/<대지역>/<중지역>`. `https://tabelog.com/...` 전체 URL을 붙여넣어도 자동 정규화됩니다. **한 번에 1–10개** — 상권 하나가 각각 과금 단위($0.02)이자 2초 간격 요청 묶음이라, 짧게 유지해야 300초 타임아웃 안에 들어옵니다. 큰 작업은 여러 번으로 나누세요 |
| `genre` | `"sushi"` | 선택 장르 슬러그, 경로 세그먼트로 사용: `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` | 기본 OFF. 켜면 표본 식당마다 레코드 하나씩 추가(+$0.002) |
| `fetchDetails` | `false` | 기본 OFF. 켜면 상세 페이지에서 주소·전화·위경도·좌석·영업시간을 보강(+$0.002) |
| `maxDetails` | `10` | 상권당 상세 페이지 수(1–20). 한 곳마다 2초 간격 요청이 하나씩 늘어납니다 |

**상권 코드 찾는 법**: 타베로그에서 그 상권을 열고 URL을 복사하면 됩니다 — `https://tabelog.com/tokyo/A1301/A130101/rstLst/` 가 긴자, `A1304` 신주쿠, `A1303` 시부야, `A1307` 롯폰기, `osaka/A2701/A270101` 우메다. URL을 통째로 `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` | 카세트에 역에서의 도보 거리가 적혀 있는 식당 **수** |

즉 `reviewCountKnown: 37`, `sampledRestaurants: 60`일 때의 `reviewCount.median`은 60곳이 아니라 37곳의 중앙값입니다. `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** | 「식당 상세 페이지 수집」을 켰을 때만 |

**개별 레코드와 상세 수집은 기본 OFF**이므로 기본 실행(상권 1개, 3페이지, 요약만)은 **$0.02 고정**이고 약 6초 걸립니다. **결과가 0건인 상권은 절대 과금되지 않습니다** — 그 상권은 실패로 처리되므로 상권 경로나 장르 슬러그 오타에 돈을 내지 않습니다.

#### 주의사항 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`로 쪼개야 합니다. **표본은 앞에서부터 연속으로가 아니라 결과 집합 전체에 흩어서** 뽑습니다(정렬이 평점에 단조로워 앞쪽 페이지는 고득점 가게뿐이라 상권을 대표하지 못함). 2,666곳 상권에서 3페이지면 실제로는 1·31·60페이지이며 `sampledPages`에 적힙니다.
- **목록 페이지 하나는 카세트 20개이고 그중 일부는 광고입니다.** PR/광고 카세트에는 식당 링크가 없어 한 페이지에서 19건만 나오기도 합니다. 페이지 루프는 레코드 수가 아니라 **카세트 수**로 끝을 판단합니다. 그렇지 않으면 1페이지의 광고 하나 때문에 한 페이지 만에 실행이 끝납니다.
- 히트 수는 실시간이라 요청 사이에 몇 곳씩 흔들립니다. `totalRestaurantsFound`는 스냅숏이지 안정적인 키가 아닙니다.
- **알 수 없는 `genre` 슬러그는 타베로그에서 404가 나지 않습니다** — 다른 페이지가 옵니다. 슬러그는 그대로 전달되고, 결과가 0건인 상권은 잘못된 질의에 대한 요약을 내는 대신 **실패**합니다.
- 읽기 전용이며 초당이 아니라 2.0초당 1요청으로 제한합니다. 한 실행에 95초 소프트 예산이 있고 `areas`는 10개까지 — 최악의 경우에도 300초 타임아웃 안에 들어오게 하는 장치입니다. **각 상권의 1페이지는 반드시 실행**되고, 예산이 떨어지면 이후 목록 페이지와 상세 보강이 건너뛰어지며 해당 요약은 모은 것을 유지한 채 `truncatedForTimeLimit: true`와 더 작은 `pagesFetched`를 기록합니다.
- **모든** 상권이 실패하면 실행 자체가 실패합니다 — 그럴듯한 빈 성공은 돌려주지 않습니다.
- 카카쿠컴(타베로그 운영사)과 아무 관계가 없습니다. 데이터는 시장 조사용이며 중요한 결정 전에는 직접 확인하세요.

#### 활용 사례 Use cases

- **일본 여행·미식 콘텐츠** — 역 상권별 장르 구성과 예산 구성으로 추천 글을 데이터로 뒷받침합니다.
- **외식 B2B 리드 리스트** — POS·예약 SaaS·식자재 도매·결제: 상권을 뽑고 예산대와 장르로 거른 뒤 상위 N곳만 주소·전화까지 보강.
- **입지 선정과 경쟁 밀도** — 이 역 300 m 안에 스시집이 몇 곳이고 어느 가격대인가.
- **가격 포지셔닝** — 내 메뉴 가격을 정하기 전에 이 동네가 실제로 어느 저녁 예산대에 있는지 확인.
- **시장 모니터링** — 상권별로 스케줄 실행해 중앙값 구간·평점 분포·점포 수의 변화를 추적.

***

### 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 **Korean-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 Korean-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 Korean 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` を記録します。株式会社カカクコムとは無関係です。

### If something goes wrong

- **Wrong number or a failed run?** Open a ticket on the **Issues** tab. I read every one and reply within 2 business days (Japan time).
- **You never get a fake "empty" result.** If the site can't be read, the run fails and says so.
- **No results = no charge.** You only pay for results you actually get.
- **Checked every week.** An automatic test runs this tool weekly; if the site changes, I fix it.
- **Public pages only.** No login, no personal data, and it goes easy on the site.

### More tools by the same author

Other language editions of this tool: [English](https://apify.com/jpmarketdata/tabelog-restaurant-market-checker) · [中文](https://apify.com/jpmarketdata/tabelog-restaurant-market-cn)

All tools (Japan marketplaces, real estate, jobs, racing, prediction markets): <https://apify.com/jpmarketdata>

### Disclaimer

Unofficial, independent tool — **not affiliated with, endorsed by, or sponsored by Tabelog**. Product names and logos belong to their owners and only say where the data comes from. Data is read from public pages, for market research; check before you act on it.

# Actor input Schema

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

타베로그 상권을 '<도도부현>/<대지역>/<중지역>' 형식으로 하나 이상 입력합니다. 예: 'tokyo/A1301/A130101'(긴자), 'osaka/A2701/A270101'(우메다). https://tabelog.com/... 전체 URL을 그대로 붙여넣어도 상권 경로로 자동 정규화됩니다. 상권 하나가 각각 과금 단위($0.02)이자 2초 간격 요청 묶음이므로 한 번의 실행은 최대 10개까지로 짧게 유지하세요. 더 큰 작업은 여러 번으로 나누면 됩니다 — 시간 예산에 도달하면 이후 목록 페이지를 중단하고 해당 상권에 'truncatedForTimeLimit'를 표시합니다.

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

상권을 타베로그 장르 하나로 좁힙니다. 슬러그는 URL의 경로 세그먼트 그대로입니다: 'sushi'(스시), 'ramen'(라멘), 'izakaya'(이자카야), 'yakitori'(야키토리), 'washoku', 'japanese', 'seafood', 'soba', 'unagi', 'okonomiyaki', 'monjya', 'yoshoku' 등. 비워 두면 전체 장르입니다. 슬러그는 입력한 그대로 전달되며, 타베로그는 알 수 없는 슬러그에도 404를 주지 않으므로 결과가 0건인 상권은 과금 대신 실패로 처리됩니다.

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

타베로그가 해당 상권을 어떤 순서로 돌려줄지 정합니다. 페이지가 실제로 지키는 순서만 제공합니다. 'rating'(SrtT=rt)이 기본값입니다. 결정적이고 광고 가중이 없으며, 타베로그 일본어 사이트와 완전히 같은 목록을 돌려주기 때문입니다(2026-08-05에 1·10·60페이지를 대조해 가게 id와 평점이 모두 일치함을 확인). 'most-viewed'와 'most-reserved'는 타베로그가 방일객용으로 제공하는 자체 랭킹입니다. 'standard'는 정렬 파라미터를 아예 보내지 않는 것으로, 타베로그의 편집 추천 순서입니다. 광고·PR 가중이 걸려 있고 언어판마다 결과가 달라서 선택지로만 제공하고 기본값으로 쓰지 않습니다. 최신 오픈순(新着順)은 **제공하지 않습니다** — 이 Actor가 읽는 페이지는 그 파라미터를 무시하고 편집 추천 순서로 답하므로, 'newest'라고 표시하면 표본이 실제로 그 순서가 아니게 됩니다.

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

상권마다 몇 개의 목록 페이지를 표본으로 뽑을지 정합니다(한 페이지 20곳, 3페이지 = 최대 60곳). 페이지는 앞에서부터가 아니라 **결과 집합 전체에 고르게 흩어서** 뽑습니다. 정렬이 평점에 대해 단조로워 앞쪽 페이지는 전부 고득점 가게이고 그 분포는 상권의 분포가 아니기 때문입니다. 2,666곳 상권에서 3페이지면 실제로는 1·31·60페이지이며, 요약의 'sampledPages'에 그대로 적힙니다. 페이지가 많을수록 분포는 촘촘해지지만 실행이 길어집니다(페이지당 1회, 2초 간격). 시간 예산에 도달하면 남은 페이지를 건너뛰고 'truncatedForTimeLimit'와 실제 'pagesFetched'를 기록합니다. 히트 수와 무관하게 열거는 60페이지 / 1,200곳까지입니다(2026-08-05 실측, 'enumerablePages').

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

기본값 OFF: 상권 요약 하나당 $0.02 고정입니다. 켜면 표본으로 뽑힌 식당마다 레코드를 하나씩(상호, URL, 타베로그 ID, 평점, 리뷰 수, 가까운 역, 거리, 장르, 저녁·점심 예산대) 추가로 출력하며 건당 +$0.002입니다. 사업장 정보만 수집하며 리뷰 본문과 리뷰어 이름은 절대 수집하지 않습니다.

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

기본값 OFF. 켜면 표본 중 앞쪽 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-kr").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-kr").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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-kr --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/tabelog-restaurant-market-kr"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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