
Markets
- 668 installs
- 201 repo stars
- Updated August 5, 2026
- machina-sports/sports-skills
markets is an agent skill that unifies ESPN live sports schedules with Kalshi and Polymarket prediction market data for developers who need cross-platform odds dashboards and bet evaluation in CLI or agent tools.
About
markets is a sports prediction-market orchestration skill from machina-sports/sports-skills that connects ESPN live game schedules with Kalshi and Polymarket inside agent and CLI workflows. Developers invoke it to build unified dashboards, compare odds across platforms, search teams or players on prediction markets, spot arbitrage between ESPN lines and market prices, and evaluate a specific game’s market value. The skill deliberately layers ESPN schedule context on top of market APIs rather than replacing dedicated polymarket or kalshi skills for raw market data or the betting skill for pure odds math like de-vigging or Kelly sizing. Reach for markets when an agent needs schedule-aware prediction market intelligence in one orchestrated pass.
- Unified orchestration across ESPN schedules (NBA, NFL, MLB, NHL, WNBA, CFB, CBB) and two prediction platforms
- 6 ready-to-use commands including get_todays_markets, compare_odds, search_entity and normalize_price
- Built-in price normalization and arbitrage detection between traditional and prediction markets
- Consults local api-reference.md before generating queries for accuracy
- Returns combined dashboards, odds comparisons, and entity-resolved market data
Markets by the numbers
- 668 all-time installs (skills.sh)
- +14 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #1,466 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/machina-sports/sports-skills --skill marketsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 668 |
|---|---|
| repo stars | ★ 201 |
| Last updated | August 5, 2026 |
| Repository | machina-sports/sports-skills ↗ |
How do you unify ESPN schedules with prediction market odds?
Connect live ESPN sports schedules with Kalshi and Polymarket prediction market data inside their agents and CLI tools.
Who is it for?
Developers building sports analytics agents or CLI tools that must join ESPN schedules with Kalshi and Polymarket data in one workflow.
Skip if: Developers who only need raw Kalshi or Polymarket API data without ESPN context, or pure odds-math conversions without market orchestration.
When should I use this skill?
User asks to compare prediction market odds with ESPN schedules, search a team on Kalshi or Polymarket, or evaluate arbitrage for a game.
What you get
Cross-platform odds comparison, entity search results, arbitrage flags, and game-level market evaluation reports tied to ESPN schedules.
- odds comparison report
- arbitrage flags
- entity search results
Files
Markets Orchestration
Bridges ESPN live schedules (NBA, NFL, MLB, NHL, WNBA, CFB, CBB) with Kalshi and Polymarket prediction markets. Before writing queries, consult references/api-reference.md for supported sport codes, command parameters, and price normalization formats.
Quick Start
sports-skills markets get_todays_markets --sport=nba
sports-skills markets search_entity --query="Lakers" --sport=nba
sports-skills markets compare_odds --sport=nba --event_id=401234567
sports-skills markets get_sport_markets --sport=nfl
sports-skills markets get_sport_schedule --sport=nba
sports-skills markets normalize_price --price=0.65 --source=polymarket
sports-skills markets evaluate_market --sport=nba --event_id=401234567
sports-skills markets match_markets --sport=mlb --date=2026-06-06
sports-skills markets get_market_price --venue=kalshi --ticker=KXMENWORLDCUP-26-FR
sports-skills markets get_price_history --venue=kalshi --ticker=KXMENWORLDCUP-26-FR --interval=1dPython SDK:
from sports_skills import markets
markets.get_todays_markets(sport="nba")
markets.search_entity(query="Lakers", sport="nba")
markets.compare_odds(sport="nba", event_id="401234567")
markets.get_sport_markets(sport="nfl")
markets.get_sport_schedule(sport="nba", date="2025-02-26")
markets.normalize_price(price=0.65, source="polymarket")
markets.evaluate_market(sport="nba", event_id="401234567")
markets.match_markets(sport="mlb", date="2026-06-06")
markets.get_market_price(venue="kalshi", ticker="KXMENWORLDCUP-26-FR", at_time="2026-05-01T12:00:00+00:00")
markets.get_price_history(venue="polymarket", token_id="<token_id>", interval="1h")CRITICAL: Before Any Query
CRITICAL: Before calling any orchestration command, verify:
- A
sportcode is provided for sport-aware commands (get_todays_markets,compare_odds,get_sport_markets,evaluate_market). - Price sources are identified correctly before normalization:
espn= American odds,polymarket= 0-1 probability,kalshi= 0-100 integer.
Important Notes
- Sport context is passed through.
--sport=nbamaps automatically to the correct Polymarket sport code and Kalshi series ticker. - Both platforms use sport-aware search. Polymarket uses
sport→ series_id; Kalshi usesKXNBA,KXNFL, etc. - Prices are normalized. Everything is converted to implied probability for comparison.
Workflows
Today's NBA Dashboard
sports-skills markets get_todays_markets --sport=nbaReturns each game with ESPN info, DraftKings odds, matching Kalshi markets, and matching Polymarket markets.
Find Arb on a Specific Game
1. Get the ESPN event ID: get_sport_schedule --sport=nba 2. Compare odds: compare_odds --sport=nba --event_id=<id> 3. If arbitrage detected, response includes allocation percentages and guaranteed ROI.
Full Bet Evaluation
1. evaluate_market --sport=nba --event_id=<id> 2. Fetches ESPN odds and matching prediction market price 3. Pipes through betting.evaluate_bet: devig → edge → Kelly 4. Returns fair probability, edge, EV, Kelly fraction, and recommendation
Same Game on Both Venues
1. match_markets --sport=mlb --date=2026-06-06 2. Each match pairs the Kalshi event (with market tickers) and the Polymarket event (with moneyline token IDs) for the same game — joined deterministically on date + team codes, fuzzy title match as fallback. 3. Feed kalshi.market_tickers[i] and polymarket.markets[i].token_ids[j] straight into get_market_price to compare prices.
Price Movement Over Time
1. get_market_price --venue=kalshi --ticker=<ticker> --at_time=2026-05-01 for a single point-in-time price (both yes/no sides, 0-1). 2. get_price_history --venue=kalshi --ticker=<ticker> --interval=1d for the full series — same {timestamp, price} shape on either venue.
Examples
Example 1: Today's games with prediction market odds User says: "What NBA games are on today and what are the prediction market odds?" Actions: 1. Call get_todays_markets(sport="nba") Result: Unified dashboard with each game's ESPN info and Kalshi/Polymarket prices
Example 2: Cross-platform team search User says: "Find me Lakers markets on Kalshi and Polymarket" Actions: 1. Call search_entity(query="Lakers", sport="nba") Result: All Lakers markets across both exchanges with prices and volume
Example 3: Odds comparison for a specific game User says: "Compare the odds for this Celtics game across ESPN and Polymarket" Actions: 1. Get event_id from get_sport_schedule(sport="nba") 2. Call compare_odds(sport="nba", event_id="<id>") Result: Normalized side-by-side comparison with automatic arbitrage check
Example 4: Full market evaluation User says: "Is there edge on the Chiefs game?" Actions: 1. Get event_id from get_sport_schedule(sport="nfl") 2. Call evaluate_market(sport="nfl", event_id="<id>") Result: Fair probability, edge percentage, EV, Kelly fraction, and bet recommendation
Example 5: Browse all markets for a sport User says: "Show me all NFL prediction markets" Actions: 1. Call get_sport_markets(sport="nfl") Result: All open NFL markets across Kalshi and Polymarket
Example 6: Price conversion User says: "Convert a Polymarket price of 65 cents to American odds" Actions: 1. Call normalize_price(price=0.65, source="polymarket") Result: Common structure with implied probability (0.65), American odds (-185.7), and decimal (1.54)
Example 7: Pair a game across venues User says: "Find the Mets game on both Kalshi and Polymarket" Actions: 1. Call match_markets(sport="mlb", date="<game date>") Result: The game paired across venues — Kalshi market tickers and Polymarket moneyline token IDs side by side
Example 8: Historical price User says: "What was France's World Cup price a month ago?" Actions: 1. Call get_market_price(venue="kalshi", ticker="KXMENWORLDCUP-26-FR", at_time="2026-05-03T12:00:00+00:00") Result: Yes/no prices (0-1) as of that moment; use get_price_history for the full curve
Commands that DO NOT exist — never call these
- ~~
get_odds~~ — does not exist. Usecompare_oddsto see odds across sources. - ~~
search_markets~~ — does not exist on the markets module. Usesearch_entityinstead. - ~~
get_schedule~~ — does not exist. Useget_sport_scheduleinstead.
If a command is not listed in references/api-reference.md, it does not exist.
Troubleshooting
Error: No markets returned for a sport Cause: Sport code may be missing or incorrect Solution: Check references/api-reference.md for valid sport codes. Use the exact code (e.g., nba, epl, laliga)
Error: compare_odds returns no data for an event Cause: The event_id is incorrect or the game has not been indexed yet Solution: Call get_sport_schedule(sport=...) to retrieve the correct event_id first
Error: One source shows warnings in the response Cause: Kalshi or Polymarket is temporarily unavailable Solution: The module returns partial results — use what is available. Retry the unavailable source separately using the kalshi or polymarket skill directly
Error: normalize_price returns unexpected American odds value Cause: Wrong source parameter — Kalshi uses 0-100 integers, Polymarket uses 0-1 decimals Solution: Verify the source. Kalshi price of 65 requires source="kalshi", Polymarket price of 0.65 requires source="polymarket"
Markets Orchestration — API Reference
Commands
| Command | Required | Optional | Description |
|---|---|---|---|
get_todays_markets | sport, date | Fetch ESPN schedule → search both exchanges with sport context → unified dashboard | |
search_entity | query | sport | Search Kalshi + Polymarket for a team/player/event name (passes sport to both platforms) |
compare_odds | sport, event_id | ESPN odds + prediction market prices → normalized side-by-side + arb check | |
get_sport_markets | sport | status, limit | Sport-filtered market listing on both platforms (uses sport code, not text query) |
get_sport_schedule | sport, date | Unified ESPN schedule across one or all sports | |
normalize_price | price, source | Convert any source format to common {implied_prob, american, decimal} | |
evaluate_market | sport, event_id | token_id, kalshi_ticker, outcome | ESPN odds + market price → devig → edge → Kelly |
match_markets | sport | date | Pair the same game across Kalshi and Polymarket (date + team-code join, fuzzy title fallback) |
get_market_price | venue, ticker (kalshi) or token_id (polymarket) | at_time | Live or point-in-time price — both sides as 0-1 probabilities, one shape for both venues |
get_price_history | venue, ticker (kalshi) or token_id (polymarket) | interval, start_time, end_time | {timestamp, price} series (0-1 yes probability) at 1m/1h/1d resolution |
match_markets notes
sportmust exist on both venues: mlb, nfl, nba, nhl, wnba, cfb, cbb, epl, ucl, laliga, bundesliga, seriea, ligue1, mls, worldcup.- Each match returns
kalshi.market_tickersandpolymarket.markets[](moneyline markets withtoken_idsandoutcomes). US-league games have one moneyline market with team-named outcomes; soccer games have several binary ones (home/away/draw). match_methodiscode(deterministic identifier join) ortitle(fuzzy fallback — used when the venues' team codes differ, e.g. World Cup ISO vs FIFA country codes).unmatchedlists games seen on only one venue (listing windows differ).
get_market_price / get_price_history notes
at_time,start_time,end_timeaccept Unix timestamps or ISO 8601 datetimes.- Historical Kalshi prices come from candlesticks (hourly within 7 days of
at_time, daily within 31); Polymarket from CLOB price history. - All prices are 0-1 probabilities for the YES side regardless of venue — no unit conversion needed downstream.
Supported Sports
US Sports (with ESPN schedules)
| Sport | Key | Kalshi Series | Polymarket Code |
|---|---|---|---|
| NFL | nfl | KXNFL | nfl |
| NBA | nba | KXNBA | nba |
| MLB | mlb | KXMLB | mlb |
| NHL | nhl | KXNHL | nhl |
| WNBA | wnba | KXWNBA | wnba |
| College Football | cfb | KXCFB | cfb |
| College Basketball | cbb | KXCBB | cbb |
Football (prediction markets only — no ESPN schedule)
| League | Key | Kalshi Series | Polymarket Code |
|---|---|---|---|
| English Premier League | epl | KXEPLGAME | epl |
| Champions League | ucl | KXUCL | ucl |
| La Liga | laliga | KXLALIGA | lal |
| Bundesliga | bundesliga | KXBUNDESLIGA | bun |
| Serie A | seriea | KXSERIEA | sea |
| Ligue 1 | ligue1 | KXLIGUE1 | fl1 |
| MLS | mls | KXMLSGAME | mls |
| FIFA World Cup 2026 | worldcup | KXWCGAME | fifwc |
Price Normalization
Different sources use different formats. normalize_price converts any format to a common structure.
| Source | Format | Example | Meaning |
|---|---|---|---|
| ESPN | American odds | -150 | Favorite, implied 60% |
| Polymarket | Probability (0-1) | 0.65 | 65% implied probability |
| Kalshi | Integer (0-100) | 65 | 65% implied probability |
Normalized output shape:
{
"implied_probability": 0.65,
"american": -185.7,
"decimal": 1.5385,
"source": "polymarket"
}Partial Results Behavior
If one source is unavailable, the module returns what it has with warnings:
{
"status": true,
"data": {
"games": [],
"warnings": ["Kalshi search failed: connection timeout"]
}
}Related skills
How it compares
Pick markets when ESPN schedule context must sit alongside Kalshi and Polymarket odds in one agent pass; use platform-specific skills for raw API access only.
FAQ
What platforms does markets connect?
markets connects ESPN live sports schedules with Kalshi and Polymarket prediction market data. Developers use it for unified dashboards, odds comparison, entity search, and bet evaluation rather than calling each API in isolation.
When should developers use polymarket or kalshi skills instead?
Developers should use dedicated polymarket or kalshi skills when they need raw prediction market data without ESPN schedule context. markets adds schedule-aware orchestration and cross-platform comparison on top of those sources.