Sports Standings and Scores

Thank you for sharing your updates. I keep adding leagues and never seem to be finished tweaking. @kbrown01 and @jeffcrum have provided way more answers than I’ve deserved.

I think the point however, is seeing what others are doing. I had AP and AFCA Polls on separate tabs. I’d been meaning to look into stacking them side by side and just never got there until today.

The only thing I’ve not been able to figure out is how to pull from multiple sensors in one decluttering template. I’d like to add “Last Week” and “Next Week” games which I have. All from different sensors and using different attributes.

1 Like

@ehcah - love the layout. Can you share your code?

This will likely get me laughed off this page as there is nothing eloquent or clean about it.

  ncaafranking_settings:
    card:
      type: custom:flex-table-card
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;'
        tbody tr td:first-child: 'width: .5%;'
        tbody tr td:nth-child(2): 'width: 5%;'
        tbody tr td:nth-child(n+3): 'width: 2%;'
        tbody tr td:nth-child(7): 'width: 5%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      entities:
        include: '[[entity]]'
      sort_by: entries-
      columns:
        - hidden: true
          data: '[[attribute]]'
        - name: <div style="height:20px;text-indent:5px;">RANK</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.current !== 'undefined') {
              x.current;
            } else {
              '';
            }     

            if (typeof x !== 'undefined' && typeof x.current !== 'undefined' &&
            typeof x.current !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.current + '</div>';
            } else {
              '';
            }
        - name: <div>TEAM</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.team.links !== 'undefined')
              '<div>&nbsp;<a href="' + x.team.links[0].href + 
              '" target="_blank"><img src="' + x.team.logos[0].href + 
              '" style="height:20px;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
              x.team.nickname + ' ' + x.team.name + '</div>';          
            else
              '<div>' + x.team.nickname + ' ' + x.team.name + '</div>'
        - name: <div style="text-align:center;">TREND</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.current !== 'undefined' &&
            typeof x.previous !== 'undefined') {
              let content = '';
              let icon = '';
              let text = '';
              
              if (x.current === x.previous) {
                icon = '<ha-icon icon="mdi:minus" style="fill:white;"></ha-icon>';
              } else if (x.previous === 0) {
                text = '<div style="font-size:14px;color:white;">NR</div>';
              } else {
                let difference = x.current - x.previous;
                if (difference > 0) {
                  icon = '<ha-icon icon="mdi:arrow-down" style="color:red;"></ha-icon>';
                  text = '<div style="font-size:14px;color:red;">' + difference + '</div>';
                } else if (difference < 0) {
                  icon = '<ha-icon icon="mdi:arrow-up" style="color:green;"></ha-icon>';
                  text = '<div style="font-size:14px;color:green;">' + Math.abs(difference) + '</div>';
                }
              }
              
              content = '<div style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;">' +
                        icon + 
                        (icon && text ? '<div style="margin-left:5px;">' + text + '</div>' : text) +
                        '</div>';
                        
              content;
            } else {
              '';
            } 
        - name: <div style="height:20px;text-indent:5px;">W-L</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.recordSummary !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.recordSummary + '</div>';            
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">POINTS</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.points !== 'undefined') {
              var formattedPoints = new Intl.NumberFormat().format(x.points);
              '<div style="font-weight:normal;text-indent:10px;">' + formattedPoints + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">VOTES</div>
          data: '[[attribute]]'
          modify: >-
            // Check if the data exists and return it, otherwise return an empty
            string

            if (typeof x.firstPlaceVotes !== 'undefined' && x.firstPlaceVotes
            !== 0) {
              '<div style="font-weight:normal;text-indent:10px;">' + x.firstPlaceVotes + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">TEAM PAGE</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x.team.links !== 'undefined' && x.team.links.length > 0)
            {
              '<div><a href="' + x.team.links[0].href + 
              '" target="_blank" style="text-decoration:none;color:white;">' +
              '<div style="font-weight:normal;text-indent:10px;">' + 
              x.team.nickname + ' ' + x.team.name + ' (' + x.team.abbreviation + ') ' + 
              '</div></a></div>';
            } else {
              '<div>' + x.team.nickname + ' ' + x.team.name + '</div>';
            }

To get the Week number I created 2 sensors. I’m only display the Week on that dashboard but you could also add the date range for it.

- platform: template
  scan_interval: 86400
  sensors:
    current_status:
      friendly_name: "College Football Week Number"
      unique_id: sensor.college_football_week_number
      value_template: >
        {% set today = now().date() %}
        {% set date_format = '%Y-%m-%d' %}
        {% set date_ranges = [
          {'start': '2024-01-10', 'end': '2024-08-23', 'status': 'OFF-SEASON', 'range': 'JAN 10 - AUG 23'},
          {'start': '2024-08-24', 'end': '2024-09-02', 'status': 'WEEK 1', 'range': 'Aug 24 - SEP 2'},
          {'start': '2024-09-03', 'end': '2024-09-07', 'status': 'WEEK 2', 'range': 'SEP 3 - 7'},
          {'start': '2024-09-08', 'end': '2024-09-14', 'status': 'WEEK 3', 'range': 'SEP 8 - 14'},
          {'start': '2024-09-15', 'end': '2024-09-21', 'status': 'WEEK 4', 'range': 'SEP 15 - 21'},
          {'start': '2024-09-22', 'end': '2024-09-28', 'status': 'WEEK 5', 'range': 'SEP 22 - 28'},
          {'start': '2024-09-29', 'end': '2024-10-05', 'status': 'WEEK 6', 'range': 'SEP 29 - OCT 5'},
          {'start': '2024-10-06', 'end': '2024-10-12', 'status': 'WEEK 7', 'range': 'OCT 6 - 12'},
          {'start': '2024-10-13', 'end': '2024-10-19', 'status': 'WEEK 8', 'range': 'OCT 13 - 19'},
          {'start': '2024-10-20', 'end': '2024-10-26', 'status': 'WEEK 9', 'range': 'OCT 20 - 26'},
          {'start': '2024-10-27', 'end': '2024-11-02', 'status': 'WEEK 10', 'range': 'OCT 27 - NOV 2'},
          {'start': '2024-11-03', 'end': '2024-11-09', 'status': 'WEEK 11', 'range': 'NOV 3 - 9'},
          {'start': '2024-11-10', 'end': '2024-11-16', 'status': 'WEEK 12', 'range': 'NOV 10 - 16'},
          {'start': '2024-11-17', 'end': '2024-11-23', 'status': 'WEEK 13', 'range': 'NOV 17 - 23'},
          {'start': '2024-11-24', 'end': '2024-11-30', 'status': 'WEEK 14', 'range': 'NOV 24 - 30'},
          {'start': '2024-12-01', 'end': '2024-12-07', 'status': 'WEEK 15', 'range': 'DEC 1 - 7'},
          {'start': '2024-12-08', 'end': '2024-12-13', 'status': 'WEEK 16', 'range': 'DEc 8 - 14'},
          {'start': '2024-12-14', 'end': '2025-01-21', 'status': 'BOWLS', 'range': 'DEC 14 - JAN 21'},
          {'start': '2025-01-22', 'end': '2025-08-22', 'status': 'OFF-SEASON', 'range': 'JAN 22 - AUG 22'}
        ] %}
        {% for date_range in date_ranges %}
          {% set start_date = strptime(date_range.start, date_format).date() %}
          {% set end_date = strptime(date_range.end, date_format).date() %}
          {% if today >= start_date and today <= end_date %}
            {{ date_range.status }}
          {% endif %}
        {% endfor %}
    current_range:
      friendly_name: "College Football Week Dates"
      unique_id: sensor.college_football_week_dates
      value_template: >
        {% set today = now().date() %}
        {% set date_format = '%Y-%m-%d' %}
        {% set date_ranges = [
          {'start': '2024-01-10', 'end': '2024-08-23', 'status': 'OFF-SEASON', 'range': 'JAN 10 - AUG 23'},
          {'start': '2024-08-24', 'end': '2024-09-02', 'status': 'WEEK 1', 'range': 'Aug 24 - SEP 2'},
          {'start': '2024-09-03', 'end': '2024-09-07', 'status': 'WEEK 2', 'range': 'SEP 3 - 7'},
          {'start': '2024-09-08', 'end': '2024-09-14', 'status': 'WEEK 3', 'range': 'SEP 8 - 14'},
          {'start': '2024-09-15', 'end': '2024-09-21', 'status': 'WEEK 4', 'range': 'SEP 15 - 21'},
          {'start': '2024-09-22', 'end': '2024-09-28', 'status': 'WEEK 5', 'range': 'SEP 22 - 28'},
          {'start': '2024-09-29', 'end': '2024-10-05', 'status': 'WEEK 6', 'range': 'SEP 29 - OCT 5'},
          {'start': '2024-10-06', 'end': '2024-10-12', 'status': 'WEEK 7', 'range': 'OCT 6 - 12'},
          {'start': '2024-10-13', 'end': '2024-10-19', 'status': 'WEEK 8', 'range': 'OCT 13 - 19'},
          {'start': '2024-10-20', 'end': '2024-10-26', 'status': 'WEEK 9', 'range': 'OCT 20 - 26'},
          {'start': '2024-10-27', 'end': '2024-11-02', 'status': 'WEEK 10', 'range': 'OCT 27 - NOV 2'},
          {'start': '2024-11-03', 'end': '2024-11-09', 'status': 'WEEK 11', 'range': 'NOV 3 - 9'},
          {'start': '2024-11-10', 'end': '2024-11-16', 'status': 'WEEK 12', 'range': 'NOV 10 - 16'},
          {'start': '2024-11-17', 'end': '2024-11-23', 'status': 'WEEK 13', 'range': 'NOV 17 - 23'},
          {'start': '2024-11-24', 'end': '2024-11-30', 'status': 'WEEK 14', 'range': 'NOV 24 - 30'},
          {'start': '2024-12-01', 'end': '2024-12-07', 'status': 'WEEK 15', 'range': 'DEC 1 - 7'},
          {'start': '2024-12-08', 'end': '2024-12-13', 'status': 'WEEK 16', 'range': 'DEc 8 - 14'},
          {'start': '2024-12-14', 'end': '2025-01-21', 'status': 'BOWLS', 'range': 'DEC 14 - JAN 21'},
          {'start': '2025-01-22', 'end': '2025-08-22', 'status': 'OFF-SEASON', 'range': 'JAN 22 - AUG 22'}
        ] %}
        {% for date_range in date_ranges %}
          {% set start_date = strptime(date_range.start, date_format).date() %}
          {% set end_date = strptime(date_range.end, date_format).date() %}
          {% if today >= start_date and today <= end_date %}
            {{ date_range.range }}
          {% endif %}
        {% endfor %}

And…

                            - attributes:
                                label: RANKINGS
                                icon: mdi:account-group
                              card:
                                type: horizontal-stack
                                cards:                                                           
                                  - type: vertical-stack
                                    cards:
                                      - type: markdown
                                        content: >
                                          <h1>TOP 25 AP POLL</h1>
                                          <h3>{{ states('sensor.college_football_week_number') }}</h3>                                   
                                      - type: custom:decluttering-card
                                        template: ncaafranking_settings
                                        variables:
                                          - title: AP Top 25 Poll
                                          - entity: sensor.college_football_ap_poll
                                          - attribute: entries
                                  - type: vertical-stack
                                    cards:
                                      - type: markdown
                                        content: >
                                          <h1>AFCA COACHES POLL</h1>
                                          <h3>{{ states('sensor.college_football_week_number') }}</h3>
                                      - type: custom:decluttering-card
                                        template: ncaafranking_settings
                                        variables:
                                          - title: AFCA Coaches Poll
                                          - entity:  sensor.college_football_afca_coaches_poll
                                          - attribute: entries 
1 Like

This is brilliant and yes I am going to use some of these great changes. Nicelly done!

I was going to pull the week out of the sensor.ncaaf_rank data and grab the shortHeadline section.
shortheadline

I know I should probably be asking the team-tracker card group this but figured someone here might have run into this and has an answer.
I know that I can call the API by conference, but can I pass that to the teamtracker card and use it as a filter?

I was thinking that I could pass the conference into the game_stats template like this:

 - type: vertical-stack
                                    cards:
                                      - type: custom:decluttering-card
                                        template: game_stats
                                        variables:
                                          - sport: NCAAF
                                          - sport_path: football
                                          - status: PRE
                                          - conference: 4

and then filter it out:

              {{{"type": "custom:teamtracker-card",
                "entity": team, "conference_id":[[conference]],
                "home_side": "right"}}},

but it shows some of the games from most conferences. Thanks if anyone has any ideas

Just adding a couple NCAA sensors for anyone who needs them - I could not seem to find them but maybe I just missed it.

I am still trying to create tabs for the conferences and filter games. I only want the conference games shown in Team Tracker and when I get a chance I will look at trying to see if I can shrink the size of the teamtracker-card.

As a side I wasn’t seeing some of the games in Team-tracker. Data was there but they weren’t showing up in cards. I went back to the sensor and wrapped league_id and Name in quotes. I seemed to get every game after that I was looking for.

Anyway here are the sensors for the Big 10, Big 12, SEC and ACC

## NCAA Teams
## Big 12 Conference
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ARIZ
  conference_id: "4"
  name: "University of Arizona"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ASU
  conference_id: "4"
  name: "Arizona State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BAY
  conference_id: "4"
  name: "Baylor University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BYU
  conference_id: "4"
  name: "Brighan Young University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UCF
  conference_id: "4"
  name: "University of Central Florida"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CIN
  conference_id: "4"
  name: "University of Cincinnati"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: COLO
  conference_id: "4"
  name: "University of Colorado Boulder"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: HOU
  conference_id: "4"
  name: "University of Houston"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ISU
  conference_id: "4"
  name: "Iowa State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: KU
  conference_id: "4"
  name: "University of Kansas"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: KSU
  conference_id: "4"
  name: "Kansas State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: OKST
  conference_id: "4"
  name: "Oklahoma State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TCU
  conference_id: "4"
  name: "Texas Christian University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TTU
  conference_id: "4"
  name: "Texas Tech University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UTAH
  conference_id: "4"
  name: "University of Utah"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WVU
  conference_id: "4"
  name: "West Virginia University"
##
## NCAA Teams
## SEC Conference
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UGA
  conference_id: "8"
  name: "University of Georgia"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UK
  conference_id: "8"
  name: "University of Kentucky"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TENN
  conference_id: "8"
  name: "University of Tennessee"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ALA
  conference_id: "8"
  name: "University of Alabama"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ARK
  conference_id: "8"
  name: "University of Arkansas"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: Aub
  conference_id: "8"
  name: "Auburn University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: FLA
  conference_id: "8"
  name: "University of Florida"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: LSU
  conference_id: "8"
  name: "Louisiana State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MISS
  conference_id: "8"
  name: "University of Mississippi"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MSST
  conference_id: "8"
  name: "Mississippi State University" 
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MIZ
  conference_id: "8"
  name: "University of Missouri"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: OKU
  conference_id: "8"
  name: "University of Oklahoma"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: OU
  conference_id: "8"
  name: "University of South Carolina"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TEX
  conference_id: "8"
  name: "Univerisity of Texas at Austin"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TA&M
  conference_id: "8"
  name: "Texas A&M University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: VAN
  conference_id: "8"
  name: "Vanderbilt University"
##
## NCAA Teams
## Big 10  
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ILL
  conference_id: "5"
  name: "University of Illinois"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: IU
  conference_id: "5"
  name: "Indiana University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: IOWA
  conference_id: "5"
  name: "University of Iowa"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MD
  conference_id: "5"
  name: "University of Maryland"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MSU
  conference_id: "5"
  name: "Michigan State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MICH
  conference_id: "5"
  name: "University of Michigan"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MINN
  conference_id: "5"
  name: "University of Minnesota"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NEB
  conference_id: "5"
  name: "University of Nebraska"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NU
  conference_id: "5"
  name: "Northwestern University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: OSU
  conference_id: "5"
  name: "Ohio State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ORE
  conference_id: "5"
  name:  "University of Oregon"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: PSU
  conference_id: "5"
  name: "Penn State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: PUR
  conference_id: "5"
  name: "Purdue University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: RUTG
  conference_id: "5"
  name: "Rutgers University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UCLA
  conference_id: "5"
  name: "University of California Los Angeles"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: USC
  conference_id: "5"
  name: "University of Southern California"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WASH
  conference_id: "5"
  name: "University of Washington"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WIS
  conference_id: "5"
  name: "University of Wisconsin"
##
## NCAA Teams
## ACC
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BC
  conference_id: "1"
  name: "Boston College"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CAL
  conference_id: "1"
  name: "University of California Berkeley"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CLEM
  conference_id: "1"
  name: "Clemson University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: DUKE
  conference_id: "1"
  name: "Duke University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: FSU
  conference_id: "1"
  name: "Florida State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: GT
  conference_id: "1"
  name: "Georgia Institute of Technology"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: LOU
  conference_id: "1"
  name: "University of Louisville"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MIA
  conference_id: "1"
  name: "University of Miami"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UNC
  conference_id: "1"
  name: "University of North Carolina"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NCSU
  conference_id: "1"
  name: "North Carolina State University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NDU
  conference_id: "1"
  name: "University of Notre Dame"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: PITT
  conference_id: "1"
  name: "University of Pittsburgh"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: SMU
  conference_id: "1"
  name: "Southern Methodist University"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: SYR
  conference_id: "1"
  name: "Syracuse"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UVA
  conference_id: "1"
  name: "University of Virginia"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: VT
  conference_id: "1"
  name: "Virginia Polytechnic"
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WAKE
  conference_id: "1"
  name: "Wake Forest University"
##
## NCAA Teams
## Moutain West 
##
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BOIS
  conference_id: "17"
  name: Boise State Broncos
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WYO
  conference_id: "17"
  name: Wyoming Cowboys
- platform: teamtracker
  league_id: "NCAAF"
  team_id: USU
  conference_id: "17"
  name: Utah State Aggies
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UNLV
  conference_id: "17"
  name: UNLV Rebels
- platform: teamtracker
  league_id: "NCAAF"
  team_id: SJSU
  conference_id: "17"
  name: San José State Spartans
- platform: teamtracker
  league_id: "NCAAF"
  team_id: SDSU
  conference_id: "17"
  name: San Diego State Aztecs
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UNM
  conference_id: "17"
  name: New Mexico Lobos
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NEV
  conference_id: "17"
  name: Nevada Wolf Pack
- platform: teamtracker
  league_id: "NCAAF"
  team_id: HAW
  conference_id: "17"
  name: Hawai'i Rainbow Warriors
- platform: teamtracker
  league_id: "NCAAF"
  team_id: FRES
  conference_id: "17"
  name: Fresno State Bulldogs
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CSU
  conference_id: "17"
  name: Colorado State Rams
- platform: teamtracker
  league_id: "NCAAF"
  team_id: AFA
  conference_id: "17"
  name: Air Force Falcons
##
## NCAA Teams
## FBS Independent
##
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CONN
  conference_id: "18"
  name: UConn Huskies
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ND
  conference_id: "18"
  name: Notre Dame Fighting Irish
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MASS
  conference_id: "18"
  name: Massachusetts Minutemen
  
##
## NCAA Teams
## American
##
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CLT
  conference_id: "151"
  name: Charlotte 49ers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ARMY
  conference_id: "151"
  name: Army Black Knights
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UTSA
  conference_id: "151"
  name: UTSA Roadrunners
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UAB
  conference_id: "151"
  name: UAB Blazers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TLSA
  conference_id: "151"
  name: Tulsa Golden Hurricane
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TULN
  conference_id: "151"
  name: Tulane Green Wave
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TEM
  conference_id: "151"
  name: Temple Owls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: USF
  conference_id: "151"
  name: South Florida Bulls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: RICE
  conference_id: "151"
  name: Rice Owls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UNT
  conference_id: "151"
  name: North Texas Mean Green
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NAVY
  conference_id: "151"
  name: Navy Midshipmen
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MEM
  conference_id: "151"
  name: Memphis Tigers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: FAU
  conference_id: "151"
  name: Florida Atlantic Owls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ECU
  conference_id: "151"
  name: East Carolina Pirates

## NCAA Teams
## Conference USA
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WKU
  conference_id: "12"
  name: Western Kentucky Hilltoppers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UTEP
  conference_id: "12"
  name: UTEP Miners
- platform: teamtracker
  league_id: "NCAAF"
  team_id: SHSU
  conference_id: "12"
  name: Sam Houston Bearkats
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NMSU
  conference_id: "12"
  name: New Mexico State Aggies
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MTSU
  conference_id: "12"
  name: Middle Tennessee Blue Raiders
- platform: teamtracker
  league_id: "NCAAF"
  team_id: LT
  conference_id: "12"
  name: Louisiana Tech Bulldogs
- platform: teamtracker
  league_id: "NCAAF"
  team_id: LIB
  conference_id: "12"
  name: Liberty Flames
- platform: teamtracker
  league_id: "NCAAF"
  team_id: KENN
  conference_id: "12"
  name: Kennesaw State Owls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: KENN
  conference_id: "12"
  name: Kennesaw State Owls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: JVST
  conference_id: "12"
  name: Jacksonville State Gamecocks
- platform: teamtracker
  league_id: "NCAAF"
  team_id: FIU
  conference_id: "12"
  name: Florida International Panthers

## NCAA Teams
## Mid American 
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CMU
  conference_id: "15"
  name: Central Michigan Chippewas
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BUFF
  conference_id: "15"
  name: Buffalo Bulls
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BGSU
  conference_id: "15"
  name: Bowling Green Falcons
- platform: teamtracker
  league_id: "NCAAF"
  team_id: BALL
  conference_id: "15"
  name: Ball State Cardinals
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WMU
  conference_id: "15"
  name: Western Michigan Broncos
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TOL
  conference_id: "15"
  name: Toledo Rockets
- platform: teamtracker
  league_id: "NCAAF"
  team_id: OHIO
  conference_id: "15"
  name: Ohio Bobcats
- platform: teamtracker
  league_id: "NCAAF"
  team_id: NIU
  conference_id: "15"
  name: Northern Illinois Huskies
- platform: teamtracker
  league_id: "NCAAF"
  team_id: M-OH
  conference_id: "15"
  name: Miami (OH) RedHawks
- platform: teamtracker
  league_id: "NCAAF"
  team_id: KENT
  conference_id: "15"
  name: Kent State Golden Flashes
- platform: teamtracker
  league_id: "NCAAF"
  team_id: AKR
  conference_id: "15"
  name: Akron Zips
- platform: teamtracker
  league_id: "NCAAF"
  team_id: EMU
  conference_id: "15"
  name: Eastern Michigan Eagles
## NCAA Teams
## Pac-12
- platform: teamtracker
  league_id: "NCAAF"
  team_id: WSU
  conference_id: "9"
  name: Washington State Cougars
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ORST
  conference_id: "9"
  name: Oregon State Beavers 

## NCAA Teams
## Sun Belt
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ARST
  conference_id: "37"
  name: Arkansas State Red Wolves
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ULM
  conference_id: "37"
  name: UL Monroe Warhawks
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TROY
  conference_id: "37"
  name: Troy Trojans
- platform: teamtracker
  league_id: "NCAAF"
  team_id: TXST
  conference_id: "37"
  name: Texas State Bobcats
- platform: teamtracker
  league_id: "NCAAF"
  team_id: USM
  conference_id: "37"
  name: Southern Miss Golden Eagles
- platform: teamtracker
  league_id: "NCAAF"
  team_id: USA
  conference_id: "37"
  name: South Alabama Jaguars
- platform: teamtracker
  league_id: "NCAAF"
  team_id: APP
  conference_id: "37"
  name: Appalachian State Mountaineers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: ODU
  conference_id: "37"
  name: Old Dominion Monarchs
- platform: teamtracker
  league_id: "NCAAF"
  team_id: MRSH
  conference_id: "37"
  name: Marshall Thundering Herd
- platform: teamtracker
  league_id: "NCAAF"
  team_id: UL
  conference_id: "37"
  name: Louisiana Ragin' Cajuns
- platform: teamtracker
  league_id: "NCAAF"
  team_id: JMU
  conference_id: "37"
  name: James Madison Dukes
- platform: teamtracker
  league_id: "NCAAF"
  team_id: GAST
  conference_id: "37"
  name: Georgia State Panthers
- platform: teamtracker
  league_id: "NCAAF"
  team_id: GASO
  conference_id: "37"
  name: Georgia Southern Eagles
- platform: teamtracker
  league_id: "NCAAF"
  team_id: CCU
  conference_id: "37"
  name: Coastal Carolina Chanticleers

UPDATE
I grabbed what @ehcah had put together for the other conferences and put them into my format and put quotes around - big thanks to ehcah! I will go back and clean up as needed.

I’ll share what I’ve created, but again, can’t confirm they are the most efficient.

Sensor.yaml

##
## College Football Standings
##
- platform: rest
  scan_interval: 36000
  name: College Football Standings
  unique_id: sensor.college_football_standings
  resource: https://site.web.api.espn.com/apis/v2/sports/football/college-football/standings
  value_template: "{{ now() }}"
  json_attributes:
    - children
##
## College Football Rankings
##
- platform: rest
  scan_interval: 36000
  name: College Football Top25 Rankings
  unique_id: sensor.college_football_top25_rankings
  resource: https://site.api.espn.com/apis/site/v2/sports/football/college-football/rankings
  value_template: "{{ now() }}"
  json_attributes:
    - rankings
    - ranks
    - current

Template.yaml

  ##
  ## College Football Rankings
  ##
  - name: AFCA_Coaches_Poll
    unique_id: sensor.college_football_afca_coaches_poll
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_top25_rankings','rankings')[1]['ranks'] }}"
  - name: AP_Poll
    unique_id: sensor.college_football_ap_poll
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_top25_rankings','rankings')[0]['ranks'] }}"
  ##
  ## College Football Standings
  ##
  - name: american_athletic_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[0]['standings']['entries'] }}"
  - name: atlantic_coast_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[1]['standings']['entries'] }}"
  - name: big_12_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[2]['standings']['entries'] }}"
  - name: big_ten_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[3]['standings']['entries'] }}"
  - name: conference_usa
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[4]['standings']['entries'] }}"
  - name: fbs_independents
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[5]['standings']['entries'] }}"
  - name: mid_american_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[6]['standings']['entries'] }}"
  - name: mountain_west_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[7]['standings']['entries'] }}"
  - name: pac12_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[8]['standings']['entries'] }}"
  - name: southeastern_conference
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[9]['standings']['entries'] }}"
  - name: sun_belt_conference_east
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[10]['children'][0]['standings']['entries'] }}"
  - name: sun_belt_conference_west
    state: "{{ now() }}"
    attributes:
      entries: "{{ state_attr('sensor.college_football_standings','children')[10]['children'][1]['standings']['entries'] }}"

