ethanhouseworth

← back to projects

Sports Betting with an AI Agent

Apr 2026 AI / Sports

Ethan Houseworth + Ultron

a bar conversation, a cron job, and $583 in profit.

i was at a bar with my friend Anthony Carli and we asked: "how could Ultron sports bet for us?"

we came up with an approach. aggregating expert consensus from the web, looking for contrarian signals, adding a fade test based on a previous experiment. we wrote the prompt, set up a cron job to make 3 picks per day, and had Ultron email the results.

march 2026. 75 picks. 43-32 record. 57.3% win rate. +$583.16 profit on paper. flat $100 per pick.

the first two high confidence picks hit. i got so excited that on the third one, march 7, i put $50 of real money on UConn to blow out Marquette. Marquette upset UConn. that was the last time i bet real money on a high confidence pick.

the system went 3-0 on march 12 and we went green for the first time. then crashed to -$425 on march 24. then ripped back to finish at +$583. and on march 31st, Ultron just woke up and decided not to make any picks.

the baird experiment

this whole thing started at a Baird internship the previous summer. there was a market watch competition with a $1M paper portfolio.

i prompted Perplexity and Claude to find penny stocks they thought would moon. then i faded every single pick. meaning i did the opposite: if the AI said buy, i shorted it.

i'd do all my research before market open, have my positions ready, and execute everything within the first 30 minutes of the trading day. the AI's picks would often tank right at open, which is exactly when you want to be short.

result: +72% return, 2nd place out of 19. the AI was a reliable contrarian indicator.

that fade test concept became a core part of the sports betting system. if Ultron liked a pick too much, maybe we shouldn't trust it.

the system

cron job runs every morning at 8am. Ultron wakes up, pulls upcoming games from multiple sports, searches the web for expert analysis and consensus picks, and runs them through a decision framework.

the prompt has three main components:

1. strategy: aggregate expert consensus from trusted sources and look for contrarian signals where public betting is heavily skewed. don't just follow the crowd. find spots where the line moved against public money.

2. decision framework: consensus plays get priority (when 70%+ of experts agree). contrarian plays come second (fade heavy public betting when sharp money is on the other side). situational edges are last (rest advantages, revenge games, playoff clinch scenarios).

3. pick selection rules: exactly 3 picks per day. diversify across sports when possible. provide confidence level (medium or high). include reasoning for each pick with supporting data.

4. fade test: before finalizing, check: would i take the opposite side of this bet? if the answer is yes, downgrade confidence or drop the pick. this was the Baird lesson baked into the system.

output format: date, sport, matchup, selection, odds, confidence, reasoning. gets emailed to both of us. simple.

what actually happened

march 2-30, 2026. 31 days. Ultron made picks on 25 of them. 6 days with no picks because the system was down.

the missing days: march 1, 8, 9, 18, 27, 31. on march 31st specifically, Ultron just woke up and decided not to make any picks. no explanation. just silence.

system reliability: 81%. not bad, not great.

here's what the P&L curve looked like:

started march 2 at -$109. got worse. march 7 hit -$312 in the hole. that was the low point of week one.

march 12 was the breakout. went 3-0, swept the board, gained $287 in one day, and went green for the first time. momentum shifted.

then march 17 happened. crashed back to -$305. another rough stretch through march 24 at -$425, the worst day of the entire month.

then the heater. march 28-30, went 9-1 over three days. closed out the month at +$583.16.

the swings were brutal. but the system clawed back every time.

by sport

NBA: 19-13 (59.4%), +$438.68. this was the profit engine. Ultron crushed basketball.

march madness (NCAAB): 4-2 (66.7%), +$163.64. small sample, elite performance. tournament chaos worked in our favor.

MLB: 2-1 (66.7%), +$99.91. baseball just started late march, limited data.

NCAAM: 6-5 (54.5%), +$45.46. basically break-even once you factor in juice.

NHL: 12-10 (54.5%), -$64.53. the only losing sport. hockey was the system's weakness.

by confidence

this is the most interesting part.

medium confidence: 39-28 (58.2%), +$670.58. this is where all the profit came from.

high confidence: 4-4 (50.0%), -$87.42. broke even on record, lost money because of the juice.

high confidence picks were worse than medium confidence picks. significantly worse.

the system could not calibrate its own certainty. when Ultron was "sure" about something, that was actually a red flag. the Baird fade test was right.

lessons

1. trust medium confidence more than high confidence. the AI doesn't know what it doesn't know. overconfidence is a bug, not a feature.

2. NBA > NHL. basketball is more predictable. hockey has too much randomness (goalie performances, bounces, overtime coin flips).

