Home Assistant integration that tracks your CS2 team's upcoming matches and displays them on the dashboard. Configure via Settings โ Integrations โ CS2 Tracker โ Add CS2 Team.
Inspired by ha-teamtracker (ESPN). This integration uses the CS2 Upcoming Matches API by default, but you can also configure your own custom API endpoint.
- ๐ฏ Default API included: Uses
https://cs2-upcoming-matches.vercel.app/api/{TEAM} - ๐ Timezone support: Configure your timezone for proper match time display
- ๐ง Custom API support: Use your own API endpoint if needed
- ๐ JSON path configuration: Specify where each field lives in the JSON response
- ๐ Full internationalization: English and Portuguese support
- ๐ฑ Dashboard card: Works with the companion cs2-match-card
- Home Assistant 2024.1 or newer
- Internet connection for API access
- HACS โ Integrations โ โฎ โ Custom repositories
- Add:
https://github.com/lucascorrea/cs2-tracker - Install "CS2 Tracker"
- Restart Home Assistant
- Copy the
custom_components/cs2_trackerfolder into<config>/custom_components/ - Restart Home Assistant
- Settings โ Devices & services โ Integrations โ Add integration
- Search for CS2 Tracker and select it
Fill in the following fields:
- Friendly Name: Display name (e.g.
FURIA CS2) - Team ID (for API URL): Team identifier - must match exactly as it appears in the Liquipedia URL (e.g.
FURIAfromhttps://liquipedia.net/counterstrike/FURIA,Team_Spiritfromhttps://liquipedia.net/counterstrike/Team_Spirit) - API Endpoint: Choose between:
- Default: Uses
https://cs2-upcoming-matches.vercel.app/api/{TEAM}?timezone={TIMEZONE} - Custom: Provide your own API URL
- Default: Uses
- Timezone: Select your timezone from the dropdown list
- Update Interval: How often to check for updates (default: 5 minutes)
If you're using the default API, the JSON paths are pre-configured. For custom APIs, adjust these paths to match your JSON response:
- Team Logo Path:
matches.0.logo - Opponent Logo Path:
matches.0.opponentLogo - Team Name Path:
matches.0.team - Opponent Name Path:
matches.0.opponent - Team Score Path:
matches.0.teamScore - Opponent Score Path:
matches.0.opponentScore - Date Path:
matches.0.date_iso - Venue Path:
matches.0.tournament
The created sensor (e.g. sensor.furia_cs2) will have one of these states:
PRE: Pre-match (upcoming game)IN: Live match (currently playing)POST: Finished matchNOT_FOUND: No upcoming match or API error
Each sensor provides these attributes:
team_logo: URL to team logo imageopponent_logo: URL to opponent logo imageteam_name: Team display nameopponent_name: Opponent display nameteam_score: Team score (if available)opponent_score: Opponent score (if available)date: Match date and timevenue: Tournament/venue informationlast_update: Last API update timestampapi_url: API endpoint being used
The default CS2 Upcoming Matches API returns data in this format:
{
"success": true,
"team": "FURIA",
"logo": "https://cs2-upcoming-matches.vercel.app/api/proxy-image?url=...",
"timezone": "1",
"matches": [
{
"logo": "https://...",
"team": "FURIA",
"opponentLogo": "https://...",
"opponent": "3DMAX",
"teamScore": null,
"opponentScore": null,
"date": null,
"date_iso": "2026-03-07T18:00:00.000Z",
"timestamp": 1772906400,
"tournament": "ESL Pro League Season 23 - Round 2 - March 7",
"status": "upcoming"
}
]
}The default API supports teams from Liquipedia Counter-Strike. To find the correct Team ID:
- Go to Liquipedia: Visit
https://liquipedia.net/counterstrike/ - Search for your team: Use the search box or browse teams
- Copy the exact URL name: The Team ID is the exact name that appears in the URL
| Team Name | Liquipedia URL | Team ID |
|---|---|---|
| FURIA | https://liquipedia.net/counterstrike/FURIA |
FURIA |
| Team Spirit | https://liquipedia.net/counterstrike/Team_Spirit |
Team_Spirit |
| Natus Vincere | https://liquipedia.net/counterstrike/Natus_Vincere |
Natus_Vincere |
| G2 Esports | https://liquipedia.net/counterstrike/G2_Esports |
G2_Esports |
| FaZe Clan | https://liquipedia.net/counterstrike/FaZe_Clan |
FaZe_Clan |
Important: The Team ID must match exactly as it appears in the Liquipedia URL, including underscores and capitalization.
If you're using a custom API endpoint, the Team ID should match whatever identifier your API expects.
Use the companion cs2-match-card to display your team's matches on the Home Assistant dashboard with a beautiful, localized interface.
The integration supports timezone selection through a dropdown with common timezones:
- UTC-12 to UTC+14
- Major city timezones (New York, London, Tokyo, etc.)
- Automatically formats match times in your selected timezone
The integration supports multiple languages:
- English (default)
- Portuguese (Portuguรชs)
The interface will automatically use your Home Assistant language setting.
- Double-check Team ID: Visit
https://liquipedia.net/counterstrike/YOUR_TEAM_NAMEand verify the URL matches exactly - Check team page: Ensure the team has upcoming matches listed on their Liquipedia page
- Verify spelling: Team IDs are case-sensitive and must include underscores (e.g.
Team_Spirit, notTeam Spirit) - Internet connection: Ensure your Home Assistant can reach the API endpoint
- Check the API URL is accessible
- Verify JSON paths match your API response format
- Review Home Assistant logs for detailed error messages
- Check the update interval setting
- Verify the API is responding correctly
- Restart Home Assistant if needed
If you want to create your own API, ensure it returns JSON with the match data. The integration uses JSON path notation to extract fields:
- Use dot notation:
team.name - Array indices:
matches.0.logo - Nested objects:
data.team.logos.0.href
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details.
- Inspired by ha-teamtracker
- Data sourced from Liquipedia
- Built for the Counter-Strike 2 community
