1xBet Odds Scraper: Pre-Match Odds & Markets
Pricing
from $0.50 / 1,000 results
1xBet Odds Scraper: Pre-Match Odds & Markets
Scrape 1xBet (1xbet.com) odds for football, tennis, basketball, ice hockey and more, pre-match or live: matches with 1X2, double chance, handicap, total and both-teams-to-score prices, live score and period, plus every market and selection on request. Nigeria, Kenya, Ghana or Cameroon site.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
ActorFlow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Security
Limited permissionsShare
1xBet Odds Scraper: Pre-Match Odds & Betting Markets

Scrape pre-match and live odds from 1xBet (1xbet.com) for football, tennis, basketball, cricket, boxing, MMA and 30 more sports: every match with its 1X2, double chance, handicap, total and both-teams-to-score prices, and on request every market and selection the site offers (often 100 to 300 per match) and the sub-games (halves, quarters, sets). Export as JSON, CSV or Excel or call it as an API: choose the sports (or all of them), pre-match, live or both, and the 1xBet site, or paste a sport, league or match URL, and press Start.
Target websites: 1xbet.ng, 1xbet.co.ke, 1xbet.com.gh, 1xbet.cm and 14 more 1xBet country sites (see 1xBet site in the input).
✨ Features of this 1xBet odds scraper
- Match odds extraction — match, league, country, start time, both sides with their logos, venue and round with the main prices in one object.
- Pre-match, live or both — upcoming matches, the matches in play now with their score, period, seconds played, the score of each period and the live odds, or both in one run (each record says which in
mode). - Main markets — 1X2, double chance, handicap and total (the main line of each), and both teams to score.
- All markets on request — every priced selection with its market and selection ids, the line, the price and a main-line flag; the main markets are named, and
marketIdskeeps just the markets you pick. Each match also says how many markets and selections the site has for it. - Sub-games on request — the halves, quarters, periods or sets of a pre-match match and the extra bet types the site lists as sub-games (corners, for example), each with its own prices.
- 36 sports — football, tennis, basketball, ice hockey, baseball, volleyball, rugby, handball, table tennis, American football, futsal, darts, esports, cricket, boxing, martial arts, UFC, bare-knuckle boxing, wrestling, badminton, squash, padel, snooker, billiards, chess, water polo, bandy, floorball, field hockey, ball hockey, rink hockey, curling, Australian rules, Gaelic football, hurling and 3x3 basketball, or all of them with one choice.
- 18 1xBet sites — Nigeria, Kenya, Ghana, Cameroon, Tanzania, Zambia, Ivory Coast, Senegal, Rwanda, DR Congo, Benin, Malawi, Guinea, Congo, Gabon, Namibia, Sierra Leone and Gambia.
- Cache deduplication, only new or changed matches — use the same cache project name on each scheduled run for deduplication: skip matches whose prices and state did not move; each record gets
changeTypenew or updated. - Special leagues optional — copies with alternative rules, team-versus-player, statistics and virtual leagues are skipped by default and can be switched on.
- Several ways in — a sport, a league, a live sport page or one match.
- No browser required — plain requests keep runs fast and cheap.
🚀 How to scrape 1xBet odds in 5 steps
- Sign up for a free Apify account — includes $5 monthly credit.
- Open the actor page and click Try for free.
- Fill in the Input fields (a sport, league or match URL, or leave the URLs empty and choose sports and the 1xBet site).
- Click Start and wait for the run to complete.
- Download results from the Output tab in JSON, CSV, or Excel format.
You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.
💰 Pricing for the 1xBet scraper
This actor uses pay-per-result billing based on the compute units a run consumes.
- New Apify accounts include $5 of free monthly credit.
- The actor uses plain HTTP requests instead of a browser, so it costs significantly less to run than browser-based scrapers.
- Each match is read from its own feed, so a run with many matches (or with sub-games on) takes longer.
🔧 1xBet scraper input configuration
The input form starts with the start URLs, the cache name and the match limit, then the optional settings: the sports, the mode, the 1xBet site and the markets, sub-games and special leagues options. The proxy settings are last.

