# Betano Odds API — Live and Pre-Match Odds, 14 Countries (`blackfalcondata/betano-odds-api`) Actor

$3 day pass or $0.002 per call. Betano odds as a REST API: pre-match and live with score and clock, 600+ markets per match · the same match priced across 14 country books · search by team name · one HTTP call and JSON back with no batch run.

- **URL**: https://apify.com/blackfalcondata/betano-odds-api.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 lookups

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Betano Odds API do?

Betano Odds API serves live and pre-match odds from betano.com and its 14 country books as a REST API, across all 29 sports the books carry. Call one URL and get every market of a match with its price, the live list with score and clock, a league listing, a coupon window or a team page as JSON, with Sportradar match statistics on request. Pay $0.002 per call, or $3 for a day pass with unlimited calls.

### How to use this actor

- 👉 **Register for a free Apify account** — no credit card required.
- 🎉 Just click **[Sign up free on Apify →](https://console.apify.com/sign-up?fpr=1h3gvi)** and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.

### Key features

- **⚡ REST endpoints, no batch run:** ten endpoints on an always-on server, all answering JSON: the league catalogue, the 3/12/24-hour coupon, a league, a single match, everything in play, site search, a team page and a player page. One HTTP call gets you the answer. There is no run to start, nothing to poll and no dataset to read afterwards, and every parameter is a query string, so a spreadsheet, a notebook or a bot can call it directly.
- **🎟️ $3 day pass or $0.002 per call:** pay per call at $0.002, or POST once to /day-pass and every endpoint answers without a per-call charge for the next 24 hours. The pass is stored under your own account, so it covers all of your runs while it lasts. Health, the sport list and the pass status are always free, and a request that fails validation or that the source does not answer is never charged.
- **🔴 Live matches with score and clock:** /live returns every match in play on the chosen book right now, with the running score, the match clock, the period and the live prices, across football, tennis, basketball, ice hockey and the other sports the book runs. Ask for all markets and each match comes back with its full in-play market set instead of the summary prices.
- **🌎 14-market coverage:** fourteen Betano country books behind one address: Germany, Brazil, Portugal, Romania, Denmark, Czechia, Bulgaria, Peru, Argentina, Chile, Ecuador, Nigeria, Ghana and Ontario. Pass `country` to pick the book that prices the answer, and `compare=PT,DK` to attach the same match as other books price it. Event ids are shared across all fourteen.
- **📌 Change classification:** every price arrives as decimal odds with an implied probability, and optionally as fractional and American odds too. Player and team table markets are flattened so each selection carries the player name and the line it refers to. Each event carries `fetchedAt`, the moment its odds were read, and a price hash you can compare between calls: identical hashes mean identical prices, and a market the book has pulled keeps its prices, so read `suspended` alongside it to see what can still be struck.
- **📤 Export anywhere:** every answer is JSON with a stable key set: absent data comes back as null rather than a missing key, so a consumer never has to tell "absent" from "unknown". Call it from a spreadsheet, a notebook, an n8n or Make flow, or straight from an AI agent, and pipe the response wherever you need it.

### What data can you extract from betano.com?

Each result includes Core event fields (`eventId`, `bookmaker`, `country`, `sport`, `sportId`, `leagueId`, `leagueName`, and `regionId`, and more). All fields are always present — unavailable data points are returned as `null`, never omitted.

### Input

Configure the actor through the input schema in Apify Console.

Key parameters:

- **`country`** — Which Betano country site answers when a request does not name one. Every endpoint also takes a country parameter that overrides this per request. (default: `"DE"`)

### Input examples

**Serve the German book by default** — Requests that name no country are answered by Betano Germany. Every endpoint still takes its own country parameter.

→ A running server at https://blackfalcondata--betano-odds-api.apify.actor.

```json
{
  "country": "DE"
}
```

**Serve the Danish book by default** — Same server, pointed at Betano Denmark. Handy when most of your calls are for one book: you can then leave country off the query string.

→ A running server whose /coupon, /league and /live answer from the Danish book unless told otherwise.

```json
{
  "country": "DK"
}
```

### Output

Every request answers with structured event records as JSON in the response body. There is no run to start and no dataset to poll.

### Example event record

```json
{
  "eventId": "88312255",
  "bookmaker": "betano",
  "country": "DK",
  "sport": "football",
  "sportId": "FOOT",
  "leagueId": "5",
  "leagueName": "LaLiga",
  "regionId": "2",
  "regionName": "Spain",
  "name": "FC Barcelona - Rayo Vallecano",
  "homeTeam": "FC Barcelona",
  "awayTeam": "Rayo Vallecano",
  "participants": [
    {
      "id": "118748",
      "name": "FC Barcelona"
    },
    {
      "id": "107232",
      "name": "Rayo Vallecano"
    }
  ],
  "startTime": "2026-08-31T19:30:00.000Z",
  "startTimeMs": 1788204600000,
  "isLive": true,
  "willGoLive": true,
  "streamingAvailable": true,
  "hasLineups": false,
  "liveScore": {
    "home": "2",
    "away": "1"
  },
  "liveClock": {
    "secondsSinceStart": 1777,
    "clockStopped": false
  },
  "suspended": false,
  "totalMarketsAvailable": 429,
  "betRadarId": 72478512,
  "url": "https://www.betano.dk/live/fc-barcelona-rayo-vallecano/88312255/",
  "outright": false,
  "marketsCount": 429,
  "markets": [
    {
      "marketId": "2835499119",
      "name": "Match Result",
      "type": "MRES",
      "typeId": 1,
      "suspended": false,
      "selections": [
        {
          "selectionId": "9910857609",
          "name": "1",
          "fullName": "FC Barcelona",
          "price": 1.04,
          "impliedProbability": 0.9615,
          "teamId": "118748"
        },
        {
          "selectionId": "9910857610",
          "name": "X",
          "fullName": "Draw",
          "price": 13.5,
          "impliedProbability": 0.0741
        },
        {
          "selectionId": "9910857611",
          "name": "2",
          "fullName": "Rayo Vallecano",
          "price": 45,
          "impliedProbability": 0.0222,
          "teamId": "107232"
        }
      ]
    },
    {
      "marketId": "2921279478",
      "name": "Over/Under Total Goals",
      "type": "HCTG",
      "typeId": 13,
      "handicap": 5.5,
      "suspended": false,
      "selections": [
        {
          "selectionId": "10261178746",
          "name": "Over 5.5",
          "fullName": "Over",
          "price": 1.62,
          "impliedProbability": 0.6173,
          "handicap": 5.5
        },
        {
          "selectionId": "10261178747",
          "name": "Under 5.5",
          "fullName": "Under",
          "price": 2.27,
          "impliedProbability": 0.4405,
          "handicap": 5.5
        }
      ]
    }
  ],
  "priceHash": "f42dba056c98a6940c7499bff4a9cb65b8ff9f163057dfae340d307aa3a7d388",
  "scrapedAt": "2026-08-31T20:02:11.672Z",
  "fetchedAt": "2026-08-31T20:02:11.673Z"
}
```

### How to scrape betano.com

1. Go to [Betano Odds API](https://apify.com/blackfalcondata/betano-odds-api?fpr=1h3gvi) in Apify Console.
2. Configure the input.
3. Set `maxResults` to control how many results you need.
4. Click **Start** and wait for the run to finish.
5. Export the dataset as JSON, CSV, or Excel.

### Use cases

- Extract event data from betano.com for market research and competitive analysis.
- Track pricing trends across regions and categories over time.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.

### How much does it cost to scrape betano.com?

Betano Odds API uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. You pay a small fee when the run starts and then for each result that is actually produced.

- **Run start:** $0.0005 per run
- **Per lookup (primary event):** $0.002

You are billed only for the events your run actually triggers. Prices below are the Free plan tier.

| Event | Price (Free tier) | Charged when |
|---|---|---|
| Actor Start | $0.0005 (one-time) | Charged once when the server starts (one event per GB of memory, minimum one). Platform usage (compute and data transfer) is billed separately by Apify at your plan rates. |
| Lookup (primary) | $0.002 | Charged once per successful lookup on /leagues, /coupon, /league, /event, /live, /search, /team or /player, whether it returns one event or a hundred. /health, /sports and the day-pass status are free, and a lookup that fails or times out is never charged. Nothing is charged while a day pass is running. |
| Day pass | $3 | Charged once when you POST /day-pass. For the next 24 hours every lookup answers without a per-call charge, across all of your runs. Buying a second pass while one is running is refused rather than charged. |

Example costs (primary event only — other events above add cost when they fire):

- 10 results: **$0.021**
- 25 results: **$0.051**
- 100 results: **$0.2**
- 200 results: **$0.4**
- 500 results: **$1**

> **Platform usage is billed on top of these prices.** The figures above are Apify event fees only. Compute units and proxy traffic are billed separately by Apify at your actual consumption, and for proxy- or browser-heavy workloads they can exceed the event fees. What you actually pay depends on your own input — how many results you request, whether detail enrichment is on, the run memory you choose, and your proxy settings — so it cannot be stated as a fixed figure here. Every run reports its exact platform usage on the run detail page.
>
> The **Actor Start** event is charged once per GB of run memory (minimum one), so a run configured with 2 GB is charged two start events rather than one.

### FAQ

#### How many results can I get from betano.com?

The number of results depends on the search query and available events on betano.com. Use the `maxResults` parameter to control how many results are returned per run.

#### Can I integrate Betano Odds API with other apps?

Yes. Betano Odds API works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use Betano Odds API with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript, Python, and other languages.

#### Can I use Betano Odds API through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use narrow filters and the actor's result limit to keep payloads manageable for LLM context windows.

#### Is it legal to scrape betano.com?

This actor extracts publicly available data from betano.com. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/betano-odds-api/issues?fpr=1h3gvi) on the actor's page in Apify Console. Your feedback helps us improve.

### You might also like

- [Betano Odds Scraper — Live + All Markets, 14 Countries](https://apify.com/blackfalcondata/betano-scraper?fpr=1h3gvi) — Scrape Betano betting odds from 14 country books at $3 per 1,000 events: pre-match and in-play.
- [Elpris Scraper — Danish Electricity Prices & Suppliers](https://apify.com/blackfalcondata/elpris-scraper?fpr=1h3gvi) — Scrape every electricity product Danish suppliers report to elpris.dk — supplier, price bands.
- [Google Trends Scraper \[Just 💰$0.49\] — Interest & Related](https://apify.com/blackfalcondata/google-trends-scraper?fpr=1h3gvi) — 💰 $0.49 per 1,000 trending terms — the cheapest paid Google Trends scraper. Scrape live trending.
- [MLB Stats Scraper 💰$2/1K — Rosters & Season Stats](https://apify.com/blackfalcondata/mlb-scraper?fpr=1h3gvi) — Scrape statsapi.mlb.com for every MLB player in a season: full roster with batting, pitching.
- [Outseo Scraper: Full Leaderboard](https://apify.com/blackfalcondata/outseo-scraper?fpr=1h3gvi) — Scrape every ranked site on the outseo.lol organic-traffic leaderboard, not just the first page,.
- [Sportradar Match Stats Scraper — Lineups, Timeline, Players](https://apify.com/blackfalcondata/sportradar-stats-scraper?fpr=1h3gvi) — Match statistics from Sportradar at $2 per 1,000 matches plus $1 per 1,000 data layers: lineups,.
- [Transfermarkt Scraper \[Just 💰$0.5\] — football market values](https://apify.com/blackfalcondata/transfermarkt-market-value-scraper?fpr=1h3gvi) — 💰 $0.5 per 1,000 records. Scrape transfermarkt.com — player market values with full history ·.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

### Endpoints

Every endpoint is a GET unless marked otherwise, every parameter is a query string, and every answer is JSON. Append `?token=<APIFY_TOKEN>` (or send `Authorization: Bearer <APIFY_TOKEN>`) to authenticate. The base address is `https://blackfalcondata--betano-odds-api.apify.actor`. The full parameter list, with the allowed values for each, is on the Endpoints tab.

| Endpoint | What it returns | Charged |
|---|---|---|
| `/health` | Version, and that the server is up | Free |
| `/sports` | The 29 sports, with the key you pass as `sport` | Free |
| `/leagues` | Every league one country book carries for one sport | 1 call |
| `/coupon` | Matches starting in the next 3, 12 or 24 hours. For a sport the book publishes no such page for, every league it carries instead | 1 call |
| `/league/{leagueId}` | One league's remaining fixture list | 1 call |
| `/league?name=` | The same, with the league found by name | 1 call |
| `/event/{eventId}` | One match, with every market the book prices, and Sportradar statistics with `stats=` | 1 call |
| `/live` | Every match in play now, with score, clock and period | 1 call |
| `/search?term=` | Matches found by team, player or competition name | 1 call |
| `/team?url=` | One team's upcoming matches | 1 call |
| `/player?url=` | One player's matches, with their prop markets | 1 call |
| `GET /day-pass` | Whether a pass is running, and when it ends | Free |
| `POST /day-pass` | Buys a 24 hour pass | $3.00 once |

```bash
BASE=https://blackfalcondata--betano-odds-api.apify.actor
TOKEN=<APIFY_TOKEN>

  # Which leagues does the Danish book carry for football?
curl "$BASE/leagues?country=DK&sport=football&token=$TOKEN"

  # Everything kicking off in the next 24 hours on the German book
curl "$BASE/coupon?country=DE&sport=football&hours=24&max=50&token=$TOKEN"

  # The Premier League fixture list, next 7 days, headline markets
curl "$BASE/league/1?country=DK&daysAhead=7&token=$TOKEN"

  # ...or by name, without looking the id up first
curl -G "$BASE/league" --data-urlencode "name=Premier League" -d country=DK -d token=$TOKEN

  # One match with every market it offers, priced in three books at once
curl "$BASE/event/90925073?country=DK&markets=all&odds=all&compare=PT,DE&token=$TOKEN"

  # Everything in play right now across two sports
curl "$BASE/live?country=DK&sports=football,tennis&max=25&token=$TOKEN"

  # Find a match by team name
curl "$BASE/search?country=DK&term=manchester&token=$TOKEN"

  # One team's upcoming matches, from the page address you copied
curl -G "$BASE/team" --data-urlencode "url=https://www.betano.dk/sport/fodbold/turneringer/england/1/crystal-palace-fc/107915-t/" -d token=$TOKEN

  # Buy a day pass, then call as much as you like for 24 hours
curl -X POST "$BASE/day-pass?token=$TOKEN"
```

### How billing works

Two ways to pay, and you can switch between them whenever you like.

Per call: $0.002 for each successful lookup, whatever it returns. One event or a hundred costs the same, because the work is the lookup and not the row count. `/health`, `/sports` and the day-pass status are always free, and a request that fails validation, that the book does not carry, or that times out is never charged.

Day pass: POST once to `/day-pass` for $3.00 and no per-call charge applies for the next 24 hours. The pass is stored under your own account, so it covers every run of this API you start while it lasts. Buying a second one over a running pass is refused rather than charged, and the response tells you when the first one ends.

On top of either, Apify bills the platform usage the server consumes (compute and data transfer) at your plan's rates, and the Actor start fee is charged once when the server boots. A headline-markets request uses very little compute; opening every market of a match uses more.

### Reading the answer

A successful answer is `{ "ok": true, "country": "DK", "count": 2, "events": [ ... ], "meta": { "ms": 1063, "requests": 1 } }`. Each event carries its id, teams, league, kick-off, and its markets with every priced selection. In-play events add `liveScore`, `liveClock` and `livePeriod`. `compare` attaches the other books' headline markets under `oddsByCountry`, keyed by country code.

A failure is `{ "ok": false, "error": "BAD_REQUEST", "message": "..." }`. The `error` code is stable and safe to branch on: `BAD_REQUEST` means the request itself is wrong and retrying it unchanged will fail the same way, `NOT_FOUND` and `UNKNOWN_LEAGUE` mean this country book does not carry what you asked for, and `SOURCE_UNAVAILABLE` or `REQUEST_TIMEOUT` are worth a retry.

Every event also carries `priceHash`, an order-independent hash over every market, selection and price on it. Two responses with the same hash carry identical prices, so a monitor can poll an endpoint and compare one string instead of walking the markets.

### Disclaimer

This actor reads publicly available odds from Betano's country websites. It is not affiliated with, endorsed by or operated by Betano or Kaizen Gaming. Odds, markets, scores and fixture lists are reproduced as the site served them at the time of the run and can change or be withdrawn at any moment; they are provided for information and analysis only, are not betting advice, and no result of this actor should be relied on to place a bet. Availability depends on the source: when a Betano site is down, blocks a region, changes its pages or lists no matches for your selection, a request can return fewer results or none. A request the source did not answer is not charged at all; a request that answers with no matching events is a successful lookup and is charged as one call. You also pay the Actor start fee and the platform usage the server consumed. Access to gambling content is restricted in many jurisdictions; you are responsible for complying with the laws that apply to you and with Betano's terms of use.

### Search keywords

betano scraper, betano api, apify betano, betano data extraction, betano odds api scraper, betano odds api api, apify betano odds api, betano odds api data extraction, betano.com scraper, betano.com data, betano.com api, betano odds api germany, betano odds api germany scraper, betano odds api brazil, betano odds api brazil scraper, betano odds api portugal, betano odds api portugal scraper, betano odds api romania, betano odds api romania scraper, betano odds api denmark, betano odds api denmark scraper, betano odds api czechia, betano odds api czechia scraper, betano odds api bulgaria, betano odds api bulgaria scraper, betano odds api peru, betano odds api peru scraper, betano odds api argentina, betano odds api argentina scraper, betano odds api chile, betano odds api chile scraper, betano odds api ecuador, betano odds api ecuador scraper, betano odds api nigeria, betano odds api nigeria scraper, betano odds api ghana, betano odds api ghana scraper, betano odds api canada, betano odds api canada scraper.

# Actor input Schema

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

Which Betano country site answers when a request does not name one. Every endpoint also takes a country parameter that overrides this per request.

## Actor input object example

```json
{
  "country": "DE"
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/betano-odds-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/betano-odds-api").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 '{}' |
apify call blackfalcondata/betano-odds-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,blackfalcondata/betano-odds-api"
        }
    }
}

```

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/vmiPtqnCK5KgqGLqw/builds/OyYsgpl0DehSIAwMt/openapi.json
