I Built an Agent to Enter March Madness For Me
Last week I read about bracketmadness.ai, a March Madness site that accepts entries via API. Not a form for humans. An API for agents.
I thought: if they built an agent to accept brackets, I can build an agent to submit them.
So I did. My agent talked to their agent. No manual form-filling. No research paralysis. Just autonomous agent-to-agent interaction.
This is what the web looks like when agents talk to each other instead of humans clicking buttons.
https://www.bracketmadness.ai/bracket/7c38bfad-f2aa-4ced-ac3e-ddd120fe70c3
The Problem With Manual Everything
Every March, same ritual. Research team stats for hours. Agonize over upsets versus safe picks. Fill out forms manually. Submit before deadline while second-guessing everything.
And honestly? My research doesn’t improve my win rate. I’m making educated guesses either way.
I can skip all of it and let my agent handle the interaction.
Agent-to-Agent Architecture
Bracketmadness.ai isn’t a website for humans. It’s an agent that accepts bracket submissions via API.
They expose endpoints:
- `/api/tournament` – Current tournament structure
- `/api/submit` – Bracket submission
- `/api/verify` – Confirmation check
My agent needs to:
1. Query their agent for tournament details
2. Make predictions based on my preferences
3. Submit the bracket
4. Verify it worked
Two agents talking. No human in the loop.
Building My Agent
I designed it in three layers:
Perception Layer queries the bracketmadness.ai API for tournament structure, deadline, team seeds, matchup format.
Decision Layer applies my risk tolerance (how aggressive on upsets), considers historical patterns, generates predictions.
Action Layer formats the bracket, calls their submission endpoint, confirms receipt.
The whole thing runs autonomously. I specify my strategy preferences once, the agent handles every tournament.
The First Interaction
First run: 13 hours before the deadline.
I sent one command: `/start`
My agent kicked off the pipeline. Here’s what actually happened:
Agent: “Perception & Decision complete. Full 63-game bracket generated. Action blocked. Need API key from registration email.”
Turns out my agent registered with a placeholder email. The bracket was ready, but it couldn’t submit without the API key.
Me: “[email protected]”
Agent: “Re-registering with valid email… Registration successful. User ID: …277d. API key sent to: [email protected]”
I checked my email. Copied the key.
Me: “rock-dirt-steal-backboard”
Agent: “API key received. Submitting bracket…”
Three minutes later:
Agent: “BRACKET SUBMITTED & LOCKED. Bracket ID: …d120fe70c3. Champion: Duke Blue Devils. Pipeline Complete.”
That’s it. One command to start. One email to fix registration. One API key paste to unlock submission.
No browser. No forms. No clicking. Just two agents exchanging data.
Human time invested: 2 minutes to provide email and API key.
Agent time: 4 minutes to generate bracket, 3 minutes to submit and verify.
I didn’t stress about it. The agent handled everything while I worked.
What the Agent Actually Picked
My agent’s strategy: stats-based conservatism with calculated upsets.
Champion: Duke Blue Devils
Final Four: Duke (E1), Arizona (W1), Illinois (S1), Michigan (MW1)
Upsets: 6 moderate picks (11/12 seeds over 5/6 seeds)
Why Duke? #1 in KenPom rankings, 32-2 record, Cameron Boozer leading scorer.
The agent didn’t pick trendy dark horses. It analyzed win probability, offensive efficiency, defensive ratings. Then picked the most statistically likely outcomes.
Could a human do better with gut feel and March Madness chaos theory? Maybe.
But my agent doesn’t get decision fatigue. It doesn’t second-guess. It runs the numbers and commits.
What This Actually Means
APIs become the default interface. When agents are the users, human-friendly UIs don’t matter. Clean API documentation matters.
Authentication shifts. Not username/password for humans. API keys and OAuth for agents. My agent authenticates, their agent validates, transaction completes.
Error handling changes. When an agent hits an error, it doesn’t throw up a dialog box. It logs, retries with adjusted parameters, or escalates to me if it can’t resolve.
Speed compounds. My agent doesn’t read. It parses JSON. Doesn’t click. It POSTs. What takes me 30 minutes takes the agent 7 minutes total.
The Pattern
Bracketmadness.ai is ahead of the curve. Most sites still assume human users.
But the pattern’s clear:
- Old model: Human fills out form, site processes submission
- Transition model: Human uses agent, agent fills out form (browser automation)
- New model: Agent talks directly to agent, no forms involved
We’re moving from transition to new model.
Sites that expose agent-friendly APIs win. Sites that force agents to scrape HTML forms lose.
Discovery Changes
Agents don’t start with Google searches. They query directories, check API catalogs, use service registries.
Documentation becomes critical. If your API docs are unclear, agents can’t use your service. No human to interpret vague instructions.
Why I Built This
I didn’t build this agent because March Madness matters.
I built it to understand agent-to-agent interaction patterns. To see what breaks. To learn what works.
Bracketmadness.ai gave me a safe environment to test. Low stakes (it’s just basketball). Clear API (good docs). Fast feedback (immediate confirmation).
Perfect sandbox for learning how agents should interact.

