Football Query

How to build a query

Every question is a sentence built from pills. You pick what you’re looking for, narrow it with conditions, follow relations to other things, and finish with clauses that group, filter and rank. The sentence at the top — Reads as — always says what you’ve asked, in words.

1. Choose what you’re looking for

Click Football entity… after FIND. There are seven things to find: Team, Match, Tournament (one edition, e.g. FIFA World Cup 2014), Goal, Player, Card and Appearance (one player in one match: minutes, goals, cards, position, debut). Streaks come later — they belong to a team, or to a player.

Short cut: type a name straight into the finder. Brazil offers “Team named Brazil”; mbappe offers Kylian Mbappé. Accents and capitals don’t matter anywhere.

2. Narrow it with conditions

Click + on a block to open the finder for it. It offers only what fits: that entity’s properties, the relations it can follow, shortcuts, and clauses. Pick a property and set its operator and value — e.g. Confederation is UEFA.

  • Operators depend on the type: text has contains / starts with / is; numbers have > ≥ < ≤ = ≠ between; dates have after, before, on, between, in year, in decade, in the last N years, more than N years ago, this year, this decade; names and lists (a team, a confederation, a stage) have is / is not / is any of; yes/no properties have is — and some, like Comeback, can be unknown where the record is incomplete.
  • AND or OR. Conditions in a block all have to hold. Click the AND between them to make any one enough.
  • Mixing AND and OR needs a condition group (finder → Operators), so the precedence is always visible.
  • A condition with no value yet is simply ignored — nothing breaks while you’re typing.

3. Follow relations to other things

Relations appear in the finder as played → Match, was won by → Team and so on. Each adds a nested block; its conditions apply to the thing it reaches. A parent is kept if at least one of its related things passes — “teams that played a match where…”.

The team in focus. A match reached from a team (played) is seen from that team’s side, so it gains Result, Opponent, Goals for, Ground and the rest. The block shows a “team in focus” tag. A match on its own has no side: add from the side of → Team to give it one. Tournaments reached from a team (played in, won) gain that team’s Finish, record and group place.

Two sibling blocks both have to hold — so a match with played by England and played by Germany is a head-to-head.

4. What a row is

The deepest shown block decides what each row is. Blocks above it add a column naming themselves; hidden blocks (eye menu → Hide) only filter. So “Brazil → played → Match” with Brazil hidden lists matches; show Brazil too and each row gains Brazil’s name.

  • Columns — the Columns button picks and orders them. Presentation only; the answer doesn’t change.
  • Sorting — click a column heading. Also presentation only.
  • Save — keeps the query in your Library, which needs you signed in with Google — everything else works without an account. Any block’s menu can also Save conditions as a shortcut or Save this block as a shortcut: your own pill, offered in the finder under Your shortcuts.
  • Details — every row opens a side panel for its match, team, tournament, player, goal or streak (a card or an appearance opens its match, from that player’s side; a player’s run opens the player). Names in cells open theirs too, and panels link onwards. Team and player panels filter by years, home/away/neutral and kind of match; Full page opens everything — a tournament’s bracket, a team’s Elo by year and every match — with the filter kept.
  • Graph — charts that fit the answer: results over time, goals by minute, streak timelines, scatter plots and more, drawn from every row.
  • Share link — the address bar always holds the whole query; copy it or use the button.

5. Streaks

On a team, Streak of… finds runs of consecutive matches where something holds. It has two slots:

  • Of what — Wins, Unbeaten, Draws, Clean sheets, Scored in… or Custom, any match conditions (e.g. Scorers for includes Kylian Mbappé).
  • Across — which matches make up the sequence: all, competitive, finals, one competition, or custom. Matches outside it neither extend nor break a run. Choose editions of a competition for runs of tournaments instead: consecutive World Cups, titles in a row.

A streak has Length, Start and End dates, Is active (still going) and Ended by. Is most recent and keep the longest pick one run per team. Show matches on a streak row lists the run itself.

