# Japan Hotels & Ryokan Prices (jalan.net) (`jpopendata/japan-hotels-jalan`) Actor

Japanese hotels & ryokan with prices, plans and ratings from jalan.net — by prefecture and area, English schema. Unofficial; not affiliated with Recruit Co., Ltd.

- **URL**: https://apify.com/jpopendata/japan-hotels-jalan.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 $3.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 Hotels & Ryokan Prices (jalan.net)

**Japanese hotels and ryokan with per-person prices, plan lists, ratings and facility facts — from jalan.net, Japan's largest domestic travel booking site, in a clean English schema.**

This Actor searches jalan.net's public hotel listings by prefecture and area and returns each facility as English-schema JSON: name, facility type (hotel/ryokan/pension/…), area and prefecture (with JIS code and English name), full address and postal code, guest rating and review count, per-person price range in JPY (tax included), the advertised stay plans (plan name, room type, meal condition, price), room count, check-in/out times, onsen flag and amenity list. Prices can be undated (each facility's lowest advertised price) or for a concrete check-in date, nights and guest count.

Many Japanese hotels and most traditional ryokan sell primarily — sometimes exclusively — through jalan.net, and the site is Japanese-only and Shift-JIS encoded, which makes it invisible to most international tooling. This Actor is the bridge.

> **Unofficial tool.** Not affiliated with or endorsed by Recruit Co., Ltd. or jalan.net. It collects **publicly available data only** (no login, no paywall), politely (strictly serial requests, ≥1.2 s apart, hard per-run budget, no block evasion), and extracts **factual business data only** — no review texts, no reviewer names, no personal data of any kind (relevant e.g. under GDPR: no personal data is collected or processed). Users are responsible for ensuring their own use of the data complies with the source site's terms and applicable law.

***

### Who is this for?

- **Hotel revenue management & rate shopping** — monitor competitors' jalan.net prices by area and date; inbound-record tourism and rising ADRs make Japanese OTA price data valuable, and jalan-only ryokan never show up on Booking.com.
- **Travel startups & OTAs** — build inventory awareness of the Japanese domestic market, including facilities that don't exist on international platforms.
- **Market research & real estate** — hospitality supply, price levels, and ratings by region; onsen/ryokan segment analyses.
- **Data teams** — a stable English schema over a Shift-JIS, Japanese-only source.

### Sample output (dataset item)

```json
{
  "hotelName": "ロイヤルツインホテル京都八条口 ～みやびの湯～",
  "hotelType": "hotel",
  "area": "京都駅前",
  "largeArea": "京都駅周辺",
  "prefecture": "京都府",
  "prefectureEn": "Kyoto",
  "prefectureCode": "26",
  "address": "京都府京都市南区東九条室町４６－２",
  "postalCode": "601-8001",
  "rating": 4.7,
  "reviewCount": 2009,
  "minPriceJpy": 5880,
  "maxPriceJpy": 9724,
  "priceBasis": "per-person JPY, tax included — lowest advertised prices (no stay dates given)",
  "stay": null,
  "plans": [
    { "planName": "【朝食付き】スタンダードプラン", "roomType": "ツイン", "meal": "朝のみ", "pricePerPersonJpy": 9724, "priceTotalJpy": 19448 }
  ],
  "totalRooms": 219,
  "checkinTime": "15:00～",
  "checkoutTime": "～11:00",
  "onsen": true,
  "amenities": ["玄関前の車椅子用スロープ", "客室内車椅子可"],
  "access": "京都駅「中央改札口」を出て「八条西口」出口から徒歩約2分",
  "url": "https://www.jalan.net/yad358756/",
  "detailFetched": true,
  "source": "じゃらんnet (jalan.net)",
  "sourceUrl": "https://www.jalan.net/",
  "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-08-25T09:12:44Z"
}
```

### Input example

```json
{
  "prefecture": "Kyoto",
  "area": "京都駅",
  "checkin": "2026-09-15",
  "nights": 1,
  "guests": 2,
  "maxItems": 50
}
```

`prefecture` is required (JIS code, Japanese or English name). `area` narrows to one of the prefecture's jalan areas (code or Japanese name substring; the run log lists all available areas). Without `checkin`, prices are each facility's lowest advertised rates.

### Pricing

Pay per result — see the pricing tab. One prefecture area is typically tens to a few hundred facilities.

