Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Retrieving Statistics

Poll driver career stats by season

This integration scenario explains how to retrieve career-level NASCAR statistics using the Sportradar NASCAR API. It focuses on 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).

This scenario is commonly used to:

  • Display career stat pages for drivers who raced in a particular season
  • 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.


Relevant Feeds

FeedPurpose
SeasonsConfirm available seasons before requesting stats
Driver StatisticsRetrieve career statistics for all drivers who raced for a series + season
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

  1. Confirm the season is available
  2. Pull Driver Statistics for the series + season_year
  3. Filter to specific drivers (optional)
  4. 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 → Xfinity Series (formerly O'Reilly Auto Parts 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. 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: find the matching drivers[].id
  • 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.


4. 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.


5. Retrieve Multi-Season Trends

To build multi-year trends:

  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 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
  • 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.