3. system reliability matters. 6 missed days out of 31 is 19% downtime. if this were real money, that's a problem. automation is only valuable if it's consistent.

4. the comeback is part of the system. down $425 on march 24, finished +$583 six days later. variance is real. you have to survive the drawdowns to see the heaters.

5. contrarian signals work. fading public betting and trusting line movement was more reliable than just following consensus. the Baird experiment validated in a different domain.

the P&L curve

+$600 +$300 $0 -$300 -$450 Mar 2 Mar 12 Mar 24 Mar 30 -$312 -$425 +$143 +$583

what's changing for april

the prompt stays the same. the sport mix stays the same. NHL is 12-10, that's fine, not enough data to call it broken. we're not going NBA-heavy or dropping anything. the core system works.

the one thing we are changing: high confidence picks.

the problem is subtle. if you tell the picking agent "stop making high confidence picks," it just stops labeling things high confidence. the signal disappears. it games itself. you need the agent to be honest about its confidence without knowing what happens to that honesty.

so we're splitting it into two agents.

agent A runs the same prompt, same research, same process. it makes picks and assigns confidence naturally. it has no idea what happens next. as far as it knows, every pick goes straight to production.

agent B runs 10 minutes later. it reads agent A's picks, silently drops anything labeled high confidence, and publishes the rest. agent A never sees agent B's logic. the filtering is invisible.

this preserves the confidence signal as data (we can keep tracking whether high picks improve over time) while preventing it from costing us money. agent A stays honest because it doesn't know it's being filtered.

everything else stays the same. 3 picks per day, flat $100, same research prompt, same cron schedule. let's see what april looks like.

every single pick

here's the full record. 75 picks. every game, every outcome, every dollar.

