Japan Horse Racing Scraper - JRA Odds, Race Cards & Results
Pricing
Pay per event
Japan Horse Racing Scraper - JRA Odds, Race Cards & Results
Scrape JRA horse racing data from netkeiba: race cards, live win and place odds, results and every payout as clean English JSON.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Data Mill
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
What does Japan Horse Racing Scraper do?
This Actor extracts Japanese (JRA) horse racing data from netkeiba, Japan's leading racing portal, and returns it as clean English-keyed JSON. You get daily race schedules, full race cards with every horse, jockey and weight, live win & place odds pulled from the official odds API, and finished results with every payout type including trifecta (三連単).
Japan runs the largest horse racing betting market on earth — JRA turnover exceeds ¥3 trillion a year — yet almost all of its data is locked behind Japanese-only pages. This Actor unlocks it. Run it from the Apify Console, call it via API, schedule it around post times, or plug it into an AI agent through MCP.
Why use Japan Horse Racing Scraper?
- Build and backtest betting models — join race cards, odds snapshots and results into training data using stable netkeiba IDs.
- Track odds movement — schedule the
oddsmode every few minutes before post time and watch the market shift. - Power apps and dashboards — English field names mean no Japanese knowledge is required downstream.
- Feed AI agents — let an agent pull live Japanese racing data on demand.
- Research and media — structured data on the circuit that produced Equinox, Almond Eye and the Deep Impact line.
How to use Japan Horse Racing Scraper
- Click Try for free and open the Input tab.
- Pick a Data type: race list, race card, result, or odds.
- Either set a Date (to sweep a whole race day) or paste specific Race IDs.
- Click Start and watch the log.
- When the run finishes, open the Output tab and export as JSON, CSV, Excel or HTML — or fetch it from the API.
New to netkeiba race IDs? Run raceList mode first with today's date; every returned race includes its raceId, ready to paste into the other modes.
Input
| Field | Type | Description |
|---|---|---|
dataType | select | raceList, raceCard, result or odds |
date | string | Race day in JST, e.g. 2026-08-09. Defaults to today |
raceIds | array | Specific 12-digit race IDs. Overrides date |
includeOdds | boolean | Merge live odds into each race card entry |
maxRaces | integer | Safety cap when sweeping a full day (default 40) |
maxConcurrency | integer | Parallel requests, 1–5 |
{"dataType": "raceCard","raceIds": ["202601010611"],"includeOdds": true}
Output
Every item carries decoded race metadata (venue, meeting, dayOfMeeting, raceNumber), so you never have to parse a race ID yourself. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
{"raceId": "202601010611","venue": "Sapporo","raceName": "UHB賞","surface": "turf","distanceMeters": 1200,"weather": "晴","going": "良","results": [{"finishPosition": 1,"number": 10,"name": "ナムラクララ","sexAge": "牝4","carriedWeightKg": 55.0,"jockey": "浜中","time": "1:08.4","last3f": 34.1,"winOdds": 3.6,"popularity": 1,"trainer": "長谷川","trainingCenter": "Ritto","bodyWeightKg": 478,"bodyWeightDiff": 6}],"payouts": {"win": { "combinations": ["10"], "payoutsYenPer100": [360] },"trifecta": { "combinations": ["10-13-2"], "payoutsYenPer100": [19480] }}}
Data you can extract
| Field | Modes | Description |
|---|---|---|
raceId, venue, raceNumber | all | Decoded from the 12-digit netkeiba race ID |
raceName, grade | all | Race title and G1/G2/G3/Listed grade |
surface, distanceMeters, direction | card, result | Turf / dirt / jump, distance, track direction |
weather, going | card, result | Weather and track condition |
horses[] | card | Frame, number, name, sex/age, carried weight, body weight ± diff |
jockey, trainer, trainingCenter | card, result | With stable jockeyId / trainerId |
winOdds, placeOddsMin/Max, popularity | card, odds | Live odds with official timestamp |
finishPosition, time, margin, last3f | result | Finishing order and sectional times |
payouts | result | Win, place, bracket quinella, quinella, quinella place, exacta, trio, trifecta |
How much does it cost to scrape netkeiba?
This Actor uses pay per event, so you pay only for the data you actually pull:
| Event | Price |
|---|---|
| Race card scraped | $0.006 |
| Race result scraped | $0.006 |
| Odds snapshot | $0.003 |
| Race list for a day | $0.01 |
A full JRA Saturday (36 races, cards + results) costs about $0.43. Polling odds for one race every 5 minutes across a 3-hour window costs about $0.11. Apify's free tier includes $5 of monthly usage, which is enough to try every mode.
Tips
- JRA races run mostly on Saturdays, Sundays and public holidays (JST), roughly 09:40–16:30, at two or three venues of 12 races each. Weekday runs will simply return nothing.
- A practical schedule:
raceListin the morning →raceCardbefore post time →oddsevery few minutes →resultafter 17:00 JST. - Use
raceCard(notresult) for upcoming races; results only exist once a race has been run. - Keep
maxConcurrencyat 3 or lower to stay polite to the source site — the data is the same, and runs rarely get blocked.
FAQ
Is scraping netkeiba legal? This Actor reads only public pages and a public JSON endpoint — no login, no paywall bypass, and a handful of polite requests per race. Web scraping of publicly available data is generally lawful in many jurisdictions, but you are responsible for complying with the source site's terms and your local regulations. It is analytics tooling, not betting advice.
Does it cover local (NAR) racing? Currently JRA (central) racing only. Open an issue if you need NAR — it is on the roadmap.
Why is passageOrder sometimes missing?
netkeiba does not render passage positions on the standard result view for every race. All other result fields are always populated once a race has run.
Something broke or you need another field? Use the Issues tab on this Actor. Site layouts change, and fixes usually ship within a day. Custom Japanese data sources can also be built on request.
Other Actors by Data Mill
- YouTube Transcript Scraper — bulk transcripts, subtitles and RAG chunks from videos, playlists and channels
- Mercari Sold Price Scraper — verified sold prices across Mercari, Yahoo Auctions and PayPay Flea Market
- Japan Hotel Scraper — Jalan rates, ratings and plans, including ryokan the global OTAs never list
All of them return clean English-keyed JSON and are maintained the same way.