- 1xBet URLs - a sport, league or match page to scrape (here the football page of 1xbet.ng)
- Cache project name - reuse the same name on every scheduled run for deduplication, so you get only new or changed matches
- Max matches per URL - limit for each start URL (here 5)
- Sports - which sports to scrape when no start URL is given (here football)
- Pre-match, live or both - upcoming matches, matches in play now, or both in one run
- 1xBet site - which country site to read (here Nigeria)
- Include all markets - add every priced selection of the match to
outcomes - Include sub-games - add halves, periods or sets with their own prices
The special leagues and market ids options follow below these fields, and the proxy settings come last.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
1xBet URLs (startUrls) | array | — | the football page of 1xbet.ng | A sport page, a league page or one match page. The site of the URL decides which 1xBet site is read. Leave empty to use the sports below. |
Cache project name (cacheProjectName) | string | — | — | Same name on each run for deduplication: only new matches and matches whose prices or live state changed; each record gets changeType. |
Max matches per URL (maxItems) | integer | — | 5 | Maximum matches saved for each start URL (or in total when no start URL is given). |
Sports (sports) | array | — | football | Which sports to scrape when no start URL is given; all reads every sport. |
Pre-match, live or both (mode) | string | — | prematch | prematch, live (matches in play now) or both. Used when no start URL is given. |
1xBet site (country) | string | — | NG | The 1xBet site to read: NG, KE, GH, CM, TZ, ZM, CI, SN, RW, CD, BJ, MW, GN, CG, GA, NA, SL or GM. |
Include all markets (includeAllMarkets) | boolean | — | false | Adds every priced selection of the match to outcomes. |
Market ids (marketIds) | array | — | all | Keeps only these markets in outcomes (turns the outcomes on by itself). See the market ids below. |
Include sub-games (includeSubGames) | boolean | — | false | Adds the halves, quarters, periods or sets of pre-match matches to subGames, each with its main prices. |
Include special leagues (includeSpecialLeagues) | boolean | — | false | Also reads leagues with alternative rules, team-versus-player, statistics and virtual leagues. |
Proxy configuration (proxyConfiguration) | object | — | Preset | Proxy settings. Keep the default. |
Supported URL types:
- A sport:
https://1xbet.ng/en/line/football - A league:
https://1xbet.ng/en/line/football/33957-italy-serie-d - A live sport:
https://1xbet.ng/en/live/football - A match:
https://1xbet.ng/en/line/football/33957-italy-serie-d/766124921-atletico-calcio-afragolese-asd-aranova(or the same under/en/live/for a match in play)
A sport URL reads the busiest real competitions first (copies with alternative rules, specials and statistics leagues are skipped).
📦 1xBet scraper output data
The output is a flat list of matches with these fields: matchId, url, sport, mode, league, leagueId, country, startTime, homeName, awayName, homeId, awayId, homeLogo, awayLogo, isLive, homeScore, awayScore, period, elapsedSeconds, periodScores, venue, round, odds, outcomes, subGames, marketsOnFeed, totalMarketsAvailable, totalOutcomesAvailable and changeType, then source and scrapedAt. Every record has every field; what the site does not carry or what you did not switch on is null.
The dataset has 1 view, Matches, a compact table with start, mode, sport, league, both sides, the 1X2 prices, the main total, the change type and the match link.
oddsholdshome,draw,away,homeOrDraw,homeOrAway,drawOrAway,handicapLine,handicapHome,handicapAway,totalLine,totalOver,totalUnder,bothTeamsToScoreYesandbothTeamsToScoreNo. Prices are decimal; a market the match does not offer isnull.- The live fields (
homeScore,awayScore,period,elapsedSeconds,periodScores) are filled for live matches andnullfor pre-match ones. A side with no score yet is 0; for tennis the score is sets won andperiodScoreslists the games of each set. A match the live list still shows after the final whistle hasisLivefalse. modeisprematchorlive: with thebothmode a run holds both kinds.homeLogoandawayLogoare links to the team logos on the 1xBet site (nullwhen the side has none).marketsOnFeedis how many different markets the prices read cover andtotalOutcomesAvailablehow many priced selections the site has for the match.totalMarketsAvailableis how many different markets the match has; it isnullfor a live match read from the live list only (turn on Include all markets to read the match's own feed).subGames(with Include sub-games) lists the sub-games of a pre-match match:matchId,name(for example1st halforCorners - 2nd half),period,odds(the same main prices) andoutcomes(with Include all markets). It isnullwhen the match has none or the option is off.changeTypeisneworupdatedwhen a cache project name is used andnullotherwise.handicapLineis the home side's handicap andtotalLinethe total goals, points or games of the main line.outcomes(with Include all markets) listsmarketId,market,selectionId,selection,line,priceandisMainLine.marketandselectionare named for the main markets andnullfor the rest, which are identified by their ids. 1xBet's feed carries no names at all, so the ids are the only way to tell markets apart: the checked names and about 290 other markets seen across 11 sports are listed inreference/MARKET_IDS.mdin the actor source (also asreference/market-ids.json), and you can pick markets with Market ids.
Output at a glance:
| Start (UTC) | League | Match | 1 | X | 2 | Total | Over | Under |
|---|---|---|---|---|---|---|---|---|
| 2026-10-31 13:30 | Italy. Serie D | Atletico Calcio Afragolese - ASD Aranova | 2.13 | 2.95 | 3.51 | 2.5 | 2.13 | 1.61 |
| 2026-11-01 13:30 | Italy. Serie D | A. C. Krema 1908 - Cittadella Vis Modena | 2.55 | 3.1 | 2.6 | 2.5 | 1.97 | 1.74 |
| 2026-11-01 13:30 | Italy. Serie D | A.S.D San Donato Tavarnelle - Montevarchi Calcio Aquila 1902 | 2.2 | 3.2 | 3.095 | 2.5 | 1.87 | 1.83 |
| 2026-11-01 13:30 | Italy. Serie D | A.S.D. Licata 1931 - Digiesse Praia Tortora | 2.16 | 3.3 | 3.045 | 2.5 | 1.85 | 1.85 |
| 2026-11-01 13:30 | Italy. Serie D | AC Mestre - Lavarian Mortean Esperia | 1.61 | 3.6 | 5.23 | 2.5 | 1.91 | 1.79 |
Sample output (raw JSON):
[{"matchId": "766115630","url": "https://1xbet.ng/en/line/football/33957-italy-serie-d/766115630-a-c-krema-1908-cittadella-vis-modena","sport": "football","league": "Italy. Serie D","leagueId": 33957,"country": null,"startTime": "2026-11-01T13:30:00.000Z","homeName": "A. C. Krema 1908","awayName": "Cittadella Vis Modena","homeId": 897527,"awayId": 8853489,"venue": "Stadio Giuseppe Voltini (Crema)","round": "Tour 10","odds": {"home": 2.55,"draw": 3.1,"away": 2.6,"homeOrDraw": null,"homeOrAway": null,"drawOrAway": null,"handicapLine": 0,"handicapHome": 1.85,"handicapAway": 1.85,"totalLine": 2.5,"totalOver": 1.97,"totalUnder": 1.74,"bothTeamsToScoreYes": 1.794,"bothTeamsToScoreNo": 2.019},"outcomes": [{"marketId": 1,"market": "1X2","selectionId": 1,"selection": "Home","line": null,"price": 2.55,"isMainLine": false},{"marketId": 1,"market": "1X2","selectionId": 2,"selection": "Draw","line": null,"price": 3.1,"isMainLine": false},{"marketId": 1,"market": "1X2","selectionId": 3,"selection": "Away","line": null,"price": 2.6,"isMainLine": false}],"source": "default","scrapedAt": "2026-10-30T08:33:02.738Z"},{"matchId": "766115626","url": "https://1xbet.ng/en/line/football/33957-italy-serie-d/766115626-a-s-d-san-donato-tavarnelle-montevarchi-calcio-aquila-1902","sport": "football","league": "Italy. Serie D","leagueId": 33957,"country": null,"startTime": "2026-11-01T13:30:00.000Z","homeName": "A.S.D San Donato Tavarnelle","awayName": "Montevarchi Calcio Aquila 1902","homeId": 128735,"awayId": 4648185,"venue": "Stadio Comunale Pianigiani (Tavarnelle Val di Pesa)","round": "Tour 10","odds": {"home": 2.2,"draw": 3.2,"away": 3.095,"homeOrDraw": null,"homeOrAway": null,"drawOrAway": null,"handicapLine": 0,"handicapHome": 1.58,"handicapAway": 2.18,"totalLine": 2.5,"totalOver": 1.87,"totalUnder": 1.83,"bothTeamsToScoreYes": 1.752,"bothTeamsToScoreNo": 2.075},"outcomes": [{"marketId": 1,"market": "1X2","selectionId": 1,"selection": "Home","line": null,"price": 2.2,"isMainLine": false},{"marketId": 1,"market": "1X2","selectionId": 2,"selection": "Draw","line": null,"price": 3.2,"isMainLine": false},{"marketId": 1,"market": "1X2","selectionId": 3,"selection": "Away","line": null,"price": 3.095,"isMainLine": false}],"source": "default","scrapedAt": "2026-10-30T08:33:02.738Z"}]
🔁 Scrape only new or changed 1xBet matches with cache deduplication
Give Cache project name the same name on every scheduled run to turn on cache deduplication. The first run saves the matches and remembers them. On the next runs a match is saved again only when it is new or when something changed: its main prices, the markets you selected, its sub-games, or (for live matches) the score and period. Deduplication skips matches that did not move: they are not saved, not charged and not counted towards Max matches per URL, and each saved record gets changeType new or updated. Each cache name has its own memory, so different names keep separate lists. With Apify Schedules, a run every few minutes gives you a feed of price moves.
🐍 How to scrape 1xBet odds with Python, JavaScript or the API
Run the actor programmatically with the official Apify clients. Replace <YOUR_API_TOKEN> with the token from your Apify Console.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("confidential_gnat/1xbet-odds-scraper").call(run_input={"sports": ["football", "tennis"],"country": "NG","maxItems": 20,"includeAllMarkets": False,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('confidential_gnat/1xbet-odds-scraper').call({sports: ['football', 'tennis'],country: 'NG',maxItems: 20,includeAllMarkets: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL — start a run and wait for the dataset:
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~1xbet-odds-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"sports": ["football", "tennis"], "country": "NG", "maxItems": 20, "includeAllMarkets": false}'
💡 What you can use 1xBet odds data for
- Odds comparison against other bookmakers and exchanges.
- Market research on prices, margins and which leagues 1xBet covers.
- Pricing models and backtests built on pre-match 1X2, handicap and total odds.
- Monitoring how a match's prices change by running on a schedule, or following live prices and scores.
- Datasets of odds across 36 sports for sports analytics and machine learning.
Typically used by bettors, sports analysts, quants and odds comparison sites.
⚠️ Limitations of the 1xBet scraper
- Live odds — the live list carries the main prices; the full list of markets of a live match is read from the match's own feed and can change between requests.
- Sub-games are pre-match only — 1xBet does not list the sub-games of live matches.
- Matches with two sides only — horse and greyhound racing, trotting, golf, Formula 1, cycling, motorsport, pro wrestling, sumo and outright (winner) markets are events with runners, not two sides, and are not read. TV games, lotteries and special bets are not read either.
- Market names — only the main markets are named; the other markets come with their ids.
- Markets vary by match — double chance and both teams to score, for example, are not offered on every match.
- Betting terms — the terms of a gambling site may restrict automated reading; only prices that are public on the site are collected.
❓ 1xBet scraper FAQ
Can I scrape 1xBet legally?
The actor only collects odds that are already publicly visible on the 1xBet sites, with no login, account or private content. Scraping publicly available data is generally considered lawful (see hiQ Labs v. LinkedIn), and you remain responsible for following the site's Terms of Service and the laws that apply to you, including betting regulations in your country.
What data does the 1xBet scraper return?
Each match has its league, country, start time, both sides, venue, round and the main prices (1X2, double chance, handicap, total, both teams to score). With Include all markets it adds every priced selection of the match.
How many matches can I scrape from one URL?
maxItems limits the matches saved for each start URL, or in total when you give no start URL. A match costs one request, and a sport URL goes through the busiest leagues first.
Which sports and 1xBet sites does the scraper cover?
36 sports (see the list above, or pick All sports) on 18 1xBet sites. The prices are the same on every site; the site only decides which country's page is read.
Can I get live and pre-match matches in one run?
Yes. Set Pre-match, live or both to both. Each record says which it is in mode.
How do I get only matches whose odds changed?
Use Cache project name with the same name on every run for cache deduplication: unchanged matches are skipped and not charged, and the rest come back as new or updated.
How do I get the halves, quarters or sets of a match?
Turn on Include sub-games. Each pre-match match then has a subGames list, every entry with its own main prices (and all its markets when Include all markets is on).
Why are horse racing and golf missing?
They are events with runners rather than two sides (home and away), a different structure from the matches this scraper reads.
How do I scrape 1xBet with Python?
Use the Python example above: start the actor with the Apify client and iterate over the dataset items.
Can I run this 1xBet scraper on a schedule?
Yes. Use Apify Schedules to run it as often as you need, with the same cache project name for deduplication, and compare each run's odds to see how prices move.
What output formats are supported?
JSON, CSV, Excel, XML and RSS, either from the Output tab or through the Apify API.
Why are some prices empty?
1xBet does not offer every market on every match: lower-league and smaller-sport matches often have no double chance or both-teams-to-score prices, and those fields are null.
🔗 Relevant actors for 1xBet odds data
| Scraper | Description |
|---|---|
| 📈 Action Network Odds & Public Betting Scraper | Sportsbook odds, public betting splits, opening lines and line movement. |
| 🎰 DraftKings Sportsbook Odds & Player Props Scraper | DraftKings odds for NBA, NFL, MLB, NHL, UFC, soccer and more, with player props. |
| 🏈 FanDuel Odds, Player Props & Same Game Parlay Scraper | FanDuel Sportsbook odds, player props and same game parlays. |
| 📊 Covers.com Odds, Line History & Betting Trends Scraper | Covers.com odds, line history and betting trends for the major US leagues. |
| 🔮 Kalshi Markets Scraper | Kalshi prediction market prices, implied probability, spread and volume. |
🔗 Other actors you may find useful
| Scraper | Description |
|---|---|
| 🛍️ Mercari Japan Scraper | Mercari Japan listings with price in JPY, sale status and sold items. |
| 🚗 Arabam.com Car Listings Scraper | Car listings from arabam.com, Turkey's car marketplace. |
| 📺 YouTube Video List Scraper | Video listings from YouTube channels and playlists. |
| 💼 Dice Jobs Scraper | Tech job listings from Dice by keyword or URL. |
| 🏠 Otodom.pl Property Scraper | Property listings from Otodom.pl with price, area and rooms. |
💬 Support & contact
If you encounter any issues or have questions, please open an issue.
You can also find more of our actors on the Actor Flow page.