Head-to-head records, and what they are actually good for

23 September 2026 · 6 min read

Every match preview opens with the head-to-head record. It is easy to fetch, easy to show, and the statistic most often asked to do a job it cannot do. We checked what it is worth against 3,042 league matches.

What the endpoint returns

One call per pair, inside one competition. Teams can be given by id or by slug:

curl -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: football-leagues1.p.rapidapi.com" \
  "https://football-leagues1.p.rapidapi.com/premier-league/teams/arsenal/head-to-head/manchester-city"

The summary follows the order of the teams in the path, and the meetings come newest first:

{
  "data": {
    "teams": [
      { "id": 104, "slug": "arsenal", "name": "Arsenal", "code": "ARS", ... },
      { "id": 110, "slug": "manchester-city", "name": "Manchester City", "code": "MCI", ... }
    ],
    "summary": { "matches": 4, "wins": [1, 1], "draws": 2, "goals": [9, 6] },
    "matches": [ ... ]
  },
  "meta": {}
}

That is every meeting we hold in that competition, which for the domestic leagues goes back to September 2024. Meetings in other competitions are not in it: the same two clubs in the Champions League are a separate call under /champions-league.

How much history a pair has

Not much. In the eight domestic leagues a pair of clubs has met between 2.7 and 3.2 times on average in the matches we hold, and never more than six. In the Champions League and the Europa League the average is about 1.2, because the league phase draws new opponents every season.

Arsenal and Manchester City are a typical pair: four meetings, one win each and two draws.

Where it decides something: the table

In LaLiga, Serie A, the Primeira Liga and the Süper Lig, clubs level on points are separated by their results against each other before goal difference is looked at. In the Bundesliga, the Eredivisie and the Championship it comes after goal difference and goals scored. The Premier League, Ligue 1 and the three UEFA league phases do not use it at all. /standings already applies each league's order, and the tie-break article has the full list.

If you sort a table yourself, this is where you need the head-to-head record. It is the one place where it decides something rather than describes it.

Where it says less than it seems: the next result

We took every finished match in the eight domestic leagues where the two clubs had met before in the same competition, and asked whether the side with more wins in those earlier meetings won again. 3,042 matches had such a leader.

PickWonDrewLost
Better head-to-head record45.6%25.8%28.6%

That is better than guessing. It is not as good as the obvious alternative. On the 2,534 of those matches where both clubs had already played at least five games that season, picking the side with more points per game won 50.2% of the time, against 45.7% for the head-to-head leader.

The difference is clearest when the two disagree. In 737 matches the head-to-head leader was the side with the worse record this season. The in-form side won 44.1% of them. The head-to-head leader won 28.5%.

More meetings did not help either. The leader won 44.2% of the time after a single earlier meeting and 46.7% after four or more.

The record describes two squads that no longer exist. Players move, managers change, and a win from two seasons ago says less about Saturday than the last eight weeks do. Whatever the head-to-head record does predict, it mostly borrows from how good the teams are, and the current table measures that better.

Showing it honestly

Show counts rather than a percentage. "Won 1, drew 2, lost 1 of 4" tells a reader how little there is to go on. "25% win rate" hides it.

const HOST = 'football-leagues1.p.rapidapi.com';
const res = await fetch(
  'https://' + HOST + '/premier-league/teams/arsenal/head-to-head/manchester-city',
  { headers: { 'X-RapidAPI-Key': process.env.RAPIDAPI_KEY, 'X-RapidAPI-Host': HOST } },
);
const { data } = await res.json();
const [a, b] = data.teams;
const { matches, wins, draws } = data.summary;
console.log(a.name + ' won ' + wins[0] + ', drew ' + draws + ', lost ' + wins[1] +
  ' of ' + matches + ' against ' + b.name);
// Arsenal won 1, drew 2, lost 1 of 4 against Manchester City

List the matches with their dates next to the summary, so that a 5-1 from February 2025 does not pass for current form. If you are building anything that estimates who will win, start from this season's results and treat the head-to-head record as colour.

How the numbers were made

Every finished match we held on 23 September 2026 in the Premier League, LaLiga, Serie A, Bundesliga, Ligue 1, Eredivisie, Primeira Liga and EFL Championship, from September 2024 on. For each match we counted only meetings before its kickoff in the same competition, and points per game only from that club's earlier matches in the same season. A level head-to-head record, or level points per game, counts as no pick. The three UEFA competitions were left out because their pairs rarely meet twice. For scale, the home side won 41.5% of the same 3,042 matches.

More

Why we serve no table rather than half a season

A league table built from part of a season is not partial data, it is wrong data that looks right. The rule we apply, what it costs us, and why a 404 is the better answer.

How not to burn your free tier

Most quota goes on requests that could not have returned anything new. Read the cache headers you are already being sent, stop polling faster than the data moves, and know which plan the thing you are building actually needs.

Two teams, same points: every league breaks the tie differently

Goal difference decides it in England, Germany and France. In Spain, Italy, Portugal and Turkey the head-to-head record comes first. Sort a table yourself and you have it wrong for four of the twelve.

Build a live football scoreboard

A working scoreboard in about 60 lines: what /matches/live returns, why you poll every 30 seconds and not faster, and why your API key must never reach the browser.

What's inside a match: lineups, events and ratings

A field-by-field walk through a match detail response: formations, starting elevens, the event timeline, and how to rebuild a goal-by-goal summary from it.

Try it

Every endpoint mentioned here is in the reference, and every listing has a free tier. Start on the front page.