# Japan Restaurants Scraper (Tabelog) (`jpopendata/japan-restaurants-tabelog`) Actor

Restaurants from tabelog.com by prefecture, area and genre — rating, review count, bookmark count, budgets, address, phone, hours in a clean English schema. Unofficial; not affiliated with Kakaku.com Inc. No review text or reviewer data.

- **URL**: https://apify.com/jpopendata/japan-restaurants-tabelog.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 per record/results

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/actors/running/actors-in-store.md#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 Restaurants Scraper (Tabelog)

**Restaurant data from Tabelog (食べログ) — Japan's biggest restaurant guide — by prefecture, neighbourhood and cuisine, in a clean English schema: ratings, review counts, bookmark counts, budgets, addresses, phone numbers and opening hours.**

This Actor scrapes tabelog.com listing pages (and optionally each restaurant's detail page) and returns structured JSON: restaurant name with kana reading, cuisine genres, the famous Tabelog rating (0-5 scale, where 3.5+ already means excellent), review and bookmark counts, lunch/dinner budget ranges as parsed yen values, nearest station, street address, published business phone, opening hours and coordinates.

> **Unofficial tool.** Not affiliated with or endorsed by Kakaku.com Inc. or Tabelog. This Actor collects **publicly available factual business data only** — it never collects review text (copyrighted works), reviewer names or any other user data, and it never bypasses logins or CAPTCHAs. You are responsible for using the data in compliance with the source site's terms and the laws that apply to you (including GDPR/APPI where relevant); the published business phone numbers are included as business contact information, not personal data — verify your own legal basis before using them for outreach.

***

### Who is this for?

- **Market research and location intelligence** — density, ratings and price points of restaurants by neighbourhood and cuisine (e.g. every ramen shop around Shinjuku station with rating and budget).
- **Travel, food-tech and recommendation products** — English-schema Japanese restaurant data with the Tabelog rating, the metric travellers actually trust.
- **B2B suppliers and services** — lead lists of restaurants by area and genre with published business contact details and budget positioning.

### Sample output (dataset item)

```json
{
  "restaurantName": "道産子 新宿西口店",
  "restaurantNameKana": "どさんこ",
  "genre": ["居酒屋", "海鮮"],
  "rating": 3.28,
  "reviewCount": 100,
  "bookmarkCount": 4626,
  "budgetDinner": { "raw": "￥3,000～￥3,999", "minJpy": 3000, "maxJpy": 3999 },
  "budgetLunch": null,
  "address": "東京都新宿区西新宿1-2-7 小杉ビル B1F",
  "prefecture": "東京都",
  "prefectureEn": "Tokyo",
  "prefectureCode": "13",
  "nearestStation": "新宿西口駅",
  "phone": "03-3342-2958",
  "businessHours": "月・火・水・木 16:00 - 23:45 L.O. 料理23:10 ドリンク23:30; 金・土 14:00 - 23:45 ...",
  "closedDays": null,
  "latitude": 35.6926975,
  "longitude": 139.699659,
  "url": "https://tabelog.com/tokyo/A1304/A130401/13051074/",
  "tabelogId": "13051074",
  "detailFetched": true,
  "source": "食べログ (Tabelog, tabelog.com)",
  "sourceUrl": "https://tabelog.com/",
  "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-08-25T09:12:44.000Z"
}
```

In cheap list-only mode (`detailFetch: false`, the default) each listing page request yields 20 records with name, genres, rating, review/bookmark counts, budgets, nearest station and URL; address/phone/hours fields are `null`.

### Input example

```json
{
  "prefecture": "Tokyo",
  "area": "shinjuku",
  "genre": "ramen",
  "minRating": 3,
  "maxItems": 40,
  "detailFetch": true
}
```

- **prefecture** (required): `"Tokyo"`, `"東京都"` or JIS code `"13"` — all 47 prefectures.
- **area** (optional): a Tabelog area code copied from any tabelog URL — `A1304` (district), `A130401` (sub-area), `C13104` (ward/municipality) or a full path like `A1304/A130401/R5184` (station) — this works for **every neighbourhood in Japan**. Convenience English slugs are built in for a few famous areas (shinjuku, shibuya, ikebukuro, ...). Unknown free text is refused with guidance instead of guessing the wrong neighbourhood.
- **genre** (optional): a Tabelog genre slug as seen in listing URLs (`ramen`, `sushi`, `izakaya`, `cafe`, `yakiniku`, `italian`, ...). A wrong slug fails with an explicit 404, never silent wrong data.
- **minRating** (optional): client-side rating floor.

### Pricing

Pay per result — see the pricing tab. A listing-only run is cheap (20 records per upstream request); `detailFetch: true` costs one extra upstream request per restaurant and fills the business-info fields.

### FAQ

**Where does the data come from?**
Live from public tabelog.com listing and detail pages at run time. Every record embeds the source, source URL, a license note and the retrieval timestamp.

**Is this an official Tabelog/Kakaku.com service?**
No. **Unofficial**, independently built and maintained, not affiliated with or endorsed by Kakaku.com Inc. Tabelog is a trademark of its owner.

**Does it collect reviews?**
**No, by design.** Review text is a copyrighted work and reviewer identities are personal data — the parser deletes the review array from the page's structured data before reading anything, and automated tests assert that no review text, reviewer name or review-shaped field can ever appear in the output. Only the numeric facts survive: the rating value, the review count, the bookmark count.

**Why did my run stop before maxItems?**
The Actor enforces a hard per-run request budget (`maxApiRequests`) with strictly serial requests ≥1.2 s apart — polite by construction. The run summary (`RUN_SUMMARY` key-value record) reports `complete: false` with the reason whenever a budget truncated the result set. Raise `maxApiRequests` or narrow the query.

**What if tabelog.com blocks the datacenter IP?**
The Actor performs **no block evasion** (no header spoofing, no CAPTCHA solving, no rotation tricks). If the runtime IP is refused it fails visibly with the HTTP status. Setting `proxyConfiguration` (e.g. Apify automatic proxy) usually resolves it.

**Is the whole of Japan covered?**
Yes — any prefecture, and any neighbourhood/station/municipality via its Tabelog area code. What one run returns is your query's result set subject to `maxItems` and the request budget, both reported honestly in the run summary.

### Search terms this Actor answers

tabelog scraper · Tabelog API · Japan restaurant data · Japanese restaurant database · Tokyo restaurants dataset · Japan restaurant ratings · ramen restaurants Tokyo data · Japan food guide scraping · restaurant leads Japan · 食べログ データ · Shinjuku Shibuya restaurant list · Japan restaurant market research

### More Japan data Actors by the same developer

- **Japan Government Tenders & Awards** — tender notices and award results from the kkj.go.jp portal.
- **Japan Medical Facilities** — every registered hospital, clinic, dental clinic, and pharmacy (MHLW open data).
- **Japan Care Facilities** — long-term care providers across 35 service types (MHLW open data, CC BY).
- **Japan Government Subsidies & Grants** — open subsidy calls from the official jGrants API.
- **Japan Construction & Real-Estate Licenses** — licensed contractors and brokers from MLIT's official register.
- **Japan Financial Licenses & Registrations** — FSA-licensed banks, securities firms, crypto exchanges and more.
- **Japan Trade Statistics** — monthly import/export flows by HS code and partner country, from Japan Customs.

***

*Data source: tabelog.com public pages. Unofficial; not affiliated with Kakaku.com Inc. Factual business data only — no review content, no user data. Users are responsible for their own compliance with the source site's terms and applicable law.*

# Actor input Schema

## `prefecture` (type: `string`):

REQUIRED. Japanese prefecture: English name ("Tokyo"), Japanese ("東京都") or JIS code ("13").

## `area` (type: `string`):

Optional. A tabelog area code copied from the site URL — works for EVERY neighbourhood in Japan: `A1304` (district block), `A130401` (sub-area, parent derived automatically), `C13104` (municipality) or a full path `A1304/A130401/R5184` (station). Built-in English slugs: shinjuku, shibuya, ikebukuro, yoyogi, shinjuku-gyoen, okubo, shin-okubo. Leave empty to scrape the whole prefecture.

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

Optional. A tabelog genre slug as it appears in listing URLs: ramen, sushi, izakaya, cafe, yakiniku, italian, french, chinese, curry, sweets, yakitori, tonkatsu... (aliases: bbq→yakiniku, coffee→cafe, noodles→ramen). An unknown slug fails with an explicit upstream 404 — never silent wrong data.

## `minRating` (type: `integer`):

Optional. Keep only restaurants whose tabelog rating is at least this value (0-5 scale, e.g. 3). Unrated restaurants ("-") are excluded when set. Applied client-side to the listing rating.

## `detailFetch` (type: `boolean`):

When true, each record costs one extra request and adds the published business info: street address, phone, kana reading, business hours, closed days, coordinates. When false (default), the actor emits listing data only (name, genres, rating, review count, bookmark count, budgets, nearest station, URL) — 20 records per request.

## `maxItems` (type: `integer`):

Stop after this many dataset records.

## `maxApiRequests` (type: `integer`):

Hard budget of HTTP requests to tabelog.com for this run (1 per listing page of 20 restaurants + 1 per detail page). Requests are strictly serial with >= 1.2 s spacing. When the budget runs out the run completes with complete=false in RUN\_SUMMARY.

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Default: no proxy. Never used for rotation/evasion — a single serial session is kept per run.

## Actor input object example

```json
{
  "prefecture": "Tokyo",
  "area": "shinjuku",
  "genre": "ramen",
  "detailFetch": false,
  "maxItems": 10,
  "maxApiRequests": 15
}
```

# Actor output Schema

## `records` (type: `string`):

Structured records with source attribution (source, sourceUrl, license, retrievedAt) on every item.

# 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 = {
    "prefecture": "Tokyo",
    "area": "shinjuku",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/japan-restaurants-tabelog").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 = {
    "prefecture": "Tokyo",
    "area": "shinjuku",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/japan-restaurants-tabelog").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 '{
  "prefecture": "Tokyo",
  "area": "shinjuku",
  "maxItems": 10
}' |
apify call jpopendata/japan-restaurants-tabelog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpopendata/japan-restaurants-tabelog"
        }
    }
}

```

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/M7JOdQwUIx6TLOUfT/builds/rkwh8IKOPdFMcr5xX/openapi.json
