# Football Betting Stats: Over 2.5, BTTS, Form & H2H (`precious_bathmat/football-betting-stats`) Actor

Pre-match football betting stats for every fixture: form, points per game, goals, over 1.5/2.5/3.5, both teams to score, clean sheets, home/away splits and head-to-head. Top leagues, European, international and African competitions. No tips, no key, no proxy.

- **URL**: https://apify.com/precious\_bathmat/football-betting-stats.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Sports, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 fixtures

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Football Betting Stats: Over 2.5, BTTS, Form & H2H

The pre-match numbers every football bettor checks, for **every fixture at once**: both teams' **form**, **points per game**, **goals for and against**, how often their games go **over 1.5, 2.5 and 3.5 goals**, how often **both teams score**, **clean sheets**, **home-only and away-only records**, and the **head-to-head**. Top leagues, the Champions League, Nations League, World Cup and AFCON qualifiers, and the leading African leagues, including Kenya, Nigeria and South Africa.

Other football Actors give you scores and fixture lists. This one gives you the form guide behind every fixture, ready for a spreadsheet, a model or a quick scan before the weekend.

No tips, no API key, no proxy.

### What does this do?

For each fixture in the window you choose, it reads both teams' last matches and their meetings, then works out:

```
Australia vs Brazil · Friendly International · 25 Sep 2026 10:00 UTC

                     Australia        Brazil
 form (last 10)      LDLWDLWWLL       LWWWDWWWLD
 points per game     1.1              2.0
 goals for / against 1.0 / 1.1        2.3 / 1.1
 over 2.5            30%              80%
 both teams score    30%              80%
 at this venue       home 7-1-2       away 3-2-5

 combined: over 2.5 55% · BTTS 55% · avg goals 2.8 · goals expected 1.5 - 1.0
 head-to-head: Australia 1 win, 1 draw, 4 losses · last: Australia 0-4 Brazil (2017)
```

### Who is it for?

- **Bettors**: a full weekend's form guide in one table, filtered to the leagues you bet on
- **Tipsters and betting Telegram or Discord channels**: the stats behind every pick, refreshed daily
- **Model builders**: clean pre-match features for every fixture, measured strictly before kick-off, so results never leak into the inputs
- **Fantasy and media sites**: talking points for every match

### What data do you get?

One row per fixture:

| Field | What it tells you |
|---|---|
| `kickoff`, `country`, `league`, `stage`, `home`, `away`, `status`, `score` | The fixture (and the result, for finished matches) |
| `homeForm`, `awayForm`, `homePointsPerGame`, `awayPointsPerGame` | Recent results, most recent first |
| `over25Percent`, `bttsPercent`, `avgTotalGoals` | Both sides' rates averaged |
| `venueOver25Percent`, `venueBttsPercent` | The same, using only the home side's home games and the away side's away games |
| `homeGoalsExpected`, `awayGoalsExpected` | Each side's scoring rate averaged with what the other side concedes |
| `homeLast`, `awayLast` | Full figures: W-D-L, goals for and against, over 1.5 / 2.5 / 3.5, BTTS, clean sheets, failed to score, days of rest |
| `homeAtHome`, `awayAway` | The same figures at this venue only |
| `headToHead` | Meetings, home wins, draws, away wins, average goals, over 2.5, BTTS, last meeting |

### Do the numbers mean anything? A check on real results

A live run on 24 September 2026 read 289 finished matches from the previous three days, with each match's stats measured before it kicked off, and compared them with what happened:

| Pre-match "both teams to score" rate | Matches | Both teams actually scored |
|---|---|---|
| under 40% | 38 | **18%** |
| 40% to 59% | 136 | 53% |
| 60% or more | 115 | **63%** |

| Pre-match "over 2.5" rate | Matches | Actually went over 2.5 |
|---|---|---|
| under 60% | 159 | 52% |
| 60% or more | 130 | **73%** |

The numbers track reality: matches the stats rated low for BTTS saw both teams score **less than a fifth** of the time. Two honest caveats. It is **three days and 289 matches**, which is enough to show a pattern and not enough to measure it precisely. And **bookmakers know all of this too**: an obvious BTTS "yes" is priced accordingly. These are the stats to check, not a system that beats the odds.

### How it works, and what it does not do

