A searchable, browsable view of American Sighthound Field Association lure coursing data (the Top 20 standings and the trial results behind them), and of the LGRA, AOK9 and NOTRA racing grading guides, with whippet racing from the WRA and NOTRA in beta.
ASFA publishes the standings as one long page of stacked breed tables, and trial results as a page per month. You cannot search either, look up a single hound, or see where a hound sits against the rest of its breed without counting by hand. This site reads those pages and rearranges them.
- Search by call name or registered name
- Events — find an upcoming ASFA trial by state, region or month, premium lists linked
- Hound profiles — Bowen points, Best of Breed, Best in Field, standing within the breed, and the ASFA titles held and awarded this season
- Leaderboards — most BIF, most BOB, most points, highest breed standing
- Kennels — standings by kennel
- Regions — Top 20 standings per region, plus which regions and clubs are drawing the most trial entries
- Trials — every ASFA trial this season with its entries split into breed, Singles and LCI: by month, state, club and breed, the largest trials, and every trial with filters and a link to its own results on asfa.org
- LCI — Lure Chasing Instinct standings by division, with the program's scoring and titles
- Bowen — how the point system works, with a calculator
- Titles — every hound with a new ASFA title this season
- Rulebooks — ASFA's documents linked at source, plus the Running Rules as a searchable page
- Stat cards — a shareable PNG per hound, rendered in the browser
- LGRA racing — standings by breed and all-breed on this season's National points, career points, WAVE and grade, per-hound pages with the last three meets and progress toward GRC and SGRC, from LGRA's grading guide
- AOK9 racing — the same for R.A.C.E.'s all-breed sprint program: breed and mixed divisions, BRC, MRC and TRC and the Supreme titles, Turtle points, from the AOK9 sprint grading guide
- AOK9 Singles — a tab of its own for the stake where dogs that can't run in company race alone, timed: Singles titles and progress toward them, each breed's Singles dogs with their average and personal best, and a Singles record on every hound page, from the AOK9 Singles sprint records
- NOTRA OB racing — oval racing for every sighthound breed but the Whippet (whippets have their own pages, below): standings by breed and all-breed on this season's National points, career points, WAVE and grade, per-hound pages with the last three meets, DQ/OC/DNF counts and progress toward ORC, SORC and the Junior and Senior Oval Racer titles, from NOTRA's Other-Breed grading guide
- Whippet racing (beta) — one section for the whippet racing bodies, each with its own page and tabs. WRA straight racing, added at the WRA's request: standings on this season's National points, career points, the rule 5.2 average and grade, each whippet's last three meets and when it last raced, and its CR, CRX, WRCh and WRChX titles with their dates, from WRA's grading guide reports and the Registrar's Whippet Point Records. NOTRA Whippets oval racing: standings, rating, WAVE and grade on the four-program scale, ORC and SORC, OTR-only meets and faults as the recorder writes them, from NOTRA's Whippet grading guide. CWA: every whippet on the Continental Whippet Alliance's grading guide, with its grade, average, last three meets and progress toward each title, browsable by kennel, with the archived guide on request; CWA's racing and High Combined standings, its all-time top race whippets (dogs and bitches) and every title holder (ARX, NARX, SRA, TRP, TRPX, DPC, DPCX, HC, HCX), from CWA's grading guides, charts and title sheets
- AKC entries — a quiet page apart from the programs: every AKC lure coursing event this year with its LC trial and JC/QC test entries, by month and ranked by trial, club and state, with competitors by breed, collected from AKC's Event Search (an AKC stats tab on the hub and a link on the Regions page)
- One search across every program, in the header of every page (press
/or Ctrl+K) and on the hub at/: a floating panel with a filter per program and the season's leaders before you type
This is an independent, unofficial project. It is not authorized, approved, or endorsed by ASFA, LGRA, R.A.C.E., NOTRA, the WRA or the AKC, and it is not a publication of any of them; the WRA pages were added at the WRA's request. Wherever this site and ASFA's published standings, the LGRA grading guide, the AOK9 sprint grading guide, the NOTRA grading guides or WRA's grading guide and Point Records disagree, the body's own publication governs.
index.html The hub: one search across every program, the program cards (LGRA and NOTRA share one; WRA and NOTRA Whippets share the Whippet racing card)
asfa.html events.html browse.html dog.html leaders.html kennels.html titles.html
regions.html trials.html lci.html bowen.html rulebooks.html rulebook.html about.html 404.html
akc.html AKC lure coursing by the numbers: the year's events and entries
lgra.html aok9.html notra.html racing-dog.html The racing sections (tabbed pages, one hound page)
wra.html notra-whippets.html cwa.html Whippet racing (beta): one section, each body's page with its own tabs
software-list.html A standalone survey of dog-sport software, deliberately unlinked
css/input.css Design tokens (light + dark), fonts, components — the source
css/app.css Compiled stylesheet, checked in — what pages load
tailwind.config.js Maps the asfa-* color names onto the tokens
assets/fonts/ Fraunces + IBM Plex Mono, self-hosted woff2
js/app.js Data loading, chrome, icons, search, formatting
js/card.js Canvas stat-card renderer
js/racing.js The racing pages: program table, WAVE helpers, overview and hound renderers, Singles
tools/ Python ETL — fetch, parse, clubs, trials, events, build, titles, lgra, aok9, aok9_singles, notra, wra, notra_whippets, cwa, akc_collect, akc, check
tools/build_css.ps1 Rebuilds css/app.css (see tools/build_css.md)
data/snapshots/ Every published standings page, archived verbatim
data/trials/raw/ Every monthly trial results page, archived verbatim
data/events/raw/ The trial schedule page, archived verbatim
data/clubs/raw/ The ASFA club listing PDF — fetched locally, never committed
data/season.json Standings — loaded by every page
data/trials.json Every trial with its entries by program and by breed, and the season by month, state, club and region — loaded by trials.html and regions.html
data/events.json The trial schedule — loaded by events.html
data/clubs.json Club directory: name, region, initials, affiliation only
data/lgra/snapshots/ Each LGRA grading guide, parsed, one file per guide date
data/aok9/snapshots/ Each AOK9 sprint grading guide, parsed, one file per guide date
data/aok9-singles/snapshots/ Each AOK9 Singles sprint records sheet, parsed, one file per date
data/notra/snapshots/ Each NOTRA Other-Breed grading guide, parsed, one file per guide date
data/wra/snapshots/ Each WRA grading guide with the Point Records joined, parsed, one file per report date
data/wra/meets-run.json WRA's Meets Run by Dog page: each active whippet's last meet, for those that ran within two years
data/notra-whippets/snapshots/ Each NOTRA Whippet grading guide, parsed, one file per guide date
data/cwa/snapshots/ CWA's grading guides, standings, all-time lists and title sheets, parsed, one file per guide date
data/lgra/raw/ The workbooks as downloaded — fetched locally, never committed
data/aok9/raw/ data/aok9-singles/raw/ data/notra/raw/ data/wra/raw/ data/notra-whippets/raw/ data/cwa/raw/
data/lgra.json Active LGRA hounds with standings, owners, movement — loaded by lgra.html
data/aok9.json The same for AOK9 — loaded by aok9.html
data/aok9-singles.json Every AOK9 Singles dog, joined to its sprint page — loaded by aok9.html and the hub
data/notra.json The same for NOTRA's Other Breeds — loaded by notra.html
data/wra.json WRA's active list with standings, averages and the Registrar's titles — loaded by wra.html
data/notra-whippets.json Active NOTRA whippets — loaded by notra-whippets.html
data/cwa.json CWA's current grading guide, standings, all-time list and title holders — loaded by cwa.html, the hub and the search
data/cwa-registry.json CWA's archived guide and the whippets found only on its lists — loaded on demand by cwa.html and the search
data/akc/raw/ The AKC entries as collected, one file per collection date (committed: counts only)
data/akc.json Every AKC lure coursing event this year with its entries, totals and rankings — loaded by akc.html
data/*-registry.json Every hound ever registered, compact — loaded on demand
The site is static files with no framework and no runtime dependencies — no CDNs, no font service, no analytics; every page loads with zero third-party requests. The stylesheet is compiled once with the standalone Tailwind CLI and committed, so deploys stay build-free. If you change any class in HTML/JS or anything in css/input.css, rebuild with tools/build_css.ps1 — the how and why live in tools/build_css.md. It follows the device's light or dark preference automatically. Python runs offline to produce the JSON under data/.
pip install -r requirements.txt
python tools/fetch.py && python tools/clubs.py && python tools/parse.py && python tools/trials.py && python tools/events.py && python tools/build.py && python tools/titles.py && python tools/lgra.py && python tools/aok9.py && python tools/aok9_singles.py && python tools/notra.py && python tools/wra.py && python tools/notra_whippets.py && python tools/cwa.py && python tools/akc.py && python tools/check.pyfetch.py archives the live page under data/snapshots/{date}.html, named for the coverage date the page states about itself rather than the wall clock. It skips the write when the page is unchanged. Raw snapshots are committed so every figure on the site traces back to the bytes ASFA served on a given date — and so movement between publications can be computed.
trials.py does the same for each monthly trial results page, splitting each trial's entries by program and by breed from the flight sizes in its results, and clubs.py for the club listing PDF that supplies club regions. lgra.py scrapes lgra.club for the current grading-guide workbook and aok9.py exports the AOK9 sprint guide sheet; each archives a parsed snapshot per guide date (the raw workbooks stay out of git: they are large, and their header rows carry the registrars' mailing details) and rebuilds its feed and registry from every snapshot. aok9_singles.py does the same for the AOK9 Singles sprint records, after aok9.py, because it joins each Singles dog to its sprint page. notra.py scrapes notra.org for the Other-Breed grading guide and treats it the same way, and notra_whippets.py NOTRA's Whippet guide, dating each meet code from the key below its whippets. wra.py reads WRA's two grading-guide reports (the active and the inactive list) and the Registrar's Whippet Point Records PDF, joins them by call name, with the registered name and owner to confirm, and takes titles from the Point Records, which WRA names as the record; it also reads WRA's Meets Run by Dog page for each whippet's last meet, which gives "racing this year". It makes five requests a week, two seconds apart, and keeps a parsed snapshot per report date. cwa.py reads CWA's current and archived grading guides, its standings charts (each from the data behind it, with its own date), its all-time racing sheet and its nine title sheets, five of the twenty-two downloads from CWA's own site, 1.5 seconds apart, and archives a parsed snapshot by the newest of their dates; it joins each list's rows to a whippet on the guides by the registered name without its titles. akc.py collects the year's AKC lure coursing events from AKC's Event Search and the entry counts from each event's results page, with each trial's starters by stake and breed (akc_collect.py), files each collection under its date (committed, since it holds nothing but club names, cities and counts) and recomputes every total and ranking from the event rows. A weekly workflow runs the whole chain and commits when anything changes. While Whippet racing is in beta, each whippet body's data is verified on its own (check.py --only wra, --only notra-whippets, --only cwa): one that fails its checks keeps its last committed copy, every other program still updates, and the run is flagged as failed so it gets looked at.
python tools/serve.pyThen open http://localhost:8765. The pages fetch data/season.json, so opening the files directly with file:// will not work.
serve.py is http.server with caching switched off. Plain python -m http.server sends no Cache-Control header, so browsers apply their own freshness guess and keep serving an edited page or script from cache — which looks exactly like the edit never happened.
about.html is the full account of the ASFA side, and each racing page has its own account on its "About the numbers" tab. The short version:
- Breed standing is the only derived figure — rank divided by the number of hounds ASFA reports competing in that breed. Ranked 4th of 25 is top 16%.
- A Top 20 list holds about twenty hounds per breed. A hound placing 22nd is absent. Totals here cover placings on that list, not a complete competition record.
- Points do not compare across breeds. A breed with 200 hounds competing offers far more of them than one with five. Breed standing and Best in Field are the figures that compare fairly.
- The Singles stake overlaps the breed lists. Hounds that run Singles are also listed under their breed, sometimes with the same BIF and BOB on both rows. Where sections are combined, the site takes the maximum of each figure rather than the sum, so a record can never be inflated by double counting.
- BOB and BIF are breed-stake awards only. Hounds run alone in Singles, whose winner is not eligible for Best of Breed or Best in Field (Running Rules Ch. V §5(d), §11), and Best of Breed is contested between breed stakes, which the LCI divisions are not. ASFA still prints those figures on Singles rows — the hound's breed-stake record carried across — so they are reproduced as published but never credited to Singles or LCI in any total or leaderboard.
- Identity and owner matching are approximate. There is no registration number in the published data, and a registered name gains titles mid-season. Titles are stripped to match a hound to itself between updates; owner spellings are merged where the match is mechanical, and a bare surname or a single initial folds into the one household that fits (E.Kominek and S.Kominek into E.& S.Kominek), each merge listed in
data/review/owner-merges.csv. - Two people can share a name. An owner's home region is taken from rows where they are listed first — that is whose region the row carries. A name leading in two regions is two people (K.Sanders has six Basenjis in Region 8 and a Silken Windhound in Region 1) unless a co-owner appears in both, which makes it one person whose hounds live in different places. Thin cases are split and listed in
data/review/owner-splits.csv. - Region means two different things. In the standings it is the owner's region; on trial entries it is the club's, from ASFA's club listing. Clubs travel — Borzoi Club of America is a Region 4 club that ran in Nebraska this year — so the two are never combined.
- No personal contact data. ASFA's club listing carries liaison names, home addresses, phone numbers and emails. Only club name, region, initials and affiliation are extracted, and
check.pyfails the build if anything else appears indata/.
tools/check.py re-derives the totals by a different route than tools/build.py and fails if the two disagree. It also counts rows straight out of the raw HTML, so a silently dropped row is caught rather than quietly corrupting a leaderboard.
- Standings rank this season's points. The grading guides' YTD column is National points earned this calendar year, the figure LGRA's own year-end Top 10 lists rank by; the site ranks it within each breed and across breeds (ties share a rank). Career standings rank career National points.
- WAVE is recomputed and compared, never replaced. Rule 4.2.2 in both rule books:
(meet 1 + 0.7 × meet 2 + 0.5 × meet 3) / 2.2over the last three complete meets. The registrar's published figure is shown; a hound's page says where the arithmetic differs.check.pyrequires the two to agree for 98% of LGRA hounds and 85% of AOK9 dogs, which is what the guides actually show. - Titles are read from the points columns (12 championship points; every 30 National points a Superior/Supreme level). The registrar's certificate is the record.
- Meet codes decode to years, and to dates where the scheme gives one. LGRA: year letters (A = 1995) plus day of the year from 2012 on, a running count before. AOK9: year plus sequence, undated. A handful of typed codes in each guide cannot be decoded; they are kept as written and
check.pycaps how many. - Breed is the registration prefix for LGRA (B is Borzoi, BA is Basenji; three young breeds' headers sit in the NAME column) and the section header for AOK9. Both guides re-use a registration number now and then; every row is kept and the second occurrence gets a
-2suffix. - Active means a meet in the current or previous calendar year, or points this year; the feeds carry active hounds, the registries everyone. "Raced this year" counts a listed meet in the season, points or not, and is a floor: the guide keeps only a hound's last three meets.
- Kennels are a surname within a breed. The guides print a bare surname and nothing else, so "Jones" cannot be told apart across five breeds; one owner racing two breeds shows as two lines, and two Joneses in one breed share one.
- Singles is joined, not ranked. A Singles dog takes its sprint page when the registration number and a name agree, or, where the two sheets number a dog differently, when breed, whole registered name, owner and call name all agree; the page says so. Singles places dogs only within a meet, so nothing ranks Singles dogs by time. The average shown is the registrar's seeding figure, the plain mean of the dog's three fastest timed runs (the sheet heads it FASTEST AVG and lists those runs newest first), and
check.pyre-derives it. Singles runs at the sprint meets, so its dogs, breeds and meets count in the AOK9 totals; because the sheet lists only the fastest runs, a Singles dog counts as racing this year with a listed run or points from this year. - No personal contact data, extended: the workbooks' header rows are never copied, and
check.pygreps the feeds, registries and snapshots for emails, phone numbers and street addresses.
Please check against the source first: ASFA's published standings, the LGRA grading guide, the AOK9 sprint grading guide, the NOTRA grading guides or WRA's grading guide and Point Records. If the two disagree, the published page is right and this site has a bug — please open an issue or email info@gazehound.io. If the body's own listing looks wrong, that goes to the ASFA Records Secretary, the LGRA Registrar/Recorder, the AOK9 National Racing Director, the NOTRA Other-Breed or Whippet Recorder, or the WRA Registrar, not here.
The code is MIT. The standings data under data/ is ASFA's, and the grading-guide data is LGRA's and R.A.C.E.'s, all reproduced with attribution; the Jackrabbit Project icon files are not MIT-licensed. See LICENSE for the carve-outs.