Tutorial · 8 min · endpoints verified 2026-09-17
How to build a soccer player production board
Rank the production a competition actually serves, goals, appearances and minutes, while keeping empty leaderboards and unresolved player identity explicit.
API coverage and endpoint overview: Explore the soccer API
Why this is hard
A player board must survive uneven competition depth
Domestic leagues and tournaments do not all expose the same advanced statistics. A reusable product begins with measured coverage and renders only the player rows the selected competition actually serves.
- Never substitute a big-five xG row into a competition that does not serve xG.
- Use the competition slug from coverage rather than matching a display name by hand.
- Treat a missing leaderboard as unavailable, not as a table full of zeroes.
- Open a player profile only after canonical identity is present or uniquely resolved.
Path 1 · recommended
Have your AI agent build it
Use MCP to establish coverage and match context, then read the competition leaderboard over REST.
1. Connect the MCP server
Add the server in your MCP client and sign in with your Big Balls account. Your client registers itself and handles the token exchange — there is no key to copy.
{
"mcpServers": {
"bigballs-sports-data": {
"url": "https://mcp.bigballsdata.com/mcp"
}
}
}2. Tools your agent gets
find_playersFind canonical player IDs by name for use with player-stat tools.
get_matchesLive, upcoming or historical matches for a sport or league.
get_coverageMachine-readable map of what we hold and what we do not.
3. Ask for what you want
Paste this at your agent. It is written to make the model check coverage before it designs anything, which is what stops it inventing a field we do not serve.
Build a soccer player production board for the competition I name. Check football coverage first, call its top-scorers route, and render only served goals, appearances and minutes. Keep an honest empty state when no leaderboard is published, and do not borrow xG or players from another league.What the agent cannot reach
The MCP server does not expose competition scorer leaderboards. Use REST for that call, and do not treat a name-only row as canonical player identity.
Path 2 · hand-coded
Build it yourself
Make the coverage check and empty state part of the product, not an afterthought.
- 01
Check the live coverage map first
Ask the coverage endpoint what is served before you make a field required in your interface. An unavailable field should produce an honest empty state, not a guessed value.
Verify soccer coveragebashcurl -s "https://api.bigballsdata.com/v1/coverage?sport=football" \ -H "x-api-key: $BBS_API_KEY" - 02
Request the selected competition only
Replace the league slug with the exact value returned by coverage. An empty data array is a valid result and must not trigger a fallback to another competition.
Competition production leadersbashcurl -s "https://api.bigballsdata.com/v1/leagues/$LEAGUE/top-scorers?limit=50" \ -H "x-api-key: $BBS_API_KEY" - 03
Render availability before rank
Filter only malformed rows. Keep served zeroes, nulls and the response timestamp distinct so the interface can explain what is measured.
Honest production rowstypescriptconst rows = Array.isArray(response.data) ? response.data : []; const view = rows.map((row) => ({ player: row.player_name, goals: row.goals ?? null, appearances: row.matches ?? null, minutes: row.minutes ?? null, })); const unavailable = view.length === 0;
Reference
Every endpoint this tutorial uses
All on the gateway at api.bigballsdata.com. Verified against production on 2026-09-17.
| Method | Path | Returns | Why you need it | Plan |
|---|---|---|---|---|
| GET | /v1/coverage?sport=football | Measured competition and dataset coverage | Prevents a generic soccer interface from claiming one league's depth for every competition. | Free |
| GET | /v1/leagues/:id/top-scorers | Competition-scoped production leaders when published | Supplies the board without requiring xG, xA or another unsupported enrichment. | Free |
Pricing, honestly
Free proves the production board
Coverage and served scorer rows are enough to validate the interface. Solo becomes relevant when the selected competition also serves paid player presentation or intelligence fields.
Free key
Coverage, competition identity and published production rows.Solo
Player media and supported intelligence fields where the selected competition serves them.- An upgrade does not create a missing competition leaderboard.
- Headshots remain a separate Solo capability.
- Keep advanced metrics conditional on measured coverage.
More tutorials
Other build guides
- How to build a fantasy hockey app
- How to build a fantasy basketball app
- How to build an NBA scoreboard
- How to build an NHL scoreboard
- How to build an NBA props tracker
- How to build an NBA shot chart
- How to build an NBA matchup page
- How to build an NHL props tracker
- How to build an NHL xG explorer
- How to build an NHL goalie dashboard
- How to build a soccer xG app
- How to build a cricket app
- NFL fantasy football API tutorial
- How to build an NFL scouting tool
- How to build an NFL conditions analytics tool
- NFL betting model API tutorial
- NFL live game center API tutorial
- How to build an NCAAF scoreboard and live game center
- How to build college football rankings and conference standings
- How to build an NCAAF fantasy football app
- How to build an MLB live scoreboard
- How to build a fantasy baseball app
- How to build an MLB pitching dashboard
- How to build an MLB betting model
- How to build an MLB standings dashboard
- How to build a soccer fantasy app
- How to build a soccer betting model
- How to build a soccer live match center
- How to build a soccer fixture alert app
- How to build a soccer scouting tool
- How to build an NCAAF betting model
- How to build an NCAAF conditions analytics tool
- How to build a WNBA live scoreboard
- How to build a WNBA quarter tracker
- How to build a WNBA odds board
- How to build a WNBA schedule browser
- How to build a WNBA team-form tool
- How to build an NCAAB scoreboard
- How to build a March Madness archive
- How to build an NCAAB game-detail view
- How to build an NCAAB team-form dashboard
- How to build an NCAAB head-to-head tool
Known gaps
What remains competition-specific
The shared schema does not imply identical depth.
- Some tournament leaderboards can be empty between editions.
- Name-only source rows cannot safely open a canonical player profile.
- xG and assist boards remain separate capabilities with narrower coverage.
Questions
- Does every soccer competition have a scorer leaderboard?
- No. Check coverage and render the unavailable state instead of substituting another competition.
- Can I treat a missing statistic as zero?
- No. Null or absent means unavailable; a numeric zero is a measured result.
- Does this tutorial require xG?
- No. It deliberately builds from production fields and treats advanced metrics as optional enrichment.
Related APIs
Other APIs you can build with: