# Retty Japan Restaurant Scraper (`piquno/retty-japan-restaurant-scraper`) Actor

Scrape restaurant data from Retty (レッティ), Japan's largest real-name restaurant review service with 700,000+ listings. Names, genres, budgets, match scores, stations, addresses, coordinates, phone numbers, hours, seating and amenities across all 47 prefectures. HTTP-only, no API key required.

- **URL**: https://apify.com/piquno/retty-japan-restaurant-scraper.md
- **Developed by:** [Piquno](https://apify.com/piquno) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Retty Japan Restaurant Scraper

Scrape restaurant data from **[Retty (レッティ)](https://retty.me)**, Japan's largest real-name restaurant review service, covering 700,000+ restaurants across all 47 prefectures. Get names, genres, lunch and dinner budgets, Retty match scores, nearest stations, and, with detail pages enabled, full addresses, GPS coordinates, phone numbers, opening hours, closed days, seating, private rooms, smoking policy, accepted cards and ratings.

HTTP-only. No browser, no API key, no login.

### Why Retty

Retty sits alongside Tabelog and HotPepper Gourmet as one of Japan's three major restaurant platforms, but with a different signal: reviews are tied to real, named users, and each restaurant carries a **match score** and an **Excellent / Good / Average** recommendation breakdown rather than an anonymous star average. That makes it a useful third source for:

- **Market research and site selection**: restaurant density, genre mix and budget bands by area
- **Location intelligence**: coordinates and station access for every venue
- **Lead generation**: phone numbers, websites and reservation availability for restaurant-facing businesses
- **Travel and food apps**: budgets, hours, private rooms and payment methods in a clean schema
- **Cross-platform matching**: join with Tabelog and HotPepper data by name, phone or coordinates

### How it works

Retty does not expose a paginated search. Instead it publishes curated **"top 20" lists** for every sub-area, and again for every genre, occasion and theme within that sub-area. This Actor walks that lattice, collects the restaurant cards from each list, and **deduplicates by restaurant ID**, so a Tokyo run across all sub-areas and genres yields thousands of unique restaurants rather than twenty.

You control how wide it goes with **Crawl depth**:

| Mode | What it reads | Rough yield |
|---|---|---|
| Areas only | One list per area | ~20 per area |
| Sub-areas | One list per sub-area | ~20 per sub-area |
| Sub-areas + genres *(default)* | Every genre list per sub-area | Hundreds per area |
| Full | Genres + occasions + themed lists | Widest coverage |

Restaurants are pushed to the dataset as each list is parsed, so you are charged only for what is actually delivered, and a run that stops early still returns everything it found.

### Input

| Field | Description |
|---|---|
| **Prefecture** | Any of the 47 prefectures. Defaults to Tokyo. |
| **Area** | Optional. An area name substring as shown on Retty (`新宿`, `渋谷`, `銀座`) or an `ARE` code. Blank scrapes the whole prefecture. |
| **Sub-area** | Optional. Narrow further by name (`歌舞伎町`) or `SUB` code. |
| **Genre** | Optional. One cuisine, e.g. Izakaya, Sushi, Ramen, Yakiniku, Cafe. Leave as *Any* to crawl all genres. |
| **Custom category code** | Advanced. Any `LCATx/CATy` path for a genre not in the list. |
| **Crawl depth** | See table above. |
| **Start URLs** | Advanced. Paste any Retty list URLs to scrape directly; overrides the fields above. |
| **Max results** | Stop after this many unique restaurants. |
| **Include detail pages** | Fetch each restaurant's page for the full address, coordinates, phone, hours, seats and rating. One extra request per restaurant. |
| **Delay / Concurrency** | Politeness controls. Defaults are conservative. |

Example, 200 izakaya in Shinjuku with full details:

```json
{
  "prefecture": "13",
  "area": "新宿",
  "genre": "LCAT1/CAT350",
  "maxResults": 200,
  "includeDetails": true
}
```

### Output

One item per restaurant. Listing-card fields are always present; detail fields appear when **Include detail pages** is on.

```json
{
  "restaurantId": "100001455698",
  "name": "肉バル肉ブーケ＆チーズ食べ飲み放題 個室 Meat StanD 新宿東口店",
  "url": "https://retty.me/area/PRE13/ARE1/SUB101/100001455698/",
  "station": "西武新宿駅",
  "walkMinutes": 2,
  "genres": ["居酒屋", "イタリアンバル", "肉バル"],
  "dinnerBudget": "〜3,000円",
  "lunchBudget": "〜2,000円",
  "matchScore": 4.45,
  "payPayAccepted": true,
  "onlineReservation": true,
  "isPromoted": false,
  "photo": "https://ximg.retty.me/crop/s524x524/q80/das/-/retty/img_ebisu/restaurant/100001455698/archive/....jpg",
  "prefectureCode": "PRE13",
  "areaCode": "ARE1",
  "subAreaCode": "SUB101",

  "address": "東京都新宿区歌舞伎町１-１７-６ アツミビル３F",
  "postalCode": "1600021",
  "latitude": 35.694295,
  "longitude": 139.7013186,
  "phone": "050-5262-1077",
  "phoneDirect": "03-6636-4386",
  "rating": 4.4,
  "reviewCount": 14,
  "wentCount": 17,
  "recommendExcellent": 13,
  "recommendGood": 3,
  "recommendAverage": 1,
  "hours": "[全日] 12:00 〜 24:00 L.O. 23:30",
  "closedDays": "無休 年末年始（要確認）",
  "totalSeats": "70席",
  "privateRoom": "有 2人用 4人用 6人用 7人以上用",
  "smoking": "全席喫煙可",
  "creditCards": ["VISA", "Mastercard", "Amex", "Diners", "JCB"],
  "qrPayments": ["PayPay"],
  "wifi": "有",
  "homepage": ["https://meat-stand.owst.jp/"],
  "lastReviewDate": "2026-09-04"
}
```

The Output tab offers three views: **Overview**, **Location & contact**, and **Facilities**. Export to JSON, CSV or Excel as usual.

### What this Actor does not collect

Only restaurant business information that Retty publishes on each listing. It does **not** collect review text, reviewer names, profiles or any other user content. Aggregate counts (rating, review count, recommendation breakdown) are included.

### Tips

- Start with **Sub-areas** depth and a small **Max results** to check an area, then widen.
- For a whole-prefecture pull, leave **Area** blank and set **Max results** generously; deduplication keeps the count honest.
- **Include detail pages** roughly doubles request count. Turn it on only when you need addresses, coordinates or hours.
- Restaurant IDs are stable. Re-run on a schedule and diff on `restaurantId` to track new openings.

### Related Actors

Same author, same schema conventions, so the three join cleanly:

- [HotPepper Gourmet Japan Restaurant Scraper](https://apify.com/piquno/hotpepper-gourmet-japan-restaurant-scraper)
- [Tabelog Japan Restaurant Scraper](https://apify.com/piquno/tabelog-japan-restaurant-scraper)

### Support

Found a page that doesn't parse, or need a field that isn't here? Open an issue on the Actor's Issues tab and include the Retty URL.

Unofficial. Not affiliated with Retty, Inc.

# Actor input Schema

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

Japanese prefecture to scrape. All 47 supported.

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

Narrow to one area within the prefecture. Accepts an area name substring as shown on Retty (e.g. 新宿, 渋谷, 銀座) or an ARE code (e.g. ARE1). Leave blank for the whole prefecture.

## `subArea` (type: `string`):

Narrow further to one sub-area by name substring (e.g. 歌舞伎町) or SUB code (e.g. SUB101).

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

Restrict to one genre. Leave as 'Any' to crawl every genre list for each sub-area.

## `categoryCode` (type: `string`):

Any Retty category path not in the Genre list, in the form LCAT1/CAT350. Overrides Genre when set.

## `crawlMode` (type: `string`):

Retty publishes curated 'top 20' lists rather than paginated results. 'Sub-areas' reads one list per sub-area (fast, ~20 per sub-area). 'Genres' also reads every genre list per sub-area (much wider coverage). 'Full' adds occasion and themed lists as well.

## `startUrls` (type: `array`):

Paste retty.me list URLs (area, sub-area, genre, purpose or collection pages) to scrape directly. Overrides prefecture/area/genre when set.

## `maxResults` (type: `integer`):

Stop after this many unique restaurants.

## `includeDetails` (type: `boolean`):

Fetch each restaurant's page for address, coordinates, phone, hours, closed days, seats, private rooms, smoking, cards, rating and review count. One extra request per restaurant.

## `requestDelaySecs` (type: `integer`):

Polite pause after each request, per worker.

## `maxConcurrency` (type: `integer`):

Parallel requests. Keep low to stay polite.

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

Retty only serves listing pages to residential IP addresses and answers 406 to datacenter ranges, so Apify residential proxies are required. Japanese IPs work best.

## Actor input object example

```json
{
  "prefecture": "13",
  "area": "新宿",
  "genre": "",
  "crawlMode": "genres",
  "startUrls": [],
  "maxResults": 100,
  "includeDetails": false,
  "requestDelaySecs": 1,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}
```

# Actor output Schema

## `restaurants` (type: `string`):

Restaurant records from Retty. Listing-card fields are always present; detail fields are filled when includeDetails is true.

# 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 = {
    "area": "新宿",
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "JP"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piquno/retty-japan-restaurant-scraper").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 = {
    "area": "新宿",
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "JP",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piquno/retty-japan-restaurant-scraper").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 '{
  "area": "新宿",
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}' |
apify call piquno/retty-japan-restaurant-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piquno/retty-japan-restaurant-scraper"
        }
    }
}
```

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/q6Tiam6hh1JNZAlav/builds/zcYK1KtqefPkvceyG/openapi.json
