Skip to content

withqwerty/reep

Repository files navigation

Reep

Charles Reep's match notations from 1953

The football entity register. Maps player, team, coach, competition, and season identities across Transfermarkt, FBref, UEFA, Sofascore, and 30+ data providers.

Named after Charles Reep (1904--2002), an RAF wing commander who hand-recorded every action in over 2,200 football matches starting in the 1950s. He's considered the grandfather of football analytics -- decades before expected goals or tracking data, Reep was tallying passes, shots, and sequences with pen and paper, pioneering the idea that football could be understood through data.

What is this?

A canonical identity file for football. Every person, club, competition, and season gets a stable Reep ID (reep_<type_prefix><8hex>), linked to their IDs on other platforms. If you have a Transfermarkt ID and need the FBref ID for the same player — or want to resolve an Opta competition ID to its FBref equivalent — this register gives you the answer.

The unique key is reep_id. Wikidata QIDs are available as a provider mapping where the entity exists in Wikidata, but entities can exist independently (e.g. lower-league players sourced from Opta).

People who are both players and coaches (e.g. Pep Guardiola) have separate records with distinct Reep IDs — reep_p* for the player record, reep_c* for the coach record.

Think of it as the football equivalent of the Chadwick Baseball Bureau Register.

Data

File Records Description
data/people.csv ~488K Players and coaches with provider IDs and bio
data/teams.csv ~45K Clubs with provider IDs and metadata
data/competitions.csv ~336 Leagues, cups, and tournaments with provider IDs
data/seasons.csv ~3.8K Season editions of competitions
data/names.csv varies Alternate names and aliases
data/meta.json Generation timestamp and counts

People schema

