Fonbet Scraper icon

Fonbet Scraper

Scrape Fonbet (fonbet.ru) sports betting events by sport, tournament, team or URL. Extract odds across all markets, live scores, match clocks, teams,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Fonbet Scraper at a glance

Fonbet Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes event, sport, tournament, starts (utc) and live, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Other
Region
Europe
Pricing
$2.00 per 1,000 results (Free plan), from $1.60 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
24 options

Scrape Fonbet (fonbet.ru) sports betting events by sport, tournament, team or URL. Extract odds across all markets, live scores, match clocks, teams, start times, promotions and sub-events including halves, corners and cards.

What Fonbet Scraper can do

  • Every market, every price. One row per event with the full market list: decimal odds, handicap and total parameters, market names and outcome captions, in Russian or English.
  • Live data included. Match clock, running score, period scores, live delay and the scoring function of each live event.
  • Sub-events in the same row. Halves, periods, corners, cards and other derived events come nested under their parent with their own odds.
  • Three ways in. Search by sport, tournament or team keyword, filter live or pre-match and the start window, or paste any supported page link.
  • Built for monitoring. Incremental mode returns only new and changed events, with a grace period before an event is marked expired.
  • Final scores of past games. Switch on Final scores and the same run also returns every finished game of the last days in your selection, with the final score, the winner, the period scores and the match statistics the bookmaker publishes.

Choose what to collect

These inputs let you configure Fonbet Scraper - Live Sports Odds, Scores & Betting Markets. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredsearch = pick sports, tournaments or teams and let the actor build the list of events. url = paste fon.bet or fonbet.ru pages (home, sport, tournament, event, live ...).

Choices: search, url

sportsarrayOnly events of these sports. Leave empty for every sport. Only applies when mode = search.
tournamentsarrayOnly events of tournaments whose name contains one of these words (for example Premier League, UEFA Nations League) or whose numeric tournament id equals one of them. Only applies when mode = search.
searchTermsarrayOnly events where a team, the event name, the tournament or the sport contains one of these words. Only applies when mode = search.
eventStatusstringPre-match lists upcoming events, live lists events in play right now. Only applies when mode = search.

Choices: all, line, live

startsWithinHoursintegerOnly pre-match events that start within this many hours from now. Live events are always kept. Leave empty or 0 for no limit. Only applies when mode = search.
onlyTopEventsbooleanOnly the events the site features as top and top live events. Only applies when mode = search.
Show 17 more inputs
More input fields
InputWhat it controls
languagestringLanguage of team, tournament and market names. In URL mode, English is used when every pasted page is an /en/ link; if any pasted link is not an /en/ link, this Language setting decides.

Choices: ru, en

urlsarrayPaste one or more fon.bet or fonbet.ru pages: the home page, a sport (/sports/football), a tournament (/sports/football/46065), an event (/sports/football/46065/69507114), the live page (/live, /live/football) or the promotions page. Pages that list no events of their own (results, statistics, help) read the whole line. Several URLs are supported. The search fields above are ignored in this mode. Left untouched, URL mode reads one example of each supported page type.
fetchDetailsbooleanFetch every event's complete market list, including the markets of its sub-events (halves, corners, cards, players ...). Turn off for one lighter row per event with the main odds only.
includeResultsbooleanAlso return the final result of every FINISHED game in your selection (search mode: your sports, tournaments and team terms; URL mode: sport, tournament and home pages): home and away team, final score, winner, period scores, match statistics where published, sport, league and start time, and the odds event id when the game is still on the line. One row per finished game (record type result); games not played, interrupted or still running are never returned. The live / pre-match, start-window and top-events filters apply to odds rows only. Each result row is one dataset item and counts toward Max items.
resultsDaysBackintegerHow many days back to collect final scores (1 to 14, Moscow-time days). Only used when Final scores of past games is on.
maxPagesintegerOptional safety stop on how many pasted pages or sport searches are read in total. This does NOT cap the run: leave it empty for unlimited pages and the run is bounded solely by Max items.
maxItemsintegerThe run's single hard cap: maximum event rows across all searches. Defaults to 20 (also when the field is omitted through the API). Set 0 for unlimited. This is the only default limit; Max pages is unlimited by default and defers to this.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning or charging for rows already collected there. For recurring monitoring of the same search, use Incremental changes below instead.
incrementalModebooleanFor recurring runs, return only NEW, UPDATED and REAPPEARED events; events unchanged since the last run are not returned or billed. Each event is compared on every field (sport, tournament, event details, score, odds, sub-events) except the scrape time, the running match clock (live.timer, live.timerSeconds), event.willStartSoon, the market-list sizes (countAll) and publicPromos, which stay in the output but never count as a change. Each row gets changeType, changedFields, firstSeenAt and lastSeenAt; outside incremental mode these four fields are empty. Final-score result rows are compared on their status and final score only, are returned once per game and are never marked expired. The baseline is kept per State key; changing the sports, tournaments or pasted pages starts a new baseline unless State key is set (the final-score settings never start a new baseline).
stateKeystringIncremental mode only. Optional name for this campaign's saved baseline. Leave empty to derive it from the selected sports, tournaments or pasted pages, so each distinct search keeps its own baseline.
emitUnchangedbooleanIncremental mode only. Also return (and bill as normal rows) events whose values did not change.
emitExpiredbooleanIncremental mode only. Return an EXPIRED row for events no longer listed after Expire after missed scans complete scans (billed like any returned row). EXPIRED means the event was not in the scanned list (it started, finished or was withdrawn). Only after a complete scan: a Max items or Max pages cut, a keyword, status, start-window or top-events filter, a resume, an early stop or a failed read disables it.
expireAfterMissedScansintegerIncremental mode only. How many complete scans in a row must miss an event before it is reported EXPIRED.
ignoreFieldsForChangesarrayIncremental mode only. Extra field names (dotted for nested, e.g. odds or live.scores) that never mark a row as UPDATED and are left out of changedFields; they stay in the output. Changing this list re-bases the saved events once without reporting them as changed. live.timer, live.timerSeconds, event.willStartSoon, countAll and publicPromos are always ignored.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