Updated sensor NCAAF sensors for 2024-25 season.

- platform: teamtracker
  league_id: NCAAF
  team_id: CLEM
  conference_id: 1
  name: Clemson Tigers
- platform: teamtracker
  league_id: NCAAF
  team_id: CAL
  conference_id: 1
  name: California Golden Bears
- platform: teamtracker
  league_id: NCAAF
  team_id: CAL
  conference_id: 1
  name: California Golden Bears
- platform: teamtracker
  league_id: NCAAF
  team_id: BC
  conference_id: 1
  name: Boston College Eagles
- platform: teamtracker
  league_id: NCAAF
  team_id: WAKE
  conference_id: 1
  name: Wake Forest Demon Deacons
- platform: teamtracker
  league_id: NCAAF
  team_id: VT
  conference_id: 1
  name: Virginia Tech Hokies
- platform: teamtracker
  league_id: NCAAF
  team_id: UVA
  conference_id: 1
  name: Virginia Cavaliers
- platform: teamtracker
  league_id: NCAAF
  team_id: SYR
  conference_id: 1
  name: Syracuse Orange
- platform: teamtracker
  league_id: NCAAF
  team_id: STAN
  conference_id: 1
  name: Stanford Cardinal
- platform: teamtracker
  league_id: NCAAF
  team_id: STAN
  conference_id: 1
  name: Stanford Cardinal
