In short: Portola Bulldogs high school football (Irvine, CA), 2026 season: 6-3 in the Kappa League. Last game: W 42-38 vs Canyon on October 24, 2026. Next: vs Esperanza, October 29, 2026. Schedule and results, player season stats, stat leaders, unit grades, ScorePirate ranking and the game-by-game log.
The turnover battle could decide Portola's next game, against Esperanza, and the recent returns favor Portola. Portola forced 0.5 takeaways per game over its first 4 games (3-1), #327 in CIF-SS in that timeframe. In the 5 games since that slow start (3-2), the Bulldogs have forced 2.0 takeaways per game, a 300% rise, #50 in CIF-SS in that window. The schedule deserves some of the credit: Portola's last 5 opponents have averaged 1.3 per game, a #219 offense in CIF-SS on the season, against 1.2 per game, #176 for the first 4. Measured against those opponents' norms (1.3 per game), Portola forced 57% more turnovers than those offenses usually give up. The level of competition matters too: in ScorePirate's SP Strength Index, the last 5 opponents average a rating that would rank #142 in CIF-SS, well above the first 4 (#220), which makes the improvement more impressive. Meanwhile, Esperanza's ball security has been middle of the pack in recent weeks. The Aztecs have committed 1.2 giveaways per game over their last 5 games (1-4), #173 in CIF-SS during that time. Those games came against some of the better defenses in CIF-SS (1.6 per game on the season, which would rank #126). Against those norms, Esperanza turned it over 25% less than those defenses usually force. Esperanza offers Portola a fair measuring stick for whether the trend is real.
The number to watch when Portola meets Esperanza is Portola's scoring defense. Portola allowed 9.0 points per game over its first 6 games (5-1), #14 in CIF-SS through those games. Over the stretch of 3 games that followed (1-2), the Bulldogs have allowed 36.3 points per game, a 304% rise, #325 in CIF-SS through that stretch. The schedule has a lot to do with it: Portola's last 3 opponents have averaged 29.9 points per game, a #126 offense in CIF-SS on the season, against 20.0 points per game, #278 for the first 6. Measured against those opponents' norms (29.9 points per game), Portola allowed 21% more than those offenses usually score. The level of competition matters too: in ScorePirate's SP Strength Index, the last 3 opponents average a rating that would rank #111 in CIF-SS, well above the first 6 (#212), so the dip has come against better teams overall. Meanwhile, Esperanza's offense has been middle of the pack in recent weeks. The Aztecs have averaged 20.7 points per game over their last 3 games (1-2), #239 in CIF-SS over that stretch. Those games came against some of the better scoring defenses in CIF-SS (16.6 points per game on the season, which would rank #87). Against those norms, Esperanza scored 25% more than those defenses usually allow. Esperanza offers Portola a fair measuring stick for whether the trend is real. Portola is 5-1 this season when it holds opponents under 21, and 1-2 when it doesn't.
NOTES
Portola's passing game looks better on paper, but one afternoon is doing a lot of the work. Portola averaged 6.7 yards per pass attempt (1,207 yards on 179 attempts) on the season, #250 in CIF-SS, but that number is boosted by a 253-yard game on 13 attempts against Woodbridge on 8/21. In all other games, Portola is at 5.7 yards per pass attempt (954 yards on 166 attempts), a figure that would rank #308 in CIF-SS. Context matters here: Woodbridge's pass defense ranks among the weakest in CIF-SS (9.6 yards per attempt, #315 of 404), so that game says more about the opponent than about the unit itself. Against Esperanza, Portola draws a middle-of-the-pack pass defense (9.3 yards per attempt, #299), so expect something closer to the 5.7 version.
The biggest worry in Portola's season has been the direction of its run defense. The Bulldogs allowed 3.1 yards per carry (285 yards on 93 rushes) over their first 4 games (3-1), #25 in CIF-SS within that period. In the 5 games since that hot start (3-2), Portola has allowed 5.5 yards per carry (818 yards on 150 rushes), a 78% rise, #171 in CIF-SS across those games. The schedule has a lot to do with it: Portola's last 5 opponents have averaged 5.7 yards per carry, a #185 rushing attack in CIF-SS on the season, against 5.0 yards per carry, #259 for the first 4. The level of competition matters too: in ScorePirate's SP Strength Index, the last 5 opponents average a rating that would rank #142 in CIF-SS, well above the first 4 (#220), so the dip has come against better teams overall. On the season, the Bulldogs rank #78 in CIF-SS in run defense. Esperanza's ground game, #289 of 379 (4.6 yards per carry), could be the get-right matchup Portola needs.
Portola's defense from the opening weeks has gone missing since. Portola allowed 4.7 yards per play (834 yards on 176 snaps) over its first 4 games (3-1), #51 in CIF-SS during those games. In the 5 games since that hot start (3-2), the Bulldogs have allowed 6.7 yards per play (1,643 yards on 246 snaps), a 41% rise, #191 in CIF-SS during that period. The schedule doesn't explain it: the opponents in both stretches have averaged about 6.5 yards per play on the season. The level of competition matters too: in ScorePirate's SP Strength Index, the last 5 opponents average a rating that would rank #142 in CIF-SS, well above the first 4 (#220), so the dip has come against better teams overall. On the season, Portola ranks #111 in CIF-SS in yards per play allowed. Esperanza's offense, #304 of 379 (5.4 yards per play), could be the get-right matchup Portola needs.
The Bulldogs averaged 21.0 points per game over their first 4 games (3-1), #252 in CIF-SS during that stretch. Few teams started slower in this department, and few have turned it around as sharply since. In the 5 games since that slow start (3-2), Portola has averaged 27.4 points per game, a 30% rise, #167 in CIF-SS over that period. The schedule has a lot to do with it: Portola's last 5 opponents have averaged 18.2 points per game, a #110 scoring defense in CIF-SS on the season, against 25.4 points per game, #236 for the first 4. Measured against those opponents' norms (18.2 points per game), Portola scored 51% more than those defenses usually allow. The level of competition matters too: in ScorePirate's SP Strength Index, the last 5 opponents average a rating that would rank #142 in CIF-SS, well above the first 4 (#220), which makes the improvement more impressive. On the season, the Bulldogs rank #206 in CIF-SS in scoring. Esperanza's defense sits in the middle of the pack, #224 in CIF-SS (24.6 points per game). Portola is 5-0 this season when it scores 25 or more, and 1-3 when it doesn't.
Something changed for Portola's pass defense after its first 4 games. Portola allowed 6.6 yards per pass attempt (549 yards on 83 attempts) over its first 4 games (3-1), #144 in CIF-SS over that timeframe. In the 5 games since that hot start (3-2), the Bulldogs have allowed 8.6 yards per pass attempt (825 yards on 96 attempts), a 30% rise, #243 in CIF-SS over that span. The schedule doesn't explain it: the opponents in both stretches have averaged about 8.1 yards per attempt on the season. The level of competition matters too: in ScorePirate's SP Strength Index, the last 5 opponents average a rating that would rank #142 in CIF-SS, well above the first 4 (#220), so the dip has come against better teams overall. On the season, Portola ranks #190 in CIF-SS in pass defense. Esperanza's passing game, #296 of 376 (6.1 yards per attempt), could be the get-right matchup Portola needs.
TIDBITS (11 found)
• Club Portola is 14-1 all time when holding the opponent under 10 points. Portola's last loss when holding the opponent under 10 points was August 28, 2026 against Irvine (L, 0-8).
• Club Portola is 11-1 all time when averaging 7.0+ yards per play. Portola's last loss when averaging 7.0+ yards per play was October 6, 2023 against Beckman (L, 14-21).
• Club Portola has gone 7 straight games rushing for 100+ yards (September 4, 2026 through October 24, 2026), going 5-2 over that stretch, the program's longest such streak since 2024 (11 games).
• Club Portola has gone 7 straight games committing fewer than 3 turnovers (September 4, 2026 through October 24, 2026), going 5-2 over that stretch, the program's longest such streak since 2026 (10 games).
• Club Portola has allowed 109 points over its last 3 games (36.3 a game, October 9, 2026 through October 24, 2026) -- its 3rd-highest 3-game total on record; the most is 118, from October 13, 2023 through October 27, 2023.
• Player Carter Nguyen has gone 8 straight games making 10 or more tackles, the longest such streak of his career.
• Player Gavin Morrell has 32 tackles over his last 4 games (8.0 a game, October 2, 2026 through October 24, 2026) -- his most in a 4-game stretch on record.
• Player Galahad Chen has 3 touchdown catches over his last 3 games (1.0 a game, October 9, 2026 through October 24, 2026) -- his most in a 3-game stretch on record.
• Player Mason Mapstone has gone 3 straight games running for a touchdown, the longest such streak of his career.
• Player Mason Mapstone has never had a game rushing for 100+ yards for Portola, over a 43-game career on record. His career high is 98, set October 16, 2026 against Fullerton (L, 20-47).
• Player Jamal Abdelkarim has gone 9 straight games without intercepting a pass. The last time he intercepted a pass was November 7, 2025 against Brentwood School (L, 3-13) — 1 interception.
MILESTONE WATCH
Portola
Jamal Abdelkarim needs 33 receiving yards for 500 (averaging 51.9 a game)
Carter Nguyen needs 15 tackles for 150 (averaging 15.0 a game)
Gavin Morrell needs 1 rushing touchdown for 10 (averaging 1.0 a game)
William Acquah needs 0 sacks for 5 (averaging 0.5 a game)
Win chances are the site's own game projections where one is on file, otherwise the SP Strength Index gap with a small home edge. The realistic range covers 80% of outcomes (10th to 90th percentile).
Every player with a stat on file, listed only where he has one. Open the arrow beside a name for his game-by-game line. Stats through the Oct 24 game; last updated Oct 26; roster and numbers checked Oct 6.
Click a column heading to sort. MIN hides players below that many attempts.
1 CIF-SS title · 1 CIF State runner-up finish · 1 CIF-SS Player of the Year · 1 league title
YEAR
HONOR
2024
CIF STATE RUNNER-UP (lost to Arcata 27-21)
CIF-SS Division 11 CHAMPION (def. El Rancho 31-14)
CIF-SS Defensive Player of the Year (Division 11): MAXWELL MAPSTONE
2022
Pacific Valley LEAGUE CHAMPION (2-1 in league, shared with WOODBRIDGE)
Section and state results and Players of the Year: CIF-SS Record Book. League finishes judged from league schedules on file (2022-2025 seasons); earlier league titles are not on file.
PPG/OPP PPG use every played game on file. YPG/PLAYS-PER-GAME columns only ever come from games with a full box score on file, which can be a smaller sample than GP -- see the coverage note below when that's the case for this team.
Averages use only games with that number on file. SACKS ALW comes from the opponent's box score; TO FORCED is takeaways; TO MAR is takeaways minus giveaways, and its bottom cell is the season total. Dashes mean not on file.
UNIT INDEX
Pass Offense: grade 33.1/100 (-49 yds/gm vs average)
Rush Offense: grade 37.9/100 (-36 yds/gm vs average)
Pass Defense: grade 73.2/100 (-38 yds/gm vs average)
Rush Defense: grade 65.2/100 (-34 yds/gm vs average)
Unit grades: 0-100 league percentile, opponent-curved (two-way solve over current + past seasons, recency-weighted). Composite counts yardage, efficiency vs league YPA/YPC (50% tilt), and negative plays at sack=7yd, INT=45yd, TFL=4yd -- adjustable v1 constants.
POR finished 2025 at 6-5. Made the playoffs (1 postseason game(s) on file; exact round/result not available). Notable win: 24-21 over BECKMAN (BECKMAN finished 75% that season). Toughest loss: 14-22 to NORTHWOOD (8-point margin).
"N/A" stands in for a box score that does not have stats entered. A total followed by a count in parentheses covers only the games with that stat on file.
TALKING POINTS (15 storylines)
POR HAS PERFORMED BEST THIS DATA SET WHEN...
• POR rushes for 150+ yards (.938), and has won 8 straight when doing so
• POR averages 6.0+ yards per play (.999), and has won 11 straight when doing so
• POR averages 5.0+ yards per carry (.933), but most recently lost to Fullerton when doing so
• POR averages 8.0+ yards per attempt (.999), and has won 10 straight when doing so
• POR's defense has averaged 36.3 points allowed per game over their last 3 games. Their 35-game average is 17.7 points allowed per game. (+105%)
• POR averages 5.3+ yards per play (POR's own median) (.944)
• POR rushes for 146.0+ yards (POR's own median) (.895)
• POR's offense has averaged 161.0 pass yards per game over their last 3 games. Their 35-game average is 102.3 pass yards per game. (+57%)
• POR's defense has averaged 11.2 YPA over their last 3 games. Their 33-game average is 7.7 YPA. (+45%)
• POR holds its opponents under 6.0 yards per play and under 100 rushing yards
• POR's offense has committed 1+ turnover in 4 straight games (10/02/2026-10/24/2026), going 2-2 over that stretch.
• POR's defense has averaged 194.7 pass yards per game over their last 3 games. Their 33-game average is 140.6 pass yards per game. (+38%)
• POR's defense has averaged 382.7 total yards per game over their last 3 games. Their 33-game average is 278.9 total yards per game. (+37%)
• POR averages 4.7+ yards per carry (POR's own median) (.833)
• POR's defense has averaged 188.0 rush yards per game over their last 3 games. Their 33-game average is 138.3 rush yards per game. (+36%)
POR — OFFENSE SCORING SITUATION — 2024-26 (35 Gms)
SPLIT
REC
WIN%
PPG
Scores <10
1-8
.111
3.7
Scores 10-19
3-5
.375
15.5
Scores 20-29
5-2
.714
24.1
Scores 30-39
9-0
1.000
33.6
Scores 40+
2-0
1.000
42.0
POR — OFFENSE — 2026 (9 Gms)
SPLIT
REC
WIN%
PPG
STRK
YPA 8.0+
2-0
1.000
38.5
W2
YPA < 8.0
4-3
.571
20.6
L2
Pass Yds 200+
2-0
1.000
38.5
W2
Pass Yds < 200
4-3
.571
20.6
L2
Rush Yds 100+
5-2
.714
26.6
W1
Rush Yds < 100
1-1
.500
17.5
L1
Rush Yds 150+
3-0
1.000
31.7
W3
Rush Yds < 150
3-3
.500
21.0
W1
YPC 5.0+
3-1
.750
28.8
L1
YPC < 5.0
3-2
.600
21.2
W1
YPP 6.0+
3-0
1.000
37.3
W3
YPP < 6.0
3-3
.500
18.2
L2
YPP 7.0+
2-0
1.000
35.0
W2
YPP < 7.0
4-3
.571
21.6
W1
Turnovers 1+
3-3
.500
23.0
W1
Turnovers < 1
3-0
1.000
27.7
W3
Turnovers 2+
1-2
.333
15.3
L1
Turnovers > 2
0-1
.000
0.0
L1
POR — OFFENSE SCORING SITUATION — 2026 (9 Gms)
SPLIT
REC
WIN%
PPG
Scores <10
0-1
.000
0.0
Scores 10-19
1-1
.500
14.5
Scores 20-29
1-1
.500
23.0
Scores 30-39
3-0
1.000
34.7
Scores 40+
1-0
1.000
42.0
POR — DEFENSE — 2024-26 (35 Gms)
SPLIT
REC
WIN%
PPG
STRK
YPA 8.0+
6-7
.462
25.2
W1
YPA < 8.0
13-7
.650
13.7
W3
2 games without this stat on file
Pass Yds 200+
5-0
1.000
23.0
W5
Pass Yds < 200
14-14
.500
17.4
L2
2 games without this stat on file
Rush Yds 100+
7-11
.389
24.5
W1
Rush Yds < 100
12-3
.800
10.7
L1
2 games without this stat on file
Rush Yds 150+
5-9
.357
25.9
W1
Rush Yds < 150
14-5
.737
12.6
L1
2 games without this stat on file
YPC 5.0+
6-9
.400
25.6
W1
YPC < 5.0
13-5
.722
12.1
L1
2 games without this stat on file
YPP 6.0+
7-9
.438
24.4
W1
YPP < 6.0
12-5
.706
12.4
W3
2 games without this stat on file
YPP 7.0+
6-4
.600
25.3
W1
YPP < 7.0
13-10
.565
15.1
L1
2 games without this stat on file
Turnovers 1+
16-8
.667
16.2
W5
Turnovers < 1
4-7
.364
21.1
L2
Turnovers 2+
9-6
.600
18.5
W5
Turnovers > 2
5-2
.714
18.3
W5
POR — DEFENSE SCORING SITUATION — 2024-26 (35 Gms)
SPLIT
REC
WIN%
PPG
Allows <10
9-1
.900
4.6
Allows 10-19
5-1
.833
11.7
Allows 20-29
4-10
.286
22.9
Allows 30-39
2-2
.500
34.5
Allows 40+
0-1
.000
47.0
POR — DEFENSE — 2026 (9 Gms)
SPLIT
REC
WIN%
PPG
STRK
YPA 8.0+
2-2
.500
30.5
W1
YPA < 8.0
4-1
.800
8.2
W3
Pass Yds 200+
2-0
1.000
25.5
W2
Pass Yds < 200
4-3
.571
16.0
L2
Rush Yds 100+
2-1
.667
31.7
W1
Rush Yds < 100
4-2
.667
11.3
L1
Rush Yds 150+
2-1
.667
31.7
W1
Rush Yds < 150
4-2
.667
11.3
L1
YPC 5.0+
2-1
.667
31.7
W1
YPC < 5.0
4-2
.667
11.3
L1
YPP 6.0+
2-2
.500
29.8
W1
YPP < 6.0
4-1
.800
8.8
W3
YPP 7.0+
2-1
.667
31.7
W1
YPP < 7.0
4-2
.667
11.3
L1
Turnovers 1+
5-0
1.000
14.8
W5
Turnovers < 1
1-3
.250
22.2
L2
Turnovers 2+
3-0
1.000
18.0
W3
Turnovers > 2
2-0
1.000
22.0
W2
POR — DEFENSE SCORING SITUATION — 2026 (9 Gms)
SPLIT
REC
WIN%
PPG
Allows <10
2-1
.667
7.0
Allows 10-19
3-0
1.000
11.0
Allows 20-29
0-1
.000
24.0
Allows 30-39
1-0
1.000
38.0
Allows 40+
0-1
.000
47.0
ON THE BRINK
PORTOLA
• PORTOLA has allowed a 100-yard rusher in 2 straight games (10/16/26–10/24/26). It has not reached 3 straight in the last 4 years of games on file (2023-present).
• PORTOLA has allowed 30+ in 2 straight games (10/16/26–10/24/26). It has not allowed 30+ in 3 straight since 10/13/23–10/27/23 (2023).
POR's defense has averaged 36.3 points allowed per game over their last 3 games. Their 35-game average is 17.7 points allowed per game. (+105%)
POR's defense has averaged 11.2 YPA over their last 3 games. Their 33-game average is 7.7 YPA. (+45%)
POR's defense has averaged 194.7 pass yards per game over their last 3 games. Their 33-game average is 140.6 pass yards per game. (+38%)
POR's defense has averaged 382.7 total yards per game over their last 3 games. Their 33-game average is 278.9 total yards per game. (+37%)
POR's defense has averaged 188.0 rush yards per game over their last 3 games. Their 33-game average is 138.3 rush yards per game. (+36%)
POR's defense has averaged 2.0 takeaways per game over their last 5 games. Their 35-game average is 1.5 takeaways per game. (+32%)
POR's defense has averaged 7.3 YPP over their last 3 games. Their 33-game average is 5.9 YPP. (+23%)
(moved to the Appendix, Data Export 1, to keep this section shorter -- the full spreadsheet-paste table is there unchanged)
APPENDIX
Full-length explanations and full-size data exports for the shortened notes and relocated tables referenced throughout this report, numbered in the order their pointers appear above.
Explanatory Notes
Note 1 -- SEASON OUTLOOK
Every remaining game is projected from schedule-adjusted ratings; already-played games carry their real result. Records are simulated distributions, not a single guess -- MOST LIKELY FINAL is the single most probable record and its own probability, PROJECTED RECORD is the season's expected win total expressed in record form (an average across every simulated outcome, so it can land on a fraction of a game).
Note 2 -- OPPONENT TRACKER -- why some cards have no record shown
Only meaningful for an opponent who is ALSO a tracked team in the library -- an opponent with no games on file here at all shows the date and site alone.
Note 3 -- MOST IMPORTANT NUMBERS -- how a number is scored
Every split this report computes is scored on four weighted criteria and the top 5 per team are listed. In Cooper's own weighting order: (1) the WIN% attached to the condition, counted only when the condition has occurred at least 8 times -- a smaller sample is dropped outright, not discounted; (2) the PPG attached to it, with higher better on offense and lower better on defense, and each side normalized against its own kind so a defensive number competes with defensive numbers rather than against scoring averages; (3) how far the number sits from the OPPONENT's on the same condition, across win%, PPG and how often the condition happens at all; and (4) where it falls among every other team previously run through this workbook and cached. Criteria 1 and 2 measure how strong a number is; 3 and 4 measure how much it distinguishes this team. Weights: win_pct 40%, ppg 27%, matchup 20%, pool 13%. See important_numbers.py.
Full Data Exports
Data Export 1 -- TRENDS — TAB-SEPARATED (10 columns)
Where PORTOLA (IRVINE) sits among 399 section teams on the two Unit Index composites -- Offense Grade 38.0, Defense Grade 76.0.
POINTS ALLOWED / GAME: PORTOLA (IRVINE) VS THE SECTION
PORTOLA (IRVINE) ranks #34 of 399 section teams in points allowed per game (9.5) -- a strength worth a look.
PORTOLA (IRVINE): SP STRENGTH INDEX BY SEASON
The program's index across 5 seasons on file -- -2.6 in 2022 to 6.8 in 2026.
These graphs were chosen by the program from this season's most notable numbers. Build your own -- any stat against any other, for any mix of teams, seasons or players, with a JPEG download -- in the Graph Builder.