Date Sport Event Selection Odds Conf. Result P&L
Mar 2 NHL Stars @ Canucks Over 5.5 -130 Med L -$100
Mar 2 NCAAB Duke vs NC State NC State +9.5 -102 Med L -$100
Mar 2 NBA Celtics @ Bucks Celtics -7 -110 High W +$91
Mar 3 NHL Panthers @ Devils Under 6 -140 Med L -$100
Mar 3 NHL Stars @ Flames Stars ML -128 High W +$78
Mar 3 NHL Avalanche @ Ducks Under 6.5 105 Med W +$105
Mar 4 NBA Thunder @ Knicks Thunder -4.5 -110 High L -$100
Mar 4 NHL Hurricanes @ Canucks Canucks +1.5 -120 Med W +$83
Mar 4 NHL Hurricanes @ Canucks Under 6.5 -110 Med W +$91
Mar 5 NBA Raptors @ Timberwolves Raptors +6 -110 Med L -$100
Mar 5 NBA Warriors @ Rockets Under 215.5 -110 Med L -$100
Mar 5 NBA Pistons @ Spurs Spurs -3.5 -106 Med W +$94
Mar 6 NBA Heat @ Hornets Hornets ML -160 Med L -$100
Mar 6 NHL Avalanche @ Stars Stars ML -130 Med L -$100
Mar 6 NBA Trail Blazers @ Rockets Under 224.5 -110 Med W +$91
Mar 7 NCAAB #4 UConn @ Marquette UConn -8.5 -110 High L -$100
Mar 7 NBA Magic @ Timberwolves Timberwolves ML -289 Med L -$100
Mar 7 NHL Predators @ Sabres Sabres ML -185 Med W +$54
Mar 10 NBA Celtics @ Spurs Under 222.5 -110 Med L -$100
Mar 10 NHL Golden Knights @ Stars Stars ML -150 Med W +$67
Mar 10 NHL Penguins @ Hurricanes Penguins +1.5 -134 Med W +$75
Mar 11 NHL Capitals @ Flyers Capitals ML -115 Med L -$100
Mar 11 NBA Rockets @ Nuggets Nuggets -5.5 -110 Med W +$91
Mar 11 NHL Canadiens @ Senators Canadiens +1.5 -185 Med W +$54
Mar 12 NBA Celtics @ Thunder Celtics +6.5 -110 Med W +$91
Mar 12 NHL Oilers @ Stars Stars ML -135 Med W +$74
Mar 12 NHL Avalanche @ Kraken Avalanche -1.5 122 Med W +$122
Mar 13 NHL Oilers @ Blues Oilers ML -143 Med L -$100
Mar 13 NBA Knicks @ Pacers Pacers +13.5 -110 Med W +$91
Mar 13 NBA Suns @ Raptors Raptors -4.5 -110 Med W +$91
Mar 14 NHL Sharks @ Canadiens Canadiens ML -178 Med L -$100
Mar 14 NCAAB Duke vs Virginia (ACC) Duke -8.5 -110 Med L -$100
Mar 14 NBA Nuggets @ Lakers Lakers +2.5 -110 Med W +$91
Mar 15 NBA Timberwolves @ Thunder Timberwolves +8.5 -110 Med L -$100
Mar 15 NBA Mavericks @ Cavaliers Cavaliers -16.5 -110 Med L -$100
Mar 15 NHL Blues @ Jets Jets ML -125 Med W +$80
Mar 16 NHL Penguins @ Avalanche Avalanche -1.5 107 Med L -$100
Mar 16 NBA Lakers @ Rockets Lakers +2.5 -110 Med W +$91
Mar 16 NBA Magic @ Hawks Hawks -2.5 -110 Med W +$91
Mar 17 NBA Thunder @ Magic Thunder -9.5 -110 Med L -$100
Mar 17 NBA Cavaliers @ Bucks Cavaliers -10 -110 Med L -$100
Mar 17 NHL Wild @ Blackhawks Wild -1.5 140 Med L -$100
Mar 19 NCAAM Georgia (8) vs Saint Louis (9) Georgia ML -115 Med L -$100
Mar 19 NBA Lakers @ Heat Lakers +3.5 -110 High W +$91
Mar 19 NCAAM South Florida (11) vs Louisville (6) South Florida +5.5 -110 Med W +$91
Mar 20 NCAAM Texas Tech (5) vs Akron (12) Akron +7.5 -110 Med L -$100
Mar 20 NCAAM UCLA (7) vs UCF (10) UCLA -5.5 -110 Med L -$100
Mar 20 NCAAM Clemson (8) vs Iowa (9) Iowa -2.5 -110 Med W +$91
Mar 21 NCAAM Michigan State (3) vs Louisville (6) Michigan State -4.5 -110 Med W +$91
Mar 21 NCAAM Houston (2) vs Texas A&M (10) Houston -10.5 -110 Med W +$91
Mar 21 NCAAM Gonzaga (3) vs Texas (11) Texas +6.5 -110 Med W +$91
Mar 22 NCAAM Kentucky (7) vs Iowa State (6) Kentucky +4.5 -102 Med L -$100
Mar 22 NCAAM Texas Tech (5) vs Alabama (4) Texas Tech +1.5 110 Med L -$100
Mar 22 NCAAM UCLA (7) vs UConn (2) UConn -4.5 -110 Med W +$91
Mar 23 NBA Spurs @ Heat Heat +5.5 -110 Med L -$100
Mar 23 NHL Senators @ Rangers Senators ML -190 High W +$53
Mar 23 NBA Warriors @ Mavericks Warriors -2.5 -110 Med W +$91
Mar 24 NBA Lakers @ Pistons Lakers -2.5 -110 High L -$100
Mar 24 NHL Maple Leafs @ Bruins Bruins ML -186 High L -$100
Mar 24 NHL Wild @ Lightning Wild ML 140 Med L -$100
Mar 25 NBA Thunder @ Celtics Celtics +2.5 -110 Med W +$91
Mar 25 NBA Rockets @ Timberwolves Timberwolves +1.5 -110 Med W +$91
Mar 25 NBA Heat @ Cavaliers Under 242.5 -109 Med W +$92
Mar 26 MLB Guardians @ Mariners Under 6.5 100 Med L -$100
Mar 26 MLB White Sox @ Brewers Brewers -1.5 109 Med W +$109
Mar 26 NBA Knicks @ Hornets Hornets -1.5 -102 Med W +$98
Mar 28 NCAAB Illinois vs Iowa (Elite Eight) Under 139.5 -110 Med W +$91
Mar 28 NBA Spurs @ Bucks Spurs -3.5 -110 Med W +$91
Mar 28 NCAAB Arizona vs Purdue (Elite Eight) Arizona -6 -110 Med W +$91
Mar 29 NBA Clippers @ Bucks Under 222.5 -110 Med L -$100
Mar 29 NCAAB Michigan vs Tennessee (Elite Eight) Michigan -7.5 -110 Med W +$91
Mar 29 NCAAB Duke vs UConn (Elite Eight) UConn +5.5 -110 Med W +$91
Mar 30 NBA Celtics @ Hawks Hawks -1.5 -110 Med W +$91
Mar 30 NBA 76ers @ Heat Heat +2 -110 Med W +$91
Mar 30 MLB Diamondbacks vs Tigers Diamondbacks ML -110 Med W +$91