On a player, Run of… does the same for them: consecutive Appearances, Starts or Full matches in their side’s matches, or Scoring appearances in a row. Matches whose line-ups (or, for scoring, scorers) aren’t known are skipped rather than breaking the run.

6. Line-ups, cards and appearances

Where a match’s line-ups are known, everyone who started or came on is on record, with their minutes, position, goals and cards. Three things to find use them:

  • Player — caps, starts, substitute appearances, Minutes played, Minutes per goal, Position, Won / Drawn / Lost and Win % when playing, Clean sheets, cards. From a player: played in, started or came on in → Match (their side in focus), received → Card, made appearance → Appearance.
  • Appearance — one player in one match: Started, Came on, Taken off, Minutes, Played the whole match, Goals, Booked, Sent off, Position, Shirt number, Result, Recorded cap number and Debut. Group appearances by player and sum their minutes, or count distinct tournaments.
  • Card — a yellow, a second yellow or a red: its Minute, the player and team, and Shown to a substitute.

Goals gain Scored by a substitute, Minutes after coming on, On debut and Scorer’s position; a match gains Cards shown and Sendings-off, and, with a team in focus, Sent off (theirs), Opponents sent off, Starting XI’s caps and Changes to the XI. The Full record only shortcut keeps matches whose scorers, line-ups and cards are all known.

Players link to each other too: played alongside and played against reach team-mates and opponents, who gain Matches shared, Starts shared and Pair — group by Pair for the most-used partnerships.

7. Group, measure, keep

Clauses at the end of the query change the answer’s shape:

  • per… makes each row a group — per opponent, per year, per scorer. It starts with a count.
  • + measure adds columns: counts (Wins, Draws…, or count where…), distinct counts (different tournaments), totals, averages, highest and lowest, first and last (by date), and calculated measures — a difference, a ratio or “as % of”.
  • keep where… keeps rows or groups whose column passes: Goals ≥ 10, or against another column — Lost > ‹Won›.
  • keep top… ranks and keeps the first N — overall, or for each value of a column (top scorer for each tournament), with ties kept if you like.

Group rows have View matches (or goals, or whatever was grouped), listing the rows behind the group.

A match reached from a team is seen from that team, so when both sides fit — every UEFA side’s matches — a UEFA v UEFA match comes twice. The results then offer List each match once, which keeps one row per match (the winner’s view). Starting from Match with a hidden played by → Team block gives the same list with no team in focus.

8. The block menu

The eye button on each block opens its menu.

  • Required · Optional · Negated. Optional keeps parents with no match (columns blank, counts 0). Negated keeps only parents with no match — “teams that never…”. Negate the block that must not exist: for “never played England”, negate the match, not the England block.
  • AND / OR between blocks. Click the AND before a second child block to make either enough — “won the World Cup or the Copa América”.
  • Reorder as query root pivots the tree so that block leads; the answer stays the same.
  • Rename gives a block a name used in columns and the sentence.
  • Set an alias lets other blocks refer to this one: is the same as ‹Champion›, or compare a value with it — Host countries includes ‹W›, Date after ‹T›’s end date.
  • Ungroup breaks a shortcut pill into its parts.

9. Facts worked out from the results

  • Elo ratings for every side before every match, and upsets.
  • The run of play where every goal has a scorer: each goal’s role (opener, equaliser, winning goal…), comebacks, lead changes.
  • Finish at each finals tournament (Winner … Group stage) and group position.
  • Next and previous — a team’s next match; a competition’s next edition (the team in focus carries over).
  • Gaps — years since a player’s previous goal, a team’s last win, years between World Cup appearances.
  • From the line-ups — minutes, debuts, clean sheets, a player’s record with and without them (on their full page), and who played together most.

Recipes

Each opens in the builder, so you can see how it’s made and change it.

Every England v Germany match