- platform: teamtracker
  league_id: NCAAF
  team_id: SMU
  conference_id: 1
  name: SMU Mustangs
- platform: teamtracker
  league_id: NCAAF
  team_id: SMU
  conference_id: 1
  name: SMU Mustangs
- platform: teamtracker
  league_id: NCAAF
  team_id: PITT
  conference_id: 1
  name: Pittsburgh Panthers
- platform: teamtracker
  league_id: NCAAF
  team_id: UNC
  conference_id: 1
  name: North Carolina Tar Heels
- platform: teamtracker
  league_id: NCAAF
  team_id: NCSU
  conference_id: 1
  name: NC State Wolfpack
- platform: teamtracker
  league_id: NCAAF
  team_id: MIA
  conference_id: 1
  name: Miami Hurricanes
- platform: teamtracker
  league_id: NCAAF
  team_id: LOU
  conference_id: 1
  name: Louisville Cardinals
- platform: teamtracker
  league_id: NCAAF
  team_id: GT
  conference_id: 1
  name: Georgia Tech Yellow Jackets
- platform: teamtracker
  league_id: NCAAF
  team_id: FSU
  conference_id: 1
  name: Florida State Seminoles
- platform: teamtracker
  league_id: NCAAF
  team_id: DUKE
  conference_id: 1
  name: Duke Blue Devils
  - platform: teamtracker
  league_id: NCAAF
  team_id: CIN
  conference_id: 4
  name: Cincinnati Bearcats
- platform: teamtracker
  league_id: NCAAF
  team_id: BYU
  conference_id: 4
  name: BYU Cougars
- platform: teamtracker
  league_id: NCAAF
  team_id: BAY
  conference_id: 4
  name: Baylor Bears
- platform: teamtracker
  league_id: NCAAF
  team_id: ARIZ
  conference_id: 4
  name: Arizona Wildcats
- platform: teamtracker
  league_id: NCAAF
  team_id: ARIZ
  conference_id: 4
  name: Arizona Wildcats
- platform: teamtracker
  league_id: NCAAF
  team_id: ASU
  conference_id: 4
  name: Arizona State Sun Devils
- platform: teamtracker
  league_id: NCAAF
  team_id: WVU
  conference_id: 4
  name: West Virginia Mountaineers
- platform: teamtracker
  league_id: NCAAF
  team_id: UTAH
  conference_id: 4
  name: Utah Utes
- platform: teamtracker
  league_id: NCAAF
  team_id: UTAH
  conference_id: 4
  name: Utah Utes
- platform: teamtracker
  league_id: NCAAF
  team_id: ASU
  conference_id: 4
  name: Arizona State Sun Devils
- platform: teamtracker
  league_id: NCAAF
  team_id: UCF
  conference_id: 4
  name: UCF Knights
- platform: teamtracker
  league_id: NCAAF
  team_id: TTU
  conference_id: 4
  name: Texas Tech Red Raiders
- platform: teamtracker
  league_id: NCAAF
  team_id: TCU
  conference_id: 4
  name: TCU Horned Frogs
- platform: teamtracker
  league_id: NCAAF
  team_id: OKST
  conference_id: 4
  name: Oklahoma State Cowboys
- platform: teamtracker
  league_id: NCAAF
  team_id: KSU
  conference_id: 4
  name: Kansas State Wildcats
- platform: teamtracker
  league_id: NCAAF
  team_id: KU
  conference_id: 4
  name: Kansas Jayhawks
- platform: teamtracker
  league_id: NCAAF
  team_id: ISU
  conference_id: 4
  name: Iowa State Cyclones
- platform: teamtracker
  league_id: NCAAF
  team_id: HOU
  conference_id: 4
  name: Houston Cougars
- platform: teamtracker
  league_id: NCAAF
  team_id: COLO
  conference_id: 4
  name: Colorado Buffaloes
- platform: teamtracker
  league_id: NCAAF
  team_id: COLO
  conference_id: 4
  name: Colorado Buffaloes
- platform: teamtracker
  league_id: NCAAF
  team_id: WIS
  conference_id: 5
  name: Wisconsin Badgers
- platform: teamtracker
  league_id: NCAAF
  team_id: WASH
  conference_id: 5
  name: Washington Huskies
- platform: teamtracker
  league_id: NCAAF
  team_id: WASH
  conference_id: 5
  name: Washington Huskies
- platform: teamtracker
  league_id: NCAAF
  team_id: USC
  conference_id: 5
  name: USC Trojans
- platform: teamtracker
  league_id: NCAAF
  team_id: USC
  conference_id: 5
  name: USC Trojans
- platform: teamtracker
  league_id: NCAAF
  team_id: UCLA
  conference_id: 5
  name: UCLA Bruins
- platform: teamtracker
  league_id: NCAAF
  team_id: UCLA
  conference_id: 5
  name: UCLA Bruins
- platform: teamtracker
  league_id: NCAAF
  team_id: RUTG
  conference_id: 5
  name: Rutgers Scarlet Knights
- platform: teamtracker
  league_id: NCAAF
  team_id: PUR
  conference_id: 5
  name: Purdue Boilermakers
