Build a custom OpenClaw skill that aggregates World Cup 2026 odds from sportsbooks and prediction markets into one unified view. One SKILL.md file, a free API key, and your agent becomes your tournament odds analyst.

Why Your Agent Needs a World Cup Odds Tracker

The 2026 FIFA World Cup is the first 48-team tournament, hosted across the US, Canada, and Mexico. That means 104 matches over 39 days — more games, more markets, and more pricing inefficiencies than any previous World Cup.

Sportsbooks will post outright winner futures, group stage lines, and individual match odds months in advance. Polymarket will run parallel prediction markets on the same outcomes. The sheer volume of markets makes manual comparison impossible, and the cross-platform price gaps create real opportunities for agents that can aggregate both sources.

This guide builds world-cup-2026-odds — a time-boxed Layer 3 (Trading) skill that handles tournament-specific odds aggregation for the Agent Betting Stack. The skill fetches futures and match odds from The Odds API, pulls prediction market prices from the Polymarket Gamma API, and normalizes everything into a comparable format. After the tournament ends, the skill goes dormant — but the pattern is reusable for any future event.

What You’re Building

The world-cup-2026-odds skill teaches your OpenClaw agent five operations:

  1. Outright winner futures — Which teams are favored to win the tournament, across all books
  2. Group stage odds — Match odds for group stage games
  3. Knockout match odds — Moneylines, spreads, and totals for individual knockout matches
  4. Polymarket comparison — Cross-reference sportsbook futures with prediction market prices
  5. Tournament dashboard — Compact summary of top contenders with both sportsbook and Polymarket implied probabilities

The skill uses curl and jq — no Python runtime, no npm packages, no Docker. It runs anywhere OpenClaw runs.

Prerequisites

  • OpenClaw installed and running — Any channel (WhatsApp, Telegram, Discord, WebChat)
  • The Odds API key — Free at the-odds-api.com (500 requests/month)
  • curl and jq — Pre-installed on macOS and most Linux distributions
  • No Polymarket API key needed — The Gamma API is free and unauthenticated

The Math Behind Cross-Platform Comparison

Sportsbooks quote American odds (+150, -200). Polymarket quotes contract prices ($0.00–$1.00). To compare them, you need to normalize to implied probability.

American odds to implied probability:

For positive odds (underdog): probability = 100 / (odds + 100) For negative odds (favorite): probability = abs(odds) / (abs(odds) + 100)

Example: Brazil at +450 on DraftKings → 100 / (450 + 100) = 0.1818 = 18.2%

Polymarket contract price to implied probability:

Polymarket prices are already probabilities — a $0.18 contract implies 18% probability. No conversion needed, but sportsbook odds include vig (overround), so the implied probabilities from sportsbooks sum to more than 100%. To get a true comparison, you need to strip the vig first by dividing each implied probability by the total overround.

Vig-adjusted probability: true_prob = raw_implied_prob / sum_of_all_implied_probs

This is why the skill includes both raw and vig-adjusted comparisons — Polymarket prices are closer to true probabilities because the market maker spread is typically thinner than sportsbook vig.

The Complete SKILL.md

Create the skill directory:

mkdir -p ~/.openclaw/skills/world-cup-2026-odds

Create ~/.openclaw/skills/world-cup-2026-odds/SKILL.md with this content:

---
name: world-cup-2026-odds
description: "Aggregate FIFA World Cup 2026 odds across sportsbooks and prediction markets. Track outright winner futures, group stage odds, and match lines. Compare Polymarket prices vs traditional book futures. Use when asked about World Cup odds, World Cup winner, or 2026 tournament betting."
metadata:
  openclaw:
    emoji: "🏆"
    requires:
      bins: ["curl", "jq"]
    credentials:
      - id: "odds-api-key"
        name: "The Odds API Key"
        description: "Free API key from https://the-odds-api.com/"
        env: "ODDS_API_KEY"
---

# World Cup 2026 Odds Tracker

Aggregate FIFA World Cup 2026 betting odds from sportsbooks and prediction markets into one unified view.

# When to Use

Use this skill when the user asks about:
- World Cup 2026 odds, futures, or predictions
- Who will win the World Cup
- World Cup group stage or knockout match odds
- Comparing sportsbook vs prediction market prices for World Cup outcomes
- Tournament favorites, dark horses, or underdogs
- World Cup betting value or price discrepancies

# Operations

### 1. Outright Winner Futures

Fetch which teams are favored to win the 2026 World Cup across all sportsbooks:

```bash
curl -s "https://api.the-odds-api.com/v4/sports/soccer_fifa_world_cup_winner/odds?apiKey=$ODDS_API_KEY&regions=us&markets=outrights&oddsFormat=american" \
  | jq '[.[] | {
    market: .away_team // "Outright Winner",
    books: [.bookmakers[] | {
      name: .title,
      selections: [.markets[0].outcomes[] | {team: .name, odds: .price}] | sort_by(.odds) | reverse
    }]
  }] | .[0].books[0].selections[:15] | map({team, odds, implied_prob: (if .odds > 0 then (100 / (.odds + 100) * 100 | round / 100) else (-.odds / (-.odds + 100) * 100 | round / 100) end)})'
```

