QDG Knowledge Base Read-only viewer QWebHub
notes

Thoroughbred Source Research - August 2026

Version 1 · Publish consolidated Thoroughbred source research, status, breeding examples, review links, and crawl validation evidence.

Historical version

Thoroughbred source research and acquisition status

Last updated: 2026-08-08

Scope and operating rules

This report records the Thoroughbred fork of the jurisdiction research run based on documents/SITE_LINKS.md. Each supplied base site was opened in the in-app browser before transport and route analysis. Research was bounded; sources that did not expose a reproducible pre-race and post-race path after reasonable checks were classified and left without speculative crawler code. Direct public GET was preferred. Robert's approved Racing and Sports proxy was attempted after a direct transport challenge where eligible. Authentication, CAPTCHA, paywalls, and access controls were not bypassed. Supplementary PDFs and other documents are linked but were not downloaded.

FormCrawler captures raw source responses and only parses enough structure to discover acquisition targets. It does not semantically parse the racing data.

Outcome summary

Jurisdiction / source Status Pre-race acquisition Post-race acquisition Method and notes
Australia / Racing Australia Implemented and verified Meeting program, acceptances, gear and scratchings Meeting results HTML discovery and capture through existing adapter au_racing_australia.
New Zealand / LoveRacing Implemented and verified Race meeting/card targets Results targets Public first-party HTML/JSON routes through nz_loveracing.
United Kingdom / Racing Post Implemented and verified Racecards Results Public HTML through gb_racing_post; bounded URL and content validation.
Korea / KRA Implemented and verified Racecards Results Public KRA HTML through kr_kra.
Malaysia / Selangor Turf Club Implemented and verified Meeting/racecard pages Results pages Public HTML through my_selangor_turf_club.
Qatar / QREC Implemented and verified Thoroughbred races from meeting API Results from the same lifecycle API First-party API; short-lived public front-end token is generated at request time and is never stored. Arabian rows are excluded.
Bahrain / Bahrain Turf Club Implemented and verified Racecards/results archive Same archive Supplied BHRA URL was unavailable; replacement first-party Bahrain Turf Club HTML is used by bh_bhra. WAHO rows are excluded.
South Africa / Gold Circle Document-only Racecard example No reproducible machine-readable result archive found Direct site was Cloudflare-protected; approved proxy returned HTML. Calendar navigation and racecard PDFs were found, but no paired machine archive, so no adapter. Statistics and media are also present.
South Africa / Gallop Implemented and verified Fixture, meeting and racecard APIs Result lifecycle when published First-party sahorseform.co.za APIs through the approved proxy in za_gallop.
Turkey / TJK Implemented and verified Daily/city meeting program HTML Daily/city results HTML Public HTML through tr_tjk; foreign and Karma meetings are excluded, and the meeting must identify Thoroughbred racing. Mixed Thoroughbred/Arabian meeting payloads remain raw.
Japan / JBIS Research-only No public racecard/calendar route found within the bound Result example Excellent result and horse-profile history, but not a paired acquisition source.
Japan / Umanity JRA Implemented and verified Date/race racecard HTML Date/race results HTML Stable public HTML through jp_umanity.
Japan / Umanity NAR Implemented and verified NAR date/race racecard HTML NAR results HTML Stable public HTML through jp_umanity_nar.
Japan / NAR Keiba Research-only: outage Supplied production, beta and mobile pages returned first-party 404 Same No adapter while the official routes are unavailable.
Germany / German Racing Research-only: transport failure Not reached Not reached TLS certificate-authority failure occurred directly and through the proxy. Deutscher Galopp already covers Germany.
Germany / Deutscher Galopp Implemented and verified Calendar and meeting discovery Meeting and race results Existing de_deutscher_galopp HTML adapter.
Italy / SNAI Research-only Live partenti pages exist Result archive exists Race and horse URLs carry short-lived signatures and no stable historical pre-race route was verified. Ratings, odds, jockey/trainer/owner statistics, video and PDFs are available.
Belgium / BGalopp Document-only Meeting index links conditions/program PDFs Same index links result PDFs Paired documents are useful for review, but were not downloaded and no adapter was added.
Argentina / Stud Book Implemented and verified Meeting pages Meeting results Existing ar_stud_book adapter.
Chile / AMR Research-only: authentication required Programs require sign-in Results require sign-in Public calendar shell did not expose usable rows. No authentication bypass attempted.
Chile / Hipódromo Chile Implemented and verified Existing source-specific meeting acquisition Per-race result JSON Existing cl_hipodromo_chile adapter also captures a rolling workout snapshot.
Czechia / Dostihy JC Implemented and verified Date/meeting/racecard HTML Results HTML Stable date routes through cz_dostihy_jc.
Spain / Jockey Club Español Implemented and verified Rolling meeting index and combined partants HTML Combined results/stewards HTML Historical day shells expire, so es_jockey_club discovers stable event/data links from the rolling jornadas page.
Uruguay / AMR Research-only: authentication required Programs require sign-in Results require sign-in Same AMR finding as Chile/Brazil.
Uruguay / Maroñas Implemented and verified Meeting calendar Complete meeting result XML Existing uy_maronas adapter.
Brazil / AMR Research-only: authentication required Programs require sign-in Results require sign-in Same AMR finding as Chile/Uruguay.
Canada / Equibase Implemented and verified Static racecard mirror Static summary results Main Equibase domain returned Imperva both directly and through proxy. The official TVG mirror works through ca_equibase.
USA / Equibase Implemented and verified Static racecard mirror Static summary results Same adapter family through us_equibase.
Sweden / Swedish Horse Racing Implemented and verified Calendar, raceday and race JSON Race JSON/results state First-party service with required X-Requested-With header through se_swedish_horse_racing; Swedish non-trot meetings only.
Saudi Arabia / JCSA Aborted after three validation attempts Raw runner response exists, but pre validator rejected completed-page jockey/trainer link labels Results artifact verified Thoroughbred discovery correctly excluded Arabian races. Direct HTTP was successful. Per the three-attempt ceiling, no fourth crawl was run; see Known limitations.
Norway / RaceBets Research-only Current/future sportsbook event browser No robust historical official results archive found Public SPA requires preference cookies and dynamic event-browser calls. It is a worldwide betting source rather than an official Norwegian archive; bounded research stopped without an adapter.
Mauritius / MTC Jockey Club Research-only: crawler transport blocked Fixtures and results and dated racecard articles are visible in the browser Same fixture pages expose results and result PDFs Direct crawler GET returned Cloudflare 403; approved proxy returned an error, so no reproducible crawler transport. Supplementary workouts and trials, championships, stipes reports, replays and horse search are available.
Hungary / Kincsem Park Implemented and verified /racecards/gallop/YYYY-MM-DD/ /results/gallop/YYYY-MM-DD Date-addressable public HTML through hu_kincsem_park. The supplied workbook URL was trotting; the site navigation exposed the separate Gallop route.
Morocco / SOREC Galop Research-only Calendar and upcoming meetings Results search exists Stateful JSF session/postback workflow did not yield a safe stable date-addressable GET contract inside the bound. Also offers horse/jockey performance, meeting programs, VOD, official bulletins, and technical/regulatory documents.
Netherlands / NDR Not a Thoroughbred source None None The supplied selectieproeven page is Dutch trotting/selection-trial material. It belongs in the harness fork, so no Thoroughbred adapter.
United Arab Emirates / Emirates Racing Implemented and verified Date-addressable declarations in /ajax/races-table?date=YYYY-MM-DD Results in the same complete meeting table Public first-party HTML through ae_emirates_racing; the adapter requires a Thoroughbred race and preserves mixed meeting content raw. Previous seasons supplies the date index.
Hong Kong / HKJC Research-only Current racecard route exists, but historical racecards expire to “no information” Stable historical results Monthly fixture calendar and post-race pages are strong, but the paired historical pre-race requirement could not be met. Trackwork, veterinary records, form lines, incidents, replays and sectionals are available.
France / France Galop Research-only Today exposes current meetings Meeting results exist behind opaque meeting identifiers Date query attempts still returned the current day; no backward date index that can deterministically produce both phases was verified. Program/agenda documents, ratings, breeders, sires and bulletins are available.
India / IndiaRace Research-only Current portal data Archives require interactive selection No stable deterministic date acquisition contract was verified within the bound. The site does expose equines, stallions, sire and dam searches, profiles, fixtures and archives.
India / Bangalore Turf Club Implemented and verified /racing/racecard?d=YYYY-MM-DD /racing/results?d=YYYY-MM-DD Date-addressable public HTML through in_bangalore_races. The approved proxy is selected by its launcher after direct certificate/timeout failure. Fixtures, videos, archives, ratings and horse profiles are also available.
India / Hyderabad Race Club Implemented and verified Printable racecard with base64-encoded public date token Printable results with base64-encoded public date token Deterministic public HTML through in_hydraces. Also exposes calendar, morning trackwork, entries, handicaps, acceptances, declarations, live results, ratings, swimming reports, veterinary remarks and racing incidents.
India / Racing Pulse Research-only Fixtures and venue/season archive selector Archive selector ASP.NET postback state did not expose a stable GET date contract within the bound. Horse, trainer, jockey, sire and dam profiles are available.
India / Delhi Race Club Document-only Entries, handicaps, acceptances and declarations PDFs Results, stipes report and rating PDFs Results/archive page and home-page daily program expose documents. Core material is PDF-only, so links are reported and no documents were downloaded.
India / RCTC Document/current-page only Home calendar links a racecard PDF Current detailed result HTML Archive uses site state/internal identifiers and the pre-race item is a PDF. No paired date-range adapter. Trackwork, ratings, trainer lots, video, stipes reports and horse profiles are available.

