Overview
The mapping module provides data normalization for leagues, markets, and betting nomenclature across different data sources. It ensures consistency and enables accurate bet grading by mapping human-readable market names to API stat types.Module Structure
League Normalization
TheLeagueNormalizer handles league name variations from different data sources.
Problem
Different APIs and bookmakers use different league names:- “LaLiga” vs “La Liga”
- “Liga Portugal” vs “Primeira Liga”
- “Admiral Bundesliga” vs “Bundesliga”
- “Division Profesional” vs “Liga De Futbol Prof”
Solution
SharedServices/mapping/league_normalizer.py
Normalization Map
The normalization map was auto-generated by analyzing 295,058 alerts:SharedServices/mapping/league_normalizer.py
Market Mapping
TheUnifiedMarketMapper maps market names to API stat types for both player and team bets.
Key Features
- Unified Interface: Single class for both player and team markets
- Case-Insensitive Lookup: Handles name variations
- Threshold Normalization: Removes “0.5+”, “1.5+” suffixes
- Result Calculation: Determines won/lost/refund/half-win/half-loss
Player Market Mapping
SharedServices/mapping/market_mapper.py
Team Market Mapping
SharedServices/mapping/market_mapper.py
Supported Player Markets
Goal Markets
Goal Markets
- Player Goals (Anytime Goalscorer)
- Player Score 2+ Goals
- Player Score 3+ Goals
- To Score First
- Player Goal From Outside Box
- Player Goal From Header
Shot Markets
Shot Markets
- Player Shots Total
- Player Shots On Target
- Player Headed Shots
- Player Headed Shots On Target
- Player SOT Outside Box
Card Markets
Card Markets
- Player Yellow Card (To Be Booked)
- Player Red Card
- Player First Card (To Be Booked First)
Other Markets
Other Markets
- Player Assists
- Player Score or Assist
- Player Fouls Committed
- Player Fouls Won
- Player Tackles
- Player Passes
- Goalkeeper Saves
Supported Team Markets
Goal Markets
Goal Markets
- Team Total Goals
- Team Total Home
- Team Total Away
- Match Goals
- Asian Handicap
Corner Markets
Corner Markets
- Total Corners
- Team Corners (Home/Away)
- Corner Handicap
- Corners Spread
Card Markets
Card Markets
- Total Cards
- Team Cards (Home/Away)
- Card Handicap
- Bookings Spread
Shot Markets
Shot Markets
- Total Shots
- Total Shots On Target
- Team Shots (Home/Away)
Other Markets
Other Markets
- Total Tackles
- Total Offsides
- Total Fouls
Market Name Normalization
The mapper automatically normalizes market names:Result Calculation
The mapper calculates bet results based on actual values and thresholds:Standard Over/Under
Asian Handicap
Quarter Handicaps
Asian handicaps with quarter lines (0.25, 0.75, 1.25, 1.75) split into two bets:Canonical Markets
Thecanonical_markets module defines the single source of truth for player market names.
Canonical Player Markets
SharedServices/mapping/canonical_markets.py
Market Name Variations
The normalization map handles all variations:Market Support Checking
Untrackable Markets
Some markets cannot be tracked via API:Location Mapping
Team markets use location to determine which team’s stats to use:Best Practices
Always Normalize League Names
Always Normalize League Names
Use
LeagueNormalizer.normalize() before storing or comparing leagues.Check Market Support
Check Market Support
Use
is_supported_market() before processing alerts.Use Canonical Names
Use Canonical Names
Store canonical market names in database for consistency.
Handle Quarter Handicaps
Handle Quarter Handicaps
Remember quarter lines return half_win/half_loss, not just won/lost.
Next Steps
Bet Grading
See how market mappings are used in grading
API Clients
Learn about FotMob stat extraction