If the outrights market is not yet available, try the standard futures endpoint:

```bash
curl -s "https://api.the-odds-api.com/v4/sports/soccer_fifa_world_cup/odds?apiKey=$ODDS_API_KEY&regions=us&markets=outrights&oddsFormat=american" \
  | jq '[.[0].bookmakers[] | {
    book: .title,
    top_5: [.markets[0].outcomes | sort_by(.price) | reverse | .[:5][] | {team: .name, odds: .price}]
  }]'
```

### 2. Group Stage Match Odds

Fetch moneylines and totals for upcoming World Cup group stage matches:

```bash
curl -s "https://api.the-odds-api.com/v4/sports/soccer_fifa_world_cup/odds?apiKey=$ODDS_API_KEY&regions=us&markets=h2h,totals,draw_no_bet&oddsFormat=american" \
  | jq '[.[] | {
    match: "\(.away_team) vs \(.home_team)",
    kickoff: .commence_time,
    books: [.bookmakers[:5][] | {
      name: .title,
      h2h: (.markets[] | select(.key=="h2h") | .outcomes | map({(.name): .price}) | add) // null,
      total: (.markets[] | select(.key=="totals") | .outcomes | map({(.name): "\(.point) (\(.price))"}) | add) // null
    }]
  }]'
```

### 3. Knockout Match Odds

Same as group stage but filtered for matches with only two outcomes relevant (draw less likely to be the focus):

```bash
curl -s "https://api.the-odds-api.com/v4/sports/soccer_fifa_world_cup/odds?apiKey=$ODDS_API_KEY&regions=us&markets=h2h,spreads,totals&oddsFormat=american" \
  | jq '[.[] | {
    match: "\(.away_team) vs \(.home_team)",
    kickoff: .commence_time,
    books: [.bookmakers[:5][] | {
      name: .title,
      h2h: (.markets[] | select(.key=="h2h") | .outcomes | map({(.name): .price}) | add) // null,
      spread: (.markets[] | select(.key=="spreads") | .outcomes | map({(.name): "\(.point) (\(.price))"}) | add) // null,
      total: (.markets[] | select(.key=="totals") | .outcomes | map({(.name): "\(.point) (\(.price))"}) | add) // null
    }]
  }]'
```

### 4. Polymarket World Cup Comparison

Fetch World Cup prediction market prices from Polymarket and display alongside sportsbook implied probabilities:

```bash
curl -s "https://gamma-api.polymarket.com/events?tag=world-cup&closed=false&limit=10" \
  | jq '[.[] | {
    question: .title,
    outcomes: [.markets[]? | {
      question: .question,
      outcomes: [.outcomes[]? | {name: .value, price: .price}]
    }]
  }]'
```

For a broader search if the tag filter returns empty:

```bash
curl -s "https://gamma-api.polymarket.com/events?tag=soccer&closed=false&limit=20" \
  | jq '[.[] | select(.title | test("World Cup|FIFA|2026"; "i")) | {
    question: .title,
    end_date: .endDate,
    markets: [.markets[]? | {
      question: .question,
      outcomes: [.outcomes[]? | {name: .value, price: .price}]
    }]
  }]'
```

### 5. Tournament Dashboard — Unified View

Combine sportsbook futures with Polymarket prices. Run this as a two-step pipeline:

Step 1 — Get top 10 sportsbook favorites:

```bash
curl -s "https://api.the-odds-api.com/v4/sports/soccer_fifa_world_cup_winner/odds?apiKey=$ODDS_API_KEY&regions=us&markets=outrights&oddsFormat=american" \
  | jq '[.[0].bookmakers[0].markets[0].outcomes | sort_by(.price) | reverse | .[:10][] | {
    team: .name,
    best_american_odds: .price,
    sportsbook_implied: (if .price > 0 then (100 / (.price + 100) * 100 | round) / 100 else ((-.price) / ((-.price) + 100) * 100 | round) / 100 end)
  }]'
```

Step 2 — Get Polymarket winner market and display side-by-side:

```bash
curl -s "https://gamma-api.polymarket.com/events?tag=world-cup&closed=false&limit=5" \
  | jq '[.[] | select(.title | test("winner|champion"; "i")) | .markets[]? | .outcomes[]? | {
    team: .value,
    polymarket_price: .price
  }] | sort_by(-.polymarket_price) | .[:10]'
```

Present both results in a single table with columns: Team, Sportsbook Odds, Sportsbook Implied %, Polymarket Price, and Delta (difference between the two implied probabilities).

# Output Rules

1. Always show the team name and implied probability when presenting futures
2. For match odds, show American odds format and kickoff time
3. When comparing sportsbook vs Polymarket, compute the delta between implied probabilities
4. Highlight any team where the delta exceeds 3 percentage points — these are potential value spots
5. If the World Cup sport key returns empty results, inform the user that markets may not be posted yet
6. Always report remaining API quota after a request
7. Note that sportsbook implied probabilities include vig — Polymarket prices are generally closer to true probability