- platform: teamtracker
  league_id: NCAAF
  team_id: PSU
  conference_id: 5
  name: Penn State Nittany Lions
- platform: teamtracker
  league_id: NCAAF
  team_id: ORE
  conference_id: 5
  name: Oregon Ducks
- platform: teamtracker
  league_id: NCAAF
  team_id: ORE
  conference_id: 5
  name: Oregon Ducks
- platform: teamtracker
  league_id: NCAAF
  team_id: OSU
  conference_id: 5
  name: Ohio State Buckeyes
- platform: teamtracker
  league_id: NCAAF
  team_id: NU
  conference_id: 5
  name: Northwestern Wildcats
- platform: teamtracker
  league_id: NCAAF
  team_id: NEB
  conference_id: 5
  name: Nebraska Cornhuskers
- platform: teamtracker
  league_id: NCAAF
  team_id: MINN
  conference_id: 5
  name: Minnesota Golden Gophers
- platform: teamtracker
  league_id: NCAAF
  team_id: MICH
  conference_id: 5
  name: Michigan Wolverines
- platform: teamtracker
  league_id: NCAAF
  team_id: MSU
  conference_id: 5
  name: Michigan State Spartans
- platform: teamtracker
  league_id: NCAAF
  team_id: MD
  conference_id: 5
  name: Maryland Terrapins
- platform: teamtracker
  league_id: NCAAF
  team_id: IOWA
  conference_id: 5
  name: Iowa Hawkeyes
- platform: teamtracker
  league_id: NCAAF
  team_id: IU
  conference_id: 5
  name: Indiana Hoosiers
- platform: teamtracker
  league_id: NCAAF
  team_id: ILL
  conference_id: 5
  name: Illinois Fighting Illini
- platform: teamtracker
  league_id: NCAAF
  team_id: AUB
  conference_id: 8
  name: Auburn Tigers
- platform: teamtracker
  league_id: NCAAF
  team_id: ARK
  conference_id: 8
  name: Arkansas Razorbacks
- platform: teamtracker
  league_id: NCAAF
  team_id: VAN
  conference_id: 8
  name: Vanderbilt Commodores
- platform: teamtracker
  league_id: NCAAF
  team_id: TEX
  conference_id: 8
  name: Texas Longhorns
- platform: teamtracker
  league_id: NCAAF
  team_id: TEX
  conference_id: 8
  name: Texas Longhorns
- platform: teamtracker
  league_id: NCAAF
  team_id: TA&M
  conference_id: 8
  name: Texas A&M Aggies
- platform: teamtracker
  league_id: NCAAF
  team_id: TENN
  conference_id: 8
  name: Tennessee Volunteers
- platform: teamtracker
  league_id: NCAAF
  team_id: SC
  conference_id: 8
  name: South Carolina Gamecocks
- platform: teamtracker
  league_id: NCAAF
  team_id: MISS
  conference_id: 8
  name: Ole Miss Rebels
- platform: teamtracker
  league_id: NCAAF
  team_id: OU
  conference_id: 8
  name: Oklahoma Sooners
- platform: teamtracker
  league_id: NCAAF
  team_id: OU
  conference_id: 8
  name: Oklahoma Sooners
- platform: teamtracker
  league_id: NCAAF
  team_id: ALA
  conference_id: 8
  name: Alabama Crimson Tide
- platform: teamtracker
  league_id: NCAAF
  team_id: MIZ
  conference_id: 8
  name: Missouri Tigers
- platform: teamtracker
  league_id: NCAAF
  team_id: MSST
  conference_id: 8
  name: Mississippi State Bulldogs
- platform: teamtracker
  league_id: NCAAF
  team_id: LSU
  conference_id: 8
  name: LSU Tigers
- platform: teamtracker
  league_id: NCAAF
  team_id: UK
  conference_id: 8
  name: Kentucky Wildcats
- platform: teamtracker
  league_id: NCAAF
  team_id: UGA
  conference_id: 8
  name: Georgia Bulldogs
- platform: teamtracker
  league_id: NCAAF
  team_id: FLA
  conference_id: 8
  name: Florida Gators
- platform: teamtracker
  league_id: NCAAF
  team_id: WSU
  conference_id: 9
  name: Washington State Cougars
- platform: teamtracker
  league_id: NCAAF
  team_id: ORST
  conference_id: 9
  name: Oregon State Beavers
- platform: teamtracker
  league_id: NCAAF
  team_id: WKU
  conference_id: 12
  name: Western Kentucky Hilltoppers
- platform: teamtracker
  league_id: NCAAF
  team_id: UTEP
  conference_id: 12
  name: UTEP Miners
- platform: teamtracker
  league_id: NCAAF
  team_id: SHSU
  conference_id: 12
  name: Sam Houston Bearkats
- platform: teamtracker
  league_id: NCAAF
  team_id: NMSU
  conference_id: 12
  name: New Mexico State Aggies
- platform: teamtracker
  league_id: NCAAF
  team_id: MTSU
  conference_id: 12
  name: Middle Tennessee Blue Raiders
- platform: teamtracker
  league_id: NCAAF
  team_id: LT
  conference_id: 12
  name: Louisiana Tech Bulldogs
- platform: teamtracker
  league_id: NCAAF
  team_id: LIB
  conference_id: 12
  name: Liberty Flames
- platform: teamtracker
  league_id: NCAAF
  team_id: KENN
  conference_id: 12
  name: Kennesaw State Owls
- platform: teamtracker
  league_id: NCAAF
  team_id: KENN
  conference_id: 12
  name: Kennesaw State Owls
- platform: teamtracker
  league_id: NCAAF
  team_id: JVST
  conference_id: 12
  name: Jacksonville State Gamecocks
- platform: teamtracker
  league_id: NCAAF
  team_id: FIU
  conference_id: 12
  name: Florida International Panthers
- platform: teamtracker
  league_id: NCAAF
  team_id: CMU
  conference_id: 15
  name: Central Michigan Chippewas
- platform: teamtracker
  league_id: NCAAF
  team_id: BUFF
  conference_id: 15
  name: Buffalo Bulls
- platform: teamtracker
  league_id: NCAAF
  team_id: BGSU
  conference_id: 15
  name: Bowling Green Falcons
- platform: teamtracker
  league_id: NCAAF
  team_id: BALL
  conference_id: 15
  name: Ball State Cardinals
- platform: teamtracker
  league_id: NCAAF
  team_id: WMU
  conference_id: 15
  name: Western Michigan Broncos
- platform: teamtracker
  league_id: NCAAF
  team_id: TOL
  conference_id: 15
  name: Toledo Rockets
- platform: teamtracker
  league_id: NCAAF
  team_id: OHIO
  conference_id: 15
  name: Ohio Bobcats
- platform: teamtracker
  league_id: NCAAF
  team_id: NIU
  conference_id: 15
  name: Northern Illinois Huskies
- platform: teamtracker
  league_id: NCAAF
  team_id: M-OH
  conference_id: 15
  name: Miami (OH) RedHawks
- platform: teamtracker
  league_id: NCAAF
  team_id: KENT
  conference_id: 15
  name: Kent State Golden Flashes
- platform: teamtracker
  league_id: NCAAF
  team_id: AKR
  conference_id: 15
  name: Akron Zips
- platform: teamtracker
  league_id: NCAAF
  team_id: EMU
  conference_id: 15
  name: Eastern Michigan Eagles
- platform: teamtracker
  league_id: NCAAF
  team_id: BOIS
  conference_id: 17
  name: Boise State Broncos
- platform: teamtracker
  league_id: NCAAF
  team_id: WYO
  conference_id: 17
  name: Wyoming Cowboys
- platform: teamtracker
  league_id: NCAAF
  team_id: USU
  conference_id: 17
  name: Utah State Aggies
- platform: teamtracker
  league_id: NCAAF
  team_id: UNLV
  conference_id: 17
  name: UNLV Rebels
- platform: teamtracker
  league_id: NCAAF
  team_id: SJSU
  conference_id: 17
  name: San José State Spartans
- platform: teamtracker
  league_id: NCAAF
  team_id: SDSU
  conference_id: 17
  name: San Diego State Aztecs
- platform: teamtracker
  league_id: NCAAF
  team_id: UNM
  conference_id: 17
  name: New Mexico Lobos
- platform: teamtracker
  league_id: NCAAF
  team_id: NEV
  conference_id: 17
  name: Nevada Wolf Pack
- platform: teamtracker
  league_id: NCAAF
  team_id: HAW
  conference_id: 17
  name: Hawai'i Rainbow Warriors
- platform: teamtracker
  league_id: NCAAF
  team_id: FRES
  conference_id: 17
  name: Fresno State Bulldogs
- platform: teamtracker
  league_id: NCAAF
  team_id: CSU
  conference_id: 17
  name: Colorado State Rams
- platform: teamtracker
  league_id: NCAAF
  team_id: AFA
  conference_id: 17
  name: Air Force Falcons
- platform: teamtracker
  league_id: NCAAF
  team_id: CONN
  conference_id: 18
  name: UConn Huskies
- platform: teamtracker
  league_id: NCAAF
  team_id: ND
  conference_id: 18
  name: Notre Dame Fighting Irish
- platform: teamtracker
  league_id: NCAAF
  team_id: MASS
  conference_id: 18
  name: Massachusetts Minutemen
- platform: teamtracker
  league_id: NCAAF
  team_id: ARST
  conference_id: 37
  name: Arkansas State Red Wolves
- platform: teamtracker
  league_id: NCAAF
  team_id: ULM
  conference_id: 37
  name: UL Monroe Warhawks
- platform: teamtracker
  league_id: NCAAF
  team_id: TROY
  conference_id: 37
  name: Troy Trojans
- platform: teamtracker
  league_id: NCAAF
  team_id: TXST
  conference_id: 37
  name: Texas State Bobcats
- platform: teamtracker
  league_id: NCAAF
  team_id: USM
  conference_id: 37
  name: Southern Miss Golden Eagles
- platform: teamtracker
  league_id: NCAAF
  team_id: USA
  conference_id: 37
  name: South Alabama Jaguars
- platform: teamtracker
  league_id: NCAAF
  team_id: APP
  conference_id: 37
  name: Appalachian State Mountaineers
- platform: teamtracker
  league_id: NCAAF
  team_id: ODU
  conference_id: 37
  name: Old Dominion Monarchs
- platform: teamtracker
  league_id: NCAAF
  team_id: MRSH
  conference_id: 37
  name: Marshall Thundering Herd
- platform: teamtracker
  league_id: NCAAF
  team_id: UL
  conference_id: 37
  name: Louisiana Ragin' Cajuns
- platform: teamtracker
  league_id: NCAAF
  team_id: JMU
  conference_id: 37
  name: James Madison Dukes
- platform: teamtracker
  league_id: NCAAF
  team_id: GAST
  conference_id: 37
  name: Georgia State Panthers
- platform: teamtracker
  league_id: NCAAF
  team_id: GASO
  conference_id: 37
  name: Georgia Southern Eagles
- platform: teamtracker
  league_id: NCAAF
  team_id: CCU
  conference_id: 37
  name: Coastal Carolina Chanticleers
- platform: teamtracker
  league_id: NCAAF
  team_id: CLT
  conference_id: 151
  name: Charlotte 49ers
