# Japan Rail Scraper - JR, Shinkansen, Metro Timetables (`jungle_synthesizer/japan-rail-timetable-scraper`) Actor

Scrape Japan rail timetables and fares from Yahoo! Transit. Covers JR Group, every Shinkansen line, Tokyo Metro, Toei, and major private rail (Odakyu, Tokyu, Keio, Hankyu, Kintetsu, etc). Returns IC fare, transfers, segments, train type, JR Pass eligibility. Hyperdia replacement.

- **URL**: https://apify.com/jungle\_synthesizer/japan-rail-timetable-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Travel, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Rail Timetable Scraper - JR, Shinkansen & Metro

Scrape Japan rail timetables and fares from [Yahoo! Transit](https://transit.yahoo.co.jp/). Returns ranked itineraries, segment-by-segment routing, IC-card fares, transfer counts, train type, and JR Pass eligibility for the JR Group, every Shinkansen line, Tokyo Metro, Toei, and the major private railways — which is more Japanese rail data than any single Apify actor has ever indexed.

---

### Japan Rail Timetable Scraper Features

- Scrapes A-to-B journey itineraries with up to three ranked routes per query.
- Returns scheduled departure boards by station and line.
- Covers JR East, JR West, JR Central, JR Kyushu, JR Hokkaido, and JR Shikoku — every Shinkansen included.
- Indexes Tokyo Metro, Toei Subway, and the major private rail operators (Odakyu, Tokyu, Keio, Seibu, Tobu, Keikyu, Hankyu, Hanshin, Kintetsu, Meitetsu, Nankai, Sotetsu).
- Splits IC-card fare from base fare and surfaces transfer counts. Most aggregators don't.
- Resolves romaji station names for ~80 highest-traffic hubs (every Shinkansen station, every Tokyo / Osaka / Kyoto major). Accepts kanji or hiragana for full coverage.
- Classifies train type — Shinkansen, Limited Express, Express, Rapid, Local — and named services (Nozomi, Hikari, Kodama, Sakura, Tsubame, Hayabusa, Komachi, Narita Express, Romancecar).
- Computes JR Pass eligibility per route, correctly excluding Nozomi, Mizuho, and Hayabusa.
- Pure HTML scraping — no Playwright, no captcha solving.

---

### Who Uses Japan Rail Data?

- **Inbound-tourism platforms** — Surface accurate timetables and fares to visitors planning trips. Japan is on track for 60M annual tourists by 2030, and most of them ride trains.
- **JR Pass calculators** — Decide whether the 7/14/21-day pass beats individual tickets. Now you have the data to actually compare.
- **Travel aggregators** — Feed clean rail data into multi-modal trip planners alongside flights and hotels.
- **MaaS startups** — Build first-mile/last-mile services that integrate with the world's densest rail network.
- **Logistics & freight planners** — Track passenger schedules to align operations around peak rail traffic.
- **Researchers & data journalists** — Hyperdia shut down public access in 2022. There hasn't been a clean replacement until now.

---

### How Japan Rail Timetable Scraper Works

1. Pick a mode — `journey_search` for A-to-B itineraries, `station_board` for line-by-line departures from a single station.
2. Enter origin and destination station names in kanji, hiragana, or romaji. The scraper resolves romaji for major hubs automatically; for smaller stations, paste the kanji.
3. Optionally specify date and time. Empty values default to 24 hours ahead at 09:00 JST, which is a reasonable starting point.
4. Run the actor. It hits Yahoo! Transit, parses the server-rendered HTML, and returns up to `maxItems` records.

---

### Input

```json
{
  "mode": "journey_search",
  "origin": "東京",
  "destination": "京都",
  "date": "",
  "time": "",
  "includeShinkansen": true,
  "maxItems": 10
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `journey_search` | Either `journey_search` (A-to-B itineraries) or `station_board` (departures from a single station). |
| `origin` | string | `東京` | Origin station. Kanji, hiragana, or romaji. Used in `journey_search` mode. |
| `destination` | string | `京都` | Destination station. Same encoding rules as origin. |
| `station` | string | `東京` | Station for `station_board` mode. Same encoding rules. |
| `date` | string | `""` | YYYY-MM-DD. Empty defaults to 24h ahead. |
| `time` | string | `""` | HH:MM (24h). Empty defaults to 09:00. |
| `includeShinkansen` | boolean | `true` | Allow Shinkansen segments in journey results. |
| `maxItems` | integer | `10` | Cap on output rows (1-500). |
| `proxyConfiguration` | object | Apify residential, JP | Override only if you have a reason. |

#### Station Board Example

```json
{
  "mode": "station_board",
  "station": "東京",
  "maxItems": 50
}
```

Returns up to 50 scheduled departures from Tokyo Station, walking each major line's timetable.

***

### Japan Rail Timetable Scraper Output Fields

#### Journey Search Mode

```json
{
  "mode": "journey_search",
  "route_id": "2026-04-26-1",
  "origin_station": "東京",
  "origin_station_en": "Tokyo",
  "origin_line": "ＪＲ東海道本線",
  "destination_station": "京都",
  "destination_station_en": "Kyoto",
  "destination_line": "ＪＲ琵琶湖線新快速",
  "departure_time": "2026-04-26T09:20:00",
  "arrival_time": "2026-04-26T17:42:00",
  "duration_minutes": 502,
  "transfers": 4,
  "segments": [
    "ＪＲ東海道本線 (熱海行) | dep 09:20 東京 -> arr 11:09 熱海 | platform 10->2",
    "ＪＲ東海道本線 (当駅始発浜松行) | dep 11:14 熱海 -> arr 13:44 浜松 | platform 3->4",
    "ＪＲ東海道本線 (当駅始発豊橋行) | dep 13:46 浜松 -> arr 14:21 豊橋 | platform 3->8",
    "ＪＲ東海道本線快速 (当駅始発米原行) | dep 14:32 豊橋 -> arr 16:39 米原 | platform 5->2",
    "ＪＲ琵琶湖線新快速 (播州赤穂行) | dep 16:47 米原 -> arr 17:42 京都 | platform 3->5"
  ],
  "total_fare_yen": 8470,
  "ic_card_fare_yen": 8470,
  "seat_fee_yen": 0,
  "distance_km": 513.6,
  "train_type": "Rapid",
  "train_name": "",
  "operator": "JR",
  "operator_type": "jr",
  "is_shinkansen": false,
  "jr_pass_eligible": true,
  "source_url": "https://transit.yahoo.co.jp/search/result?...",
  "scraped_at": "2026-04-25T14:13:08.073Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | `journey_search` for itinerary records. |
| `route_id` | string | Route identifier within the result set (1, 2, 3 prefixed by date). |
| `origin_station` | string | Origin station in kanji. |
| `origin_station_en` | string | Origin station romanised when available. |
| `origin_line` | string | First-leg line name. |
| `destination_station` | string | Destination in kanji. |
| `destination_station_en` | string | Destination romanised when available. |
| `destination_line` | string | Last-leg line name. |
| `departure_time` | string | Scheduled departure (ISO8601 JST). |
| `arrival_time` | string | Scheduled arrival (ISO8601 JST). |
| `duration_minutes` | integer | Total journey duration. |
| `transfers` | integer | Number of train transfers. |
| `segments` | array<string> | Per-leg summary: line, destination, departure, arrival, platforms. |
| `total_fare_yen` | integer | Total fare in JPY (IC-priority). |
| `ic_card_fare_yen` | integer | IC-card (Suica/Pasmo) fare. |
| `seat_fee_yen` | integer | Reserved-seat / Shinkansen supplement. 0 unless the page surfaces it. |
| `distance_km` | number | Total distance. |
| `train_type` | string | Highest-tier type: Shinkansen, Limited Express, Express, Rapid, Local. |
| `train_name` | string | Named service (Nozomi, Hikari, Narita Express, etc.) or empty. |
| `operator` | string | Primary operator name. |
| `operator_type` | string | One of: `jr_shinkansen`, `jr`, `metro`, `private_rail`, `monorail`, `new_transit`, `other`. |
| `is_shinkansen` | boolean | True if any segment is on a Shinkansen line. |
| `jr_pass_eligible` | boolean | True if every JR/Shinkansen segment is covered by the nationwide JR Pass. |
| `source_url` | string | Yahoo! Transit URL the row was extracted from. |
| `scraped_at` | string | ISO8601 timestamp. |

#### Station Board Mode

```json
{
  "mode": "station_board",
  "route_id": "16646",
  "origin_station": "東京",
  "origin_station_en": "Tokyo",
  "origin_line": "ＪＲ東海道新幹線",
  "destination_station": "博",
  "destination_line": "ＪＲ東海道新幹線",
  "departure_time": "2026-04-25T06:00:00",
  "train_type": "Shinkansen",
  "train_name": "",
  "operator": "JR Central",
  "operator_type": "jr_shinkansen",
  "is_shinkansen": true,
  "jr_pass_eligible": true,
  "direction": "ＪＲ東海道新幹線 新大阪・博多方面",
  "station_id": "22828",
  "source_url": "https://transit.yahoo.co.jp/timetable/22828/1341"
}
```

The same field set as journey mode, with `direction` and `station_id` populated. Fare, distance, and transfer fields are zero in this mode — they don't apply to single-departure rows.

***

### FAQ

#### How do I scrape Japan rail timetables?

Japan Rail Timetable Scraper hits Yahoo! Transit, the most stable English-friendly back-end for Japanese rail data. Pick `journey_search` to get A-to-B itineraries between two stations, or `station_board` to walk every line departing from one station. Enter station names in kanji, hiragana, or (for major hubs) romaji.

#### How much does Japan Rail Timetable Scraper cost to run?

Japan Rail Timetable Scraper uses pay-per-event pricing. Each run costs $0.10 to start plus $0.001 per record returned. A full journey-search query typically returns 3 records, putting it well under a cent in record charges.

#### Does this scraper work without proxies?

Japan Rail Timetable Scraper runs without proxies in most cases. Yahoo! Transit doesn't gate the public route planner behind a captcha or WAF. The default proxy configuration is Apify Residential JP as a defensive measure — flip `useApifyProxy` off if you'd prefer no proxy at all.

#### Can I get Shinkansen seat fees and reserved-seat supplements?

Japan Rail Timetable Scraper surfaces the seat-fee field but does not always populate it. Yahoo! Transit's summary view reports the IC-priority fare; the per-route detail page (the next planned enhancement) is where 特急料金 / 新幹線料金 lives. For now, expect `seat_fee_yen: 0` on most rows — open an issue if you need it now.

#### How do I look up a station that's not in the romaji map?

Use the kanji or hiragana name. The actor passes any non-ASCII input directly to Yahoo! Transit, which understands every Japanese station. Romaji shortcuts only exist for the ~80 highest-traffic hubs (every Shinkansen station plus major Tokyo / Osaka / Kyoto / Sapporo / Fukuoka stations) since maintaining a full romaji index would be a separate project.

#### Is JR Pass eligibility accurate?

Japan Rail Timetable Scraper sets `jr_pass_eligible: true` only when every segment runs on a JR-operated line and no segment uses a Nozomi, Mizuho, or Hayabusa service — which is exactly the rule the official JR Pass terms encode. Mixed itineraries that cross onto private rail return `false`, as they should.

***

### Need More Features?

Need per-segment seat fees, a regional JR Pass eligibility breakdown, or a bilingual station name on every row? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use Japan Rail Timetable Scraper?

- **No supply on Apify.** Hyperdia died in 2022 and Navitime's enterprise API runs ¥200,000+/month. This is the gap.
- **One actor, every operator.** JR Group, all Shinkansen, Tokyo Metro, Toei, and a long list of private rail operators in a single, consistent schema. You don't have to stitch together five sources.
- **Clean output.** Returns structured JSON with split fares, segment routing, and JR Pass logic baked in — so you spend less time parsing Japanese rail conventions and more time using the data.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `mode` (type: `string`):

journey\_search = A->B itineraries from Yahoo! Transit's route planner. station\_board = scheduled departures from a single station's line timetables.

## `origin` (type: `string`):

Station name in kanji (東京), hiragana (とうきょう), or romaji (Tokyo). For journey\_search mode. Romaji works for the ~80 highest-traffic stations (every Shinkansen station + major Tokyo/Osaka/Kyoto hubs); use kanji for full coverage.

## `destination` (type: `string`):

Station name in kanji, hiragana, or romaji. For journey\_search mode.

## `station` (type: `string`):

Station name for station\_board mode. Same encoding rules as origin/destination.

## `date` (type: `string`):

Empty = today. Used by both modes.

## `time` (type: `string`):

Empty = now. Used by journey\_search.

## `includeShinkansen` (type: `boolean`):

Allow Shinkansen segments in journey results. Default: true.

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

Cap on output rows. journey\_search returns up to 3 itineraries per query (more if multiple queries). station\_board pulls up to N departures across a station's lines. Default: 10.

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

Defaults to Apify residential proxy in JP. Override only if you have a reason.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "journey_search",
  "origin": "東京",
  "destination": "京都",
  "station": "東京",
  "date": "",
  "time": "",
  "includeShinkansen": true,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "journey_search",
    "origin": "東京",
    "destination": "京都",
    "station": "東京",
    "date": "",
    "time": "",
    "includeShinkansen": true,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "JP"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/japan-rail-timetable-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "journey_search",
    "origin": "東京",
    "destination": "京都",
    "station": "東京",
    "date": "",
    "time": "",
    "includeShinkansen": True,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "JP",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/japan-rail-timetable-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "journey_search",
  "origin": "東京",
  "destination": "京都",
  "station": "東京",
  "date": "",
  "time": "",
  "includeShinkansen": true,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}' |
apify call jungle_synthesizer/japan-rail-timetable-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/japan-rail-timetable-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Japan Rail Scraper - JR, Shinkansen, Metro Timetables",
        "description": "Scrape Japan rail timetables and fares from Yahoo! Transit. Covers JR Group, every Shinkansen line, Tokyo Metro, Toei, and major private rail (Odakyu, Tokyu, Keio, Hankyu, Kintetsu, etc). Returns IC fare, transfers, segments, train type, JR Pass eligibility. Hyperdia replacement.",
        "version": "1.0",
        "x-build-id": "FsefhKchq6fBj4kGy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~japan-rail-timetable-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-japan-rail-timetable-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~japan-rail-timetable-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-japan-rail-timetable-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~japan-rail-timetable-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-japan-rail-timetable-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "sp_intended_usage",
                    "sp_improvement_suggestions"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "mode": {
                        "title": "Scrape Mode",
                        "enum": [
                            "journey_search",
                            "station_board"
                        ],
                        "type": "string",
                        "description": "journey_search = A->B itineraries from Yahoo! Transit's route planner. station_board = scheduled departures from a single station's line timetables.",
                        "default": "journey_search"
                    },
                    "origin": {
                        "title": "Origin Station",
                        "type": "string",
                        "description": "Station name in kanji (東京), hiragana (とうきょう), or romaji (Tokyo). For journey_search mode. Romaji works for the ~80 highest-traffic stations (every Shinkansen station + major Tokyo/Osaka/Kyoto hubs); use kanji for full coverage.",
                        "default": "東京"
                    },
                    "destination": {
                        "title": "Destination Station",
                        "type": "string",
                        "description": "Station name in kanji, hiragana, or romaji. For journey_search mode.",
                        "default": "京都"
                    },
                    "station": {
                        "title": "Station (board mode)",
                        "type": "string",
                        "description": "Station name for station_board mode. Same encoding rules as origin/destination.",
                        "default": "東京"
                    },
                    "date": {
                        "title": "Date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Empty = today. Used by both modes.",
                        "default": ""
                    },
                    "time": {
                        "title": "Time (HH:MM, 24h)",
                        "type": "string",
                        "description": "Empty = now. Used by journey_search.",
                        "default": ""
                    },
                    "includeShinkansen": {
                        "title": "Include Shinkansen",
                        "type": "boolean",
                        "description": "Allow Shinkansen segments in journey results. Default: true.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max Records",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on output rows. journey_search returns up to 3 itineraries per query (more if multiple queries). station_board pulls up to N departures across a station's lines. Default: 10.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Defaults to Apify residential proxy in JP. Override only if you have a reason.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "JP"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