# Error Handling

- If ODDS_API_KEY is not set, tell the user to get a free key at https://the-odds-api.com/
- If the API returns an empty array for soccer_fifa_world_cup_winner, try soccer_fifa_world_cup instead — market availability depends on how far out from the tournament
- If Polymarket returns no World Cup markets, note that prediction markets may not have listed World Cup events yet
- If rate limited (429), report remaining quota and suggest waiting
- After the tournament ends (August 2026), both APIs will stop returning World Cup data — inform the user the skill is dormant until the next major tournament

Set Your API Key

export ODDS_API_KEY=your_key_here

Add to your shell profile (~/.zshrc, ~/.bashrc) so it persists across sessions:

echo 'export ODDS_API_KEY=your_key_here' >> ~/.zshrc

OpenClaw reads environment variables from the host process, so the key is available to the skill automatically. The Polymarket Gamma API requires no key.

Test It

Restart OpenClaw (or wait for hot-reload if your version supports it), then try these prompts:

PromptExpected Behavior
“Who will win the 2026 World Cup?”Fetches outright winner futures from sportsbooks, shows top 10 with implied probabilities
“World Cup odds for Brazil”Finds Brazil’s odds across books, compares with Polymarket price
“Compare sportsbook vs Polymarket World Cup futures”Side-by-side table with implied probability delta for each team
“World Cup group stage odds”Fetches match odds for upcoming group stage games
“Show me the World Cup tournament dashboard”Unified view combining sportsbook and Polymarket data

Your agent reads the SKILL.md, identifies the relevant operation, and runs the curl + jq pipelines. For the dashboard operation, it combines both data sources into a single formatted table.

How It Works Under the Hood

OpenClaw skills are not plugins that execute code directly. The SKILL.md is a set of instructions that the LLM (Claude, GPT, etc.) reads and follows at runtime.

When you ask “who will win the World Cup,” this is what happens:

User message → OpenClaw Gateway
  → LLM reads system prompt + active skills
  → LLM matches "World Cup" to world-cup-2026-odds skill
  → LLM selects the "Outright Winner Futures" operation
  → LLM generates curl command with sport key soccer_fifa_world_cup_winner
  → OpenClaw executes command via shell tool
  → JSON response piped through jq
  → LLM optionally runs Polymarket query for comparison
  → LLM formats combined output for user

The time-boxed nature of this skill is intentional. Event-specific skills should activate when markets open (typically 3-6 months before the tournament) and go dormant after the event concludes. The error handling section covers what happens when the agent tries to use the skill outside the active window.

Extending the Skill

Add Cron-Based Tournament Alerts

OpenClaw supports cron jobs. During the tournament, set up daily odds monitoring to catch line movements on your target teams:

{
  "cron": "0 9 * * *",
  "prompt": "Run the World Cup tournament dashboard. If any team's implied probability has moved more than 3 points from yesterday, alert me on Telegram with the team, old price, new price, and direction."
}

For match-day alerts, increase the frequency to every 2 hours:

{
  "cron": "0 */2 * * *",
  "prompt": "Check World Cup match odds for today's games. If any moneyline has moved more than 20 cents since the last check, alert me."
}

Chain with Other Skills

The world-cup-2026-odds skill outputs structured data that downstream skills can consume:

  • odds-converter — Normalize American odds, decimal odds, and Polymarket prices into a single format for unified analysis
  • arb-finder — Compare sportsbook futures against Polymarket prices to find cross-market arbitrage on tournament outcomes
  • ev-calculator — Plug your true probability estimate against the best available odds to find +EV World Cup bets
  • vig-calculator — Compute the vig on World Cup futures markets to find which books offer the most efficient pricing

Adapt for Future Tournaments

This skill pattern is reusable. After the 2026 World Cup, duplicate the SKILL.md and update three things:

  1. The sport key (e.g., soccer_uefa_euro for Euro 2028)
  2. The Polymarket tag filter
  3. The date references in the description and error handling

Event-specific skills are a powerful pattern for any time-bounded market — election cycles, championship playoffs, or seasonal tournaments.

Full Skill Series

This guide is part of the AgentBets OpenClaw Skills series. We’re building a complete library of betting-specific OpenClaw skills that map to the four layers of the Agent Betting Stack:

  • Layer 1 — Identity: Agent reputation tracking via Moltbook
  • Layer 2 — Wallet: Bankroll management, balance checking across platforms
  • Layer 3 — Trading: Odds scanning, Polymarket monitoring, Kalshi tracking, arbitrage detection, World Cup odds (this guide)
  • Layer 4 — Intelligence: EV calculation, Kelly sizing, CLV tracking, news sentiment

Each skill is a standalone SKILL.md you can install independently or compose into a full autonomous betting pipeline.

What’s Next