- platform: teamtracker
  league_id: NCAAF
  team_id: ARMY
  conference_id: 151
  name: Army Black Knights
- platform: teamtracker
  league_id: NCAAF
  team_id: ARMY
  conference_id: 151
  name: Army Black Knights
- platform: teamtracker
  league_id: NCAAF
  team_id: UTSA
  conference_id: 151
  name: UTSA Roadrunners
- platform: teamtracker
  league_id: NCAAF
  team_id: UAB
  conference_id: 151
  name: UAB Blazers
- platform: teamtracker
  league_id: NCAAF
  team_id: TLSA
  conference_id: 151
  name: Tulsa Golden Hurricane
- platform: teamtracker
  league_id: NCAAF
  team_id: TULN
  conference_id: 151
  name: Tulane Green Wave
- platform: teamtracker
  league_id: NCAAF
  team_id: TEM
  conference_id: 151
  name: Temple Owls
- platform: teamtracker
  league_id: NCAAF
  team_id: USF
  conference_id: 151
  name: South Florida Bulls
- platform: teamtracker
  league_id: NCAAF
  team_id: RICE
  conference_id: 151
  name: Rice Owls
- platform: teamtracker
  league_id: NCAAF
  team_id: UNT
  conference_id: 151
  name: North Texas Mean Green
- platform: teamtracker
  league_id: NCAAF
  team_id: NAVY
  conference_id: 151
  name: Navy Midshipmen
- platform: teamtracker
  league_id: NCAAF
  team_id: MEM
  conference_id: 151
  name: Memphis Tigers
- platform: teamtracker
  league_id: NCAAF
  team_id: FAU
  conference_id: 151
  name: Florida Atlantic Owls
- platform: teamtracker
  league_id: NCAAF
  team_id: ECU
  conference_id: 151
  name: East Carolina Pirates
1 Like

@ehcah - I kept looking for standings and the sites I looked at didn’t show this endpoint. Nicely Done!!!

Did you put a dashboard together? Would love to see what you have.

Here is my quick, crude dashboard based on your code

ncaa_football_standings:
    card:
      type: custom:flex-table-card
      title: '[[title]]'
      css:
        table+: 'padding: 0px; width: 1000px;'
        tbody tr td:first-child: 'width: 2%;'
        tbody tr td:nth-child(2): 'width: 5%;'
        tbody tr td:nth-child(n+3): 'width: 2%;'
        tbody tr:hover: 'background-color: green!important; color:white!important;'
        tbody tr td:nth-child(5): 'background-color: green; color: white;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      sort_by: entries+
      entities:
        include: '[[entity]]'
      columns:
        - name: Seed
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'SEED').displayValue
        - name: Team
          data: entries
          modify: >-
            '<div><img src="' + x.team.logos[0].href + '" style="height:
            20px;vertical-align:middle;">&nbsp;' + x.team.displayName +
            '</div>'  
        - name: Overall
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'overall').displayValue
        - name: GB
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'GB').displayValue
        - name: Wins
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'W').value
        - name: Conf Record
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'CONF').displayValue
        - name: Streak
          data: entries
          modify: x.stats.find(y=>y.abbreviation == 'STRK').value

I’m just grabbing them in my dashboard with this:

                       - attributes:
                                label: NCAA Football Conferences
                                icon: mdi:account-group
                              card:
                                type: horizontal-stack
                                cards:
                                  - type: vertical-stack
                                    cards:
                                      - type: custom:decluttering-card
                                        template: ncaa_football_standings
                                        variables:
                                          - title: Big 12 Conference
                                          - entity: sensor.big_12_conference
                                          - attribute: entries
                                      - type: custom:decluttering-card
                                        template: ncaa_football_standings
                                        variables:
                                          - title: Big Ten Conference
                                          - entity: sensor.big_ten_conference
                                          - attribute: entries
                                      - type: custom:decluttering-card
                                        template: ncaa_football_standings
                                        variables:
                                          - title: Atlantic Coast Conference
                                          - entity: sensor.atlantic_coast_conference
                                          - attribute: entries

Y’all are awesome.

Thanks to everyone for sharing their code here.

@kbrown01 and @vasqued2 have given us a great starting point. But, the users here have expanded it in ways most cannot imagine!

