Discover/ScanGoal API
live

ScanGoal APIscangoal.ru

Access ScanGoal.ru match data via API: live/pre/FT football matches, 1X2 and Asian handicap odds, dominance indices, xG, events, H2H history, and period stats.

Endpoint health
verified 1h ago
list_matches
get_match
2/2 passing latest checkself-healing
Endpoints
2
Verified account required
Updated
2h ago

What is the ScanGoal API?

The ScanGoal.ru API exposes two endpoints covering football match listings and detailed match statistics from the ScanGoal scanner. list_matches returns paginated rows of live, upcoming, and finished matches — each including status, kickoff time, league, team IDs, current score, dominance and activity indices, and 1X2/Asian handicap/totals odds. get_match returns a single match's full stat page: timeline events, period scores, xG, head-to-head history, and venue details.

This call costs10 credits / call— charged only on success
Try it
Calendar day to list, ISO YYYY-MM-DD. Omitted = today. Days older than about 3 days are clamped by the site for anonymous visitors (see date_limited).
Which matches to show: all matches of the day, only live, only upcoming (pre-match), or only finished.
1-based page number of the server-side paging; values above total_pages return an empty matches array.
Server-side ordering of the grid, mirroring the column sort buttons of the site.
Free-text team-name filter, e.g. a club name; applied server-side across roughly ±7 days regardless of mode.
api.parse.bot/scraper/e19ad085-a523-4550-8bef-a13706d359e2/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/e19ad085-a523-4550-8bef-a13706d359e2/list_matches?mode=all&page=2&sort=Dominance' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace scangoal-ru-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: ScanGoal football matches — bounded, re-runnable."""
from parse_apis.scangoal_ru_api import ScanGoal, MatchSort, MatchNotFound

client = ScanGoal()

# Browse today's finished matches sorted by dominance.
for summary in client.match_summaries.list(mode="ft", sort=MatchSort.DOMINANCE, limit=5):
    print(summary.home_team, summary.home_score, ":", summary.away_score, summary.away_team,
          "—", summary.league_name)

# Drill into the first finished match for full statistics.
first = client.match_summaries.list(mode="ft", limit=1).first()
if first is not None:
    match = first.details()
    print(match.title, "|", match.status)
    print("Venue:", match.venue)
    if match.home_xg is not None:
        print(f"xG: {match.home_xg} - {match.away_xg}")
    for stat in match.statistics.full:
        print(f"  {stat.label}: {stat.home_raw} - {stat.away_raw}")
    for event in match.events[:5]:
        print(f"  {event.minute}' [{event.type}] {event.detail}")

# Point lookup by slug discovered from the listing.
if first is not None:
    try:
        detail = client.matches.get(slug=first.slug)
        print(detail.home_team, "goals:", len(detail.home_goals))
    except MatchNotFound:
        print("Match no longer available")

print("exercised: match_summaries.list / details / matches.get")
All endpoints · 2 totalmissing one? ·

Returns one page of football matches from the ScanGoal scanner grid. Each row is one match with status (LIVE / PRE / FT), kickoff time in UTC (null for rows whose badge shows only the live minute), league, teams with their numeric ids, current score, dominance and activity indices, bookmaker odds (1X2, Asian handicap, totals, prematch totals) and each team's recent form. The default call covers all matches of the current day; the mode filter restricts to live, upcoming or finished matches and the date filter shows another day (the site only serves history up to about 3 days back to anonymous visitors; when it clamps the date, date_limited is true). Paging is server-side: page selects the page (1-based, default 1), page_size is decided by the site (50 or 100 rows observed), total_count and total_pages describe the whole result set and has_more tells whether another page exists. The search filter matches team names as typed on the site's search box and ignores the day boundary (matches from roughly ±7 days). The slug of every row is the input of get_match. A valid empty page (no matches for the filters) returns an empty matches array.

