# Japan Boat Racing Data (boatrace.jp) (`jpopendata/japan-boatrace`) Actor

Kyotei race results, race cards (出走表) and trifecta (3連単) odds from the official boatrace.jp — finish order, race times, payouts, win rates, motor/boat numbers, water & weather, English schema. Unofficial; not affiliated with BOATRACE.

- **URL**: https://apify.com/jpopendata/japan-boatrace.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 $3.00 / 1,000 records

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 Boat Racing Data (boatrace.jp)

**Kyotei (競艇 / boat racing) results, race cards (出走表) and trifecta odds from the official BOAT RACE website — boatrace.jp — in a clean English schema built for betting analytics and prediction models.**

Three modes, one Actor:

- **`race_results`** — finished races: full finish order with race times, the non-finish status of each boat (false start / capsized / disqualified...), the winning technique (nige / makuri / sashi...), water & weather (air temp, wind, water temp, wave height), and **all 7 pari-mutuel payout types** (trifecta / trio / exacta / quinella / quinella-place / win / place) with amounts and popularity.
- **`race_card`** (出走表) — entered racers per race: boat (lane) number, racer name & registration number, class (A1/A2/B1/B2), branch and hometown, age, weight, national and local win / 2-place / 3-place rates, average start timing, flying/late counts, and the assigned motor and boat numbers with their 2-place rates — the raw form features for a race.
- **`odds`** — the complete **3連単 (trifecta) odds grid**: all 120 ordered 3-boat combinations with live odds.

A boatrace race is identified by **date + stadium + race number**, and every one of the 24 stadiums runs a 12-race card, so a single day/stadium is ~12 records.