Very much, a work in progress…

  ncaaf_settings:
    card:
      type: custom:flex-table-card
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:5px;'
        tbody tr td:first-child: 'width: 9%;'
        tbody tr td:nth-child(2): 'width: 3%;'
        tbody tr td:nth-child(n+3): 'width: 3%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
        tbody td:nth-child(1): 'border-right: 1px solid grey!important;'
        tbody td:nth-child(4): 'border-right: 1px solid grey!important;'
        tbody td:nth-child(10): 'border-right: 1px solid grey!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      entities:
        include: '[[entity]]'
      sort_by: entries
      columns:
        - hidden: Playoff Seed
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'SEED').displayValue  
        - name: <div>TEAM</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.team.links !== 'undefined') {
              let rankPart = (typeof x.team.rank !== 'undefined' && x.team.rank !== '') 
                             ? ' (' + x.team.rank + ')' 
                             : '';
              '<div>&nbsp;<a href="' + x.team.links[0].href + 
              '" target="_blank"><img src="' + x.team.logos[0].href + 
              '" style="height:20px;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' + 
              x.team.displayName + rankPart + '</div>';
            } else {
              let rankPart = (typeof x.team.rank !== 'undefined' && x.team.rank !== '') 
                             ? ' (' + x.team.rank + ')' 
                             : '';
              '<div>' + x.team.displayName + rankPart + '</div>';
            }
        - name: <div>W-L</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.type == 'vsconf').displayValue
        - name: <div>PF</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.type == 'vsconf_pointsfor').displayValue
        - name: <div>PA</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.type == 'vsconf_pointsagainst').displayValue
        - name: <div>W-L</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'overall').displayValue
        - name: <div>PF</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'PF').displayValue
        - name: <div>PA</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'PA').displayValue
        - name: <div>HOME</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'Home').displayValue
        - name: <div>AWAY</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'Away').displayValue
        - name: <div>STRK</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'STRK').displayValue
        - name: <div>AP</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'AP').displayValue
        - name: <div>USA</div>
          data: '[[attribute]]'
          modify: x.stats.find(y=>y.abbreviation == 'USA').displayValue
  ncaafranking_settings:
    card:
      type: custom:flex-table-card
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;'
        tbody tr td:first-child: 'width: .5%;'
        tbody tr td:nth-child(2): 'width: 5%;'
        tbody tr td:nth-child(n+3): 'width: 2%;'
        tbody tr td:nth-child(7): 'width: 5%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      entities:
        include: '[[entity]]'
      sort_by: entries-
      columns:
        - hidden: true
          data: '[[attribute]]'
        - name: <div style="height:20px;text-indent:5px;">RANK</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.current !== 'undefined') {
              x.current;
            } else {
              '';
            }     

            if (typeof x !== 'undefined' && typeof x.current !== 'undefined' &&
            typeof x.current !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.current + '</div>';
            } else {
              '';
            }
        - name: <div>TEAM</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.team.links !== 'undefined')
              '<div>&nbsp;<a href="' + x.team.links[0].href + 
              '" target="_blank"><img src="' + x.team.logos[0].href + 
              '" style="height:20px;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
              x.team.nickname + ' ' + x.team.name + '</div>';          
            else
              '<div>' + x.team.nickname + ' ' + x.team.name + '</div>'
        - name: <div style="text-align:center;">TREND</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.current !== 'undefined' &&
            typeof x.previous !== 'undefined') {
              let content = '';
              let icon = '';
              let text = '';
              
              if (x.current === x.previous) {
                icon = '<ha-icon icon="mdi:minus" style="fill:white;"></ha-icon>';
              } else if (x.previous === 0) {
                text = '<div style="font-size:14px;color:white;">NR</div>';
              } else {
                let difference = x.current - x.previous;
                if (difference > 0) {
                  icon = '<ha-icon icon="mdi:arrow-down" style="color:red;"></ha-icon>';
                  text = '<div style="font-size:14px;color:red;">' + difference + '</div>';
                } else if (difference < 0) {
                  icon = '<ha-icon icon="mdi:arrow-up" style="color:green;"></ha-icon>';
                  text = '<div style="font-size:14px;color:green;">' + Math.abs(difference) + '</div>';
                }
              }
              
              content = '<div style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;">' +
                        icon + 
                        (icon && text ? '<div style="margin-left:5px;">' + text + '</div>' : text) +
                        '</div>';
                        
              content;
            } else {
              '';
            } 
        - name: <div style="height:20px;text-indent:5px;">W-L</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.recordSummary !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.recordSummary + '</div>';            
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">POINTS</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.points !== 'undefined') {
              var formattedPoints = new Intl.NumberFormat().format(x.points);
              '<div style="font-weight:normal;text-indent:10px;">' + formattedPoints + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">VOTES</div>
          data: '[[attribute]]'
          modify: >-
            // Check if the data exists and return it, otherwise return an empty
            string

            if (typeof x.firstPlaceVotes !== 'undefined' && x.firstPlaceVotes
            !== 0) {
              '<div style="font-weight:normal;text-indent:10px;">' + x.firstPlaceVotes + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">TEAM PAGE</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x.team.links !== 'undefined' && x.team.links.length > 0)
            {
              '<div><a href="' + x.team.links[0].href + 
              '" target="_blank" style="text-decoration:none;color:white;">' +
              '<div style="font-weight:normal;text-indent:10px;">' + 
              x.team.nickname + ' ' + x.team.name + ' (' + x.team.abbreviation + ') ' + 
              '</div></a></div>';
            } else {
              '<div>' + x.team.nickname + ' ' + x.team.name + '</div>';
            }
  ncaafschedule_settings:
    card:
      type: custom:flex-table-card
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;'
        tbody tr td:first-child: 'width: 3%;'
        tbody tr td:nth-child(2): 'width: 1.5%;'
        tbody tr td:nth-child(3): 'width: 3%;'
        tbody tr td:nth-child(4): 'width: 3%;'
        tbody tr td:nth-child(5): 'width: 5%;'
        tbody tr td:nth-child(6): 'width: 4%;'
        tbody tr td:nth-child(7): 'width: 7%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      entities:
        include: '[[entity]]'
      sort_by: events
      columns:
        - hidden: API Date
          data: '[[attribute]]'
          modify: |-
            if (typeof x.date !== 'undefined') {
              x.date;
            } else {
              '';
            } 
        - hidden: <div style="height:20px;text-indent:5px;">WEEK</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.week !== 'undefined' &&
            typeof x.week.number !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.week.number + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">DATE</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.date !== 'undefined') {
              const dateUTC = new Date(x.date);
              const options = { weekday: 'long', month: 'short', day: 'numeric', year: 'numeric' };
              const dateLocal = dateUTC.toLocaleDateString([], options)
                        .replace(/,/, ' -'); // Replace comma with space and dash
                            '<div>' + dateLocal + '</div>';
              '<div style="font-weight:normal;text-indent:10px;">' + dateLocal + '</div>';
            } else {
              '';
            } 
        - name: <div style="height:20px;text-indent:5px;">TIME</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.status.type.detail !== 'undefined') {
              if (x.competitions[0].status.type.completed) {
                '<div style="font-weight:normal;text-indent:22px;"><a href="' + x.links[0].href + '" target="_blank" style="text-decoration:none;color:white;">Final</a></div>';              
              } else {
                if (typeof x.date !== 'undefined' && typeof x.links !== 'undefined' && x.links.length > 0) {
                  const dateUTC = new Date(x.date);
                  const timeLocal = dateUTC.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }); // Extract local time
                  '<div style="font-weight:normal;text-indent:10px;color:white;"><a href="' + x.links[0].href + '" target="_blank" style="text-decoration:none;color:white;">' + timeLocal + '</a></div>';
                } else {
                  '';
                }
              }
            } else {
              '';
            }
        - name: <div>TEAMS</div>
          data: '[[attribute]]'
          modify: >-
            var stackedTeams = '';

            if (typeof x.competitions[0].competitors[1].team.links !==
            'undefined') {
              stackedTeams += '<div style="margin-bottom:10px;">&nbsp;<a href="' + x.competitions[0].competitors[1].team.links[0].href + 
                              '" target="_blank"><img src="' + x.competitions[0].competitors[1].team.logo + 
                              '" style="height:25px;horizontal-align:right;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
                              x.competitions[0].competitors[1].team.displayName + ' (' + x.competitions[0].competitors[1].records[0].summary + ') ' + '</div></div>'   
            } else {
              stackedTeams += '<div style="margin-bottom:10px;">' + x.competitions[0].competitors[1].team.displayName + '</div>';
            }


            if (typeof x.competitions[0].competitors[0].team.links !==
            'undefined') {
              stackedTeams += '<div style="margin-bottom:10px;">&nbsp;<a href="' + x.competitions[0].competitors[0].team.links[0].href + 
                              '" target="_blank"><img src="' + x.competitions[0].competitors[0].team.logo + 
                              '" style="height:25px;horizontal-align:right;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
                              x.competitions[0].competitors[0].team.displayName + ' (' +x.competitions[0].competitors[0].records[0].summary + ') ' + '</div></div>';   
            } else {
              stackedTeams += '<div style="margin-bottom:10px;">' + x.competitions[0].competitors[0].team.displayName + '</div>';
            }
        - name: <div style="height:20px;text-indent:5px;">BROADCAST</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && x.competitions && x.competitions[0]
            && x.competitions[0].broadcasts) {
              var broadcastNames = x.competitions[0].broadcasts.map(function(broadcast) {
                return broadcast.names ? broadcast.names.join(', ') : '';
              }).join(', ');
              '<div style="font-weight:normal;text-indent:10px;">' + broadcastNames + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">ESPN BET</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && x.competitions && x.competitions[0]
            &&
                x.competitions[0].odds && x.competitions[0].odds.length > 0) {
              var odds = x.competitions[0].odds[0];  // Assuming there's only one odds entry
              var favoriteTeam = odds.homeTeamOdds.favorite ? odds.homeTeamOdds : odds.awayTeamOdds;
              var spread = odds.spread;
              var overUnder = odds.overUnder;
              var favoriteLogo = favoriteTeam.team.logo;

              '<div style="font-weight:normal;text-indent:10px;">' +
              '<img src="' + favoriteLogo + '" alt="Favorite Team Logo" style="height:20px;vertical-align:middle;" /> ' +
              'Spread: ' + spread + ' | Over/Under: ' + overUnder + 
              '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">WEATHER</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x !== 'undefined' && x.weather) {
              var weather = x.weather;
              var displayValue = weather.displayValue;
              var temperature = weather.temperature;
              
              '<div style="font-weight:normal;text-indent:10px;">' +
              displayValue + ', ' + temperature + '°F' +
              '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">LOCATION</div>
          data: '[[attribute]]'
          modify: |-
            var location = '';
            if (typeof x.competitions[0].venue.fullName !== 'undefined') {
              location += x.competitions[0].venue.fullName + '<span style="margin:0 5px;"> - </span>';   
            }
            if (typeof x.competitions[0].venue.address.city !== 'undefined') {
              location += x.competitions[0].venue.address.city + ', ';
            }
            if (typeof x.competitions[0].venue.address.state !== 'undefined') {
              location += x.competitions[0].venue.address.state; 
            }
              if (location !== '') {
                '<div style="text-indent:10px;">' + location + '</div>';              
            } else {
              '';
            }              
  ncaafresults_settings:
    card:
      type: custom:flex-table-card
      css:
        table+: 'padding: 0px; width: 100%; border-collapse: collapse; margin-top:12px;'
        tbody tr td:first-child: 'width: .25%;'
        tbody tr td:nth-child(2): 'width: 2%;'
        tbody tr td:nth-child(3): 'width: 3%;'
        tbody tr td:nth-child(4): 'width: 3%;'
        tbody tr td:nth-child(5): 'width: 2%;'
        tbody tr td:nth-child(6): 'width: 2%;'
        tbody tr td:nth-child(7): 'width: 2%;'
        tbody tr td:nth-child(8): 'width: 7%;'
        tbody tr:hover: 'background-color: dimgrey!important; color:white!important;'
      card_mod:
        style:
          .: |
            ha-card {
              overflow: auto;
              }
          $: |
            .card-header {
               padding-top: 6px!important;
               padding-bottom: 4px!important;
               font-size: 14px!important;
               line-height: 14px!important;
               font-weight: bold!important;
             }
      entities:
        include: '[[entity]]'
      sort_by: events-
      columns:
        - hidden: API Date
          data: '[[attribute]]'
          modify: |-
            if (typeof x.date !== 'undefined') {
              x.date;
            } else {
              '';
            } 
        - name: <div style="height:20px;text-indent:5px;">WEEK</div>
          data: '[[attribute]]'
          modify: >-
            if (typeof x !== 'undefined' && typeof x.week !== 'undefined' &&
            typeof x.week.number !== 'undefined') {
              '<div style="font-weight:normal;text-indent:10px;">' + x.week.number + '</div>';
            } else {
              '';
            }
        - name: <div style="height:20px;text-indent:5px;">DATE</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.date !== 'undefined') {
              const dateUTC = new Date(x.date);
              const options = { weekday: 'long', month: 'short', day: 'numeric', year: 'numeric' };
              const dateLocal = dateUTC.toLocaleDateString([], options); // Convert to local date string
              '<div>' + dateLocal + '</div>';
              '<div style="font-weight:normal;text-indent:10px;">' + dateLocal + '</div>';
            } else {
              '';
            }         
        - name: <div style="height:20px;text-align:center;">SCORE</div>
          data: '[[attribute]]'
          modify: |-
            if (typeof x.status.type.detail !== 'undefined') {
              if (x.competitions[0].status.type.completed) {
                var score1 = x.competitions[0].competitors[1].score;
                var score2 = x.competitions[0].competitors[0].score;
                
                // Team 1 details
                var team1 = x.competitions[0].competitors[1].team;
                var logo1 = team1.logo;
                var link1 = team1.links && team1.links.length > 0 ? team1.links[0].href : '#'; // Default to '#' if no link

                // Team 2 details
                var team2 = x.competitions[0].competitors[0].team;
                var logo2 = team2.logo;
                var link2 = team2.links && team2.links.length > 0 ? team2.links[0].href : '#'; // Default to '#' if no link
                
                var color1, color2;

                if (score1 > score2) {
                  color1 = 'green';
                  color2 = 'red';
                } else if (score1 < score2) {
                  color1 = 'red';
                  color2 = 'green';
                } else {
                  color1 = 'white';
                  color2 = 'white';
                }

                '<div style="font-weight:normal;text-align:center;">' +
                '<a href="' + link1 + '" target="_blank" style="text-decoration:none;">' +
                '<img src="' + logo1 + '" alt="Team 1 Logo" style="height:30px; vertical-align:middle; margin-right:15px;">' +
                '</a>' +
                '<a href="' + x.links[0].href + '" target="_blank" style="font-size:px;text-decoration:none; color:' + color1 + ';">' +
                score1 +
                '</a>' +
                '<a href="' + x.links[0].href + '" target="_blank" style="text-decoration:none; color:white;">' +
                '<span style="padding:0 10px;"> - </span>' +
                '</a>' +
                '<a href="' + x.links[0].href + '" target="_blank" style="font-size:18px;text-decoration:none; color:' + color2 + ';">' +
                score2 +
                '</a>' +
                '<a href="' + link2 + '" target="_blank" style="text-decoration:none;">' +
                '<img src="' + logo2 + '" alt="Team 2 Logo" style="height:30px; vertical-align:middle; margin-left:15px;">' +
                '</a>' +
                '</div>';            
              } else {
                if (typeof x.date !== 'undefined' && typeof x.links !== 'undefined' && x.links.length > 0) {
                  const dateUTC = new Date(x.date);
                  const timeLocal = dateUTC.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }); // Extract local time
                  '<div style="font-weight:normal;text-align:center;color:white;"><a href="' + x.links[0].href + '" target="_blank" style="text-decoration:none;color:white;">' + timeLocal + '</a></div>';
                } else {
                  '';
                }
              }
            } else {
              '';
            }
        - name: <div>TEAMS</div>
          data: '[[attribute]]'
          modify: >-
            var stackedTeams = '';

            if (typeof x.competitions[0].competitors[1].team.links !==
            'undefined') {
              stackedTeams += '<div style="margin-bottom:10px;">&nbsp;<a href="' + x.competitions[0].competitors[1].team.links[0].href + 
                              '" target="_blank"><img src="' + x.competitions[0].competitors[1].team.logo + 
                              '" style="height:25px;horizontal-align:right;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
                              x.competitions[0].competitors[1].team.displayName + ' (' + x.competitions[0].competitors[1].records[0].summary + ') ' + '</div></div>'   
            } else {
              stackedTeams += '<div style="margin-bottom:10px;">' + x.competitions[0].competitors[1].team.displayName + '</div>';
            }


            if (typeof x.competitions[0].competitors[0].team.links !==
            'undefined') {
              stackedTeams += '<div style="margin-bottom:10px;">&nbsp;<a href="' + x.competitions[0].competitors[0].team.links[0].href + 
                              '" target="_blank"><img src="' + x.competitions[0].competitors[0].team.logo + 
                              '" style="height:25px;horizontal-align:right;vertical-align:middle;"></a>&nbsp;&nbsp;&nbsp;' +
                              x.competitions[0].competitors[0].team.displayName + ' (' +x.competitions[0].competitors[0].records[0].summary + ') ' + '</div></div>';   
            } else {
              stackedTeams += '<div style="margin-bottom:10px;">' + x.competitions[0].competitors[0].team.displayName + '</div>';
            }
        - name: <div style="height:20px;text-indent:5px;">PASSING LEADERS</div>
          data: '[[attribute]]'
          modify: >-
            var result = '';

            if (x && x.competitions && x.competitions[0] &&
            x.competitions[0].leaders) {
              var category = x.competitions[0].leaders.find(l => l.name === 'passingYards');
              if (category && category.leaders) {
                for (var i = 0; i < 3; i++) {  // Loop to handle up to 3 leaders
                  if (category.leaders[i] && category.leaders[i].athlete) {
                    var athleteName = category.leaders[i].athlete.shortName;
                    var athleteUrl = category.leaders[i].athlete.links[0].href;
                    var athleteValue = category.leaders[i].value;  // Get the value
                    
                    result += '<div style="padding-left:10px;"><a href="' + athleteUrl + '" target="_blank" style="text-decoration:none;color:white;">' + athleteName + ' (' + athleteValue + ')</a></div>';
                  }
                }
              }
            }

            result;
        - name: <div style="height:20px;text-indent:5px;">RUSHING LEADERS</div>
          data: '[[attribute]]'
          modify: >-
            var result = '';

            if (x && x.competitions && x.competitions[0] &&
            x.competitions[0].leaders) {
              var category = x.competitions[0].leaders.find(l => l.name === 'rushingYards');
              if (category && category.leaders) {
                for (var i = 0; i < 3; i++) {  // Loop to handle up to 3 leaders
                  if (category.leaders[i] && category.leaders[i].athlete) {
                    var athleteName = category.leaders[i].athlete.shortName;
                    var athleteUrl = category.leaders[i].athlete.links[0].href;
                    var athleteValue = category.leaders[i].value;  // Get the value
                    
                    result += '<div style="padding-left:10px;"><a href="' + athleteUrl + '" target="_blank" style="text-decoration:none;color:white;">' + athleteName + ' (' + athleteValue + ')</a></div>';
                  }
                }
              }
            }

            result;
        - name: <div style="height:20px;text-indent:5px;">RECEIVING LEADERS</div>
          data: '[[attribute]]'
          modify: >-
            var result = '';

            if (x && x.competitions && x.competitions[0] &&
            x.competitions[0].leaders) {
              var category = x.competitions[0].leaders.find(l => l.name === 'receivingYards');
              if (category && category.leaders) {
                for (var i = 0; i < 3; i++) {  // Loop to handle up to 3 leaders
                  if (category.leaders[i] && category.leaders[i].athlete) {
                    var athleteName = category.leaders[i].athlete.shortName;
                    var athleteUrl = category.leaders[i].athlete.links[0].href;
                    var athleteValue = category.leaders[i].value;  // Get the value
                    
                    result += '<div style="padding-left:10px;"><a href="' + athleteUrl + '" target="_blank" style="text-decoration:none;color:white;">' + athleteName + ' (' + athleteValue + ')</a></div>';
                  }
                }
              }
            }

            result;
        - name: <div style="height:20px;text-indent:5px;">LOCATION</div>
          data: '[[attribute]]'
          modify: |-
            var location = '';
            if (typeof x.competitions[0].venue.fullName !== 'undefined') {
              location += x.competitions[0].venue.fullName + '<span style="margin:0 5px;"> - </span>';   
            }
            if (typeof x.competitions[0].venue.address.city !== 'undefined') {
              location += x.competitions[0].venue.address.city + ', ';
            }
            if (typeof x.competitions[0].venue.address.state !== 'undefined') {
              location += x.competitions[0].venue.address.state; 
            }
              if (location !== '') {
                '<div style="text-indent:10px;">' + location + '</div>';              
            } else {
              '';
            }   
            - attributes:
                label: NCAA
                icon: mdi:football
              card:
                type: custom:mod-card
                card_mod:
                  style:
                    tabbed-card $: |
                      mwc-tab {
                        background: var(--ha-card-background, var(--card-background-color, white) );
                        border-color: black;
                        border-width: 2.5px;
                        border-top-left-radius: 20px;
                        border-top-right-radius: 20px;
                        border-style: solid;
                        overflow: hidden;
                        width: 16%;
                      }
                      mwc-tab[active] {
                        background: #d3d3d3 !important;
                      }            
                card:
                  type: custom:tabbed-card
                  styles:
                    '--mdc-theme-primary': black
                    '--mdc-tab-text-label-color-default': silver
                    '--mdc-typography-button-font-size': 12px
                  tabs:
                    - attributes:
                        label: Standings / Rankings
                        icon: mdi:ballot
                      card:
                        type: custom:mod-card
                        card_mod:
                          style:
                            tabbed-card $: |
                              mwc-tab {
                                background: var(--ha-card-background, var(--card-background-color, white) );
                                border-color: black;
                                border-width: 2.5px;
                                border-top-left-radius: 20px;
                                border-top-right-radius: 20px;
                                border-style: solid;
                                overflow: hidden;
                                width: 10%;
                              }
                              mwc-tab[active] {
                                background: #d3d3d3 !important;
                              }
                        card:
                          type: custom:tabbed-card
                          styles:
                            '--mdc-theme-primary': black
                            '--mdc-tab-text-label-color-default': silver
                            '--mdc-typography-button-font-size': 12px
                          tabs:
                            - attributes:
                                label: POWER FOUR
                                icon: mdi:ballot
                              card:                               
                                type: custom:stack-in-card
                                mode: vertical                                
                                cards:
                                  - type: markdown
                                    content: |
                                      <h2>ATLANTIC COAST CONFERENCE</h2>
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.atlantic_coast_conference
                                      - attribute: entries 
                                  - type: markdown
                                    content: |
                                      <h2>BIG 12 CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.big_12_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>BIG TEN CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.big_ten_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>SOUTHEASTERN CONFERENCE</h2>
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.southeastern_conference
                                      - attribute: entries
                            - attributes:
                                label: CONFERENCE
                                icon: mdi:ballot
                              card:
                                type: custom:stack-in-card
                                mode: vertical
                                cards:
                                  - type: markdown
                                    content: |
                                      <h2>ATLANTIC COAST CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.atlantic_coast_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: >
                                      <h2>AMERICAN ATHLETIC
                                      CONFERENCE</h2>                        
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.american_athletic_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>BIG 12 CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.big_12_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>BIG TEN CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.big_ten_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>CONFERENCE USA</h2>
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.conference_usa
                                      - attribute: entries
                                      - sort: >-
                                  - type: markdown
                                    content: >
                                      <h2>FBS
                                      INDEPENDENTS</h2>                            
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.fbs_independents
                                      - attribute: entries 
                                  - type: markdown
                                    content: >
                                      <h2>MID-AMERICAN
                                      CONFERENCE</h2>                              
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.mid_american_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>MOUNTAIN WEST CONFERENCE</h2>
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.mountain_west_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: |
                                      <h2>PAC-12 CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.pac12_conference
                                      - attribute: entries   
                                  - type: markdown
                                    content: |
                                      <h2>SOUTHEASTERN CONFERENCE</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity: sensor.southeastern_conference
                                      - attribute: entries
                                  - type: markdown
                                    content: >
                                      <h2>SUN BELT CONFERENCE</h2>
                                      <h4>EAST</h4>                                      
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - title: EAST
                                      - entity: sensor.sun_belt_conference_east
                                      - attribute: entries 
                                  - type: markdown
                                    content: |
                                      <h4>WEST</h4>
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - title: WEST
                                      - entity: sensor.sun_belt_conference_west
                                      - attribute: entries
                            - attributes:
                                label: League
                                icon: mdi:ballot
                              card:
                                type: custom:stack-in-card
                                mode: vertical
                                cards:
                                  - type: markdown
                                    content: |
                                      <h2>DIVISION 1-A TEAMS</h2>    
                                  - type: custom:decluttering-card
                                    template: ncaaf_settings
                                    variables:
                                      - entity:
                                          - sensor.american_athletic_conference
                                          - sensor.atlantic_coast_conference
                                          - sensor.big_12_conference
                                          - sensor.big_ten_conference
                                          - sensor.conference_usa
                                          - sensor.fbs_independents
                                          - sensor.mid_american_conference
                                          - sensor.mountain_west_conference
                                          - sensor.pac_12_conference
                                          - sensor.southeastern_conference
                                          - sensor.sun_belt_conference_east
                                          - sensor.sun_belt_conference_west
                                      - attribute: entries
                            - attributes:
                                label: RANKINGS
                                icon: mdi:account-group
                              card:
                                type: horizontal-stack
                                cards:
                                  - type: vertical-stack
                                    cards:
                                      - type: markdown
                                        content: >
                                          <h1>TOP 25 AP POLL</h1> <h3>{{
                                          states('sensor.current_status_3')
                                          }}</h3>                                   
                                      - type: custom:decluttering-card
                                        template: ncaafranking_settings
                                        variables:
                                          - title: AP Top 25 Poll
                                          - entity: sensor.college_football_ap_poll
                                          - attribute: entries
                                  - type: vertical-stack
                                    cards:
                                      - type: markdown
                                        content: >
                                          <h1>AFCA COACHES POLL</h1> <h3>{{
                                          states('sensor.current_status_3')
                                          }}</h3>
                                      - type: custom:decluttering-card
                                        template: ncaafranking_settings
                                        variables:
                                          - title: AFCA Coaches Poll
                                          - entity: >-
                                              sensor.college_football_afca_coaches_poll
                                          - attribute: entries
                            - attributes:
                                label: STATISTICS
                                icon: mdi:ballot
                              card:
                                type: markdown
                                content: Coming soon!
                    - attributes:
                        label: Schedule
                        icon: mdi:calendar-blank
                      card:
                        type: custom:stack-in-card
                        mode: vertical
                        cards:
                          - type: markdown
                            content: >
                              <h2>{{ states('sensor.college_football_week_number') }}</h2> 
                              <p>{{ states('sensor.college_football_week_dates') }}</p>
                          - type: custom:decluttering-card
                            template: ncaafschedule_settings
                            variables:
                              - entity: sensor.college_football_schedule_scraper
                              - attribute: events
                    - attributes:
                        label: Scores
                        icon: mdi:calendar-blank
                      card:
                        type: custom:stack-in-card
                        mode: vertical
                        cards:
                          - type: markdown
                            content: >
                              <h2>{{ states('sensor.college_football_week_number') }}</h2> 
                              <p>{{ states('sensor.college_football_week_dates') }}</p>
                          - type: custom:decluttering-card
                            template: ncaafresults_settings
                            variables:
                              - entity: sensor.college_football_results_scraper
                              - attribute: events
                    - attributes:
                        label: Pre-Match
                        icon: mdi:football-helmet
                      card:
                        type: custom:decluttering-card
                        template: game_stats
                        variables:
                          - sport: NCAAF
                          - status: PRE
                    - attributes:
                        label: Live
                        icon: mdi:football
                      card:
                        type: custom:decluttering-card
                        template: game_stats
                        variables:
                          - sport: NCAAF
                          - status: IN
                    - attributes:
                        label: Post-Match
                        icon: mdi:blood-bag
                      card:
                        type: custom:decluttering-card
                        template: game_stats
                        variables:
                          - sport: NCAAF
                          - status: POST
                    - attributes:
                        label: News
                        icon: mdi:ballot
                      card:
                        type: markdown
                        content: Coming soon!
                    - attributes:
                        label: Injuries
                        icon: mdi:ballot
                      card:
                        type: markdown
                        content: Coming soon!

