Football Data API for Websites & Dashboards
Fetch fixtures, results, team stats, and match events for your football website or dashboard. Clean JSON across 80 competitions. Start free.
Football websites and dashboards need reliable data behind every fixture list, team page, and player profile. TheStatsAPI provides the structured JSON that powers these features - fixtures, results, team details, season statistics, and player statistics across 80 competitions, with up to 1,196 competitions available on request. No XML parsing, no inconsistent response shapes, no surprise paywalls mid-build.
What Football Websites Use an API For
If you are building a football website or dashboard, here is what you are actually rendering:
- Fixtures and results - today's matches, upcoming matchdays, and recent results. This is the content users check most frequently.
- Team performance tables - season records with points, goal difference, wins, draws, losses, and form.
- Team profiles - squad lists, recent form, season stats, and match history. The core of any team-focused page.
- Player spotlights - career stats, current season performance, and biographical data for 84,000+ players.
- Match detail pages - lineups, events (goals, cards, substitutions), and team statistics for individual fixtures.
Every one of these features maps directly to a TheStatsAPI endpoint. You are not stitching together data from multiple providers or scraping websites - you are calling documented REST endpoints that return clean JSON.
The Right Endpoints
Here are the endpoints that power a typical football website.
All Competitions
GET https://api.thestatsapi.com/api/football/competitions
Returns every available competition with IDs, names, and country information. Use this to build your navigation - league selectors, country filters, and competition landing pages.
Matches by Date
GET https://api.thestatsapi.com/api/football/matches?date_from=2026-04-01&date_to=2026-04-01
Returns all matches for a specific date across every competition. Use date_from and date_to to define the range. This is your fixtures page. Filter by competition client-side, or pass a competition_id parameter to narrow the response server-side.
Match Detail
GET https://api.thestatsapi.com/api/football/matches/{id}
Returns full details for a single match - teams, score, date, competition context, and status. Combine with the /stats and /player-stats sub-endpoints for complete match pages.
Team Profile
GET https://api.thestatsapi.com/api/football/teams/{id}
Returns team information including name, country, venue, and identifiers. Pair with /football/teams/{team_id}/players for the team's full squad and /football/matches?team_id={team_id} for recent results.
The Live Data Advantage
Here is something most football website builders discover eventually: live data is useful, but it is only one part of the product.
TheStatsAPI gives you realtime odds and match stats for supported live fixtures, plus the settled historical layer your site needs after the match. That means a dashboard can show live context during play, then keep the same match page useful with finalized events, player stats, team stats, and xG after full time.
Finalized match statistics, events, player data, and xG are verified after the match and typically settle within 1-2 hours after the final whistle. Your live pages stay current while the game is on, and your archive remains accurate once the data is finalized.
Code Example: Fetch Today's Fixtures in JavaScript
const API_KEY = "your_api_key";
const BASE_URL = "https://api.thestatsapi.com/api";
async function getTodaysFixtures() {
const today = new Date().toISOString().split("T")[0];
const response = await fetch(
`${BASE_URL}/football/matches?date_from=${today}&date_to=${today}`,
{ headers: { Authorization: `Bearer ${API_KEY}` } }
);
const { data: matches } = await response.json();
matches.forEach((match) => {
const score = match.score;
console.log(
`${match.home_team.name} ${score.home}-${score.away} ${match.away_team.name} [${match.status}]`
);
});
}
getTodaysFixtures();
A few lines of standard fetch. No SDK, no dependencies, no build step. This works in Node.js, Deno, or any modern JavaScript runtime. Drop it into your Next.js API route, your Express server, or a serverless function.
Pricing
A football website with moderate traffic fits the Starter plan at $50/month - 100,000 requests per month is ample when you cache responses sensibly. Render fixtures once per matchday, cache team profiles for 24 hours, and your request volume stays low even with thousands of daily visitors.
| Plan | Price | Requests/month | Rate Limit |
|---|---|---|---|
| Starter | $50/mo | 100,000 | 30/min |
| Growth | $129/mo | 500,000 | 60/min |
| Scale | $379/mo | 5,000,000 | 300/min |
Every plan includes a 7-day free trial and full access to every endpoint.
FAQ
How quickly after a match is the data available?
Live odds and match stats are available during eligible matches. Finalized match results, events, player stats, team stats, and xG are verified after full time and typically settle within 1-2 hours of the final whistle.
Can I use TheStatsAPI data on a commercial website?
Yes. All plans permit commercial use. Whether you are running ads, charging a subscription, or monetizing through affiliate partnerships, the data is yours to display. No additional licensing fees.
Does the API provide fixture schedules for upcoming matches?
Yes. The /football/matches endpoint returns both completed and upcoming fixtures. Query by date, competition, or season to populate your fixture lists for the days and weeks ahead.
What format does the data come in?
Every endpoint returns JSON over standard REST HTTP. No XML, no SOAP, no proprietary formats. Responses follow a consistent structure across all endpoints, so once you have parsed one, you know how to handle them all.
Ready to Power Your Sports App?
Start your 7-day free trial. All endpoints included on every plan.