Jurisdictions in the workbook with no supplied Thoroughbred URL remain unstarted by design: Australia (NSW), Australia (QLD), Australia (WA), Austria, Ireland, Peru, Panama, and Mexico.

Breeding and horse-detail examples

“Origin” below means the source displays a country suffix for the horse or parent, not that FormCrawler normalises it.

Source Sire / dam and origins Foal year/date Stable horse detail example
QREC Yes: sire and dam with country where supplied Age only on inspected modal; no explicit YOB No stable URL; runner opens a modal. Example: Ayyal Bjd (QA), sire Heshem (IRE), dam Blue Night (QA).
Bahrain Turf Club Sire/dam names; parent origins not consistently shown Age, not explicit YOB GARSMAN (IRE)
Turkey TJK Yes, parent origin suffixes where supplied Exact DOB Victory Maria — DOB 28 Feb 2024; Tizway / Easy Come Easy Go.
JBIS Yes, horse/sire/dam origins Exact DOB Coconuts Brown (JPN) — DOB 28 Apr 2020; Kitasan Black / Lewers Street.
South Africa Gallop No breeding fields on inspected profile Not shown Example horse search/profile
Czech Dostihy JC Yes, parent origins Exact DOB Example horse 273665
Equibase Canada Sire/dam; horse jurisdiction shown, parent origin not consistently shown Exact DOB Thornfield (ON)
Equibase USA Sire/dam; horse jurisdiction shown, parent origin not consistently shown Exact DOB Warrior of Gold (KY)
Swedish Horse Racing Not in inspected first-party race/stats modal Not shown No stable horse profile URL; API exposes a numeric horse ID only.
Saudi JCSA Sire/dam names; horse origin suffix; parent origins not consistently shown Age, not explicit YOB Application (KSA)
Hungary Kincsem Yes, horse and parent origins Year born First Lady — born 2023; Mokarris (USA) / Falconidae (IRE).
UAE Emirates Racing Yes, horse and parent origins Age on profile; no explicit inspected DOB Nature Watch (USA) — Curlin (USA) / Saucy Dame (USA).
Hong Kong HKJC Horse origin/age and sire/dam in profile/results Age/season data; exact foal date not verified on inspected page Historical horse profile example
Bangalore Turf Club Racecard shows sire/dam with origin suffixes where supplied Exact DOB Infinite Spirit — Phoenix Tower (USA) / Aquila Oculus (IRE), foaled 8 Apr 2017.
Hyderabad Race Club Racecard shows sire/dam with origin suffixes where supplied Exact foaling date Daryoush — Oiseau de Feu (USA) / Ritz, foaled 26 Apr 2023.
RCTC Yes, parent origin suffixes where supplied Exact DOB and YOB Trillionaire — Dali (USA) / Lost In Thought (GB), foaled 5 Feb 2021.
Mauritius MTC Horse search exists, but breeding/profile fields and stable example URL were not verified Not verified Horse search
Morocco SOREC Horse-performance search exists; breeding availability not verified without stateful interaction Not verified No stable example GET verified.
France Galop Horse, breeder and sire directories exist Not verified in this run Horse directory
Racing Pulse Explicit horse, sire and dam profile searches Not verified in this run Archives/profile portal

