# FootyCal Feed Directory

> Complete reference of every subscribable AFL calendar feed. Pick a URL, paste it into your calendar app.

FootyCal is a free, no-signup AFL fixture calendar subscription service. Every URL on this page is a valid `webcal://` calendar feed. Calendar apps re-fetch daily so fixture updates (time changes, R16-24 confirmations, finals matchups) flow through automatically. Times in feeds are encoded in UTC per the iCalendar standard; your calendar app renders them in your local timezone.

Base URL: `https://footycal.au`

---

## How to subscribe

Replace `https://` with `webcal://` for one-tap subscription on most platforms, or use the platform-specific path:

- **Google Calendar**: open [Google Calendar settings → Add by URL](https://calendar.google.com/calendar/r/settings/addbyurl), paste the feed URL.
- **Apple Calendar / iOS**: tap a `webcal://` link, or in macOS Calendar use File → New Calendar Subscription.
- **Outlook (desktop)**: Add Calendar → From Internet, paste the `webcal://` URL.
- **Other apps (Fastmail, Proton, etc.)**: paste the `https://` URL into the app's "subscribe to internet calendar" option.

---

## URL patterns

| Pattern | Description |
|---|---|
| `/team/{slug}.ics` | All games for one team. Accepts query parameters. |
| `/venue/{slug}.ics` | All games at one venue. No query parameters. |
| `/all.ics` | Every game in the season. Accepts `?names=` and `?city=`. |
| `/finals.ics` | Finals series only (4 weeks in September). Accepts `?names=`. |

---

## Query parameters

| Param | Values | Default | Applies to | Effect |
|---|---|---|---|---|
| `filter` | `all`, `home`, `away` | `all` | team feeds | Limit to home or away games. |
| `names` | `nickname`, `full` | `nickname` | team, all, finals | Event title style. `nickname` → "Saints v Magpies". `full` → "St Kilda v Collingwood". |
| `finals` | `team`, `all` | `team` | team feeds | `team` = only finals where the team is confirmed. `all` = include the whole finals series (Grand Final shown as "Grand Final (Teams TBC)"). |
| `city` | comma-separated [city slugs](#cities) | (none) | team, all | Limit fixtures to venues in the named cities, e.g. `?city=melbourne,geelong`. |

Parameters can be combined freely, e.g. `?filter=home&names=full&finals=all&city=melbourne`.

---

## Teams

All 18 AFL teams. The default URL gives every game for that team in the regular season plus any finals they qualify for, with nickname-style event titles.

| Slug | Team | Default feed |
|---|---|---|
| `adelaide` | Adelaide Crows | `https://footycal.au/team/adelaide.ics` |
| `brisbane` | Brisbane Lions | `https://footycal.au/team/brisbane.ics` |
| `carlton` | Carlton Blues | `https://footycal.au/team/carlton.ics` |
| `collingwood` | Collingwood Magpies | `https://footycal.au/team/collingwood.ics` |
| `essendon` | Essendon Bombers | `https://footycal.au/team/essendon.ics` |
| `fremantle` | Fremantle Dockers | `https://footycal.au/team/fremantle.ics` |
| `geelong` | Geelong Cats | `https://footycal.au/team/geelong.ics` |
| `gold-coast` | Gold Coast Suns | `https://footycal.au/team/gold-coast.ics` |
| `gws` | GWS Giants | `https://footycal.au/team/gws.ics` |
| `hawthorn` | Hawthorn Hawks | `https://footycal.au/team/hawthorn.ics` |
| `melbourne` | Melbourne Demons | `https://footycal.au/team/melbourne.ics` |
| `north-melbourne` | North Melbourne Kangaroos | `https://footycal.au/team/north-melbourne.ics` |
| `port-adelaide` | Port Adelaide Power | `https://footycal.au/team/port-adelaide.ics` |
| `richmond` | Richmond Tigers | `https://footycal.au/team/richmond.ics` |
| `saints` | St Kilda Saints | `https://footycal.au/team/saints.ics` |
| `sydney` | Sydney Swans | `https://footycal.au/team/sydney.ics` |
| `west-coast` | West Coast Eagles | `https://footycal.au/team/west-coast.ics` |
| `western-bulldogs` | Western Bulldogs | `https://footycal.au/team/western-bulldogs.ics` |

For canonical nicknames and other metadata, see [`/api/teams`](https://footycal.au/api/teams).

### Team feed variants (worked example: St Kilda Saints)

The same parameter combinations work for every team. Substitute the slug from the table above.

| Intent | URL |
|---|---|
| All Saints games (default) | `/team/saints.ics` |
| Home games only | `/team/saints.ics?filter=home` |
| Away games only | `/team/saints.ics?filter=away` |
| Full team names in titles | `/team/saints.ics?names=full` |
| Saints + every finals match | `/team/saints.ics?finals=all` |
| Home games + every finals | `/team/saints.ics?filter=home&finals=all` |
| Only Saints games in Melbourne | `/team/saints.ics?city=melbourne` |
| Home, full names, every finals | `/team/saints.ics?filter=home&names=full&finals=all` |

---

## Venues

Per-venue feeds include every game at that ground regardless of which teams are playing. Useful for ground members. The `LOCATION` field uses the current commercial venue name; slugs are stable across sponsorship changes.

| Slug | Venue | City | Timezone | Feed |
|---|---|---|---|---|
| `mcg` | MCG | Melbourne | Australia/Melbourne | `https://footycal.au/venue/mcg.ics` |
| `marvel` | Marvel Stadium | Melbourne | Australia/Melbourne | `https://footycal.au/venue/marvel.ics` |
| `gabba` | The Gabba | Brisbane | Australia/Brisbane | `https://footycal.au/venue/gabba.ics` |
| `scg` | SCG | Sydney | Australia/Sydney | `https://footycal.au/venue/scg.ics` |
| `optus` | Optus Stadium | Perth | Australia/Perth | `https://footycal.au/venue/optus.ics` |
| `adelaide-oval` | Adelaide Oval | Adelaide | Australia/Adelaide | `https://footycal.au/venue/adelaide-oval.ics` |
| `giants` | ENGIE Stadium | Sydney | Australia/Sydney | `https://footycal.au/venue/giants.ics` |
| `gmhba` | GMHBA Stadium | Geelong | Australia/Melbourne | `https://footycal.au/venue/gmhba.ics` |
| `people-first` | People First Stadium | Gold Coast | Australia/Brisbane | `https://footycal.au/venue/people-first.ics` |
| `utas` | University of Tasmania Stadium | Hobart | Australia/Hobart | `https://footycal.au/venue/utas.ics` |
| `manuka` | Manuka Oval | Canberra | Australia/Sydney | `https://footycal.au/venue/manuka.ics` |
| `tio` | TIO Stadium | Darwin | Australia/Darwin | `https://footycal.au/venue/tio.ics` |
| `traeger` | TIO Traeger Park | Alice Springs | Australia/Darwin | `https://footycal.au/venue/traeger.ics` |
| `norwood` | Norwood Oval | Adelaide | Australia/Adelaide | `https://footycal.au/venue/norwood.ics` |
| `barossa` | Barossa Park | Adelaide | Australia/Adelaide | `https://footycal.au/venue/barossa.ics` |
| `bellerive` | Bellerive Oval | Hobart | Australia/Hobart | `https://footycal.au/venue/bellerive.ics` |

See [`/api/venues`](https://footycal.au/api/venues) for the same data as JSON.

---

## Cities

The `?city=` parameter limits a team or all-games feed to fixtures at venues in the named cities. Multiple cities can be combined with commas: `?city=melbourne,geelong`. Useful for fans who only attend games in their home city.

City filtering applies to **team feeds** (`/team/{slug}.ics?city=...`) and **the all-games feed** (`/all.ics?city=...`). Venue feeds and the finals feed do not accept `?city=` (a venue is already in one city; finals run at predetermined venues).

| Slug | City | Venues |
|---|---|---|
| `melbourne` | Melbourne | mcg, marvel |
| `geelong` | Geelong | gmhba |
| `brisbane` | Brisbane | gabba |
| `gold-coast` | Gold Coast | people-first |
| `sydney` | Sydney | scg, giants |
| `canberra` | Canberra | manuka |
| `perth` | Perth | optus |
| `adelaide` | Adelaide | adelaide-oval, norwood, barossa |
| `hobart` | Hobart | utas, bellerive |
| `darwin` | Darwin | tio |
| `alice-springs` | Alice Springs | traeger |

### Worked examples

| Intent | URL |
|---|---|
| Every AFL game in Melbourne | `/all.ics?city=melbourne` |
| Every AFL game in Melbourne or Geelong | `/all.ics?city=melbourne,geelong` |
| Saints games in Melbourne only | `/team/saints.ics?city=melbourne` |
| Sydney Swans home games at Sydney venues | `/team/sydney.ics?filter=home&city=sydney` |
| All games at Adelaide venues (incl. Gather Round) | `/all.ics?city=adelaide` |

---

## Special feeds

| Feed | Description | Variants |
|---|---|---|
| `/all.ics` | Every fixture in the season, all 18 teams. | `?names=full` for full team names. `?city=...` to limit by city. |
| `/finals.ics` | All finals fixtures. Includes the Grand Final from day one (shown as "Grand Final (Teams TBC)"). | `?names=full` for full team names. |

---

## Common requests (intent → URL)

For assistants helping a user pick the right feed:

- "I want my team's games" → `/team/{slug}.ics`
- "Just home games" → `/team/{slug}.ics?filter=home`
- "Every game at the MCG" → `/venue/mcg.ics`
- "Every game at Marvel Stadium" → `/venue/marvel.ics`
- "All AFL games" → `/all.ics`
- "Just the finals" → `/finals.ics`
- "My team plus the whole finals series" → `/team/{slug}.ics?finals=all`
- "Full team names instead of nicknames" → add `?names=full`
- "I have an MCC membership" → `/venue/mcg.ics`
- "I have a Marvel ground membership" → `/venue/marvel.ics`
- "I only attend games in my city" → add `?city={city-slug}` to a team or all-games feed
- "All games in Melbourne" → `/all.ics?city=melbourne`
- "All Adelaide games during Gather Round" → `/all.ics?city=adelaide`

---

## Machine-readable endpoints

| Endpoint | Returns |
|---|---|
| `GET /api/teams` | JSON array of teams: `{ slug, name, shortName, nickname, feedUrl }` |
| `GET /api/venues` | JSON array of venues: `{ slug, name, timezone, city, feedUrl }` |
| `GET /llms.txt` | This site's [llms.txt](https://llmstxt.org/) index. |
| `GET /feeds.md` | This file. |
| `GET /sitemap.xml` | Sitemap covering every page and feed URL. |

The homepage (`/`) supports markdown content negotiation: send `Accept: text/markdown` and you get the llms.txt index instead of HTML.

---

## Caching and freshness

- All feeds: `Cache-Control: public, max-age=86400` (24 hours).
- All feeds include `REFRESH-INTERVAL;VALUE=DURATION:P1D` and `X-PUBLISHED-TTL:P1D` so well-behaved clients refresh daily.
- UIDs are stable across deploys, so a TBC fixture turning into a confirmed time updates the existing event in your calendar rather than creating a duplicate.
- Each venue feed includes `X-WR-TIMEZONE` matching the venue's IANA timezone.

---

## Disclaimer

FootyCal is an independent project and is not affiliated with or endorsed by the AFL or any AFL club. Fixture data is sourced from publicly available schedules.