March Madness Brackets¶
Fill and manage NCAA March Madness bracket picks on Polymarket bracket contests — win prizes for correct predictions.
Get Started (New Users)¶
If you don't have Bullpen CLI installed yet, install it first:
Then run the read-only account checks:
Run bullpen login only when status or auth diagnostics say login is required.
After login, rerun the same two read-only checks before filling a bracket.
State change: Start login only when the preceding status or auth diagnostic says login is required.
After login, rerun the read-only checks:
Before any live bracket submit, preview the picks and confirm the preview matches the contest, tiebreaker, and pick count:
Stop here until the dry-run matches the intended contest, tiebreaker, and pick count.
Live: Run the live submit only after that explicit confirmation:
AI Agent Mode
Want Claude Code or Codex CLI to fill your bracket for you? Install AI skills after the read-only checks are clean:
Then restart Claude Code and ask: "Fill my March Madness bracket picking Duke to win it all"
Quick Start — Fill Your Bracket¶
Preview chalk picks with the example contest and tiebreaker:
Stop here until the dry-run matches the intended contest, tiebreaker, and pick count.
Live: Submit the chalk bracket only after that matching dry-run:
Preview the exact slot override:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the single-pick override only after that matching dry-run:
Check your bracket after any live submit:
The march-madness-2026 contest ID is an example. Your active contest ID may
differ; get it from bullpen polymarket bracket contests.
Fill Your Bracket with AI¶
If you installed AI skills (bullpen skill install), you can fill your entire bracket through conversation with Claude Code or Codex CLI. Just copy-paste one of these prompts.
Option A: Research And Preview First¶
Paste this into Claude Code or Codex CLI:
Fill my 2026 NCAA March Madness bracket on Bullpen. Here's what I want:
1. Run bullpen status --output json and bullpen doctor auth --output json.
2. Run bullpen login only if those diagnostics say login is required.
3. Find the active bracket contest.
4. Research the tournament field: seeds, matchups, team strengths.
5. Fill the entire bracket using your best analysis:
- Favor teams with March experience and defensive identity
- Pick 2-3 realistic upsets per region (12-over-5, 10-over-7 range)
- Pick a champion you believe in, not just the #1 overall seed
6. Set tiebreaker to your best estimate of championship game total points.
7. Preview the full bracket with --dry-run.
8. Show me the preview and ask for confirmation before any --yes command.
Option B: Interactive Bracket Builder (AI asks you questions)¶
Paste this into Claude Code or Codex CLI for a personalized bracket:
Help me fill my 2026 NCAA March Madness bracket on Bullpen. Walk me through
it by asking me these questions one at a time, then build my bracket based
on my answers:
1. Who's your champion? (gut feel — who wins it all?)
2. Chaos level? (chalk / moderate / madness)
- chalk: mostly higher seeds win
- moderate: 2-3 upsets per region
- madness: go wild, 4-5 upsets per region
3. Teams you love this year? (2-3 teams you think are underseeded or on a run)
4. Teams to fade? (overseeded or overrated teams you want to lose early)
5. Cinderella pick? (a double-digit seed to make a deep run — Sweet 16 or further)
6. Conference bias? (e.g. "Big Ten is underrated" or "SEC is overrated")
7. Tiebreaker — predicted total points in the championship game?
After I answer, generate the full bracket reflecting my preferences,
preview it with --dry-run, and submit it once I confirm.
Both prompts work with Claude Code (claude) or Codex CLI. The AI will use the Bullpen CLI bracket commands to find the contest, generate picks, and submit them.
How It Works¶
Polymarket runs bracket contests where you predict the winner of every tournament game in the contest, including First Four play-in games when they are present. Points are awarded for each correct pick, with later rounds worth more. The tiebreaker (predicted total points in the championship game) resolves ties.
64-team field, 4 regions (East, West, South, Midwest), 67 total picks in the live 2026 contest (includes 4 First Four play-in games)
| Round | Games | Points/Pick | Max Points |
|---|---|---|---|
| First Four (R0) | 4 | Contest-defined | Contest-defined |
| First Round (R1) | 32 | 1 | 32 |
| Second Round (R2) | 16 | 2 | 32 |
| Sweet 16 (R3) | 8 | 4 | 32 |
| Elite 8 (R4) | 4 | 8 | 32 |
| Final Four (R5) | 2 | 16 | 32 |
| Championship (R6) | 1 | 32 | 32 |
| Total | 67 | — | Depends on R0 scoring |
Find Contests¶
# List all bracket contests
bullpen polymarket bracket contests
# Filter by status
bullpen polymarket bracket contests --status open
# JSON output for scripting
bullpen polymarket bracket contests --status open --output json
View the Bracket¶
# Full bracket tree with matchups and seeds
bullpen polymarket bracket bracket-view march-madness-2026
# JSON output
bullpen polymarket bracket bracket-view march-madness-2026 --output json
Fill Your Bracket¶
Option 1: Auto-Fill with Chalk (Higher Seeds Win)¶
The fastest way to get a complete bracket always picks the higher seed. Preview first:
Stop here until the dry-run matches the intended contest, tiebreaker, and pick count.
Live: Submit only after the preview matches your intended contest, tiebreaker, and pick count:
Picks are submitted round by round, starting with the earliest contest round (R0 when First Four games are present). If any round batch fails, the CLI automatically falls back to individual pick submission. A final verification confirms how many picks persisted.
Option 2: Fill from a JSON File¶
Create a picks file with your custom selections:
{
"picks": [
{"slot": "R1_E1", "winner": "Duke"},
{"slot": "R1_E2", "winner": "TCU"},
{"slot": "R1_S1", "winner": "Illinois"},
{"slot": "R2_E1", "winner": "Duke"},
{"slot": "R6_CH1", "winner": "Duke"}
],
"tiebreaker": 148
}
Preview the file before submitting:
Stop here until the dry-run resolves the expected teams and tiebreaker.
Live: Submit only after the preview resolves the expected teams and tiebreaker:
Team names support fuzzy matching — use short names like "Duke", "UConn", "Michigan St".
Option 3: Pick One at a Time¶
Read the bracket tree before submitting individual picks:
Dry-run the first pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit that first pick only after the matching dry-run:
Dry-run the second pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit that second pick only after the matching dry-run:
Dry-run the champion pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the champion pick only after the matching dry-run:
Works for all contest rounds (R0-R6 when First Four games are present; R1-R6 otherwise). For later rounds where matchups aren't determined yet, the CLI resolves team names against all tournament entries.
Slot ID Format¶
Slot IDs identify each game in the bracket: R{round}_{region}{game}
| Slot | Meaning |
|---|---|
R0_FF1 |
First Four, Game 1 (play-in game) |
R1_E1 |
East region, Round 1, Game 1 (seed 1 vs seed 16) |
R1_E8 |
East region, Round 1, Game 8 (seed 8 vs seed 9) |
R2_W4 |
West region, Round 2, Game 4 |
R3_S2 |
South region, Sweet 16, Game 2 |
R4_MW1 |
Midwest region, Elite 8, Game 1 |
R5_FF1 |
Final Four, Game 1 |
R6_CH1 |
Championship game |
Get exact slot IDs from bullpen polymarket bracket bracket-view march-madness-2026 --output json.
Set Tiebreaker¶
The tiebreaker is your prediction of the total points scored in the championship game. It resolves ties in the final standings.
Preview or review your picks before changing the tiebreaker:
Stop here until the picks output is for the intended contest and existing bracket state. Then dry-run the tiebreaker update:
Live: Update the tiebreaker only after the picks output is for the intended contest and the matching submit dry-run shows the intended tiebreaker:
Note
fill-chalk and fill set the tiebreaker as part of submission. Use submit --tiebreaker to update it separately.
View Your Picks¶
# All picks
bullpen polymarket bracket picks march-madness-2026
bullpen polymarket bracket picks march-madness-2026 --round 1
bullpen polymarket bracket picks march-madness-2026 --round 5
bullpen polymarket bracket picks march-madness-2026 --round 1 --output json
Bracket Summary¶
See a compact overview — champion, Final Four, Elite 8, upsets, and pick count:
Champion: Duke
Final Four: Duke (E) | Arizona (W) | Iowa St. (MW) | Illinois (S)
Elite 8: Duke (E) | Michigan St. (E) | Arizona (W) | ...
Upsets: TCU(9)>Ohio St.(8), USF(11)>Louisville(6)
Picks: 67/67
Tiebreaker: 148
Track Results¶
Once the tournament starts:
# Game results
bullpen polymarket bracket results march-madness-2026
# Your rank and score
bullpen polymarket bracket status march-madness-2026
# Full leaderboard
bullpen polymarket bracket leaderboard march-madness-2026
Polymarket Market Mappings¶
Each bracket game maps to a Polymarket prediction market. View the mappings:
This lets you cross-reference bracket picks with live Polymarket odds for your research.
Strategy Guide¶
Chalk (Favor Higher Seeds)¶
Pick the team with the better seed in every game. Maximizes expected correct picks but leaves points on the table if there are upsets.
Stop here until the dry-run matches the intended contest, tiebreaker, and pick count.
Live: Run the chalk dry-run above first. Submit only when the preview matches the intended contest, tiebreaker, and pick count.
Upset-Heavy¶
Target statistically common upsets in Round 1:
- 12 over 5: ~35% historically
- 10 over 7: ~40% historically
- 11 over 6: ~37% historically
- 13 over 4: ~21% historically
- 14 over 3: ~15% historically
Start with chalk, then override 2-3 upsets per region:
Stop here until the chalk dry-run matches the intended contest, tiebreaker, and pick count. Then inspect the bracket tree:
Live: Submit the chalk baseline only after the matching dry-run:
Dry-run the first upset pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the first upset pick only after the matching dry-run:
Dry-run the second upset pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the second upset pick only after the matching dry-run:
Custom Champion (Work Backwards)¶
- Pick your champion (
R6_CH1) - Work backwards — your champion must win Final Four, Elite 8, etc.
- Fill the rest freely
Stop here until the chalk dry-run matches the intended contest, tiebreaker, and pick count. Then inspect the bracket tree:
Live: Submit the chalk baseline only after the matching dry-run:
Dry-run the champion pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the champion pick only after the matching dry-run:
Dry-run the Final Four prerequisite pick:
Stop here until the dry-run matches the intended contest, slot, and winner.
Live: Submit the Final Four prerequisite pick only after the matching dry-run:
bullpen polymarket bracket pick march-madness-2026 --slot R5_FF1 --winner "Duke" --yes
# Continue working backwards through Duke's region
Contrarian (Large Field Differentiation)¶
In contests with many participants, differentiation matters more than raw accuracy. Pick a non-consensus champion (3 or 4 seed) and several 12-seed upsets.
Troubleshooting¶
| Issue | Fix |
|---|---|
| "Not authenticated" | Run bullpen status --output json and bullpen doctor auth --output json; run bullpen login only when diagnostics report requires_login: true or AUTH_REFRESH_REJECTED_LOGIN_REQUIRED |
| "Contest not found" | Run bullpen polymarket bracket contests to get valid IDs |
| "Invalid slot ID" | Use bracket-view --output json to get exact slot IDs |
| "No team matching..." | Check team names with bracket-view. Fuzzy matching works for short names. |
| "Ambiguous team name..." | Be more specific — the error lists matching candidates |
| Picks not persisting | The CLI verifies and falls back to individual submission automatically |
| Command not found | Run bullpen upgrade to get the latest published version |