Retrieving Statistics
This integration scenario explains how to retrieve career-level NASCAR statistics using the Sportradar NASCAR API. It covers pulling the full season dataset from the Driver Statistics feed and then filtering, aggregating, or segmenting results for your specific use case (a driver card, leaderboard view, trend charts, and more), as well as retrieving a single driver's bio and career results directly from the Driver Profile feed.
This scenario is commonly used to:
- Display career stat pages for drivers who raced in a particular season
- Power driver profile pages that combine bio details with season and race-by-race results
- Build “wins / top 10s / DNFs” comparisons across the field
- Power split views (by track type, track, or race)
- Support multi-season trending (client-side aggregation)
Overview
Career statistics in NASCAR are returned as a season-scoped dataset. When you request Driver Statistics for a given series and season_year, the response includes all participating drivers for that season, along with their career stats segmented into groupings such as:
- By Track Type (for example, superspeedway vs. road course)
- By Track
- By Race
Your application typically uses the feed as a canonical source, then filters down to a single driver (or subset) and aggregates as needed.
For single-driver views, the Driver Profile feed provides a complementary path: one request returns a driver's bio along with every season of their career in the requested series, including race-by-race results.
Relevant Feeds
| Feed | Purpose |
|---|---|
| Seasons | Confirm available seasons before requesting stats |
| Driver Statistics | Retrieve career statistics for all drivers who raced for a series + season |
| Driver Profile | Retrieve bio details and season-by-season statistics with race-by-race results for a single driver |
| Drivers | Optional. Enrich driver bio and season roster context for UI display |
| Daily Change Log | Detect when statistics-related updates occur |
High-Level Workflow
Seasons → Driver Statistics → Filter/Aggregate (season-wide views)
Drivers → Driver Profile (single-driver views)
- Confirm the season is available
- Pull Driver Statistics for the series +
season_year - Retrieve a single driver's profile (optional)
- Filter to specific drivers (optional)
- Aggregate results across seasons or split types (optional)
Integration Steps
1. Confirm Season Availability
Before requesting historical stats, use the Seasons feed to confirm the target season_year is available for your selected series.
GET https://api.sportradar.com/nascar-ot3/series/list.json
The series list includes:
mc→ Cup Seriesor→ O'Reilly Auto Parts Series (formerly Xfinity Series,series.alias=BSERIES)cw→ Craftsman Truck Series
This helps avoid invalid requests and establishes your baseline for how far back the dataset goes.
2. Retrieve Driver Statistics for the Season
Call the Driver Statistics feed using:
nascar_seriesseason_year
GET https://api.sportradar.com/nascar-ot3/mc/drivers/2025/drivers.json
The response returns:
seriesmetadata (id, alias, name)seasonmetadata (id, year)drivers[]containing stats for all drivers in that season
{
"series": {
"id": "3e32047e-4ff3-4e35-a607-1546a2c32214",
"alias": "CUP",
"name": "NASCAR Cup Series"
},
"season": {
"id": "7967612b-6ad5-4ac3-8a3d-69dbc63916aa",
"year": 2025
},
"drivers": [
{
"id": "b030a8df-e7de-44a4-9f59-34bb9fd227d0",
"first_name": "Tyler",
"last_name": "Reddick",
"full_name": "Tyler Reddick",
"birthday": "1996-01-11",
"rookie_year": 2014,
"gender": "M",
"status": "ACT",
"country": "UNITED STATES",
"residence": ", , ",
"birth_place": "Corning, California, United States",
"twitter": "@TylerReddick",
"track_type_splits": [
{
"starts": 25,
"wins": 1,
"top_5": 4,
"top_10": 7,
"poles": 0,
"dnf": 9,
"running_at_finish": 16,
"lead_lap_finish": 14,
"laps_completed": 4246,
"laps_led": 68,
"money": 0,
"avg_start_position": 18.16,
"avg_finish_position": 20.44,
"miles_completed": 10942.2,
"track_type": "Restrictor Plate"
}
]
}
]
}3. Retrieve a Single Driver's Profile
For single-driver views, call the Driver Profile feed using:
nascar_seriesdriver_id
GET https://api.sportradar.com/nascar-ot3/mc/drivers/c9bf58a8-66b6-4d75-a441-c13130ded990/profile.json
The response returns:
seriesmetadata (id, alias, name)- Driver bio details (name, birthday, rookie year, birth place, social handle)
seasons[]containing one entry for each season of the driver's career in the requested series, each with:- the driver's
teamand itsowner - season
statistics(points, wins, stage wins, poles, top-5 through top-20 counts, DNFs, laps led and completed, average start and finish positions, and playoff status viain_chase) - race-by-race
results[](finishing and starting positions, points earned including stage and bonus points, laps led and completed, and a finishstatus)
- the driver's
{
"series": {
"id": "3e32047e-4ff3-4e35-a607-1546a2c32214",
"alias": "CUP",
"name": "NASCAR Cup Series"
},
"id": "c9bf58a8-66b6-4d75-a441-c13130ded990",
"first_name": "William",
"last_name": "Byron",
"full_name": "William Byron",
"birthday": "1997-11-29",
"rookie_year": 2016,
"gender": "M",
"status": "ACT",
"country": "UNITED STATES",
"residence": ", , ",
"birth_place": "Charlotte, North Carolina, United States",
"twitter": "@WilliamByron",
"seasons": [
{
"year": 2026,
"season_id": "2e2bfe7c-f9c2-4009-b9b4-f4511bac7a77",
"team": {
"id": "8427da4c-9c88-4849-9242-0c184d5ed67c",
"name": "Hendrick Motorsports",
"owner": {
"id": "df3acab4-1712-44bb-b913-897b4e20fd50",
"name": "Rick Hendrick"
}
},
"statistics": {
"points": 568,
"starts": 22,
"wins": 0,
"stage_wins": 3,
"poles": 0,
"top_5": 4,
"top_10": 9,
"top_15": 13,
"top_20": 15,
"dnf": 3,
"laps_led": 136,
"laps_completed": 5360,
"avg_start_position": 15.7727,
"avg_finish_position": 15.8636,
"in_chase": false
},
"results": [
{
"race_id": "5fb60476-dd14-4efd-821a-dbc4656d58cb",
"race_name": "DAYTONA 500",
"track_name": "Daytona International Speedway",
"position": 12,
"start_position": 39,
"points": 25,
"bonus_points": 0,
"penalty_points": 0,
"stage_1_points": 0,
"stage_2_points": 0,
"stage_3_points": 0,
"fastest_lap_points": 0,
"laps_led": 0,
"laps_completed": 200,
"status": "running"
},
{
"race_id": "245961b9-abb8-4eca-b8aa-e0ac75eff1a6",
"race_name": "Autotrader 400",
"track_name": "EchoPark Speedway",
"position": 28,
"start_position": 13,
"points": 25,
"bonus_points": 16,
"penalty_points": 0,
"stage_1_points": 7,
"stage_2_points": 9,
"stage_3_points": 0,
"fastest_lap_points": 0,
"laps_led": 0,
"laps_completed": 256,
"status": "accident"
}
]
}
]
}The response above is trimmed to the current season and its first two race results; the full payload includes every season of the driver's career in the series (nine seasons for this driver, back to 2018).
Because the profile is scoped to the series in the request path, query each series separately for drivers who have raced in more than one.
4. Filter to the Drivers You Need
Because the feed returns all drivers who raced, most implementations filter client-side by drivers[].id.
Common patterns include:
- Single driver profile: call Driver Profile with the driver's id, or find the matching
drivers[].idin the season dataset - Team/manufacturer views: filter drivers by related metadata from the Drivers feed (if applicable to your product)
- Top-N boards: sort and slice the season dataset based on a metric (wins, top_10, laps_led, etc.)
Handle drivers who did not participate
If a driver does not appear in drivers[] for a season, they did not record stats for that series/season (for example, they did not participate or were not entered), no career statistics will display for them in that response.
5. Use the Stats Splits That Match Your UI
Driver Statistics is organized into multiple “split” groupings so you can present stats in different views.
Use the split that matches your goal:
- Track type splits: show performance by category (road course vs. superspeedway, etc.)
- By track: show performance at a specific venue
- By race: show race-level breakdowns across the season
If your UI only needs high-level career totals, you can derive them by summing or aggregating across the relevant records you choose to treat as canonical for your display.
6. Retrieve Multi-Season Trends
The Driver Profile feed returns every season of a driver's career in the requested series in a single call, making it the fastest route to single-driver trends.
To build multi-year trends across multiple drivers, or trends that use track and track-type splits:
-
Use Seasons to list available seasons for the series.
-
Request Driver Statistics for each desired
season_year. -
For each response:
- locate the driver in
drivers[]byid - if not present, record “did not participate / no stats”
- locate the driver in
-
Store or aggregate the metrics you care about across seasons (wins, top_10, avg_finish_position, etc.).
Common Use Cases
- Driver profile pages combining bio details with season and race-by-race results
- Driver season stat pages showing career metrics segmented by season
- Leaderboards and rankings derived from a season dataset
- “Performance by track type” dashboards
- Comparing drivers for the same season
- Validating season summaries against race-level views
Best Practices
- Always verify
season_yearavailability via Seasons - Treat Driver Statistics as a season-wide dataset and filter client-side
- Use Driver Profile for single-driver views and Driver Statistics for cross-driver comparisons and split-based views
- Expect “missing drivers” across seasons and handle gracefully
- Poll Driver Statistics according to its published update frequency and refresh after races are
closed. Avoid over-polling between updates.
Updated 15 days ago
