Dribble
Dribble

BigQuery Data Access

SQL access to a dataset published for your tier. Run queries from your own Google Cloud billing project; Google charges for query compute under its pricing and quotas.

BigQuery subscriptions start at $49/month. Compare BigQuery plans →

Plans, datasets, and licence

Starter · $49/month

dribble360.football_starter

Personal and academic use. Monthly publication. Core player fields; DOB, height, weight, and foot are excluded.

Pro · $149/month

dribble360.football_pro

Commercial derived products, weekly publication, and available player biography. Raw redistribution is excluded.

Max · $499/month

dribble360.football_max

Daily validated publication, enriched Premier League events, named lineups, ordering, and captured revision history. A seven-day evaluation is available only when the product passes publication checks.

Pro and Max permit commercial derived products. Raw-data redistribution is not included by default. Any negotiated raw-data retention or redistribution rights require a separately signed Max order form and licence addendum, subject to Dribble’s upstream rights. The signed agreement and Terms of Service govern your use.

Getting access

Choose a tier, then open /bq-subscribers and connect the Google account or service-account email you will query from. Dribble grants access to that tier’s dataset and project discovery. Your identity also needs permission to run BigQuery jobs in your own billing project. Checkout and connection require a current, validated publication.

Use football_starter, football_pro, or football_max as assigned in your workspace. The canonical football dataset is the internal publication source, not the subscriber dataset.

Tables included in every tier

13 data tables, plus product_manifest. Entity tables and appearance/assignment tables are separate.

TablePurposeSchema notes
playersPlayer directory7 core columns on Starter; 11 including biography on Pro/Max
teamsTeam directoryJoin by team ID
managersManager directorySeparate from manager assignments
refereesOfficial directorySeparate from match roles
leaguesCompetitionsJoin seasons.league_id to id
seasonsSeason catalogCompetition-specific season labels
matchesFixtures and results8 BigQuery columns; differs from CSV/REST
player_matchesPlayer statisticsFilter through matches and seasons
team_matchesTeam statisticsOne team side per match
manager_matchesManager assignmentsmanager_id, team_id, match_id, type
referee_matchesOfficial assignmentsRole-specific available statistics
transfersHistorical club movementsArchived; collection paused; through 15 May 2026
match_eventsPitch events13 columns on Starter/Pro; Max also includes period_id

Max event detail

Max adds 7 tables, for 20 data tables plus the manifest. Enriched event detail is specific to the Premier League; do not assume every competition has these fields.

premier_league_events

Enriched events with unique keys, periods, pass end coordinates, qualifiers, and deterministic ordering fields.

premier_league_event_qualifiers

Normalized qualifier types, order, and values keyed to the event.

premier_league_lineups

Named players, starters and bench, positions, formation places, and formations where recorded.

premier_league_event_types

Published event-type counts by season.

premier_league_event_versions

Captured content revisions with observation times, row hashes, and provenance.

premier_league_publications

Publication history and event-row counts.

premier_league_metadata

Coverage start, ordering semantics, as-of rules, and explicit historical limitations.

Standard event coordinates use the Opta 0–100 pitch system. Coordinates and player attribution can be null. Pressure data is not available. Provider event IDs restart per team: use event_key for identity, and the published team/match sequence fields for deterministic ordering. Revision history begins at its recorded coverage start; the archive does not reconstruct revisions from before capture began.

Check publication and schema

The following examples use Pro. Substitute your assigned tier. A ready manifest records a validated publication; its timestamp does not prove every upstream feed has equal completeness. Compare coverage dates for the specific analysis.

SELECT * FROM `dribble360.football_pro.product_manifest`;

SELECT table_name, column_name, data_type, is_nullable
FROM `dribble360.football_pro.INFORMATION_SCHEMA.COLUMNS`
ORDER BY table_name, ordinal_position;

SELECT l.known_name AS competition, s.name AS season,
       COUNT(*) AS recorded_matches, MAX(m.date) AS latest_fixture
FROM `dribble360.football_pro.matches` m
JOIN `dribble360.football_pro.seasons` s ON s.id = m.season_id
JOIN `dribble360.football_pro.leagues` l ON l.id = s.league_id
GROUP BY competition, season
ORDER BY competition, season DESC;

Example analysis

Premier League player totals and xG per 90 minutes, using named player and season IDs. Appearance rows with no minutes are excluded.

SELECT p.id, COALESCE(p.known_name, p.name) AS player,
       SUM(pm.goals) AS goals,
       ROUND(SAFE_DIVIDE(SUM(pm.expected_goals) * 90,
                         SUM(pm.mins_played)), 3) AS xg_per_90
FROM `dribble360.football_pro.player_matches` pm
JOIN `dribble360.football_pro.players` p ON p.id = pm.player_id
JOIN `dribble360.football_pro.matches` m ON m.id = pm.match_id
JOIN `dribble360.football_pro.seasons` s ON s.id = m.season_id
JOIN `dribble360.football_pro.leagues` l ON l.id = s.league_id
WHERE s.name = '2025/2026' AND l.slug = 'premier-league'
  AND pm.mins_played > 0
GROUP BY p.id, player
ORDER BY goals DESC
LIMIT 20;

Coverage and freshness

Source ingestion is scheduled daily. Starter publishes monthly, Pro weekly, and Max after successful daily publication and contract validation. This is post-match data. Season depth and event detail vary by competition and round; calendar-year leagues use different season labels. Inspect the workspace samples, seasons, and the metadata queries before building a model. BigQuery access has no Dribble REST request quota; Google Cloud quotas and compute charges still apply.