Sensors are another massive work in progress. These all use multiscrape. I am going to recreate them using normal rest sensors. These plus my other sports number about 140. I don’t have any proof to back this up, but I think multiscrape is more system intensive than rest. Just going by what I’ve seen of my dev systems performance.

##
## NCAA College Football
##
- name: College Football Group 1 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=1&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_1_schedule_scraper
      name: College Football Group 1 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 1 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=1&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_1_results_scraper
      name: College Football Group 1 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 4 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=4&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_4_schedule_scraper
      name: College Football Group 4 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 4 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=4&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_4_results_scraper
      name: College Football Group 4 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 5 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=5&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_5_schedule_scraper
      name: College Football Group 5 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 5 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=5&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_5_results_scraper
      name: College Football Group 5 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 8 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=8&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_8_schedule_scraper
      name: College Football Group 8 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 8 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=8&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_8_results_scraper
      name: College Football Group 8 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 9 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=9&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_9_schedule_scraper
      name: College Football Group 9 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 9 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=9&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_9_results_scraper
      name: College Football Group 9 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 12 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=12&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_12_schedule_scraper
      name: College Football Group 12 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 12 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=12&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_12_results_scraper
      name: College Football Group 12 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 15 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=15&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_15_schedule_scraper
      name: College Football Group 15 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 15 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=15&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_15_results_scraper
      name: College Football Group 15 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 17 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=17&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_17_schedule_scraper
      name: College Football Group 17 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 17 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=17&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_17_results_scraper
      name: College Football Group 17 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 18 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=18&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_18_schedule_scraper
      name: College Football Group 18 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 18 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=18&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_18_results_scraper
      name: College Football Group 18 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 37 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=37&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_37_schedule_scraper
      name: College Football Group 37 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 37 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=37&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_37_results_scraper
      name: College Football Group 37 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 151 Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=151&seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 300)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_group_151_schedule_scraper
      name: College Football Group 151 Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Group 151 Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?groups=151&seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_group_151_results_scraper
      name: College Football Group 151 Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Schedule
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&dates={{(now() - timedelta(days= 0)).strftime('%Y%m%d')|string}}-{{(now() + timedelta(days= 150)).strftime('%Y%m%d')|string}}"
  scan_interval: 43200
  sensor:
    - unique_id: college_football_schedule_scraper
      name: College Football Schedule
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"
##
- name: College Football Results
  resource_template: "https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&dates=20240824-{{ now().strftime('%Y%m%d') }}"
  scan_interval: 21600
  sensor:
    - unique_id: college_football_results_scraper
      name: College Football Results
      value_template: "{{now()}}"
      attributes:
        - name: events
          value_template: "{{ value_json.events }}"

