Build a football match centre
How to assemble fixtures, line-ups, events and statistics into an honest match page that never pretends to be live.
FootballAPI.net editorial team
Written and reviewed by the organisation
Published 30 Oct 2026Updated 1 Nov 20265 min read

A match centre is the page fans visit before, during and after a game. It brings together the fixture, team news, the story of the match and the numbers behind it. Built from a football API, it can be generated for every match in a competition without manual work.
Build the page around the feed you actually request. The currently-live-matches endpoint supplies a current snapshot; fixtures provide the schedule, while match statistics add detail where supplied. A REST response is not the ball-tracker stream. Show the last successful refresh time, and keep older data visibly marked if a later request fails.
Page structure
Divide the page into panels: a header with teams, crests, kick-off time and status; a team news panel with expected or confirmed line-ups; an events timeline; a statistics comparison; context from the standings and head-to-head history; and links to both team pages. Each panel reads from stored data and renders independently.
Independent panels mean one missing piece does not break the page. If statistics are not yet available, the rest still renders.
Give each panel a small last-refreshed label, since panels may refresh on different schedules.
- Header, team news, timeline, statistics, context
- Each panel independent
- Refresh time shown per panel
The header
The header shows both teams with crests from our media route, the competition name in text, the kick-off time converted to the reader's zone with a zone label, and the status. Before kick-off, show a countdown computed in the browser. After kick-off, show the status and score from the latest refresh, with its time.
Never show a pulsing live indicator. A neutral label such as last updated with the time is accurate and sufficient.
Team news
Before the match, show predicted line-ups where the competition supports them, clearly labelled as expected. When confirmed line-ups arrive in the match detail feed, replace the expected ones and say so. Link every player to their profile by identifier.
If neither expected nor confirmed line-ups are available, say that team news is not yet available rather than leaving an empty grid.
Events timeline
Render events in supplied order with minute and added time: goals, cards, substitutions. Use icons with accessible labels and player names as text. After the match, the timeline tells the story; a short editorial summary can sit above it if you have writers.
Corrections happen, such as a goal reassigned to a different scorer. Refresh the match detail the morning after and update the timeline.
Statistics
Show team statistics side by side with clear labels and numbers as text, plus optional bars. Hide rows where one team's value is missing. Avoid derived metrics you cannot explain.
Context panels
Include each team's current position from the standings feed and a compact head-to-head summary for the pairing. Present history as dated context, not a forecast. FootballAPI.net publishes no tips or odds, and the match centre should not imply any.
- Current table positions
- Head-to-head as history
- No tips, odds or result forecasts
Refresh schedule
Before match day, refresh fixtures and expected line-ups at a pace appropriate to their update cycle. During play, use one shared worker for current scores and supported match detail, not one request per visitor. Refresh again after full time for corrections. Starter includes 5,000 successful requests per day, Growth 25,000 and Pro 250,000; the account safety limit is 100 requests per second. That ceiling is not a recommended polling rate or a guarantee of fresh data on every call.
All refreshes run on the server and write to storage. The page reads only from storage.
Empty and error states
Every panel needs an empty state and an error state. Write them deliberately: team news not yet announced, statistics available after the match, timeline will appear once events are recorded. Errors should offer a retry and keep showing any older data with its time.
These states are visible on most match pages most of the time, so they deserve the same care as the populated ones.
Joining it together
The match identifier is the spine. Fixtures, match detail and predicted line-ups all join on it. Teams join on team identifiers, players on player identifiers. Keep those joins in your data layer, and the page template becomes simple.
A worked example
For a Saturday match in league 1204, the page exists from the moment fixtures are stored. On Friday it shows the header with a countdown, an expected line-ups panel and context from the table and head-to-head history. An hour before kick-off, a refresh brings confirmed line-ups and the panel switches labels. After full time, refreshes populate the timeline and statistics, and the header shows the final score with its refresh time.
On Sunday morning, a final refresh catches a reassigned goal and updates the timeline. From then on, the page is effectively an archive report and needs no further requests.
Across a season of three hundred and eighty matches, this pattern gives a predictable number of requests per match. Budget for the busiest day rather than relying only on a season-wide average: published allowances are daily, and a quiet week does not imply that unused requests can be carried into a busy match day.
Mobile layout
Most match centre traffic is on phones. Stack panels in order of reader interest: header, team news before the match, timeline after it, then statistics and context. Use tabs sparingly; scrolling is usually faster than tapping. Keep the header compact and sticky so the score and status stay visible while readers scroll through the timeline.
Test the page on a slow connection. Text should appear immediately from server-rendered HTML, with crests and player photos filling in afterwards without shifting the layout.
Search and sharing
Give each match page a stable URL with a readable slug and the match identifier, a title naming both teams, the competition and date, and a description written from real fields. Social cards should show the teams and the status at the time of sharing, never a live claim.
Key takeaways
- Build independent panels joined by the match identifier.
- Label snapshot data with refresh times and avoid live indicators.
- Write empty and error states for every panel.
Feed-family explorer
What each family covers, with links to the documentation that defines it. Labels reflect provider sampling, not production promises.
Scores and fixtures
Sampled- Today's matches grouped by competition
- Season fixtures with static match IDs
- Status strings preserved as supplied
Frequently asked questions
Is the match centre live?
No. It shows periodically refreshed data with refresh times. FootballAPI.net presents nothing as live.
How do I show team news before kick-off?
Use predicted line-ups where supported, clearly labelled as expected, then replace them with confirmed line-ups.
What joins the panels together?
The match identifier, with teams and players joined by their own identifiers.
Should I include betting odds?
FootballAPI.net offers no odds or tips, and the match centre should not imply any.
Sources and references
- Look up score, match-detail and lineup operations
- Add the native tracker only after checking its setup
- FootballAPI.net coverage notes
Use these implementation references alongside this guide. Current endpoint parameters and account settings take precedence over illustrative examples.
Related guides
All guidesHead-to-head data in a football API
How head-to-head feeds describe past meetings between two teams, and how to present them without overstating their meaning.
Match statistics and line-ups
How match detail feeds describe line-ups, substitutes, events and statistics, and how to build reliable match pages from them.
Live football scores: what to check before you promise them
Build reliable football score updates with shared REST polling, measured freshness, match-status handling and clear separation from ball tracking.