Input
ParamTypeDescription
datestringCalendar day to list, ISO YYYY-MM-DD. Omitted = today. Days older than about 3 days are clamped by the site for anonymous visitors (see date_limited).
modestringWhich matches to show: all matches of the day, only live, only upcoming (pre-match), or only finished.
pageinteger1-based page number of the server-side paging; values above total_pages return an empty matches array.
sortstringServer-side ordering of the grid, mirroring the column sort buttons of the site.
searchstringFree-text team-name filter, e.g. a club name; applied server-side across roughly ±7 days regardless of mode.
Response
{
  "type": "object",
  "fields": {
    "page": "integer, the page returned",
    "matches": "array of match rows; each has match_id (string), slug (input for get_match), status (LIVE/PRE/FT), minute_label (site badge text: kickoff time, live minute, HT or FT), kickoff_utc (ISO UTC or null), league_id, league_name, home_team/away_team names, home_team_id/away_team_id (numeric strings, null when the site has no logo id), home_score/away_score, goals_total, home_red_cards/away_red_cards, dominant_side (H/A), home_dominance_pct/away_dominance_pct (null when not shown), power, activity, odds object, home_form/away_form (W/D/L string of last matches, null when not shown), home_form_goals/away_form_goals ({scored, conceded} over that form window)",
    "has_more": "boolean, true when page < total_pages",
    "page_size": "integer, rows per page as decided by the site",
    "total_count": "integer, total matches for these filters",
    "total_pages": "integer, number of pages for these filters",
    "date_limited": "boolean, true when the site clamped the requested date to its anonymous history window",
    "matches[].odds": "object: home_win, draw, away_win (1X2 decimal odds), handicap_line/handicap_home/handicap_away (Asian handicap), total_line/total_over/total_under (current total), prematch_total_line/prematch_total_over/prematch_total_under"
  },
  "sample": {
    "data": {
      "page": 1,
      "matches": [
        {
          "odds": {
            "draw": 3.8,
            "away_win": 1.91,
            "home_win": 3.7,
            "total_line": 2.75,
            "total_over": 1.98,
            "total_under": 1.88,
            "handicap_away": 1.95,
            "handicap_home": 1.9,
            "handicap_line": 0.5,
            "prematch_total_line": 2.75,
            "prematch_total_over": 1.98,
            "prematch_total_under": 1.88
          },
          "slug": "coventry-vs-brighton-20260913",
          "power": 99.5,
          "status": "FT",
          "activity": 84.8,
          "match_id": "4553103",
          "away_form": "DLWWDWWW",
          "away_team": "Брайтон",
          "home_form": "LLWLWWD",
          "home_team": "Ковентри Сити",
          "league_id": "FE5E254B-5A09-4881-9920-0FCC6AF94AFD",
          "away_score": 5,
          "home_score": 0,
          "goals_total": 5,
          "kickoff_utc": "2026-09-13T13:00:00Z",
          "league_name": "Английская Премьер-лига",
          "away_team_id": "18508",
          "home_team_id": "28577",
          "minute_label": "13.09\n16:00",
          "dominant_side": "A",
          "away_red_cards": 0,
          "home_red_cards": 1,
          "away_form_goals": {
            "scored": 20,
            "conceded": 8
          },
          "home_form_goals": {
            "scored": 10,
            "conceded": 8
          },
          "away_dominance_pct": 100,
          "home_dominance_pct": 0
        }
      ],
      "has_more": true,
      "page_size": 100,
      "total_count": 1169,
      "total_pages": 12,
      "date_limited": false
    },
    "status": "success"
  }
}

About the ScanGoal API

Match Listing with list_matches

