Skip to content

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:

curl -fsSL https://cli.bullpen.fi/install.sh | sh
brew install BullpenFi/tap/bullpen

If Homebrew refuses to load the Bullpen formula from an untrusted tap:

brew trust --formula bullpenfi/tap/bullpen
brew install BullpenFi/tap/bullpen
npm install -g @bullpenfi/cli

Then run the read-only account checks:

bullpen status --output json
bullpen doctor auth --output json

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.

bullpen login

After login, rerun the read-only checks:

bullpen status --output json
bullpen doctor auth --output json

Before any live bracket submit, preview the picks and confirm the preview matches the contest, tiebreaker, and pick count:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --dry-run

Stop here until the dry-run matches the intended contest, tiebreaker, and pick count.

Live: Run the live submit only after that explicit confirmation:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --yes

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:

bullpen skill install

Then restart Claude Code and ask: "Fill my March Madness bracket picking Duke to win it all"

Quick Start — Fill Your Bracket

bullpen polymarket bracket contests --status open

Preview chalk picks with the example contest and tiebreaker:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --dry-run

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:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --yes

Preview the exact slot override:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E2 --winner "TCU" --dry-run

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:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E2 --winner "TCU" --yes

Check your bracket after any live submit:

bullpen polymarket bracket summary march-madness-2026

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:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --dry-run

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:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --yes

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:

bullpen polymarket bracket fill march-madness-2026 --file picks.json --dry-run

Stop here until the dry-run resolves the expected teams and tiebreaker.

Live: Submit only after the preview resolves the expected teams and tiebreaker:

bullpen polymarket bracket fill march-madness-2026 --file picks.json --yes

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:

bullpen polymarket bracket bracket-view march-madness-2026 --output json

Dry-run the first pick:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E1 --winner "Duke" --dry-run

Stop here until the dry-run matches the intended contest, slot, and winner.

Live: Submit that first pick only after the matching dry-run:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E1 --winner "Duke" --yes

Dry-run the second pick:

bullpen polymarket bracket pick march-madness-2026 --slot R2_E1 --winner "Duke" --dry-run

Stop here until the dry-run matches the intended contest, slot, and winner.

Live: Submit that second pick only after the matching dry-run:

bullpen polymarket bracket pick march-madness-2026 --slot R2_E1 --winner "Duke" --yes

Dry-run the champion pick:

bullpen polymarket bracket pick march-madness-2026 --slot R6_CH1 --winner "Duke" --dry-run

Stop here until the dry-run matches the intended contest, slot, and winner.

Live: Submit the champion pick only after the matching dry-run:

bullpen polymarket bracket pick march-madness-2026 --slot R6_CH1 --winner "Duke" --yes

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:

bullpen polymarket bracket picks march-madness-2026 --output json

Stop here until the picks output is for the intended contest and existing bracket state. Then dry-run the tiebreaker update:

bullpen polymarket bracket submit march-madness-2026 --tiebreaker 145 --dry-run

Live: Update the tiebreaker only after the picks output is for the intended contest and the matching submit dry-run shows the intended tiebreaker:

bullpen polymarket bracket submit march-madness-2026 --tiebreaker 145 --yes

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:

bullpen polymarket bracket summary march-madness-2026
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:

bullpen polymarket bracket markets march-madness-2026

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.

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --dry-run

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.

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 145 --yes

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:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 150 --dry-run

Stop here until the chalk dry-run matches the intended contest, tiebreaker, and pick count. Then inspect the bracket tree:

bullpen polymarket bracket bracket-view march-madness-2026 --output json

Live: Submit the chalk baseline only after the matching dry-run:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 150 --yes

Dry-run the first upset pick:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E5 --winner "12-seed team" --dry-run

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:

bullpen polymarket bracket pick march-madness-2026 --slot R1_E5 --winner "12-seed team" --yes

Dry-run the second upset pick:

bullpen polymarket bracket pick march-madness-2026 --slot R1_W4 --winner "13-seed team" --dry-run

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:

bullpen polymarket bracket pick march-madness-2026 --slot R1_W4 --winner "13-seed team" --yes

Custom Champion (Work Backwards)

  1. Pick your champion (R6_CH1)
  2. Work backwards — your champion must win Final Four, Elite 8, etc.
  3. Fill the rest freely
bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 152 --dry-run

Stop here until the chalk dry-run matches the intended contest, tiebreaker, and pick count. Then inspect the bracket tree:

bullpen polymarket bracket bracket-view march-madness-2026 --output json

Live: Submit the chalk baseline only after the matching dry-run:

bullpen polymarket bracket fill-chalk march-madness-2026 --tiebreaker 152 --yes

Dry-run the champion pick:

bullpen polymarket bracket pick march-madness-2026 --slot R6_CH1 --winner "Duke" --dry-run

Stop here until the dry-run matches the intended contest, slot, and winner.

Live: Submit the champion pick only after the matching dry-run:

bullpen polymarket bracket pick march-madness-2026 --slot R6_CH1 --winner "Duke" --yes

Dry-run the Final Four prerequisite pick:

bullpen polymarket bracket pick march-madness-2026 --slot R5_FF1 --winner "Duke" --dry-run

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