### FAQ

**Where does the data come from?**
Live from jalan.net's public, login-free hotel list and facility pages at run time. Every record embeds the source, source URL, a license note, and the retrieval timestamp.

**Is this an official jalan.net / Recruit service?**
No. **Unofficial**, independently built and maintained, and **not affiliated with or endorsed by Recruit Co., Ltd.** It reads only publicly available pages.

**Are reviews included?**
Only the numeric rating average and review count. Review texts and reviewer names are **never extracted** — deliberately: review prose is user-generated copyrighted content and can contain personal data. The same applies to the hotels' own marketing prose (catch-phrases/descriptions), which stays on the source site. This keeps the output strictly factual business data, with no personal data (GDPR-relevant collection: none).

**Who is responsible for how the data is used?**
You are. The Actor collects publicly available factual data politely, but the legality of your specific use (redistribution, database rights, the source site's terms) is your responsibility as the user.

**Are prices accurate?**
Prices are what jalan.net advertised at retrieval time, per person, tax included, for the searched conditions (or the undated lowest advertised price). They change constantly — treat them as a snapshot, and re-run for fresh data.

**What about server load?**
Strictly serial requests, ≥1.2 s apart, ~30 facilities per list page, one extra request per facility detail, hard per-run request budget (max 60), exponential backoff, no CAPTCHA/login/block evasion. If jalan.net changes its page format, the Actor stops with a clear error instead of silently mis-parsing; if it blocks persistently, the run fails visibly.

### Search terms this Actor answers

jalan scraper · jalan.net scraper · Japan hotel prices data · Japan hotel scraper · ryokan data · Japanese OTA prices · Japan hotel market data · 宿泊料金 データ · Japan travel accommodation dataset · onsen ryokan list · Kyoto hotel prices · Japan hotel rate shopping

### 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 Renewable Energy FIT/FIP Facilities** — METI-certified renewable installations, privacy-safe schema.
- **Japan Financial Licenses & Registrations** — FSA-licensed banks, securities firms, crypto exchanges and more.
- **Japan Construction & Real-Estate Licenses** — licensed contractors and brokers from MLIT's official register.
- **Japan Trade Statistics** — monthly import/export flows by HS code and partner country, from Japan Customs.

***

*Unofficial tool; not affiliated with Recruit Co., Ltd. Publicly available data only; users are responsible for compliance with the source site's terms and applicable law. No personal data is collected.*

# Actor input Schema

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

REQUIRED. Prefecture to search: JIS code ("26"), Japanese ("京都府") or English ("Kyoto"). jalan.net hotel lists are prefecture-scoped.

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

Optional area filter: a jalan LRG area code ("260500" or "LRG\_260500") or a substring of the Japanese area name (e.g. "京都駅" matches 京都駅周辺). Leave empty to search all areas of the prefecture. The run log lists every area code/name the prefecture offers.

## `keyword` (type: `string`):

Optional case-insensitive substring filter on the facility name (Japanese or English), applied client-side.

## `checkin` (type: `string`):

ISO date YYYY-MM-DD. When set, prices reflect availability for this stay (with nights/guests). When empty, the actor returns each facility's lowest advertised prices (undated).

## `nights` (type: `integer`):

Number of nights (only meaningful with checkin).

## `guests` (type: `integer`):

Number of adult guests per room (only meaningful with checkin).

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

When true (default), each facility costs one extra request but includes full address, postal code, room count, check-in/out times, onsen flag and amenity list. When false the actor emits list data only (name, area, rating, review count, prices, plans) — cheaper.

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

Stop after this many dataset records.

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

Hard budget of HTTP requests to jalan.net for this run (1 hub page + list pages of 30 facilities + 1 per facility detail). 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 — one client identity per run.

## Actor input object example

```json
{
  "prefecture": "Kyoto",
  "area": "京都駅",
  "keyword": "温泉",
  "checkin": "2026-09-15",
  "nights": 1,
  "guests": 2,
  "includeDetails": true,
  "maxItems": 10,
  "maxApiRequests": 30
}
```

# Actor output Schema

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

Structured hotel/ryokan 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": "Kyoto",
    "maxItems": 10
};

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

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

```

## MCP server setup

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

```

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/9H5aBqXYxcqfYrAN3/builds/URuNY0KoMmgq5wLTi/openapi.json