list_matches pages through the ScanGoal scanner grid with four optional filters: mode (all / live / pre / FT), date (ISO YYYY-MM-DD, clamped to roughly a 3-day history window for anonymous requests), sort (mirrors the site's column-sort buttons), and search (free-text team name, applied across approximately ±7 days regardless of mode). Each entry in the matches array carries a match_id, slug, status (LIVE/PRE/FT), minute_label, league name, home and away team names with their numeric IDs, live score, and an odds object containing home_win, draw, away_win, handicap_line, handicap_home, handicap_away, total_line, and over/under values. The response also returns total_count, total_pages, has_more, and a date_limited flag that signals when the requested date was clamped.

Single Match Detail with get_match

get_match accepts a slug from any list_matches row (format: home-vs-away-YYYYMMDD) and returns the full match statistics page in one call. Always-present fields include title, status, venue, phases (period-by-period partial scores), and a summary array of the site's own match summary sentences. When available, the response includes home_xg and away_xg (expected goals), an events array of timeline entries — each with minute, side, type (goal/red/yellow/sub etc.), detail, and score_after — and an h2h array of historical head-to-head meetings with per-match stats objects.

Coverage and Freshness

Date filtering in list_matches is clamped by the site to an anonymous history window of approximately 3 days for past dates; the date_limited boolean in the response signals when this clamping occurred. The search parameter reaches across roughly ±7 days independently of the mode filter. The events and phases arrays in get_match are empty before a match kicks off; xG values may be null for matches where the site has not computed them.

Reliability & maintenanceVerified

The ScanGoal API is a managed, monitored endpoint for scangoal.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when scangoal.ru 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 scangoal.ru 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.

Last verified
1h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track live match status, score, and dominance index across all ongoing games using list_matches with mode=live
  • Compare 1X2 and Asian handicap odds from the ScanGoal grid before a fixture kicks off
  • Build a pre-match dashboard by filtering upcoming fixtures with mode=pre and sorting by dominance
  • Retrieve xG values and timeline events for a finished match via get_match for post-match analysis
  • Pull head-to-head history between two clubs from the h2h array to inform betting or editorial content
  • Monitor period-by-period partial scores from the phases field to analyse in-game momentum shifts
  • Search for a specific club's upcoming and recent fixtures across ±7 days using the search parameter
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does ScanGoal.ru have an official public developer API?+
ScanGoal.ru does not publish an official public developer API or documented data feed. This Parse API provides structured access to the data the site surfaces.
What does the `odds` object in `list_matches` contain?+
Each match row includes an odds object with home_win, draw, and away_win decimal odds (1X2 market), plus handicap_line, handicap_home, and handicap_away for the Asian handicap market, and total_line with over/under values for the totals market. These reflect the odds displayed in the ScanGoal scanner grid at the time of the request.
How far back does the date filter in `list_matches` reach?+
The site limits anonymous date access to roughly 3 days of history. Requesting an older date returns data clamped to that window, and the date_limited field in the response is set to true when this happens. Future dates can be queried for scheduled fixtures without restriction.
Does the API cover player-level statistics such as passes, shots on target per player, or ratings?+
Not currently. The API covers match-level stats: timeline events, period scores, xG, dominance and activity indices, odds, and head-to-head match results. Player-level breakdowns are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting player stat data if ScanGoal exposes it on the match page.
Are competitions outside the major European leagues included in `list_matches`?+
The API returns whatever leagues appear in the ScanGoal scanner grid on a given day, which includes leagues beyond the major European divisions. However, coverage depends entirely on what ScanGoal indexes; smaller or regional competitions may appear intermittently or not at all. The league field on each match row indicates which competition it belongs to.
Page content last updated . Spec covers 2 endpoints from scangoal.ru.
Related APIs in SportsSee all →
thestatsdontlie.com API
Access data from thestatsdontlie.com.
soccerway.com API
Access data from soccerway.com.
flashscore.com.ua API
Access football match results, fixtures, team histories, and in-match statistics from Flashscore. Look up matches by date, retrieve a team's recent and upcoming games, and pull detailed events and performance metrics for any match.
betexplorer.com API
Search upcoming football matches across multiple dates and instantly compare 1X2 betting odds from BetExplorer to find the best lines for your picks. Access daily match schedules with real-time odds data to help inform your betting decisions.
flashscore.es API
Track and compare pre-match betting odds across all sports leagues with daily match overviews showing 1X2 odds, or dive deeper into individual matches to see detailed odds from every bookmaker including opening lines and how odds have shifted. Stay ahead of betting movements with real-time data on odds changes and bookmaker-specific pricing.
pari.ru API
Place informed bets by accessing real-time football match odds and comprehensive match details from the pari.ru betting platform. Get current prices and detailed information to make better betting decisions quickly.
sports.ru API
Access football league standings, match results, player statistics, and upcoming fixtures from Sports.ru. Retrieve tournament tables, top scorers, detailed match information, and individual player profiles across major football leagues.
whoscored.com API
Search for players and teams, then dive deep into their performance metrics, match statistics, and detailed passing data to analyze football games and player abilities. Get comprehensive insights on team performance, individual player stats, and play-by-play event information to power your football analysis and decision-making.