titleEvent (text)
sportNameSport (text)
tournamentNameTournament (text)
startTimeIsoStarts (UTC) (text)
isLiveLive (boolean)
oddsCountOdds (number)
subEventCountSub-events (number)
eventIdEvent ID (number)
changeTypeChange (text)
urlURL (link)
scrapedAtScraped at (text)
changedFieldsChanged fields (array)
Show 8 more fields
firstSeenAtFirst seen (text)
lastSeenAtLast seen (text)
leagueNameLeague (text)
homeTeamHome (text)
awayTeamAway (text)
homeScoreHome score (number)
awayScoreAway score (number)
winnerTeamWinner (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "rowId": "1000000",
  "recordType": "event",
  "eventId": 1000000,
  "url": "https://fon.bet/sports/football/100000/1000000",
  "title": "Team A - Team B",
  "sportName": "Football",
  "tournamentName": "Country. League",
  "startTimeIso": "2026-01-01T00:00:00Z",
  "isLive": false,
  "oddsCount": 2,
  "subEventCount": 1,
  "sport": {
    "id": 1,
    "parentId": null,
    "kind": "sport",
    "name": "Football",
    "alias": "football"
  },
  "tournament": {
    "id": 100000,
    "name": "Country. League",
    "tournamentInfoId": 100,
    "caption": "League",
    "icon": "/icons/league.svg",
    "sportCategoryId": 2,
    "geoCategoryId": 50,
    "regionId": 100
  },
  "event": {
    "id": 1000000,
    "parentId": null,
    "level": 1,
    "num": 10000,
    "sportId": 100000,
    "kind": 1,
    "rootKind": 1,
    "team1Id": 100000,
    "team2Id": 100001,
    "team1": "Team A",
    "team2": "Team B",
    "team1RegionId": 100,
    "team2RegionId": 200,
    "name": "",
    "startTime": 1790000000,
    "place": "line",
    "priority": 6,
    "state": null,
    "hasPromos": [],
    "tv": [],
    "matchOfTheDay": false,
    "willStartSoon": false,
    "statisticsTypes": "++-",
    "info": null,
    "url": "https://fon.bet/sports/football/100000/1000000"
  },
  "live": {
    "timer": null,
    "timerSeconds": null,
    "scoreFunction": null,
    "scoreComment": null,
    "scores": null,
    "liveDelay": null
  },
  "odds": [
    {
      "eventId": 1000000,
      "factorId": 921,
      "value": 1.5,
      "param": null,
      "paramText": null,
      "marketName": "Outcomes",
      "outcome": "1",
      "countAll": 700,
      "isMain": true
    },
    {
      "eventId": 1000000,
      "factorId": 923,
      "value": 2.6,
      "param": null,
      "paramText": null,
      "marketName": "Outcomes",
      "outcome": "2",
      "countAll": 700,
      "isMain": true
    }
  ],
  "subEvents": [
    {
      "id": 1000001,
      "parentId": 1000000,
      "level": 2,
      "num": 10001,
      "kind": 100201,
      "rootKind": 100200,
      "name": "1st half",
      "startTime": 1790000000,
      "priority": 6,
      "place": "line",
      "sportId": 100000,
      "state": null,
      "odds": []
    }
  ],
  "publicPromos": [
    "3"
  ],
  "scrapedAt": "2026-01-01T00:00:00Z",
  "changeType": null,
  "changedFields": null,
  "firstSeenAt": null,
  "lastSeenAt": null
}

Ways to use this data

  • Odds comparison and aggregation: pull prices into your own comparison table, one stable schema across every sport.
  • Betting models and research: build price histories and closing line datasets for football, tennis, hockey, esports and more.
  • Live score dashboards: follow live events with clock, score and period breakdown.
  • Price alerts: schedule incremental runs and react to price moves, new events and withdrawn events.
  • Bet grading and model backtests: pair the prices you collected with the final scores from the same actor to grade picks and measure accuracy.
  • Media and content teams: feed fixtures, tournaments and markets into previews and tipping pages.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Fonbet Scraper return?

The documented output for Fonbet Scraper includes event, sport, tournament, starts (utc), live, odds, sub-events and event id. Availability of each field depends on the source page and the selected mode.

How much does Fonbet Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only the changes on a schedule?

Yes. Switch on Incremental changes and keep the same State key. Each run returns only NEW, UPDATED and REAPPEARED events. The match clock, the market-list size and the site-wide promotions list never count as a change.

How do I list only live events, or only upcoming ones?

Use Live or pre-match in search mode, or paste the live page link (for example fon.bet/live/football).

Which sports and tournaments can I use?

Football, tennis, hockey, basketball, esports, table tennis, volleyball, handball, boxing and more. Tournaments match on a name fragment or a numeric tournament id.

How do the final scores work with Max items and incremental mode?

With final scores on, the scores are read first and up to half of Max items is kept for the result rows that will really be delivered (new or changed ones); when there are none, the odds rows keep the whole cap, and results also use whatever the odds rows leave. Result rows are delivered once per game and never reported EXPIRED; a later score correction arrives as one UPDATED row, and the results settings never start a new incremental baseline. Each day of results is a large read, so a 14-day window uses noticeably more connection traffic than a 2-day one. If some days cannot be read the run ends with a partial-results note; if nothing at all can be read and there are no odds rows either, the run ends as failed with a clear message instead of an empty result.

Ready to collect with Fonbet Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.