How many times have England and Germany played each other?

  1. Choose Match as the root.
  2. On the Match block, + played by → Team, then Name is England. Hide the block (eye menu → Hide) so it filters without adding columns.
  3. Again on the Match block, + played by → Team, Name is Germany, and hide it.

Reads as Find matches, played by England, played by Germany.

Teaches: Two sibling blocks under one match — each must hold, so the match involves both sides.

Answer: 35 matches, from 1930 to 2022. West Germany's matches count as Germany's.

Open in the builder →

Brazil's World Cup wins

Which World Cup matches have Brazil won?

  1. Type Brazil in the root finder and pick Team named Brazil. Hide it.
  2. + played → Match. The block shows a “team in focus” tag.
  3. On the Match block: Result is Win, Competition is FIFA World Cup.

Reads as Find Brazil, that played matches where result is Win and competition is FIFA World Cup.

Teaches: A match reached from a team has that team in focus, so Result, Opponent and Goals for are Brazil's.

Answer: 79 matches, the latest three at the 2026 World Cup.

Open in the builder →

Teams that have never played at a World Cup

Which sides have never played a World Cup finals match?

  1. Choose Team as the root.
  2. + played → Match, then Competition is FIFA World Cup.
  3. Open the Match block's eye menu and choose Negated. It now reads “never played”.

Reads as Find teams, that never played matches where competition is FIFA World Cup.

Teaches: A negated relation keeps only the parents with no match. It filters, so it's hidden.

Answer: 131 of the 215 teams — Cape Verde, Curaçao, Jordan and Uzbekistan debuted in 2026.

Open in the builder →

UEFA sides England has never played

Which UEFA teams has England never played against?

  1. Choose Team as the root; Confederation is UEFA; Name is not England.
  2. + played → Match, and make it Negated from its eye menu.
  3. On that Match block, + played against → Team, Name is England.

Reads as Find teams where confederation is UEFA and name is not England, that never played matches, against England.

Teaches: Negate the match, not the opponent: “no match against England” rather than “a match against someone else”.

Answer: Armenia, Faroe Islands and Gibraltar.

Open in the builder →

Argentina's record against non-CONMEBOL sides met 10+ times

Against which non-South American sides has Argentina played at least ten times, and how did it go?

  1. Team named Argentina, hidden; + played → Match.
  2. On the Match block, + played against → Team, Confederation is not CONMEBOL, hidden.
  3. per… → Opponent. It adds a count (Matches).
  4. + measure → Wins, Draws, Losses.
  5. keep where… → Matches ≥ 10.

Reads as Find Argentina, that played matches, against a team where confederation is not CONMEBOL — per opponent: matches, wins, draws, losses, only where matches is at least 10.

Teaches: Group per a column, count rows and rows where a condition holds, then keep groups that pass a threshold.

Answer: 11 opponents, Mexico the most met.

Open in the builder →

Brazil's longest winning runs

What are Brazil's longest runs of consecutive wins?

  1. Team named Brazil.
  2. + Streak of… → Wins. Leave “across” as all matches.
  3. keep top… → Length, 5.

Reads as Find Brazil, with a streak of wins across all matches, keeping the top 5 by length.

Teaches: A streak block: what keeps the run going, across which matches, then rank by length.

Answer: 14 wins in 1997 is the longest.

Open in the builder →

Top scorer at every World Cup

Who was the top scorer at each World Cup?

  1. Tournament, Competition is FIFA World Cup, Competition type is Finals.
  2. + included → Match (hide it), then on the Match + had → Goal, Own goal is no.
  3. per… → Name (the tournament), Scorer, Scored for. It adds a count.
  4. keep top… → the count, 1, then “ties kept” and “for each name”.

Reads as Find tournaments where competition is FIFA World Cup and competition type is Finals, that included matches, that had goals where it wasn't an own goal — per name and scorer and scored for: goals, keeping the top 1 by goals for each name, ties included.

Teaches: Keep top N for each value of a column — here 1 per tournament, with ties kept.

