Log daily football results and league standings to Sheets
Every morning, automatically record yesterday's match results and each league's latest table into a spreadsheet you can chart or pivot.
Every morning at 7am, automatically log yesterday's football results and today's league standings from API-Sports into Google Sheets, so I build a season-long record I can chart or pivot. This is a deterministic fetch-and-append logging job: loop over my leagues, fetch, map fields, and append. No summarizing or judgement.
Trigger: run on a cron schedule every day at 7:00am in my timezone. Keep a fixed list of the leagues I track at the top of the workflow so I can edit it. Each league is identified by its API-Sports league ID and the current season, which is a 4-digit starting year (for example season 2025 for the 2025/26 campaign).
Step 1, yesterday's results. For each tracked league, call API-Sports 'List Fixtures (Live, By Date, League, or Team)' filtered by that league ID, the season, and yesterday's date in YYYY-MM-DD format for my timezone. Keep only fixtures whose status is finished (FT, AET, or PEN). For every finished match, append one row to the Results tab of my Google Sheet using Google Sheets 'Append Values', with these columns: match date, league name, home team, away team, final score written as home goals - away goals, and status. If a league returns zero fixtures for yesterday (results is 0), skip it and append nothing for that league.
Step 2, standings snapshot. For each tracked league, call API-Sports 'Get Standings' for the league ID and season. For every team in the returned table, append one row to the Standings tab using Google Sheets 'Append Values', with these columns: today's date as the snapshot date, league name, position or rank, team name, points, goal difference, and recent form. Tagging every row with today's date is what lets me chart a team's position over time; a one-off standings table cannot do that.
Notes: API-Sports is read-only and returns data inside a response array with a results count, so treat results:0 as a valid empty answer, not an error. When appending, use the option that parses input like the Sheets UI (USER_ENTERED) so dates and numbers land as real dates and numbers. Always append after the last row of each tab so the history accumulates and nothing already logged is overwritten.
What does this prompt do?
- Each morning, pulls yesterday's finished matches for the leagues you follow and adds a row for every game with the date, both teams, the final score, and the result status.
- Takes a fresh snapshot of each league's table and records every team's position, points, goal difference, and recent form, stamped with the date.
- Builds a season-long history in your own spreadsheet, so you can chart or pivot how a team's position and points change week to week.
- Runs hands-free on a schedule and only adds new rows, so nothing you already logged gets changed or overwritten.
What do I need to use this?
- An API-Sports account (the free plan works for a few leagues checked once a day) to fetch football results and standings.
- A Google account with a spreadsheet that has a results tab and a standings tab.
- The list of leagues you want to follow and the current season year.
How can I customize it?
- Change which leagues and which season year you track.
- Adjust what time it runs each morning and the time zone used to decide what counts as 'yesterday'.
- Rename the results and standings tabs or choose which columns get recorded.
FAQs
Which leagues can I track?
Do I need a paid API-Sports plan?
Will this overwrite my existing spreadsheet data?
What happens on days with no matches?
Why record the standings every single day?
Related templates
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Keep a spreadsheet of your most important senders, and every email from one gets labeled, posted to your team channel, and logged automatically.
The moment an order is fulfilled, we register it with Yotpo so the review request is timed off real delivery, and we log every sync so failures never go unnoticed.
Stop copying football scores into a spreadsheet by hand.
Let this workflow log yesterday's results and today's league tables every morning, so you always have a season-long record ready to chart or pivot.