# Japan Restaurants Scraper (HotPepper Gourmet) (`jpopendata/japan-restaurants-hotpepper`) Actor

Restaurants from hotpepper.jp by prefecture and genre — budgets, address, business phone, hours, seats, private rooms and other facility facts in a clean English schema. Unofficial; not affiliated with Recruit Co., Ltd. No review text, reviewer data or coupon copy.

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

## Pricing

from $2.00 / 1,000 record scrapeds

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 (HotPepper Gourmet)

**Restaurant data from HotPepper Gourmet (ホットペッパーグルメ) — Japan's biggest restaurant reservation site — by prefecture and cuisine genre, in a clean English schema: budgets, addresses, business phone numbers, opening hours, seat counts, private rooms and other facility facts.**

This Actor scrapes public hotpepper.jp listing pages (and optionally each restaurant's detail page) and returns structured JSON: restaurant name, genre, sub-area, lunch/dinner budget ranges as parsed yen values, access line, street address, published business phone, opening hours, closed days, nearest station, coordinates — plus the facility facts HotPepper is uniquely strong at: total seats, maximum banquet capacity, private rooms, tatami/horigotatsu seating, counter seats, charter availability, Wi-Fi, parking, smoking policy, all-you-can-drink/eat and credit-card acceptance.

> **Unofficial tool.** Not affiliated with or endorsed by Recruit Co., Ltd. or HotPepper Gourmet. This Actor reads **public web pages only** — it does not use the リクルートWEBサービス (HotPepper Gourmet) API. It collects **publicly available factual business data only** — it never collects review text (口コミ, copyrighted works), reviewer identities, staff data, coupon or advertising copy, 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?

- **B2B suppliers and services** — lead lists of restaurants by prefecture and genre with published business phones, seat counts and banquet capacity (the classic signal for wholesale, POS, staffing and reservation-tech leads).
- **Market research and location intelligence** — density, budget positioning and facility mix of restaurants by area and cuisine.
- **Travel and food-tech products** — English-schema Japanese restaurant data including private-room and smoking-policy facts that international diners actually ask about.

### Sample output (dataset item)

```json
{
  "restaurantName": "居酒屋 よりみち 八王子店",
  "genre": ["居酒屋"],
  "budgetDinner": { "raw": "2001～3000円", "minJpy": 2001, "maxJpy": 3000 },
  "budgetLunch": null,
  "address": "東京都八王子市三崎町2-13",
  "prefecture": "東京都",
  "prefectureEn": "Tokyo",
  "prefectureCode": "13",
  "area": "八王子",
  "nearestStation": "八王子",
  "access": "八王子駅より徒歩１分。駅を出て左手に進み、サンドラックの角を左折した先にございます。",
  "phone": "042-686-1808",
  "businessHours": "月～木、日、祝日: 16:00～翌1:00 （料理L.O. 翌0:00 ドリンクL.O. 翌0:00） 金、土、祝前日: 16:00～翌4:30 ...",
  "closedDays": "無休",
  "seats": 150,
  "maxBanquetCapacity": 150,
  "privateRoom": true,
  "tatami": true,
  "horigotatsu": true,
  "counterSeats": false,
  "charterAvailable": true,
  "wifi": false,
  "parking": true,
  "smoking": "全席喫煙可",
  "allYouCanDrink": true,
  "allYouCanEat": false,
  "creditCard": "利用不可",
  "latitude": 35.6569119,
  "longitude": 139.337419,
  "url": "https://www.hotpepper.jp/strJ001284014/",
  "hotpepperId": "J001284014",
  "detailFetched": true,
  "source": "ホットペッパーグルメ (HotPepper Gourmet, hotpepper.jp)",
  "sourceUrl": "https://www.hotpepper.jp/",
  "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-08-25T14:24:46.000Z"
}
```

In cheap list-only mode (`detailFetch: false`, the default) each listing page request yields 20 records with name, genre, sub-area, budgets, access line, phone (when the cassette lists one) and coordinates; the detail-only fields are `null`.

### Input example

```json
{
  "prefecture": "Tokyo",
  "genre": "izakaya",
  "area": "新宿",
  "maxItems": 40,
  "detailFetch": true
}
```

- **prefecture** (required): `"Tokyo"`, `"東京都"` or JIS code `"13"` — all 47 prefectures (the mapping to HotPepper service areas is built in and live-verified).
- **genre** (optional): a HotPepper genre code from the site URL (`G001`), a Japanese label (`居酒屋`, `和食`, `ラーメン`, ...) or an English alias (`izakaya`, `ramen`, `yakiniku`, `cafe`, `korean`, ...). Unknown values are refused with guidance — never silent wrong data. Empty = all 17 genres, walked in site order.
- **area** (optional): a place-name substring matched client-side against each restaurant's own sub-area, access line, station and address (e.g. `新宿`, `渋谷`, `梅田`). Filtered-out restaurants never cost a detail request.

### 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 and facility fields.

### FAQ

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

**Is this an official HotPepper/Recruit service? Does it use the HotPepper API?**
No and no. **Unofficial**, independently built and maintained, not affiliated with or endorsed by Recruit Co., Ltd. It deliberately does **not** use the リクルートWEBサービス API — it reads the public web pages.

**Does it collect reviews, coupons or ad copy?**
**No, by design.** Review text is a copyrighted work and reviewer identities are personal data — review pages (`/report/`) are never requested, and the URL guard refuses them outright. Advertising cassettes (【PR】) are skipped, and coupon copy, catch copy and SEO keyword lines are never parsed. Automated tests assert with real-page specimens that none of this can ever appear in the output.

**Where do the phone numbers come from?**
From the page's own structured business data (JSON-LD `telephone` and the listing's data attributes). The `/tel/` phone-reveal endpoint is **never** requested.

