# 1xBet Odds Scraper: Pre-Match Odds & Markets (`confidential_gnat/1xbet-odds-scraper`) Actor

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.

- **URL**: https://apify.com/confidential_gnat/1xbet-odds-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 1xBet Odds Scraper: Pre-Match Odds & Betting Markets

![1xBet Odds Scraper cover: 1xBet odds with every market, pre-match and live, one row per match](https://i.postimg.cc/C1pfnqPQ/Gemini-Generated-Image-cqppg6cqppg6cqpp.jpg)

**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](https://1xbet.ng/), [1xbet.co.ke](https://1xbet.co.ke/), [1xbet.com.gh](https://1xbet.com.gh/), [1xbet.cm](https://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 `marketIds` keeps 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 `changeType` new 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

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Fill in the **Input** fields (a sport, league or match URL, or leave the URLs empty and choose sports and the 1xBet site).
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 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 Odds Scraper input form in Apify Console with the first 8 fields numbered 1 to 8: 1xBet URLs, cache project name, max matches per URL, sports, pre-match live or both, 1xBet site, include all markets and include sub-games](https://i.postimg.cc/3wvvwBBB/Gemini-Generated-Image-eh9hfkeh9hfkeh9h.jpg)

1. **1xBet URLs** - a sport, league or match page to scrape (here the football page of 1xbet.ng)
2. **Cache project name** - reuse the same name on every scheduled run for deduplication, so you get only new or changed matches
3. **Max matches per URL** - limit for each start URL (here 5)
4. **Sports** - which sports to scrape when no start URL is given (here football)
5. **Pre-match, live or both** - upcoming matches, matches in play now, or both in one run
6. **1xBet site** - which country site to read (here Nigeria)
7. **Include all markets** - add every priced selection of the match to `outcomes`
8. **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.

- `odds` holds `home`, `draw`, `away`, `homeOrDraw`, `homeOrAway`, `drawOrAway`, `handicapLine`, `handicapHome`, `handicapAway`, `totalLine`, `totalOver`, `totalUnder`, `bothTeamsToScoreYes` and `bothTeamsToScoreNo`. Prices are decimal; a market the match does not offer is `null`.
- The live fields (`homeScore`, `awayScore`, `period`, `elapsedSeconds`, `periodScores`) are filled for live matches and `null` for pre-match ones. A side with no score yet is 0; for tennis the score is sets won and `periodScores` lists the games of each set. A match the live list still shows after the final whistle has `isLive` false.
- `mode` is `prematch` or `live`: with the `both` mode a run holds both kinds.
- `homeLogo` and `awayLogo` are links to the team logos on the 1xBet site (`null` when the side has none).
- `marketsOnFeed` is how many different markets the prices read cover and `totalOutcomesAvailable` how many priced selections the site has for the match. `totalMarketsAvailable` is how many different markets the match has; it is `null` for 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 example `1st half` or `Corners - 2nd half`), `period`, `odds` (the same main prices) and `outcomes` (with **Include all markets**). It is `null` when the match has none or the option is off.
- `changeType` is `new` or `updated` when a cache project name is used and `null` otherwise.
- `handicapLine` is the home side's handicap and `totalLine` the total goals, points or games of the main line.
- `outcomes` (with **Include all markets**) lists `marketId`, `market`, `selectionId`, `selection`, `line`, `price` and `isMainLine`. `market` and `selection` are named for the main markets and `null` for 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 in `reference/MARKET_IDS.md` in the actor source (also as `reference/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](https://1xbet.ng/en/line/football/33957-italy-serie-d/766124921-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](https://1xbet.ng/en/line/football/33957-italy-serie-d/766115630-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](https://1xbet.ng/en/line/football/33957-italy-serie-d/766115626-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](https://1xbet.ng/en/line/football/33957-italy-serie-d/766117069-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](https://1xbet.ng/en/line/football/33957-italy-serie-d/766117072-ac-mestre-lavarian-mortean-esperia) | 1.61 | 3.6 | 5.23 | 2.5 | 1.91 | 1.79 |

**Sample output (raw JSON):**

```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](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = 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`):

```javascript
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:

```bash
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](https://apify.com/confidential_gnat/action-network-odds-scraper) | Sportsbook odds, public betting splits, opening lines and line movement. |
| [🎰 DraftKings Sportsbook Odds & Player Props Scraper](https://apify.com/confidential_gnat/draftkings-odds-scraper) | DraftKings odds for NBA, NFL, MLB, NHL, UFC, soccer and more, with player props. |
| [🏈 FanDuel Odds, Player Props & Same Game Parlay Scraper](https://apify.com/confidential_gnat/fanduel-odds-sgp-scraper) | FanDuel Sportsbook odds, player props and same game parlays. |
| [📊 Covers.com Odds, Line History & Betting Trends Scraper](https://apify.com/confidential_gnat/covers-odds-trends-scraper) | Covers.com odds, line history and betting trends for the major US leagues. |
| [🔮 Kalshi Markets Scraper](https://apify.com/confidential_gnat/kalshi-markets-scraper) | Kalshi prediction market prices, implied probability, spread and volume. |

### 🔗 Other actors you may find useful

| Scraper | Description |
| ------- | ----------- |
| [🛍️ Mercari Japan Scraper](https://apify.com/confidential_gnat/mercari-japan-listings-scraper) | Mercari Japan listings with price in JPY, sale status and sold items. |
| [🚗 Arabam.com Car Listings Scraper](https://apify.com/confidential_gnat/arabam-cars-scraper) | Car listings from arabam.com, Turkey's car marketplace. |
| [📺 YouTube Video List Scraper](https://apify.com/confidential_gnat/youtube-video-list-scraper) | Video listings from YouTube channels and playlists. |
| [💼 Dice Jobs Scraper](https://apify.com/confidential_gnat/dice-jobs-scraper) | Tech job listings from Dice by keyword or URL. |
| [🏠 Otodom.pl Property Scraper](https://apify.com/confidential_gnat/otodom-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](https://apify.com/confidential_gnat/1xbet-odds-scraper/issues/open).

You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

## `startUrls` (type: `array`):

Leave empty to scrape the sports chosen below. Or add a sport page (https://1xbet.ng/en/line/football), a league page (https://1xbet.ng/en/line/football/33957-italy-serie-d), a live sport page (https://1xbet.ng/en/live/football) or one match page (line or live). The site of the URL (any of the sites listed in 1xBet site) is the one that is read.

## `cacheProjectName` (type: `string`):

Use the same name on each scheduled run to get only new matches and matches whose prices or live state changed. Matches that did not change are skipped, not saved and not counted towards Max matches per URL. Each record gets changeType: new or updated. Leave empty to turn the cache off.

## `maxItems` (type: `integer`):

Maximum matches saved for each start URL (or in total when no start URL is given).

## `sports` (type: `array`):

Which sports to scrape when no start URL is given. Empty means football; All sports reads every sport below. Matches are read in the order of the list, busiest leagues first, until Max matches per URL is reached.

## `mode` (type: `string`):

With no start URL: the upcoming matches of the sports above, the matches in play now with their score, period and live odds, or both in one run (each record says which in `mode`).

## `country` (type: `string`):

Which 1xBet site to read, and the country of the residential proxy used. 1xBet answers only from its own countries. Ignored when a start URL names a site.

## `includeAllMarkets` (type: `boolean`):

Adds every priced selection of the match (often 100 to 300) with its market and selection ids, the line and the price. Names are given for the main markets.

## `marketIds` (type: `array`):

Only these markets in `outcomes` (this alone turns on the outcomes, no need for Include all markets). The ids and what they mean are in the Market ids list in the README, for example 17 is Total and 19 is Both teams to score.

## `includeSubGames` (type: `boolean`):

Adds the sub-games of each pre-match match (halves, quarters, periods, sets) in `subGames`, each with its own main prices (and all its markets when Include all markets is on). One more request per sub-game. Live matches have no sub-games.

## `includeSpecialLeagues` (type: `boolean`):

A sport page skips copies of leagues with alternative rules, team-versus-player, statistics and virtual leagues. Turn this on to read them too.

## `proxyConfiguration` (type: `object`):

1xBet blocks datacenter and most foreign addresses, so residential proxies are needed. The proxy country is set by the 1xBet site above.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://1xbet.ng/en/line/football"
    }
  ],
  "maxItems": 5,
  "mode": "prematch",
  "country": "NG",
  "includeAllMarkets": false,
  "includeSubGames": false,
  "includeSpecialLeagues": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://1xbet.ng/en/line/football"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/1xbet-odds-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [{ "url": "https://1xbet.ng/en/line/football" }] }

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/1xbet-odds-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://1xbet.ng/en/line/football"
    }
  ]
}' |
apify call confidential_gnat/1xbet-odds-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/1xbet-odds-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hcbFuiVrIuwVtErys/builds/FkGFjA4kuPqniUl6P/openapi.json
