FootyMetrics APIfootymetrics.com ↗
Access football fixture lists, odds, team form, referee stats, H2H records, lineups, and per-player recent-match form via the FootyMetrics API.
What is the FootyMetrics API?
The FootyMetrics API exposes 5 endpoints covering football fixture data from FootyMetrics.com, from daily schedule lists with pre-match odds and team form strings down to granular per-player recent-match statistics. The list_fixtures endpoint groups every fixture on a calendar day by league, with each row carrying kickoff time, live scores, form percentages, referee averages, and best-tip market predictions. The remaining endpoints drill into full fixture detail, lineup grids, and player-level form windows.
curl -X GET 'https://api.parse.bot/scraper/a19633cd-6720-489a-b4da-d4f97cc9331f/list_fixtures?date=2026-10-16&timezone=Europe%2FLondon' \ -H 'X-API-Key: $PARSE_API_KEY'
Lists every fixture on one calendar day, grouped by league. Each fixture row carries kickoff time (UTC), status (NS = not started, FT = finished), score when played, home/away team summaries with recent win/over-2.5/BTTS percentages and last-5 form string, referee averages, pre-match odds (1X2, double chance, totals, BTTS, corner lines; key names are the market codes such as 1, X, 2, over25, btts, over95_corners) and the site's best tip when one exists. The day boundary is interpreted in the supplied IANA timezone; omitting the date uses the current day in that timezone. A league with no fixtures that day may appear with an empty fixtures list. One request per call; the result is the whole day, no pagination.
| Param | Type | Description |
|---|---|---|
| date | string | Calendar day, ISO YYYY-MM-DD. Omitted = today in the given timezone. |
| timezone | string | IANA timezone name (e.g. Europe/London) used to decide which fixtures fall on the requested day. |
| league_id | string | Restrict the result to one league, using league_id as emitted by this endpoint's leagues[*].league_id. Omitted = all leagues. |
{
"type": "object",
"fields": {
"date": "requested day (YYYY-MM-DD)",
"leagues": "array of league groups; each has league_id, league_apid, name, slug, country, logo, is_top, is_popular and fixtures",
"timezone": "timezone the day was evaluated in",
"league_count": "number of league groups returned",
"fixture_count": "total fixtures across all leagues",
"leagues[].fixtures": "array of fixture rows: fixture_id (use with get_fixture / get_fixture_player_form), fixture_apid (use with get_fixture_lineups), slug, kickoff_utc, status, state, round, stage_name, leg, home_goals, away_goals, home_position, away_position, neutral_venue, lineup_predicted, lineup_confirmed, has_trends, home, away, referee, odds, best_tip",
"leagues[].fixtures[].home": "team summary: team_id, team_apid, name, code, slug, logo, type, form_last5 (w/d/l string, most recent last), win/over25/btts percentages over last 5/10/15 and home/away splits over last 5",
"leagues[].fixtures[].odds": "object keyed by market code -> decimal odds (null-free; only markets the site priced)",
"leagues[].fixtures[].best_tip": "object {market, marketLabel, label, line, side, prob, odds} or null"
},
"sample": {
"data": {
"date": "2026-10-15",
"leagues": [
{
"logo": "https://cdn.footymetrics.com/leagues/5.webp",
"name": "Europa League",
"slug": "europa-league",
"is_top": true,
"country": "Europe",
"fixtures": [
{
"leg": "1/1",
"away": {
"code": null,
"logo": "https://cdn.footymetrics.com/teams/516.webp",
"name": "Hapoel Be'er Sheva",
"slug": "hapoel-be'er-sheva",
"type": "club",
"team_id": "280",
"team_apid": 516,
"form_last5": "wwdwl",
"win_pct_last5": 60,
"btts_pct_last5": 20,
"win_pct_last10": 60,
"win_pct_last15": 60,
"btts_pct_last10": 50,
"btts_pct_last15": 53,
"over25_pct_last5": 20,
"over25_pct_last10": 50,
"over25_pct_last15": 53,
"away_win_pct_last5": 80,
"home_win_pct_last5": 40,
"away_btts_pct_last5": 40,
"home_btts_pct_last5": 60,
"away_over25_pct_last5": 40,
"home_over25_pct_last5": 60
},
"home": {
"code": null,
"logo": "https://cdn.footymetrics.com/teams/61.webp",
"name": "AZ Alkmaar",
"slug": "az-alkmaar",
"type": "club",
"team_id": "124",
"team_apid": 61,
"form_last5": "lwldw",
"win_pct_last5": 40,
"btts_pct_last5": 40,
"win_pct_last10": 60,
"win_pct_last15": 47,
"btts_pct_last10": 50,
"btts_pct_last15": 60,
"over25_pct_last5": 20,
"over25_pct_last10": 40,
"over25_pct_last15": 47,
"away_win_pct_last5": 60,
"home_win_pct_last5": 60,
"away_btts_pct_last5": 40,
"home_btts_pct_last5": 60,
"away_over25_pct_last5": 40,
"home_over25_pct_last5": 40
},
"odds": {
"1": 1.38,
"2": 8.5,
"12": 1.15,
"X": 5.5,
"1x": 1.1,
"x2": 3.5,
"btts": 1.8,
"over15": 1.14,
"over25": 1.45,
"btts_no": 2,
"under15": 5.5,
"under25": 2.75,
"over75_corners": 1.26,
"over85_corners": 1.46,
"over95_corners": 1.8,
"over105_corners": 2.25,
"under75_corners": 3.6,
"under85_corners": 2.6,
"under95_corners": 2,
"under105_corners": 1.58
},
"slug": "35899458-europa-league-az-alkmaar-hapoel-be'er-sheva",
"round": "League Stage",
"state": 1,
"status": "NS",
"referee": {
"name": "R. Gidzhenov",
"slug": "7869-radoslav-gidzhenov",
"avg_fouls": "25.70",
"referee_id": "7869",
"avg_yellow_cards": "5.14"
},
"best_tip": null,
"away_goals": null,
"fixture_id": "35899458",
"has_trends": true,
"home_goals": null,
"stage_name": "League Stage",
"kickoff_utc": "2026-10-15T16:45:00.000Z",
"fixture_apid": 19873864,
"away_position": null,
"home_position": null,
"neutral_venue": false,
"lineup_confirmed": false,
"lineup_predicted": true
}
],
"league_id": "2",
"is_popular": true,
"league_apid": 5
}
],
"timezone": "Europe/London",
"league_count": 1,
"fixture_count": 18
},
"status": "success"
}
}About the FootyMetrics API
Daily Schedule and Fixture Counts
list_fixtures accepts an ISO date string, an IANA timezone, and an optional league_id filter. The response is organised into leagues[] groups, each with metadata (league_id, league_apid, name, country, is_top, is_popular) and a fixtures[] array. Every fixture row includes fixture_id (used by get_fixture and get_fixture_player_form) and fixture_apid (used by get_fixture_lineups). Team summaries inside each fixture expose form_last5 (a w/d/l string, most-recent last), win/over-2.5/BTTS percentages, and a best_tip object with market, label, probability, and decimal odds. Before making date loops, call get_fixture_counts first — it returns a days[] array of {date, fixture_count} covering the site's rolling window (roughly two days back to fifteen days ahead), so you can skip dates with zero fixtures cheaply.
Full Fixture Detail
get_fixture takes a fixture_id and returns the complete match record. The fixture object includes UTC timestamp, per-half goals, both homeFormation and awayFormation, status, and state. The referee block covers career and current-season aggregate averages for cards, fouls, and penalties. has_h2h flags whether head-to-head history is available. Post-match events contains main events (goals, cards, substitutions) and corners, plus a periods[] array with name, order, score, and added time. venue returns name, city, capacity, and surface. Consensus decimal odds are keyed by market code and are null when a market was not priced.
Lineups and Sidelined Players
get_fixture_lineups is keyed by fixture_apid. The lineup_status object reports predicted, confirmed, and recent booleans alongside both formations. The lineup block contains home and away predicted or confirmed grids structured as rows of players. The sidelined array lists unavailable players with injury/suspension type, team_apid, and a player object containing shortName, photo, and slug.
Per-Player Form
get_fixture_player_form accepts a fixture_id plus three optional filters: window (5 or 10 matches), starters_only, and same_league_only. It returns 22 players — or fewer when no lineup is available — each with side, position, detailed_position, number, and a recent_matches array of per-match statistics. lineup_source reports whether the home and away sides drew from a confirmed, predicted, or recent lineup. team_season_stats adds home, away, and league-average per-match aggregates for the current competition.
The FootyMetrics API is a managed, monitored endpoint for footymetrics.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when footymetrics.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official footymetrics.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a pre-match dashboard showing team form strings, BTTS percentages, and best-tip markets from list_fixtures for a given league.
- Aggregate referee card and foul averages from get_fixture to factor officiating tendencies into betting models.
- Display confirmed lineups with sidelined player reasons from get_fixture_lineups before kick-off.
- Compare player-level recent-match stats across the predicted XIs of an upcoming fixture using get_fixture_player_form with window=10.
- Determine which dates have fixtures worth fetching by querying get_fixture_counts before building a daily scrape schedule.
- Track live and final match events — goals, cards, corners, and period scores — via the events block in get_fixture.
- Filter player form to competition-only appearances using same_league_only to reduce cross-competition noise in ratings models.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.