Answer: Just Fontaine 13 in 1958, Kylian Mbappé 10 in 2026 and 8 in 2022; four joint leaders on 5 in 2010.

Open in the builder →

World Cups won by a host

Which World Cups were won by a host nation?

  1. Tournament, Competition is FIFA World Cup.
  2. + was won by → Team. Eye menu → Set an alias → W. Hide it.
  3. On the Tournament, + Host countries, then in the value picker choose ‹W› instead of a value.

Reads as Find tournaments where competition is FIFA World Cup and host countries includes ‹W›, won by ‹W›.

Teaches: An alias names a block so another can compare with it — here the winner against the host countries.

Answer: Six: Uruguay 1930, Italy 1934, England 1966, Germany 1974, Argentina 1978, France 1998.

Open in the builder →

Holding the World Cup and the Euro at once

Which countries held two major trophies at the same time — say the World Cup and the Euro?

  1. Tournament as the root, Competition is FIFA World Cup. Eye menu → Set an alias → First.
  2. + was won by → Team.
  3. On that Team, + won → Tournament, Competition is UEFA Euro.
  4. On the Euro block, + End date, operator before, and in the value picker choose ‹First› → Title held until.
  5. Again, + Title held until, operator after, and choose ‹First› → End date.
  6. Columns → the Team's Name, both tournaments' Name and Title held until.

Reads as Find tournaments — call it ‹First› — where competition is FIFA World Cup, won by a team, that won a tournament where competition is UEFA Euro, end date before ‹First›'s title held until and title held until after ‹First›'s end date.

Teaches: An alias's own properties as values: a title's reign runs from its End date to Title held until, and two reigns overlap when each starts before the other ends.

Answer: Five pairs: West Germany (Euro 1972 with World Cup 1974), France (1998 with 2000), Spain three times (World Cup 2010 with Euro 2008, then with Euro 2012; Euro 2024 with World Cup 2026, both still held). Swap in Copa América for Argentina and Brazil.

Open in the builder →

UEFA sides' biggest wins, each match once

What are the biggest wins in matches involving a UEFA side?

  1. Team as the root, Confederation is UEFA. Hide it.
  2. + played → Match. keep top… → Margin, 10.
  3. Germany 16–0 Russia shows twice, once from each side. Under the count, choose List each match once — it keeps the winner's view.

Reads as Find teams where confederation is UEFA, that played matches, keeping the top 10 by margin, each match once.

Teaches: A match reached through a team is one row per team that fits, so a UEFA v UEFA match comes twice. Each match once keeps one row per match.

Answer: Kazakhstan 20–1 Guam (1997), Germany 16–0 Russia (1912), Denmark 17–1 France (1908), France 14–0 Gibraltar (2023)… each once. Starting from Match, + played by → Team (UEFA) gives the same list with no team in focus.

Open in the builder →

Defending champions out in the group stage

Which World Cup holders went out in the group stage of the next one?

  1. Team as the root.
  2. + won → Tournament, Competition is FIFA World Cup. Hide it.
  3. On that Tournament, + next edition → Tournament, Finish is Group stage.

Reads as Find teams, that won a tournament where competition is FIFA World Cup, whose next edition was a tournament where finish is Group stage.

Teaches: Previous/next edition carries the team in focus, so Finish is the champions' own finish at the next tournament.

Answer: Italy 1950, Brazil 1966, France 2002, Italy 2010, Spain 2014, Germany 2018.

Open in the builder →

Longest waits between a player's goals

Which player went longest between two international goals?

  1. Goal as the root, Own goal is no.
  2. keep top… → Years since their previous goal, 10.
  3. Columns → Scorer, Scored for, Date, Match, Years since their previous goal.

Reads as Find goals where it wasn't an own goal, keeping the top 10 by years since their previous goal.

Teaches: Worked-out properties (here Years since their previous goal) rank like any other column.

Answer: The top five (Aubameyang, Manuel Fernandes, Serginho, Teboho Mokoena, Joaquín) are namesakes or a source error just under the 20-year split; Mágico González's 14.7 years (1977–92) is the longest clearly genuine wait.