> **Unofficial tool.** Not affiliated with or endorsed by BOATRACE, 一般財団法人 BOATRACE振興会 or 日本モーターボート競走会. It collects **publicly available official data only** (no login, no paywalled content), politely (strictly serial requests, ≥1.2 s apart, hard per-run budget, no block evasion), and extracts **factual competition data only**. Racer names and registration numbers are published professional competition information; prediction columns (予想), comments/bulletin prose and photographs are **deliberately never extracted** — no personal data of any kind (relevant e.g. under GDPR: none 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.

***

### Quick start — verified input

Copy, paste, run. This exact input is verified on the platform (SUCCEEDED, items > 0):

```json
{
  "mode": "race_results",
  "date": "2026-08-23",
  "stadium": "02",
  "maxItems": 12
}
```

Running with **no input at all** also works (it fetches yesterday's results across all stadiums, capped at 12 records). `stadium` is a dropdown of the 24 stadiums (jcd codes); via the API you may also pass the English (`"Toda"`) or Japanese (`"戸田"`) name.

### Who is this for?

- **Prediction-model / betting-AI developers** — boatrace is the most predictable of Japan's public-sports betting markets (inside lane bias, motor performance, start timing), with deep pari-mutuel pools. This Actor delivers the exact form features (win rates, motor/boat numbers, start timing) and the trifecta odds grid that models train on — none of it otherwise available in English.
- **Sports-data platforms & odds services** — full coverage of all 24 stadiums (~40,000 races/year) in a stable English schema.
- **Quant & market-efficiency researchers** — payout data across all 7 bet types plus the 120-way trifecta odds grid supports overround and market-bias studies.

### Sample output (`race_results`, abridged)

```json
{
  "recordType": "race_result",
  "raceDate": "2026-08-23",
  "stadium": "戸田",
  "stadiumEn": "Toda",
  "stadiumCode": "02",
  "raceNo": 1,
  "raceName": "ファイティングボートガイド杯",
  "grade": "一般戦",
  "distanceM": 1800,
  "results": [
    { "finishPosition": 1, "finishStatus": null, "boatNo": 3,
      "racerName": "小川 時光", "racerRegNo": "4186",
      "raceTime": "1'50\"3", "raceTimeSec": 110.3 },
    { "finishPosition": null, "finishStatus": "false_start", "boatNo": 4,
      "racerName": "大江 純", "racerRegNo": "5098", "raceTime": null, "raceTimeSec": null }
  ],
  "payouts": [
    { "betType": "trifecta", "betTypeJa": "3連単", "combination": "3-1-6", "payoutJpy": 2600, "popularity": 10 },
    { "betType": "win", "betTypeJa": "単勝", "combination": "3", "payoutJpy": 450, "popularity": null }
  ],
  "weather": { "airTempC": 27, "weather": "cloudy", "windSpeedM": 0, "waterTempC": 28, "waveHeightCm": 0 },
  "winningTechnique": "makuri (outside sweep)",
  "url": "https://www.boatrace.jp/owpc/pc/race/raceresult?rno=1&jcd=02&hd=20260823",
  "source": "BOAT RACE オフィシャルウェブサイト (boatrace.jp)",
  "sourceUrl": "https://www.boatrace.jp/",
  "license": "Publicly available official race data — unofficial tool, not affiliated with the operator; source attribution retained, users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-08-26T09:12:44Z"
}
```

### Input examples

Every race at one stadium on a day (one record per race):

```json
{ "mode": "race_results", "date": "2026-08-23", "stadium": "Toda" }
```

A single race:

```json
{ "mode": "race_results", "date": "2026-08-23", "stadium": "02", "raceNo": 1 }
```

The race card (entered racers with form) for one race:

```json
{ "mode": "race_card", "date": "2026-08-23", "stadium": "戸田", "raceNo": 1 }
```

The full trifecta odds grid for a race:

```json
{ "mode": "odds", "date": "2026-08-23", "stadium": "24", "raceNo": 12 }
```

Every stadium racing that day (omit `stadium`; capped by `maxItems` / `maxApiRequests`):

```json
{ "mode": "race_results", "date": "2026-08-23", "maxItems": 60, "maxApiRequests": 80 }
```

`stadium` accepts a 2-digit jcd code (`"02"`), Japanese (`"戸田"`) or English (`"Toda"`) — all 24 stadiums (Kiryu, Toda, Edogawa, Heiwajima, Tamagawa, Hamanako, Gamagori, Tokoname, Tsu, Mikuni, Biwako, Suminoe, Amagasaki, Naruto, Marugame, Kojima, Miyajima, Tokuyama, Shimonoseki, Wakamatsu, Ashiya, Fukuoka, Karatsu, Omura).

#### Common input mistakes

| Mistake | Correct |
|---------|---------|
| `"date": "23/08/2026"` / `"Aug 23"` | `"2026-08-23"` (`2026/08/23`, `20260823` are tolerated) |
| `"date"` = today, `"mode": "race_results"` before the races finish | use yesterday's date, or `"mode": "race_card"` for today's entries |
| `"stadium": "Tokyo"` / `"Ascot"` | one of the 24 stadiums, e.g. `"02"`, `"Toda"`, `"戸田"` (the error message lists them all) |
| `"raceNo": 5` without a stadium | add `"stadium": "Toda"` (a race number only makes sense for one stadium) |
| `"raceNo": 13` | 1–12 |
| `"mode": "live"` | `"race_results"`, `"race_card"` or `"odds"` |

#### Empty results?

A run that finds nothing completes with 0 items and a warning in the log (not a failure). Typical causes: a `date` on which the chosen stadium was not racing (each stadium runs series of a few days with gaps — leave `stadium` empty to take every stadium racing that day), `race_results` for races that have not finished yet, or `odds` for a race whose betting has not opened. Pick another date/stadium and retry.

### Pricing

Pay per result — see the pricing tab. **1 record = 1 complete race** (all boats and, for results, all payouts; for odds, the full 120-way grid), so a full 12-race card at one stadium is ~12 records.

### FAQ

**Where does the data come from?**
Live from the official boatrace.jp public, login-free pages at run time (racelist for cards, raceresult for results, odds3t for trifecta odds). Every record embeds the source, source URL, a license note, and the retrieval timestamp.

**Is this an official BOATRACE service?**
No. **Unofficial**, independently built, and **not affiliated with or endorsed by BOATRACE, 一般財団法人 BOATRACE振興会 or 日本モーターボート競走会.** It reads only publicly available pages.

**Why are prediction columns and comments missing?**
Deliberately. The site's prediction text (予想), comment/bulletin prose and photographs are copyrighted content and are never extracted. Racer names and registration numbers are published professional competition information and are included, as they're indispensable for analysis. No personal data is collected.

**What about server load?**
Strictly serial requests, ≥1.2 s apart, one page per race, hard per-run request budget, exponential backoff, no CAPTCHA/login/block evasion. If boatrace.jp changes its page format, the Actor skips the affected race with a clear warning instead of silently mis-parsing; if it blocks persistently, the run fails visibly. This respects the site policy's only relevant restriction — no mass access that interferes with the site's operation.

### Search terms this Actor answers

boatrace data · boatrace scraper · japan boat racing results · kyotei data english · boatrace odds api · trifecta odds japan · 競艇データ · boatrace.jp scraper · japanese boat racing dataset · boat race prediction data · 3連単 オッズ データ · kyotei results api

### More Japan data Actors by the same developer

- **[Japan Horse Racing Data (netkeiba.com)](https://apify.com/store)** — JRA & NAR race results, race cards and horse profiles — the sibling public-sports betting-data Actor, same English schema and politeness discipline.
- **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.

***

*Unofficial tool; not affiliated with BOATRACE, 一般財団法人 BOATRACE振興会 or 日本モーターボート競走会. Publicly available official data only; users are responsible for compliance with the source site's terms and applicable law. No personal data is collected.*

# Actor input Schema

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

What to fetch: race\_results (default — finished races: finish order, race times, payouts, winning technique, water/weather), race\_card (出走表 — entered racers with class, national/local win rates, motor & boat numbers), or odds (3連単 / trifecta — the full 120-combination odds grid). Aliases "results"/"card"/"trifecta" are accepted. Example: "race\_results".

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

Race date in YYYY-MM-DD format, e.g. "2026-08-23" (2026/08/23 and 20260823 are tolerated). race\_results needs a finished race day (past date, or today after the races); race\_card / odds work for today's and upcoming published cards. If omitted, yesterday (JST) is used. A boatrace race is identified by date + stadium + race number.

## `stadium` (type: `string`):

Optional: restrict to one of the 24 stadiums — pick it here (jcd code), or via the API pass the code ("02"), the Japanese name ("戸田") or the English name ("Toda"). Leave empty to fetch every stadium racing that day (capped by maxItems / maxApiRequests).

## `raceNo` (type: `integer`):

Optional: a single race number 1..12 (requires a stadium). Omit to fetch all 12 races of the stadium. Example: 1.

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

Stop after this many dataset records (1-500; 1 record = 1 race). Default 12 = one stadium's full card.

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

Hard budget of HTTP requests to boatrace.jp for this run (1-120, default 30; 1 schedule page when no stadium is set, plus 1 per race). 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
{
  "mode": "race_results",
  "date": "2026-08-23",
  "stadium": "02",
  "raceNo": 1,
  "maxItems": 12,
  "maxApiRequests": 30
}
```

# Actor output Schema

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

Structured race-result, race-card or trifecta-odds 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 = {
    "mode": "race_results",
    "date": "2026-08-23",
    "stadium": "02",
    "raceNo": 1,
    "maxItems": 12,
    "maxApiRequests": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/japan-boatrace").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 = {
    "mode": "race_results",
    "date": "2026-08-23",
    "stadium": "02",
    "raceNo": 1,
    "maxItems": 12,
    "maxApiRequests": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/japan-boatrace").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 '{
  "mode": "race_results",
  "date": "2026-08-23",
  "stadium": "02",
  "raceNo": 1,
  "maxItems": 12,
  "maxApiRequests": 30
}' |
apify call jpopendata/japan-boatrace --silent --output-dataset

```

## MCP server setup

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

```

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/kD6pqxUyITzT0DsgQ/builds/dEzfA9zEK6ScACyNX/openapi.json