Sources not listed in this matrix either had their breeding/profile detail already documented by an existing adapter, exposed no stable horse profile in the inspected raw lifecycle response, or were inaccessible/authentication-only. Absence here is recorded as “not verified,” not proof that the source never publishes the field.

New adapters and launchers in this run

  • nz_loveracing, gb_racing_post, kr_kra, my_selangor_turf_club, qa_qrec, bh_bhra, za_gallop, tr_tjk, jp_umanity, jp_umanity_nar, cz_dostihy_jc, es_jockey_club, ca_equibase, us_equibase, se_swedish_horse_racing, sa_jcsa, hu_kincsem_park, ae_emirates_racing, in_bangalore_races, and in_hydraces were added or completed during the wider source-research work represented by this report.
  • Each adapter uses the shared queue, storage, validation, rate limiter, transport provenance, and parser-handoff workflow.
  • Dedicated .bat launchers are under scripts/ for repeatable date-range runs.

Known limitations and stopped work

  • Saudi JCSA: stopped after three attempts as requested. Ten Thoroughbred races were correctly discovered for 3 January 2026 and Arabian races 5 and 9 were excluded. Shell, meeting index and Race 1 results artifacts and hashes verified. The pre-race validator looks for visible “jockey” and “trainer” labels, while completed pages expose those identities through /en/jockeys/ and /en/trainers/ links. The raw 84,694-byte response contains the runner data. No fourth attempt was made.
  • Hong Kong: historical result routes remain strong, but historical racecard requests now return “no information.” A post-only adapter would not meet this task's paired pre/post requirement.
  • Mauritius: browser access succeeded after Cloudflare, but direct crawler and approved-proxy transports did not provide a reproducible response. Browser session state was not converted into a crawler bypass.
  • PDF/document sources: Gold Circle, BGalopp, Delhi Race Club and RCTC links are reported for review; documents were not downloaded.
  • QDG Knowledge Base: this report and per-jurisdiction status pages were published through the approved versioned KnowledgeBaseService fallback. Every write used optimistic version checks and was read back after publication.

