Tracking Standings
The Postgame Standings feed carries the league table: ranks, records, win percentage, points, streaks, strength of schedule and victory, record splits, and clinch markers, updating after games conclude.
This scenario is commonly used to:
- Render the league table
- Track the playoff race with clinch and elimination markers
- Show home, road, and division record splits
- Feed tiebreaker displays with strength-of-schedule detail
Relevant Feeds
| Feed | Use |
|---|---|
| Postgame Standings | The table itself, by {season_year}/{season_type} |
| League Hierarchy | Conference and division structure |
| Seasons | Season catalog |
Reading the Table
Standings nest conferences[] > divisions[] > teams[]. The 2026 season plays as a single UFL Conference table of eight teams; the hierarchy also lists earlier division groupings, so build grouping from what the standings response itself returns rather than assuming a fixed layout. The top of the 2026 table:
{
"season": {
"id": "4ee5ece0-6f0b-11f0-b1e6-2dad3ff60df1",
"year": 2026,
"type": "REG"
},
"conferences": [
{
"id": "23f26d00-966b-11ec-aba0-0f22e7db39c9",
"name": "UFL",
"alias": "UFL",
"divisions": [
{
"id": "c281ba41-b8f7-11f0-bff0-bb54b53201d3",
"name": "UFL Conference",
"alias": "UFL",
"teams": [
{
"id": "0dc60b30-b8f0-11f0-9440-2f32b8d49d12",
"name": "Storm",
"market": "Orlando",
"alias": "ORL",
"sr_id": "sr:competitor:1320812",
"rank": {
"conference": 1,
"division": 1,
"clinched": "playoff_berth"
},
"wins": 8,
"losses": 2,
"ties": 0,
"win_pct": 0.8,
"points_for": 232,
"points_against": 186,
"strength_of_schedule": {
"sos": 0.47,
"wins": 47,
"total": 100
},
"strength_of_victory": {
"sov": 0.463,
"wins": 37,
"total": 80
},
"streak": {
"type": "win",
"length": 4,
"desc": "Won 4"
},
"records": [
{
"category": "division",
"wins": 8,
"losses": 2,
"ties": 0,
"win_pct": 0.8,
"points_for": 232,
"points_against": 186
},
{
"category": "home",
"wins": 3,
"losses": 2,
"ties": 0,
"win_pct": 0.6,
"points_for": 103,
"points_against": 89
},
{
"category": "road",
"wins": 5,
"losses": 0,
"ties": 0,
"win_pct": 1.0,
"points_for": 129,
"points_against": 97
}
]
},
{
"id": "38355600-c045-11ee-8037-85feac748e1f",
"name": "Renegades",
"market": "Dallas",
"alias": "DAL",
"sr_id": "sr:competitor:661843",
"rank": {
"conference": 7,
"division": 7,
"clinched": "eliminated"
},
"wins": 4,
"losses": 6,
"ties": 0,
"win_pct": 0.4,
"points_for": 224,
"points_against": 259,
"strength_of_schedule": {
"sos": 0.51,
"wins": 51,
"total": 100
},
"strength_of_victory": {
"sov": 0.475,
"wins": 19,
"total": 40
},
"streak": {
"type": "win",
"length": 1,
"desc": "Won 1"
},
"records": [
{
"category": "home",
"wins": 3,
"losses": 2,
"ties": 0,
"win_pct": 0.6,
"points_for": 144,
"points_against": 133
},
{
"category": "division",
"wins": 4,
"losses": 6,
"ties": 0,
"win_pct": 0.4,
"points_for": 224,
"points_against": 259
},
{
"category": "road",
"wins": 1,
"losses": 4,
"ties": 0,
"win_pct": 0.2,
"points_for": 80,
"points_against": 126
}
]
}
]
}
]
}
]
}<?xml version="1.0" ?>
<!-- Generation started @ 2026-07-17 17:06:44 +0000 -->
<season xmlns="http://feed.elasticstats.com/schema/football/ufl/postgame-standings-v7.0.xsd" id="4ee5ece0-6f0b-11f0-b1e6-2dad3ff60df1" year="2026" type="REG" name="REG">
<conference id="23f26d00-966b-11ec-aba0-0f22e7db39c9" name="UFL" alias="UFL">
<division id="c281ba41-b8f7-11f0-bff0-bb54b53201d3" name="UFL Conference" alias="UFL">
<team id="0dc60b30-b8f0-11f0-9440-2f32b8d49d12" name="Storm" market="Orlando" alias="ORL" sr_id="sr:competitor:1320812" wins="8" losses="2" ties="0" win_pct="0.8" points_for="232" points_against="186">
<rank conference="1" division="1" clinched="playoff_berth"/>
<streak type="win" length="4" desc="Won 4"/>
<strength-of-schedule sos="0.47" wins="47" total="100"/>
<strength-of-victory sov="0.463" wins="37" total="80"/>
<records>
<record category="neutral" wins="0" losses="0" ties="0" win_pct="0.0" points_for="0" points_against="0"/>
<record category="division" wins="8" losses="2" ties="0" win_pct="0.8" points_for="232" points_against="186"/>
<record category="home" wins="3" losses="2" ties="0" win_pct="0.6" points_for="103" points_against="89"/>
<record category="ufl" wins="8" losses="2" ties="0" win_pct="0.8" points_for="232" points_against="186"/>
<record category="road" wins="5" losses="0" ties="0" win_pct="1.0" points_for="129" points_against="97"/>
<record category="conference" wins="8" losses="2" ties="0" win_pct="0.8" points_for="232" points_against="186"/>
</records>
</team>
<team id="38355600-c045-11ee-8037-85feac748e1f" name="Renegades" market="Dallas" alias="DAL" sr_id="sr:competitor:661843" wins="4" losses="6" ties="0" win_pct="0.4" points_for="224" points_against="259">
<rank conference="7" division="7" clinched="eliminated"/>
<streak type="win" length="1" desc="Won 1"/>
<strength-of-schedule sos="0.51" wins="51" total="100"/>
<strength-of-victory sov="0.475" wins="19" total="40"/>
<records>
<record category="home" wins="3" losses="2" ties="0" win_pct="0.6" points_for="144" points_against="133"/>
<record category="neutral" wins="0" losses="0" ties="0" win_pct="0.0" points_for="0" points_against="0"/>
<record category="conference" wins="4" losses="6" ties="0" win_pct="0.4" points_for="224" points_against="259"/>
<record category="ufl" wins="4" losses="6" ties="0" win_pct="0.4" points_for="224" points_against="259"/>
<record category="division" wins="4" losses="6" ties="0" win_pct="0.4" points_for="224" points_against="259"/>
<record category="road" wins="1" losses="4" ties="0" win_pct="0.2" points_for="80" points_against="126"/>
</records>
</team>
<!-- ... omitted for brevity -->
</division>
</conference>
</season>
<!-- Generation ended @ 2026-07-17 17:06:44 +0000 -->Both responses are shown trimmed to the top two rows, with three record splits kept in the JSON. The rows render straight into a table, with rank.clinched surfacing as a badge; club marks are placeholders for your own or licensed assets:
Row Anatomy
rankcarriesconferenceanddivisionpositions, and adds aclinchedmarker when a team's fate is decided:division(clinched the division title),playoff_berth, oreliminatedwins/losses/tiesandwin_pctpoints_for/points_againstare season totalsstrength_of_scheduleandstrength_of_victoryare objects carrying the computed value plus the wins and total games behind itstreakcarries kind and lengthrecords[]is a list of split records bycategory: home, road, division, conference, neutral-site, and a league-wide split
Integration Steps
1. Pull the table postgame
Standings update after games conclude, so pull once games reach closed rather than on a fast timer. Standings land within about 2 minutes of a game reaching complete, and on quiet days the feed's 10-minute cache TTL makes an hourly refresh more than enough.
2. Track the race
Watch rank.clinched appear as the season closes: playoff_berth marks qualification, division the title, eliminated the end of a team's chances. Pair with the Tracking Playoffs page once seeding settles.
3. Handle the postseason variant
The feed also serves PST, reflecting postseason results in the same shape. Use it for playoff-week records rather than as the seeding source; seeds appear in the Tournament Summary.
Best Practices
- Order rows by the
rankvalues in the payload rather than re-sorting on win percentage; the feed's order reflects league tiebreakers - Key rows by team GUID and treat names and aliases as display data
- Refresh standings after each game day completes, and after the Daily Change Log lists standings changes
Updated about 4 hours ago