Open in the builder →

Most minutes played at World Cups

Who has spent longest on the pitch at World Cup finals?

  1. Appearance as the root, Competition is FIFA World Cup.
  2. group by… → Player and Team, with Sum of Minutes and a Count.
  3. keep top… → Sum of Minutes, 10.

Reads as Find appearances where competition is FIFA World Cup — per player and team: total minutes, matches, keeping the top 10 by minutes.

Teaches: Appearance is one player in one match — group appearances by player and sum their minutes.

Answer: Lionel Messi, 3,054 minutes in 34 matches; then Paolo Maldini (2,220) and Cristiano Ronaldo (2,205). Line-ups are known for World Cups since 1970.

Open in the builder →

Spain's most-used partnerships

Which two Spain players have played together most often?

  1. Player as the root, Played for is Spain. Hide it.
  2. + played alongside → Player.
  3. group by… → Pair (on the second Player), with Max of Matches shared.
  4. keep top… → that measure, 10.

Reads as Find players where played for is Spain, that played alongside a player — per pair: highest matches shared, keeping the top 10 by matches together.

Teaches: Played alongside links a player to team-mates, with the first in focus: Matches shared counts their games together, and grouping by Pair counts each pair once.

Answer: Andrés Iniesta & Sergio Ramos, 112 matches together; Iker Casillas & Xavi, 106; Casillas & Ramos, 103 — in recorded line-ups, so from 2001 on.

Open in the builder →

Messi's longest runs of competitive starts

How many competitive matches in a row has Messi started?

  1. Player as the root, Name is Lionel Messi. Hide it.
  2. + Run of… → Starts, across competitive matches.
  3. keep top… → Length, 3.

Reads as Find Lionel Messi, with a run of consecutive starts across competitive matches, keeping the top 3 by length.

Teaches: A player's runs work like a team's streaks: consecutive appearances, starts, whole matches or scoring appearances. Matches whose line-ups aren't known are skipped.

Answer: 42 competitive starts in a row from July 2007 to June 2013, ended against Ecuador; then 32 (August 2017 – October 2021).

Open in the builder →

Relations at a glance

