Brisnet APIbrisnet.com ↗
Access horse racing news, track listings, daily picks, race results indices, and search via the Brisnet.com API. 6 endpoints for racing data.
What is the Brisnet API?
The Brisnet API covers 6 endpoints for extracting horse racing data from Brisnet.com, including paginated news articles, full article detail, track listings with 3-letter codes, daily picks grouped by track, a legacy flash results index, and keyword search. The get_picks endpoint returns structured race analysis including raceData, raceInfo, tooltipData, and recommended pick numbers across all available tracks for a given day.
curl -X GET 'https://api.parse.bot/scraper/6a499405-8d64-44d5-a353-3c0ced303b01/get_news_articles?page=1&category=kentucky-derby' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace brisnet-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Brisnet Horse Racing API — news, picks, tracks, search."""
from parse_apis.brisnet_horse_racing_api import Brisnet, ArticleNotFound
client = Brisnet()
# List Kentucky Derby articles (capped at 5 total items)
for article in client.articles.list(category="kentucky-derby", limit=5):
print(article.title, article.url)
# Search for racing content and drill into the first result's full detail
result = client.searchresults.search(query="Belmont Stakes", limit=1).first()
if result:
detail = client.articledetails.get(url=result.url)
print(detail.title, detail.author, detail.date)
# List all available tracks
for track in client.tracks.list(limit=5):
print(track.code, track.name)
# Get today's picks — each Pick has race data and analysis
for pick in client.picks.list(limit=3):
print(pick.raceData.name, pick.raceInfo, pick.pickData)
# Typed error handling for a missing article
try:
client.articledetails.get(url="https://www.brisnet.com/racing/news/nonexistent-article/")
except ArticleNotFound as exc:
print(f"Article not found: {exc.url}")
print("exercised: articles.list / searchresults.search / articledetails.get / tracks.list / picks.list")
Fetch a paginated list of horse racing news articles. Optionally filter by category slug. Returns up to 20 articles per page. Pagination via integer page parameter. When no category is specified, articles from all categories are returned.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| category | string | Category slug to filter articles. Known working values include 'kentucky-derby', 'racing-news', 'preakness', 'data-reports'. Omitting returns all categories. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"articles": "array of article objects with title, url, summary, and category",
"category": "string or null, the category filter applied"
},
"sample": {
"data": {
"page": 1,
"articles": [
{
"url": "https://www.brisnet.com/racing/news/belmont-stakes/renegade-favored-over-golden-tempo-in-belmont-stakes/",
"title": "Renegade favored over Golden Tempo in Belmont Stakes",
"summary": "The Belmont attracted a field of nine.",
"category": "kentucky-derby"
}
],
"category": "kentucky-derby"
},
"status": "success"
}
}About the Brisnet API
News and Article Data
The get_news_articles endpoint returns up to 20 articles per page, each with a title, url, summary, and category. You can filter by category slug — known values include kentucky-derby, racing-news, and preakness — and paginate using the page parameter. To retrieve the full body of any article, pass its URL to get_news_article_detail, which returns the title, author, date, and complete content string.
Tracks, Results, and Picks
get_tracks_list returns every supported track as an object containing a 3-letter uppercase code, a human-readable name, and a url. get_results_index provides an index of available legacy Flash Results entries, each with track, date_label, filename, and url — useful for locating historical result files by track and date. get_picks returns daily expert picks structured as an array of track groups; each group holds pick objects carrying raceData, raceInfo, tooltipData, and pickData with the recommended pick numbers, giving a complete per-race analysis snapshot.
Search
The search_horses endpoint accepts a free-text query — a horse name, race name, or topic — and returns matching content from the news section. Each result includes a title, url, and type, letting you quickly locate relevant articles for a specific horse or event.
Coverage Notes
All six endpoints reflect publicly accessible data from Brisnet.com. The picks and results index are fetched without any date parameter, so they reflect the current day's available data. Pagination on news is controlled by the page integer input; the category filter requires a valid slug string.
The Brisnet API is a managed, monitored endpoint for brisnet.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when brisnet.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official brisnet.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate daily horse racing picks by track using
get_pickspickData and raceInfo fields - Build a racing news feed filtered to a specific event like the Kentucky Derby using the
categoryslug parameter - Look up a track's 3-letter code from
get_tracks_listto map picks or results to a standardized identifier - Retrieve full article text via
get_news_article_detailfor NLP analysis of racing commentary and expert opinion - Index available Flash Results by track and date using
get_results_indexfilename and date_label fields - Search for articles about a specific horse by name using
search_horsesand surface relevant news results - Monitor pre-race analysis tooltips from
get_pickstooltipData for automated racing research workflows
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Brisnet have an official developer API?+
How do daily picks from `get_picks` relate to specific races?+
picks field is an array of arrays, where each inner array corresponds to one track. Each object inside contains raceData (race details), raceInfo (contextual race metadata), tooltipData (analysis notes), and pickData (the recommended pick numbers). There is no date parameter — the endpoint always returns the current day's available picks.Does the API return historical race results or entries beyond the results index?+
get_results_index, which lists available files with track, date_label, filename, and url, but does not return parsed historical entries, past-performance data, or race entries. You can fork this API on Parse and revise it to add an endpoint that fetches and parses individual result files from those URLs.Can I filter news articles by multiple categories at once?+
category parameter on get_news_articles accepts a single category slug per request. Filtering by multiple categories simultaneously is not supported in the current endpoint. You can fork the API on Parse and revise it to batch requests across multiple slugs and merge the results.What does `get_results_index` actually return — full race results or just a listing?+
track, date_label, filename, and url pointing to the result file. Parsing the content of those files is not handled by this endpoint.