Sofascore APIsofascore.com ↗
Access Sofascore H2H statistics, daily sports events, lineups, odds, and player stats across football, tennis, basketball, and more via a structured REST API.
What is the Sofascore API?
This API exposes 13 endpoints covering Sofascore data: daily scheduled events across nine sports, head-to-head statistics and ranked streak metrics, match lineups, in-match incident timelines, betting odds, and per-player match histories. The get_h2h_streaks_ranked endpoint is the centrepiece — it aggregates H2H data for every matchup on a given date and returns only those meeting configurable win-rate, draw-rate, or unbeaten-rate thresholds.
curl -X GET 'https://api.parse.bot/scraper/ca85c1b5-deac-4378-826d-742eddac6785/get_h2h_streaks_ranked?date=2026-10-09&sports=football&max_events=3&min_meetings=3&max_percentage=100&min_percentage=50' \ -H 'X-API-Key: $PARSE_API_KEY'
Fetches all daily events across specified sports, extracts H2H statistics for each matchup, computes streak metrics (home win %, away win %, draw %, home unbeaten %, away unbeaten %, manager duel %), and returns only those streaks occurring between min_percentage and max_percentage of the time, ranked in descending order by percentage. Processing many events is slow; use max_events to cap.
| Param | Type | Description |
|---|---|---|
| date | string | Date in YYYY-MM-DD format. Omitting uses today's date. |
| sports | string | Comma-separated sports: football,basketball,tennis,ice-hockey,baseball,handball,rugby,american-football,volleyball,cricket,esports. Omitting queries all sports. |
| max_events | integer | Maximum events to process (0 = all). |
| min_meetings | integer | Minimum number of historical meetings required for a matchup to be included. |
| max_percentage | number | Maximum streak percentage threshold. |
| min_percentage | number | Minimum streak percentage threshold. |
{
"type": "object",
"fields": {
"date": "string, date queried in YYYY-MM-DD format",
"streaks": "array of streak objects with event_id, sport, tournament, category, home_team, away_team, matchup, metric, count, total_meetings, percentage",
"min_meetings": "integer, minimum meetings filter applied",
"events_skipped": "integer, events skipped due to no/insufficient H2H data",
"max_percentage": "number, maximum percentage filter applied",
"min_percentage": "number, minimum percentage filter applied",
"sports_queried": "array of sport name strings",
"events_with_h2h": "integer, events that had H2H data meeting min_meetings",
"events_processed": "integer, events with sufficient H2H data",
"total_events_found": "integer, total events collected across sports",
"total_streaks_found": "integer, number of qualifying streaks"
},
"sample": {
"data": {
"date": "2026-06-10",
"streaks": [
{
"count": 4,
"sport": "football",
"metric": "Almería wins (home)",
"matchup": "Almería vs CD Castellón",
"category": "Spain",
"event_id": 16264088,
"away_team": "CD Castellón",
"home_team": "Almería",
"percentage": 50,
"tournament": "LaLiga 2, Promotion Playoffs",
"total_meetings": 8
}
],
"min_meetings": 3,
"events_skipped": 0,
"max_percentage": 100,
"min_percentage": 50,
"sports_queried": [
"football"
],
"events_with_h2h": 3,
"events_processed": 3,
"total_events_found": 3,
"total_streaks_found": 8
},
"status": "success"
}
}About the Sofascore API
Daily Events and H2H Data
The get_daily_events endpoint returns all scheduled fixtures for a date across up to nine sports (football, basketball, tennis, ice-hockey, baseball, handball, rugby, american-football, volley). Each event object includes event_id, home_team, away_team, tournament, tournament_category, and status fields. That event_id is the key input for every event-level endpoint: get_event_h2h, get_event_details, get_event_statistics, get_event_incidents, get_event_odds, get_event_fun_facts, and get_match_lineup.
get_event_h2h returns a team_duel summary (home_wins, away_wins, draws, total_meetings), a manager_duel breakdown, and a pregame_form object with recent form arrays and ratings for both sides. get_h2h_streaks_ranked extends this by computing six streak metrics — home win %, away win %, draw %, home unbeaten %, away unbeaten %, and manager duel % — across all matchups on a date, then filters results to those falling between min_percentage and max_percentage. You can also control the min_meetings threshold to exclude matchups with thin historical records.
Match Details, Incidents, and Lineups
get_event_details returns structured score objects (format varies by sport), a status object with code and description, round_info, and season name. get_event_incidents gives a chronological timeline of goals (scorer, minute, penalty/own-goal flag, running score), cards (player, colour, minute), substitutions, and VAR decisions — football only. get_match_lineup returns formation strings and the 11 starters for each side (player_id, name, shirt_number, position), with a lineup_status field distinguishing confirmed, predicted, or unavailable.
Tennis, Odds, and Player Stats
get_tennis_fixtures returns ATP, WTA, and ITF matches for a date with player rankings, seedings, surface type, venue, and round. Odds for any event are available via get_event_odds, which returns a markets array with market name, group, period, suspension flag, and fractional odds per choice. get_player_match_stats paginates through a football player's finished-match history (up to 30 per call), returning per-game appearance details alongside fixture context. Use next_offset from each response to page forward.
The Sofascore API is a managed, monitored endpoint for sofascore.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sofascore.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sofascore.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Identify historically consistent H2H patterns (e.g. home win rate above 70%) across all football fixtures on a given date using
get_h2h_streaks_ranked. - Build a daily sports schedule dashboard by fetching all events with
get_daily_eventsand displaying teams, tournaments, and live status. - Reconstruct a football match timeline with goals, cards, and substitutions using
get_event_incidents. - Compare pre-match odds across betting markets for any event via
get_event_odds. - Track a player's form over their last 30 finished matches — including ratings, goals, and assists — using
get_player_match_stats. - Check whether two teams have an upcoming fixture and retrieve its date and venue context with
get_upcoming_match. - Feed confirmed lineups and formations into a pre-match preview tool using
get_match_lineup.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Sofascore have an official developer API?+
What does `get_h2h_streaks_ranked` actually filter on, and what metrics does it compute?+
min_percentage and max_percentage. You can also set min_meetings to exclude matchups with fewer than a given number of historical meetings, and max_events to cap the number of fixtures processed.Are detailed match statistics available for all sports, or only football?+
get_event_statistics exposes possession, xG, shots breakdowns, passes, tackles, cards, and distance covered, but this data is primarily available for finished football matches. get_event_incidents (goal/card/substitution timeline) is also football-only. Tennis fixtures have their own endpoint (get_tennis_fixtures) with surface and ranking data, but sport-specific stat depth for basketball, ice-hockey, or baseball is not currently covered. You can fork this API on Parse and revise it to add sport-specific statistics endpoints for those sports.Does the API return player search or team search by name?+
get_match_lineup starters, and team IDs from get_daily_events results. You can fork this API on Parse and revise it to add a name-to-ID lookup endpoint.How far back does H2H history go in `get_h2h`?+
get_h2h returns up to the 10 most recent finished matches between two teams, newest first. It does not support offset pagination to retrieve earlier meetings beyond those 10. If you need deeper historical records, you can fork this API on Parse and revise it to extend the pagination depth.