**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 hotpepper.jp 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, or residential with `apifyProxyCountry: "JP"`) usually resolves it.

**Is the whole of Japan covered?**
Yes — all 47 prefectures and all 17 HotPepper cuisine genres. 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

hotpepper scraper · hotpepper gourmet API · Japan restaurant data · Japanese restaurant database · Tokyo izakaya list · Japan restaurant leads · restaurant phone numbers Japan · private room restaurants Tokyo data · Japan food and beverage market research · ホットペッパーグルメ データ · restaurant seats capacity dataset Japan · Japan restaurant reservation data

### More Japan data Actors by the same developer

- **Japan Restaurants Scraper (Tabelog)** — the same aligned schema over tabelog.com with the famous Tabelog rating: use it when you need the quality signal; use this Actor for facility facts and reservation-side coverage.
- **Japan Restaurants Scraper (Gurunavi)** — the same aligned schema over r.gnavi.co.jp, where shops publish their own business phone numbers: the strongest source for restaurant B2B lead lists.
- **Japan Beauty Salons Scraper (HotPepper Beauty)** — salons with seats, staff counts and price anchors from beauty.hotpepper.jp.
- **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 Construction & Real-Estate Licenses** — licensed contractors and brokers from MLIT's official register.

***

*Data source: hotpepper.jp public pages. Unofficial; not affiliated with Recruit Co., Ltd. Factual business data only — no review content, no user data, no coupon/ad copy. 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").

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

Optional. A HotPepper genre code from the site URL (`G001` from https://www.hotpepper.jp/SA11/G001/), a Japanese label (居酒屋, 和食, ラーメン, ...) or an English alias: izakaya, japanese, western, italian, french, chinese, yakiniku, asian, karaoke, bar, ramen, cafe, okonomiyaki, korean... Unknown values are refused with guidance — never silent wrong data. Leave empty to walk ALL 17 genres in site order.

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

Optional. A place-name substring (e.g. "新宿", "Shibuya" in Japanese: "渋谷") matched CLIENT-SIDE against each restaurant's sub-area name, access line, station and address. Records that do not match are skipped before any detail request is spent on them. Leave empty for the whole prefecture.

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

When true, each record costs one extra request and adds the published business info: street address, business phone (from the page's structured data — the phone-reveal endpoint is never called), opening hours, closed days, nearest station, seat count, banquet capacity and facility facts (private rooms, tatami, counter, charter, Wi-Fi, parking, smoking policy, all-you-can-drink/eat, credit cards). When false (default), the actor emits listing data only — 20 records per request with name, genre, sub-area, budgets, access line, phone (when listed) and coordinates.

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

Stop after this many dataset records.

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

Hard budget of HTTP requests to hotpepper.jp 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",
  "genre": "izakaya",
  "area": "新宿",
  "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",
    "genre": "izakaya",
    "maxItems": 10
};

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

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

```

## MCP server setup

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

```

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/m18ZGxaoBKLoZ4nHC/builds/2MB4i0TqwMXPI2bXx/openapi.json