FromRelationToWhat it reaches
TeamplayedMatchPuts the team in focus: the match gains Result, Goals for, Opponent and the other team-relative properties.
played inTournamentTournament editions the side played at least one match in. Puts the team in focus: the tournament gains Finish, Group position and its record there.
has aStreakA run of consecutive matches, in date order, where a condition holds. You choose what the run is of, and which matches make up the sequence.
was the opponent inMatchMatches it played, seen from the other side — Result is the opponent's. The reverse of played against.
wonTournamentEditions whose final it won, counting penalties. League-format tournaments and qualifying have no winner.
scoredGoalGoals that counted for it, where the scorer was recorded — opponents' own goals included.
had scorerPlayerPlayers who scored for it at least once.
had playerPlayerEveryone on record for it — in a line-up, on the scoresheet or booked. The reverse of played for.
was shownCardCards shown to its players.
had appearanceAppearanceEvery appearance for it — sum minutes or count by player.
Matchplayed byTeamEither side. Two of these, side by side, express a head-to-head.
played againstTeamOnly ever the other team. Use this — not played by — to filter on the opponent's properties, or the team in focus matches its own filter.
is part ofTournamentThe tournament edition the match belonged to. Friendlies have none.
hadGoalGoals in the match, where scorers were recorded.
from the side ofTeamPuts one side in focus, so Result, Goals for and Opponent are from its side. Both sides are tried; this block's conditions pick which — so England v Germany appears twice if both sides qualify.
they scoredGoalGoals that counted for the team in focus — opponents' own goals included. Had lists both sides' goals.
had scorerPlayerPlayers with a goal in it, own goals aside. With a team in focus, only that side's scorers.
had in its line-upPlayerEveryone who played — starters and substitutes who came on. With a team in focus, only that side's players.
had cardCardCards shown in the match, where cards are known. With a team in focus, only its players' cards.
had appearanceAppearanceEveryone who played in it, as appearances. With a team in focus, only its side.
was followed byMatchThe team in focus's next match — e.g. how sides did after a 5-goal defeat.
came afterMatchThe team in focus's previous match.
Tournamentwas won byTeamThe winner of the final, counting penalties. Empty for league-format tournaments and qualifying.
includedMatchEvery match in the edition, from neither side.
featuredTeamSides with at least one match in the edition.
next editionTournamentThe next edition of the same competition. The team in focus carries over — so winners, then next edition where Finish is Group stage, finds defending champions out early.
previous editionTournamentThe previous edition of the same competition, keeping the team in focus.
Goalwas scored inMatchThe match the goal was scored in, seen from the side it counted for.
counted forTeamAn own goal counts for the opposition.
was scored byPlayerThe player who scored it — for an own goal, a player on the other side.
came inMatchThe match the goal came in, with no team in focus. Was scored in puts the goal's side in focus instead.
PlayerscoredGoalEvery goal with their name on it, own goals included — filter on Own goal to leave them out.
scored inMatchMatches with at least one of their goals, with their side in focus — so Result is their team's result.
played forTeamThe national side they played for.
played inMatchMatches with them in the recorded line-up — started, or came on — with their side in focus. Only where line-ups are known.
startedMatchMatches they started, with their side in focus.
came on inMatchMatches they came on in as a substitute, with their side in focus.
receivedCardEvery card shown to them, where cards are known.
made appearanceAppearanceEach match they played, as an appearance: minutes, goals, cards, position, debut.
played alongsidePlayerTeam-mates who were in the same recorded line-up. Adds Matches shared, Starts shared and Pair — group by Pair for the most-used partnerships.
played againstPlayerPlayers on the other side in a recorded line-up. Adds Matches shared and Shared matches won.
has a run ofStreakA player's runs: consecutive appearances, starts or full matches in their side's matches, or consecutive appearances with a goal.
Cardwas shown inMatchThe match, seen from the booked player's side.
was shown toPlayerThe player it was shown to.
was shown to a player ofTeamThe booked player's national side.
Appearancewas made byPlayerThe player who made it.
was inMatchThe match, with the player's side in focus.
was forTeamThe side they played for.
StreakcontainsMatchThe matches inside the run, one row per match, in date order.
containsTournamentThe editions inside a run of editions, one row each, in order.

Know the data

  • Results are from openfootball’s international archive, with martj42’s after openfootball’s last day (the 2026 World Cup among them). Scores are after extra time; a shootout counts as a draw under Result and for whoever went through under Result incl. penalties.
  • Historical sides are merged into their FIFA successors (Soviet Union → Russia, Yugoslavia → Serbia, West Germany → Germany). Matches against non-FIFA sides are left out.
  • Scorers are named for about half of all goals — every World Cup goal, most since 2016, few in friendlies before then — so goal and player totals are lower bounds.
  • Line-ups and cards come from the Fjelstul World Cup Database (World Cups since 1970) and ESPN (most competitive matches since about 2003, friendlies since about 2016). Caps and card counts are lower bounds; Line-ups known, Cards known and Scorers / Line-ups / Cards from on a match say what's there.
  • A player is a name plus a side; the same name more than 20 years apart is taken to be two people. The sources’ player ids join two spellings of one person, and split a name only when two ids played in the same match.
  • Minutes run from kick-off or coming on to the final whistle, being taken off or being sent off; stoppage time counts as the 45th or 90th minute. Positions come from the sources, which rarely give one for a substitute. A Debut is only known where the side’s line-ups go back two years unbroken — otherwise a first recorded cap may not be the first.
  • Finishes need named stages; many regional cups don’t have them. Tournaments without a final (1950 World Cup, early Copas) have no winner.