- **Everything is measured before kick-off.** Each team's list of recent matches includes the match itself and anything played since; those are removed, so a finished match's figures are exactly what was knowable beforehand. That is what makes the check above possible, and what makes the data safe to train a model on.
- **All competitions count.** A team's last 10 includes league, cup and international matches, as a form guide should. The head-to-head is every meeting, any competition.
- **Combined figures are averages, not predictions.** "Over 2.5 55%" means the two sides' records average 55%, which is what you would work out by hand. No model is fitted and no pick is made.
- **International breaks empty the domestic leagues.** The major-league set includes the Nations League, World Cup and AFCON qualifiers, so there is always something; pick "All leagues" to see every match.
- **Scores are full time.** Cup ties settled in extra time use the score after extra time.

### Example runs

| Run on 24 September 2026 | Result |
|---|---|
| Major leagues, next 3 days (an international-break week) | **137 fixtures** in 41 s, from 3,004 matches listed |
| All leagues, finished, last 3 days | **300 matches** in 99 s |
| Head-to-head feeds read | 436 of 437 |
| Failures | none |

### Pricing

**$0.005 per fixture.** A 200-fixture weekend costs **$1.00**; one league's round of 10 matches costs **$0.05**.

### Input

| Field | Meaning |
|---|---|
| **Leagues** | Major leagues (default), all leagues, or your own list |
| **Custom leagues** | e.g. "ENGLAND: Premier League", "KENYA: Premier League", "EUROPE: Champions League" |
| **Teams** | Only fixtures involving these teams |
| **Days ahead / Days back** | The window, up to 7 days each way (UTC) |
| **Fixtures** | Upcoming, finished, or both |
| **Form window** | How many previous matches the figures use (default 10) |
| **Include women's and youth football** | Off by default |
| **Maximum fixtures** | A cap, earliest kick-off first |

### Integrations

Results export to JSON, CSV, Excel and Google Sheets, or feed a bot, a Telegram or Discord channel or a model through the Apify API, webhooks, Make, Zapier and n8n. Schedule it every morning for the day's fixtures.

# Actor input Schema

## `leagueSet` (type: `string`):

Major leagues: the top domestic leagues of Europe and the Americas, the Champions League, Europa and Conference League, Nations League, World Cup and AFCON qualifiers, and the leading African leagues (Kenya, Nigeria, South Africa). All leagues: every senior men's match Flashscore lists. Custom: only the leagues you list below.

## `leagues` (type: `array`):

Used when Leagues is Custom. Write them as "COUNTRY: League", e.g. "ENGLAND: Premier League", "KENYA: Premier League", "EUROPE: Champions League". A name without a country ("Premier League") matches that league in every country.

## `teams` (type: `array`):

Only fixtures involving these teams, by any part of the name, e.g. "Arsenal", "Gor Mahia". Leave empty for all.

## `daysAhead` (type: `integer`):

How many days of fixtures after today (UTC). 2 covers today and the next two days.

## `daysBack` (type: `integer`):

Also include matches from this many days ago. With 'Finished' below, this gives you each result next to the stats that were known before kick-off.

## `status` (type: `string`):

Upcoming fixtures for pre-match research, finished ones to check past results against the stats, or both.

## `lastMatches` (type: `integer`):

How many previous matches each team's figures use. 10 is the usual form guide; 5 reacts faster, 20 is steadier.

## `includeWomenAndYouth` (type: `boolean`):

Adds women's, U17-U23, reserve and youth matches when Leagues is Major or All.

## `maxFixtures` (type: `integer`):

Stops after this many fixtures, earliest kick-off first.

## Actor input object example

```json
{
  "leagueSet": "major",
  "leagues": [],
  "teams": [],
  "daysAhead": 2,
  "daysBack": 0,
  "status": "upcoming",
  "lastMatches": 10,
  "includeWomenAndYouth": false,
  "maxFixtures": 200
}
```

# Actor output Schema

## `fixtures` (type: `string`):

Every fixture, earliest kick-off first, with over 2.5, BTTS, form and head-to-head.

## `summary` (type: `string`):

Fixtures by league, feed coverage and the limits of the data.

# 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 = {
    "leagues": [],
    "teams": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/football-betting-stats").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 = {
    "leagues": [],
    "teams": [],
}

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/football-betting-stats").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 '{
  "leagues": [],
  "teams": []
}' |
apify call precious_bathmat/football-betting-stats --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/football-betting-stats"
        }
    }
}
```

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/dCqhoKVT5y9lhv7En/builds/ehxTHJrPgaL21B8px/openapi.json