Column Description Example
reep_id Reep ID (canonical key) reep_p2804f5db
key_wikidata Wikidata QID (empty if not in Wikidata) Q99760796
type player or coach player
name Primary English name Cole Palmer
full_name Birth/legal name Cole Jermaine Palmer
date_of_birth ISO date 2002-05-06
nationality Country United Kingdom
position Playing position attacking midfielder
height_cm Height in centimetres 185
key_transfermarkt Transfermarkt player ID 568177
key_transfermarkt_manager Transfermarkt manager ID (coaches only) 50100
key_fbref FBref player ID dc7f8a28
key_soccerway Soccerway person ID 525801
key_sofascore Sofascore player ID 982780
key_flashscore Flashscore player ID palmer-cole/h8agbDt7
key_opta Opta player ID 7cwgrmorsb42qaj5vrhp8fhzp
key_premier_league Premier League player ID 49293
key_11v11 11v11 player ID 265554
key_espn ESPN FC player ID
key_national_football_teams National Football Teams ID 92970
key_worldfootball WorldFootball.net ID cole-palmer
key_soccerbase Soccerbase player ID 125454
key_kicker Kicker player ID cole-palmer
key_uefa UEFA player ID
key_lequipe L'Equipe player ID
key_fff_fr FFF.fr player ID
key_serie_a Lega Serie A player ID
key_besoccer BeSoccer player ID
key_footballdatabase_eu FootballDatabase.eu person ID
key_eu_football_info EU-Football.info player ID
key_hugman Barry Hugman's Footballers ID
key_german_fa DFB person ID
key_statmuse_pl StatMuse PL player ID
key_sofifa SoFIFA / EA FC player ID
key_soccerdonna Soccerdonna player ID (women's football)
key_dongqiudi Dongqiudi player ID
key_understat Understat player ID 1234
key_whoscored WhoScored player ID 456789
key_fbref_verified FBref ID (cross-verified via worldfootballR) dc7f8a28
key_sportmonks SportMonks player ID 12345
key_api_football API-Football player ID 1100
key_fotmob FotMob player ID 292462
key_opta_numeric Opta legacy numeric ID (same as FPL code, The Analyst sc- IDs) 244851
key_thesportsdb TheSportsDB player ID 34146086
key_skillcorner SkillCorner player ID 23959
key_wyscout Wyscout player ID 234966
key_impect Impect player ID 52615
key_heimspiel heim:spiel player ID 361032
key_capology Capology player slug cole-palmer-36271
position_detail Granular position from Transfermarkt Attacking Midfield

Teams schema

Column Description Example
reep_id Reep ID (canonical key) reep_t0871097b
key_wikidata Wikidata QID Q9616
name Primary English name Arsenal F.C.
country Country United Kingdom
founded Founding date 1886-10-01
stadium Home ground Emirates Stadium
key_transfermarkt Transfermarkt team ID 11
key_fbref FBref squad ID 18bb7c10
key_soccerway Soccerway team ID 660
key_opta Opta team ID b3sy95iqnw2bv69a0gxunhiot
key_kicker Kicker team ID
key_flashscore Flashscore team ID
key_sofascore Sofascore team ID
key_soccerbase Soccerbase team ID
key_uefa UEFA team ID
key_footballdatabase_eu FootballDatabase.eu team ID
key_worldfootball WorldFootball.net team ID
key_espn ESPN team ID
key_playmakerstats PlaymakerStats team ID
key_clubelo Club Elo team ID Arsenal
key_sportmonks SportMonks team ID 123
key_api_football API-Football team ID 42
key_sofifa SoFIFA / EA FC team ID 1
key_fotmob FotMob team ID 9825
key_opta_numeric Opta legacy numeric team ID 3
key_capology Capology team slug arsenal

Competitions schema

Column Description Example
reep_id Reep ID (canonical key) reep_lb3d230cb
key_wikidata Wikidata QID Q9448
name Competition name Premier League
country Country United Kingdom
key_transfermarkt Transfermarkt competition ID GB1
key_fbref FBref competition ID 9
key_opta Opta competition ID (UUID) 2kwbbcootiqqgmrzs6o5inle5
key_opta_numeric Opta legacy numeric competition ID 8
key_optacore Opta core numeric competition ID 1

Seasons schema

Column Description Example
reep_id Reep ID (canonical key) reep_sa7f63ba6
key_wikidata Wikidata QID Q124371422
name Season name 2024–25 Premier League
competition_reep_id Reep ID of parent competition reep_lb3d230cb

Names schema

Column Description Example
key_wikidata Wikidata QID Q11893
name Primary name Cristiano Ronaldo
alias Alternate name Cristiano Ronaldo dos Santos Aveiro

Coverage

Not every entity has every ID. Coverage depends on what the Wikidata community has mapped plus independently verified mappings. Use GET /stats for live counts.

Provider Source Notes
Transfermarkt Wikidata Highest coverage across all entities
FBref Wikidata Strong for recent players
Soccerway Wikidata Broad international coverage
Sofascore Wikidata Modern players well covered
Premier League Wikidata PL players only
Opta Verified Alphanumeric IDs from Stats Perform's Opta F1 database (~50K players)
Opta numeric Verified Legacy Opta numeric IDs (same as FPL code, The Analyst sc- IDs)
Impect Verified DOB + name matching via Impect export
Wyscout Verified Via Impect ID mappings
SkillCorner Verified Via Impect ID mappings
heim:spiel Verified Via Impect ID mappings
TheSportsDB Verified Direct Wikidata link + DOB/name matching
API-Football Verified Via TheSportsDB + direct matching
ESPN Verified Via TheSportsDB mappings
FotMob Verified DOB + name matching
FBref verified Verified Cross-verified via worldfootballR
Understat Verified Cross-reference matching
WhoScored Verified Cross-reference matching
SportMonks Verified Cross-reference matching
Club Elo Verified Manual team mapping

Wikidata IDs are community-maintained and update automatically with each refresh. Verified IDs are matched independently using DOB, name, and cross-provider bridges, then validated before inclusion.

Usage

Python

import csv

# Load people into a dict keyed by Reep ID
people = {}
with open("data/people.csv") as f:
    for row in csv.DictReader(f):
        people[row["reep_id"]] = row

# Look up by Transfermarkt ID
tm_index = {row["key_transfermarkt"]: row for row in people.values() if row["key_transfermarkt"]}
palmer = tm_index["568177"]
print(palmer["reep_id"])    # "reep_p2804f5db"
print(palmer["key_fbref"])  # "dc7f8a28"

R

library(readr)
people <- read_csv("data/people.csv")

# All Premier League-registered players
pl_players <- people |> filter(key_premier_league != "")

# Cross-reference: Transfermarkt -> FBref
people |>
  filter(key_transfermarkt == "568177") |>
  select(reep_id, name, key_fbref, key_sofascore)

SQL (load into SQLite)

sqlite3 reep.db <<EOF
.mode csv
.import data/people.csv people
.import data/teams.csv teams
.import data/competitions.csv competitions
.import data/seasons.csv seasons
.import data/names.csv names
EOF
-- Find all IDs for a player
SELECT * FROM people WHERE name LIKE '%Salah%';

-- Reverse lookup: FBref ID -> everything
SELECT * FROM people WHERE key_fbref = 'e342ad68';

-- Lookup by Reep ID
SELECT * FROM people WHERE reep_id = 'reep_p2804f5db';

API

The Reep API provides the same data as the CSVs via a convenient REST interface. All providers (Wikidata + custom verified) are available to all plans.

Get your API key on RapidAPI.

Endpoint Description Example
GET /search Search by name (prefix matching) /search?name=Cole Palmer&type=player
GET /resolve Translate provider ID /resolve?provider=transfermarkt&id=568177
GET /lookup Look up by Reep ID or Wikidata QID /lookup?id=reep_p2804f5db
GET /stats Database statistics /stats

The /lookup endpoint auto-detects the ID type: Reep IDs start with reep_, Wikidata QIDs start with Q. The legacy ?qid= parameter is still supported.

All endpoints that return entities accept an optional type parameter (player, team, coach, competition, season). For dual-role people, /lookup without type returns all records. Default search excludes seasons to avoid noise — use type=season to search seasons explicitly.

Reep IDs

Every entity in the register has a self-minted Reep ID as its canonical identifier. The format is reep_<type_prefix><8hex>:

Prefix Entity type Example
reep_p Player reep_p2804f5db (Cole Palmer)
reep_t Team reep_t0871097b (Arsenal F.C.)
reep_c Coach reep_c9103de59 (A. H. Albut)
reep_l Competition reep_lb3d230cb (Premier League)
reep_s Season reep_sa7f63ba6 (2024–25 Premier League)

Reep IDs are stable — they never change, even if a player's Wikidata QID is merged or deleted. Wikidata QIDs are available as a provider mapping (key_wikidata in CSVs, qid in API responses) but are not the identity backbone.

This design follows the Chadwick Baseball Bureau Register model: self-minted UUIDs as primary keys, with all provider IDs (including Wikidata) as cross-references.

CLI

A Python CLI for the register lives in its own repo: withqwerty/reep-cli.

pip install git+https://github.com/withqwerty/reep-cli.git

# Search by name
reep search "Cole Palmer"

# Resolve: Transfermarkt -> all IDs
reep resolve transfermarkt 568177

# Translate: just output the target ID (pipe-friendly)
reep translate transfermarkt 568177 fbref
# dc7f8a28

# Download CSVs for offline use
reep download

# Search offline
reep local "Salah"

Source

Most data is extracted from Wikidata via SPARQL. Wikidata is a free, collaborative knowledge base maintained by thousands of volunteers. The cross-provider ID mappings exist because the Wikidata community has systematically added external identifier properties for football data sources.

Entities not in Wikidata (e.g. lower-league players) are sourced from authoritative provider databases like Opta's F1 player database.

Wikidata properties used

Property Provider
P2446 Transfermarkt player ID
P2447 Transfermarkt manager ID
P7223 Transfermarkt team ID
P5750 FBref player ID
P8642 FBref squad ID
P2369 Soccerway person ID
P6131 Soccerway team ID
P12302 Sofascore player ID
P8259 Flashscore player ID
P12539 Premier League player ID
P12551 11v11 player ID
P3681 ESPN FC player ID
P2574 National Football Teams ID
P2020 WorldFootball.net ID
P2193 Soccerbase player ID
P2276 UEFA player ID
P7361 UEFA team ID
P3665 L'Equipe player ID
P9264 FFF.fr player ID
P13064 Lega Serie A player ID
P12577 BeSoccer player ID
P3537 FootballDatabase.eu person ID
P7351 FootballDatabase.eu team ID
P3726 EU-Football.info player ID
P12606 Barry Hugman's Footballers ID
P4023 German FA person ID
P12567 StatMuse PL player ID
P12312 Kicker team ID
P7876 Flashscore team ID
P13897 Sofascore team ID
P7454 Soccerbase team ID
P7287 WorldFootball.net team ID
P1469 SoFIFA / EA FC player ID
P4381 Soccerdonna player ID (women's football)
P8134 Soccerdonna coach ID
P11379 Dongqiudi player ID
P7280 PlaymakerStats team ID
P12758 Transfermarkt competition ID
P13664 FBref competition ID
P8735 Opta competition ID

Provider notes

Opta / Stats Perform — Three distinct ID systems exist within Stats Perform's ecosystem:

  • opta — 25-char alphanumeric UUIDs (e.g. 7cwgrmorsb42qaj5vrhp8fhzp) from the current SD API / Stats Perform F1 database. Used for players (50K), teams, competitions, and seasons. This is the canonical Opta provider.
  • opta_numeric — Legacy numeric codes (e.g. 244851 for Cole Palmer). Same as FPL code field, The Analyst sc- URL IDs, and Wikidata P8735/P8736/P8737. Players (3.8K), teams (255), competitions (73), coaches (28). Sources: FPL data, Wikidata dump, Opta Web Archive feeds.
  • optacore — A separate numeric system with different numbers (e.g. FA Cup = 93 vs opta_numeric 1). Competitions only (47). From the SD API mapping file.

WorldFootball.net / heim:spiel — WorldFootball.net (owned by heim:spiel) migrated from slug-based URLs (e.g. cole-palmer) to numeric IDs in November 2025. The old slugs still work via redirect. Wikidata P2020 contains the old slug format. The heim:spiel numeric IDs in Reep are the same as the new WorldFootball.net IDs — the URL prefix indicates entity type:

Type WorldFootball.net URL heim:spiel ID
Player /pe426937 426937
Team /te1672 1672
Competition /co91 91
Match /ma10988177 10988177

Soccerway / Flashscore — Both owned by Livesport (Czech data company), but use separate ID systems. Soccerway changed their URL/ID scheme in September 2025. Reep has 139K Soccerway IDs in the old numeric format from Wikidata P2369 (e.g. 45569). The old URLs still redirect:

Format URL ID
Old (numeric) int.soccerway.com/players/-/45569/ 45569
New (slug) soccerway.com/player/zver-mateja/p0DFdwlo/ p0DFdwlo

A new Wikidata property for the new format has been proposed but not yet approved.

Updates

The register is refreshed periodically from Wikidata, plus monthly reconciliation against the full Wikidata dump to catch drift (deleted entities, lost occupations, missed IDs). Each refresh picks up new entities, updated IDs, and corrections made by the Wikidata community. Custom provider mappings persist across all refreshes. The data/meta.json file records when the current CSVs were generated.

Contributing

Share ID mappings

Have a dataset that maps football player or team IDs across providers? We'd love to include it. Send us a CSV with these columns:

Column Required Description Example
provider Yes Provider name wyscout
external_id Yes The player/team ID on that provider 12345
name Yes Player or team name (for validation) Cole Palmer
date_of_birth Recommended ISO date (helps us match accurately) 2002-05-06
transfermarkt_id Recommended Transfermarkt ID (best for accurate matching) 568177
type Recommended player, team, or coach player
nationality Optional Country (helps disambiguate) England

The more columns you include, the more accurately we can match to existing entities. A Transfermarkt ID or date of birth alone is usually enough.

How to submit:

We validate and match all submissions before adding them. Your IDs go into our verified custom mappings and are served via the API alongside Wikidata data.

Edit Wikidata directly

If a player is missing a Transfermarkt ID or FBref ID, the ideal fix is to add it to their Wikidata page — the next refresh picks it up automatically.

Wikidata requires ~50 manual edits and a 4-day waiting period before bulk edits are possible. If you have a large dataset, send it to us (see above) and we'll handle the Wikidata submission on your behalf.

Code contributions

PRs to the Worker (src/) and documentation are welcome in this repo. CLI PRs belong in withqwerty/reep-cli. Note that the data CSVs are regenerated upstream from Wikidata + verified mappings — don't PR data changes directly.

What this repo doesn't contain

This repo publishes IDs, the API, and the published CSVs — not scraping logic or raw data dumps from providers. Matching and ingestion scripts are maintained in a separate private repo.

License

The data is derived from Wikidata and is available under CC0 1.0.

About

The football entity register. Maps player, team, and coach identities across Transfermarkt, FBref, UEFA, Sofascore, and 25+ data providers.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors