Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

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

FeedPurpose
SeasonsConfirm available seasons before requesting stats
Driver StatisticsRetrieve career statistics for all drivers who raced for a series + season
Driver ProfileRetrieve bio details and season-by-season statistics with race-by-race results for a single driver
DriversOptional. Enrich driver bio and season roster context for UI display
Daily Change LogDetect when statistics-related updates occur


High-Level Workflow

Seasons → Driver Statistics → Filter/Aggregate (season-wide views)

Drivers → Driver Profile (single-driver views)

  1. Confirm the season is available
  2. Pull Driver Statistics for the series + season_year
  3. Retrieve a single driver's profile (optional)
  4. Filter to specific drivers (optional)
  5. 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 Series
  • or → 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_series
  • season_year

GET https://api.sportradar.com/nascar-ot3/mc/drivers/2025/drivers.json

The response returns:

  • series metadata (id, alias, name)
  • season metadata (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_series
  • driver_id

GET https://api.sportradar.com/nascar-ot3/mc/drivers/c9bf58a8-66b6-4d75-a441-c13130ded990/profile.json

The response returns:

  • series metadata (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 team and its owner
    • 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 via in_chase)
    • race-by-race results[] (finishing and starting positions, points earned including stage and bonus points, laps led and completed, and a finish status)
{
  "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[].id in 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:

  1. Use Seasons to list available seasons for the series.

  2. Request Driver Statistics for each desired season_year.

  3. For each response:

    • locate the driver in drivers[] by id
    • if not present, record “did not participate / no stats”
  4. 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_year availability 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.

Did this page help you?