Welcome to football.db.rsssf
Contents:
What’s News (in 2026)?
Note - there’s no more plan / efforts to turn or “distill the conventions” from the Rec.Sport.Soccer Statistics Foundation (RSSF) match schedules & results into a structured text format with a context-free grammar (and lexer & parser). Sorry, there are just too many variants, quirks and styles.
The good news - in most cases, yes, you can convert the RSSSF match schedules & results
using its own “ad-hoc” formats (mostly depending on the original author) into the Football.TXT format,
that is, a structured text format with a context-free grammar (and lexer & parser).
Either convert the RSSSF text “by hand” or with your own little search & replace scripts or why not
with the help of the latest and greatest large language models (LLMs)?
Tip: For samples of RSSSF pages (incl. the Premier League, FA Cup, Club World Cup, European Championship, and more) converted to the structured Football.TXT format
(for easy parsing and exporting to JSON, CSV, SQL and friends),
see the /rsssf folder in the
/euro,
/england (and others) repos.
What’s the Rec.Sport.Soccer Statistics Foundation (RSSSF)?
The RSSSF collects and offers football (soccer) league & cup match results & schedules from all over the world online in a (semi-)structured text format. Example (RSSSF before):
Round 1
[May 25]
Vasco da Gama 1-0 Portuguesa
[Carlos Tenório 47']
Vitória 2-2 Internacional
[Maxi Biancucchi 2', Gabriel Paulista 11'; Diego Forlán 29', Fred 63']
Corinthians 1-1 Botafogo
[Paulinho 73'; Rafael Marques 24']
[May 26]
Grêmio 2-0 Náutico [played in Caxias do Sul-RS]
[Zé Roberto 15', Elano 70']
Ponte Preta 0-2 São Paulo
[Lúcio 9', Jádson 44'p]
Criciúma 3-1 Bahia
[Matheus Ferraz 45'+1', Lins 46', João Vítor 82'; Diones 72']
Santos 0-0 Flamengo [played in Brasília-DF]
Fluminense 2-1 Atlético/PR [played in Macaé-RJ]
[Rafael Sóbis 15'p, Samuel 53'; Manoel 28']
Cruzeiro 5-0 Goiás
[Diego Souza 5', Bruno Rodrigo 30', Nílton 40',79', Borges 42']
Coritiba 2-1 Atlético/MG
[Deivid 53', Arthur 90'+1'; Diego Tardelli 51']
or using an alternate format style (RSSSF before):
Round 1
[May 25]
Vasco da Gama 1-0 Portuguesa
(Carlos Tenório 47)
Vitória 2-2 Internacional
(Maxi Biancucchi 2, Gabriel Paulista 11 - Diego Forlán 29, Fred 63)
Corinthians 1-1 Botafogo
(Paulinho 73 - Rafael Marques 24)
[May 26]
Grêmio 2-0 Náutico [played in Caxias do Sul-RS]
(Zé Roberto 15, Elano 70)
Ponte Preta 0-2 São Paulo
(Lúcio 9, Jádson 44 p)
Criciúma 3-1 Bahia
(Matheus Ferraz 45+1, Lins 46, João Vítor 82 - Diones 72)
Santos 0-0 Flamengo [played in Brasília-DF]
Fluminense 2-1 Atlético/PR [played in Macaé-RJ]
(Rafael Sóbis 15 p, Samuel 53 - Manoel 28)
Cruzeiro 5-0 Goiás
(Diego Souza 5, Bruno Rodrigo 30, Nílton 40,79, Borges 42)
Coritiba 2-1 Atlético/MG
(Deivid 53, Arthur 90+1 - Diego Tardelli 51)
or the max goal version style (RSSSF before):
Round 1
[May 25]
Vasco da Gama 1-0 Portuguesa
[1-0 Carlos Tenório 47]
Vitória 2-2 Internacional
[1-0 Maxi Biancucchi 2, 2-0 Gabriel Paulista 11, 2-1 Diego Forlán 29, 2-2 Fred 63]
Corinthians 1-1 Botafogo
[1-0 Rafael Marques 24, 1-1 Paulinho 73]
[May 26]
Grêmio 2-0 Náutico [played in Caxias do Sul-RS]
[1-0 Zé Roberto 15, 2-0 Elano 70]
Ponte Preta 0-2 São Paulo
[0-1 Lúcio 9, 0-2 Jádson 44 p]
...
Find out more about the Rec.Sport.Soccer Statistics Foundation (RSSSF) »
How to convert to the Football.TXT format
Yes, you can! Let’s convert the sample to the Football.TXT format:
▪ Round 1
May 25
Vasco da Gama 1-0 Portuguesa
(Carlos Tenório 47')
Vitória 2-2 Internacional
(Maxi Biancucchi 2', Gabriel Paulista 11'; Diego Forlán 29', Fred 63')
Corinthians 1-1 Botafogo
(Paulinho 73'; Rafael Marques 24')
May 26
Grêmio 2-0 Náutico [played in Brasília-DF]
(Zé Roberto 15', Elano 70')
Ponte Preta 0-2 São Paulo
(Lúcio 9', Jádson 44'p)
Criciúma 3-1 Bahia
(Matheus Ferraz 45'+1', Lins 46', João Vítor 82'; Diones 72')
Santos 0-0 Flamengo [played in Brasília-DF]
Fluminense 2-1 Atlético/PR [played in Macaé-RJ]
(Rafael Sóbis 15'p, Samuel 53'; Manoel 28')
Cruzeiro 5-0 Goiás
(Diego Souza 5', Bruno Rodrigo 30', Nílton 40',79', Borges 42')
Coritiba 2-1 Atlético/MG
(Deivid 53', Arthur 90'+1'; Diego Tardelli 51')
What’s changed?
- Start round lines with a round marker
▪. - Do NOT enclose date headers / lines with square brackets
[]. - Enclose goal lines with parentheses, that is,
()instead of square brackets[].
More Football.TXT format notes:
- Yes, the minute marker
'is optional and - the separator for goals of team home/away is
;or-.
Let’s try:
▪ Round 1
May 25
Vasco da Gama 1-0 Portuguesa (Carlos Tenório 47)
Vitória 2-2 Internacional (Maxi Biancucchi 2, Gabriel Paulista 11 - Diego Forlán 29, Fred 63)
Corinthians 1-1 Botafogo (Paulinho 73 - Rafael Marques 24)
May 26
Grêmio 2-0 Náutico [played in Brasília-DF]
(Zé Roberto 15, Elano 70)
Ponte Preta 0-2 São Paulo (Lúcio 9, Jádson 44p)
Criciúma 3-1 Bahia (Matheus Ferraz 45+1, Lins 46, João Vítor 82 - Diones 72)
Santos 0-0 Flamengo [played in Brasília-DF]
Fluminense 2-1 Atlético/PR [played in Macaé-RJ]
(Rafael Sóbis 15p, Samuel 53 - Manoel 28)
Cruzeiro 5-0 Goiás (Diego Souza 5, Bruno Rodrigo 30, Nílton 40,79, Borges 42)
Coritiba 2-1 Atlético/MG (Deivid 53, Arthur 90+1 - Diego Tardelli 51)
and, yes, let’s convert the “max goal version style” to the Football.TXT format:
▪ Round 1
May 25
Vasco da Gama 1-0 Portuguesa
(1-0 Carlos Tenório 47)
Vitória 2-2 Internacional
(1-0 Maxi Biancucchi 2, 2-0 Gabriel Paulista 11, 2-1 Diego Forlán 29, 2-2 Fred 63)
Corinthians 1-1 Botafogo
(1-0 Rafael Marques 24, 1-1 Paulinho 73)
May 26
Grêmio 2-0 Náutico [played in Caxias do Sul-RS]
(1-0 Zé Roberto 15, 2-0 Elano 70)
Ponte Preta 0-2 São Paulo
(0-1 Lúcio 9, 0-2 Jádson 44 p)
...
Background - What’s structured text?
Q: How does the “magic” work?
A: If the text follows the Football.TXT (structured text) format conventions than you can use the Football.TXT lexer & parser machinery to “automagically” break-up the text into its (semantic) parts, that is, tokens (that build-up the parse tree and more) resulting in:
[[:round, "Round 1"]],
[[:date, "May 25"]],
[[:team, "Vasco da Gama"], [:score, "1-0"], [:team, "Portuguesa"]],
[[:player, "Carlos Tenório"], [:minute, "47'"]],
[[:team, "Vitória"], [:score, "2-2"], [:team, "Internacional"]],
[[:player, "Maxi Biancucchi"],[:minute, "2'"],[:","],
[:player, "Gabriel Paulista"],[:minute, "11'"],[:";"],
[:player, "Diego Forlán"],[:minute, "29'"],[:","],
[:player, "Fred"],[:minute, "63'"]],
[[:team, "Corinthians"], [:score, "1-1"], [:team, "Botafogo"]],
[[:player, "Paulinho"], [:minute, "73'"], [:";"],
[:player, "Rafael Marques"], [:minute, "24'"]],
[[:date, "May 26"]],
[[:team, "Grêmio"], [:score, "2-0"], [:team, "Náutico"], [:note, "played in Caxias do Sul-RS"]],
[[:player, "Zé Roberto"], [:minute, "15'"], [:","],
[:player, "Elano"], [:minute, "70'"]],
[[:team, "Ponte Preta"], [:score, "0-2"], [:team, "São Paulo"]],
[[:player, "Lúcio"], [:minute, "9'"], [:","],
[:player, "Jádson"], [:minute, "44'"], [:pen, "p"]],
[[:team, "Criciúma"], [:score, "3-1"], [:team, "Bahia"]],
[[:player, "Matheus Ferraz"],[:minute, "45'+1'"],[:","],
[:player, "Lins"],[:minute, "46'"],[:","],
[:player, "João Vítor"],[:minute, "82'"],[:";"],
[:player, "Diones"],[:minute, "72'"]],
[[:team, "Santos"], [:score, "0-0"], [:team, "Flamengo"], [:note, "played in Brasília-DF"]],
[[:team, "Fluminense"], [:score, "2-1"], [:team, "Atlético/PR"], [:note, "played in Macaé-RJ"]],
[[:player, "Rafael Sóbis"],[:minute, "15'"],[:pen, "p"],[:","],
[:player, "Samuel"],[:minute, "53'"],[:";"],
[:player, "Manoel"],[:minute, "28'"]],
[[:team, "Cruzeiro"], [:score, "5-0"], [:team, "Goiás"]],
[[:player, "Diego Souza"],[:minute, "5'"],[:","],
[:player, "Bruno Rodrigo"],[:minute, "30'"],[:","],
[:player, "Nílton"],[:minute, "40'"],[:","],[:minute, "79'"],[:","],
[:player, "Borges"],[:minute, "42'"]],
[[:team, "Coritiba"], [:score, "2-1"], [:team, "Atlético/MG"]],
[[:player, "Deivid"],[:minute, "53'"],[:","],
[:player, "Arthur"],[:minute, "90'+1'"],[:";"],
[:player, "Diego Tardelli"],[:minute, "51'"]]]
For more, see the Football.TXT format, level 1 & 2 specs »
Questions? Comments?
Yes, you can. More than welcome. See Help & Support »
Edit Me! This website is a public GitHub repo. Please help by forking the project and adding to it.