Final live validation evidence

  • Hungary/Kincsem, 5 October 2025: attempt 2 passed after the shared range date-key integration fix. Three direct HTTP 200 artifacts (discovery, pre, post), 0 retries/failures; 88,155-byte pre SHA-256 b93465e2dd2d36bd2e29c7ea17212726cf220b6e7c206d1439dd0a1beb4c63c8; 122,893-byte post SHA-256 3344abc7b502db3e56b070713de65f2c78689a1b4ea94c3ce0b422c5f30f4029.
  • UAE/Emirates Racing, 28 March 2026: attempt 2 passed after the same integration fix. Three direct HTTP 200 artifacts, 0 retries/failures; combined 42,280-byte lifecycle table SHA-256 30d81a23de69210913f29a207176d82c54995266aa51bb8f35d88c8811d5dc08.
  • Bangalore, 19 July 2026: attempt 3 passed through the approved proxy after direct certificate/timeout failure. Three proxy-provenance HTTP 200 artifacts, 0 retries/failures; 206,583-byte pre SHA-256 00ffc4d4c966f109acb7008a3276811bd5ca170769be2ca008584711838d6b49; 338,489-byte post SHA-256 7fbcd2b6f858f4888bc06879cf65d5ed15a7ce3ec556ca494043ebc9415e7cba.
  • Hyderabad, 3 August 2026: attempt 1 passed. Three direct HTTP 200 artifacts, 0 retries/failures; 317,832-byte pre SHA-256 b1586f7b0954abc6845ade51feede5b378ebf22ed16ee678ad97f35d005294d8; 127,322-byte post SHA-256 7ea376b858a814a9c7368cb527ff0097b3db6e240455fb51ec05eb05a248bba0.
  • For all four passing roots, recomputed content hashes equal the queue ledger and metadata, artifact IDs match, and every FormParser handoff exists with matching artifact/content/metadata URIs.
  • Final automated gate: 152 tests passed with ResourceWarning promoted to an error; all Python modules compile and git diff --check passes.
Updated by Codex Thoroughbred source research on Aug. 7, 2026, 11:14 p.m. · Task: Thoroughbred jurisdiction research 2026-08-08