Wow that a lot of scraping :wink: I am going to have to look at your code but I am not sure I want to do scraping.

I was thinking about your header Idea and pulled the updated rankings from the sensor.ncaaf_rank and had a card replace the title like this - still will play around more but anyway I also grabbed some of your sensors from the conferences and will add my layout changes in my earlier post. Great job @ehcah !!

                                  - type: vertical-stack
                                    cards:
                                      - type: markdown
                                        content: >
                                          <h2>
                                          {{state_attr('sensor.ncaaf_rank','rankings')[0]['headline']}}
                                          - {{ as_timestamp('2024-09-08T07:00Z') |
                                          timestamp_custom('%m/%d/%Y') }} </h2>
                                      - type: custom:decluttering-card
                                        template: ncaa_top25_settings
                                        variables:
                                          - entity: sensor.ncaa_ap_poll_football_top_25

Was interested in the NFL Schedule and I found an API that looks like it has them. I’m just starting and haven’t built any templates or dashboards yet but for anybody that wants the sensors so far here ya go

###NFL Schedules
- platform: rest
  scan_interval: 36000
  name: NFL Schedule Buffalo_Bills
  unique_id: sensor.nfl_schedule_buffalo_bills
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/2/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events
- platform: rest
  scan_interval: 36000
  name: NFL Schedule Chicago Bears
  unique_id: sensor.nfl_schedule_chicago_bears
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/3/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Cincinnati Bengals
  unique_id: sensor.nfl_schedule_cincinnati_bengals
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/4/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Clevland Browns
  unique_id: sensor.nfl_schedule_clevland_browns
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/5/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events      

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Dallas Cowboys
  unique_id: sensor.nfl_schedule_dallas_cowboys
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/6/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events    

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Denver Broncos
  unique_id: sensor.nfl_schedule_denver_broncos
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/7/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events
      
- platform: rest
  scan_interval: 36000
  name: NFL Schedule Detroit Lions
  unique_id: sensor.nfl_schedule_detroit_lions
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/8/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Green Bay Packers
  unique_id: sensor.nfl_schedule_green_bay_packers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/9/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Tennessee Titans
  unique_id: sensor.nfl_schedule_tennessee_titans
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/10/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Indianapolis Colts
  unique_id: sensor.nfl_schedule_indianapolis_colts
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/11/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Kansas City Chiefs
  unique_id: sensor.nfl_schedule_kansas_city_chiefs
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/12/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Las Vegas Raiders
  unique_id: sensor.nfl_schedule_las_vegas_raiders
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/13/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Los Angeles Rams
  unique_id: sensor.nfl_schedule_los_angeles_rams
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/14/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Miami Dolphins
  unique_id: sensor.nfl_schedule_miami_dolphins
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/15/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Minnesota Vikings
  unique_id: sensor.nfl_schedule_minnesota_vikings
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/16/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule New England Patriots
  unique_id: sensor.nfl_schedule_new_england_patriots
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/17/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule New Orleans Saints
  unique_id: sensor.nfl_schedule_new_orleans_saints
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/18/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule New York Giants
  unique_id: sensor.nfl_schedule_new_york_giants
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/19/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule New York Jets
  unique_id: sensor.nfl_schedule_new_york_jets
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/20/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Philadelphia Eagles
  unique_id: sensor.nfl_schedule_philadelphia_eagles
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/21/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Arizona Cardinals
  unique_id: sensor.nfl_schedule_arizona_cardinals
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/22/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Pittsburgh Steelers
  unique_id: sensor.nfl_schedule_pittsburgh_steelers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/23/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Los Angeles Chargers
  unique_id: sensor.nfl_schedule_los_angeles_chargers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/24/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule San Francisco 49ers
  unique_id: sensor.nfl_schedule_san_francisco_49ers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/25/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Seattle Seahawks
  unique_id: sensor.nfl_schedule_seattle_seahawks
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/26/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Tampa Bay Buccaneers
  unique_id: sensor.nfl_schedule_tampa_bay_buccaneers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/27/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Washington Commanders
  unique_id: sensor.nfl_schedule_washington_commanders
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/28/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Carolina Panthers
  unique_id: sensor.nfl_schedule_carolina_panthers
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/29/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Jacksonville Jaguars
  unique_id: sensor.nfl_schedule_jacksonville_jaguars
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/30/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Baltimore Ravens
  unique_id: sensor.nfl_schedule_baltimore_ravens
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/33/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

- platform: rest
  scan_interval: 36000
  name: NFL Schedule Houston Texans
  unique_id: sensor.nfl_schedule_houston_texans
  resource: https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/30/schedule?seasontype=2&type=0&level=3
  value_template: "{{ now() }}"
  json_attributes:
      - events

@bburwell thanks for putting this together, you saved me some time! @kbrown01 love this project, great work!

Just updated my section above - didn’t want to duplicate @kbrown01 @vasqued2 - I mentioned it in my update above, but is there anyway to filter based on conference_id? I have added the conference_id to the sensors along with sport_path and league_path, but I don’t see where I could treat the conference_id as a variable to parse out. Thanks for any guidance

- platform: teamtracker
  league_id: "NCAAF"
  team_id: "ASU"
  sport_path: football   
  league_path: "college-football"  
  conference_id: 4
  name: "Arizona State University"

Good catch, open an Issue on the TeamTracker repo and I’ll add it.

In the meantime, you could create a group with all the B12 sensors and loop through them or use B12 as a prefix in your sensor name and filter on that.

Thanks @vasqued2 I will try to get something posted on the repo. In the mean time I have been trying this path but can’t remove the duplicates. Maybe somebody has an idea - chatgpt keeps saying don’t pester me boy :wink:

So I have a group created shown above but this is the group. The idea is that i am going to have tabs for each conference and each tab calls the decluttering card above - ncaaf_conference_game_stats - posting it below. Since some in the conference will play each other I don’t want to show duplicates but I want to show all teams from this conference (in this case big 12). So I can’t use the home feature. So what you can see in the template is that I am trying to pull the venue from the cards and if the card with that venue is already shown, I don’t show the card. Not working. I know it is something I am doing but I am scratching my head on this. Appreciate any direction.

Big_12_Conference_teams_group:
    name: "Big 12 Conference Teams"
    entities:
      - sensor.arizona_state_university
      - sensor.university_of_arizona
      - sensor.brighan_young_university
      - sensor.kansas_state_university
      - sensor.oklahoma_state_university
      - sensor.university_of_utah
      - sensor.baylor_university
      - sensor.iowa_state_university
      - sensor.university_of_cincinnati
      - sensor.university_of_colorado_boulder
      - sensor.texas_tech_university
      - sensor.university_of_houston
      - sensor.university_of_kansas
      - sensor.texas_christian_university
      - sensor.university_of_central_florida
      - sensor.west_virginia_university
ncaaf_conference_game_stats:
    card:
      type: custom:auto-entities
      unique: true
      show_empty: false
      card:
        type: custom:layout-card
        layout_type: grid
        layout:
          grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))
      card_param: cards
      filter:
        template: |
          {% set venue = [] %}
          {%- for team in state_attr('[[group]]','entity_id')-%}
            {%- if state_attr(team, 'venue') not in venue  -%}
               {{{"type": "custom:teamtracker-card","entity": team,
               "card_mod": {"style": "ha-card { font-size: .7em; line-height: .7em; width: 280px;}"},
               "home_side": "right"}}},
            {%- endif -%}
            {% set venue = venue + [state_attr(team, 'venue')]  %}
          {%- endfor -%}
        exclude:
          - entity_id: '*team_tracker*'
      sort:
        method: attribute
        attribute: date

This is what I currently am seeing. I’m using venue because I was trying team_abbr opponent_abbr and just tried to simplify code.

Really cool view!!

Anybody figured out a way to get rid of the double showings?
Haven’t come to a solution that fixes this “problem”…

The original template filters the cards to show only the home teams, that way you only get one game. This filters on “sport”, “status”, “team_homeaway” … you can ignore the red zone (and should) but I use that to color teamtracker NFL cards red when someone is in the red zone.

{%- for team in integration_entities("teamtracker") -%}
            {%- if state_attr(team, "league") == "[[sport]]" -%}
            {%- if states(team) == "[[status]]" -%}
            {%- if state_attr(team, "team_homeaway") == "home" -%}
            {%- if team in state_attr('sensor.nfl_red_zone','teams') -%}
              {{{"type": "custom:teamtracker-card",
                "entity": team,
                "card_mod": {"style": "ha-card {\n\n    color:  black; \n    background-color:  #ffcccc; \n    box-shadow: 0 0 10px 5px red;\n}\n"},
                "home_side": "right"}}},
            {%- else -%}
              {{{"type": "custom:teamtracker-card",
                "entity": team, 
                "home_side": "right"}}},
            {%- endif -%}
            {%- endif -%}
            {%- endif -%}
            {%- endif -%}
          {%- endfor -%}