Automatic Scheduling
Last updated: October 1, 2026
Once your venue time slots are set, MyCup can place every match by venue and kick-off time for you. Open it from Matches → Schedule.
All of this is optional. Setting kick-off times by hand on the Matches page is a perfectly good way to run a tournament, and for one venue it is usually faster. Use auto-fill when the arithmetic gets tiring — several venues, several days, hundreds of fixtures — and ignore it when it does not. You can also mix the two: set the kick-offs you care about, pin them, and let auto-fill work around them.
The schedule grid shows one day at a time: venues across the top, kick-off times down the side. One slot holds exactly one match. Unplaced matches wait in the rail on the right, in playing order — division, phase, matchday, then the match's own position.
The rail shows the first 60 unplaced matches. If you have more than that, place some or run auto-fill and the rest appear.
Auto-fill#
Auto-fill empty slots places everything it can in one pass. It never writes anything until you approve it — Preview shows what would happen, including everything it could not place and why.
The order it schedules in#
Auto-fill lays the tournament out in the order it is played:
- Phase first — the group stage before the knockout, the final last.
- Then matchday — matchday 1 of every group before matchday 2 of any of them. That is the shape a festival is actually played in; scheduling one group's whole campaign before the next group kicks off is not.
- Then the match's own position.
A match can never be placed before the stage that decides who plays in it has finished. A semi-final will not take an early slot while its own group games are still being played, however much free pitch time there is.
Pinned matches count too. If you pin the group stage and let auto-fill place the knockout, the knockout still waits for the last pinned group match to finish.
Phase order comes from your structure. If a consolation phase should run before the final, reorder the phases on the Structure page and auto-fill will follow.
The three rules you control#
| Rule | Default | What it does |
|---|---|---|
| Minimum rest between a team's matches | 60 min | Gap between the end of a team's match and the start of its next. Checked for both teams, in both directions — so a slot is refused whether the team's other match is earlier or later, including matches already on the calendar |
| Max matches per team per day | 0 (no limit) | A cap for youth festivals |
| Try to keep each group at one venue | On | Prefers a group's existing pitch so parents and kit stay put |
| Spread matches across all your days | On | Uses every day you have opened, instead of filling the earliest slots and finishing early |
Both of the last two are preferences, not restrictions: if the group's usual pitch is busy, or the day a match was aiming for is full, it goes elsewhere rather than being left unplaced.
Spreading, and why it is on#
Slots are tried in time order, so with spreading off a tournament that has more venue time than matches packs into the first days and leaves the last one empty. A real three-day festival came out as 8 matches, 10 matches, and nothing on the Saturday — correct, but not what anyone books three days for.
With it on, the running order is sliced across the days you have opened: 18 matches over 3 days aim for 6, 6 and 6. Playing order is untouched — matchday 1 still comes before matchday 2 — only the day each match aims at changes.
Turn it off when you want to finish as early as possible and do not mind leaving a booked day unused.
Some stages belong on a particular day — qualifiers one Sunday, the main event the next. See Playing stages on different days below.
What it always enforces#
These are not options, because they are facts rather than preferences:
- One match per venue slot at a time
- A team is never in two places at once
- Round and phase order, as above
- A stage's first day, when you have set one
- Any division restriction on a time slot or on the division itself
Why a match could not be placed#
The preview groups everything it could not place, with examples. Each reason points at a different fix:
| Reason | What to do |
|---|---|
| No free slot left | Open more venue time, or add a venue |
| No pitch is open to this division on these days | A time slot's Only these divisions list excludes it |
| No free slot from the day this stage is set to start | The stage has a first day and there is no room from then on. Open more time on or after that day, or pick an earlier day |
| The venues this division is assigned to have no free time left | The division is restricted to venues that are full — assign another venue, or open more time there |
| The previous round or stage has not finished yet | There is no time left in the day after the earlier round; add another day or more hours |
| Would not leave enough rest between a team's matches | Lower the minimum rest, or open more time |
| A team has already reached its match limit for the day | Raise or remove the per-day cap |
| A team is already playing at every free time | Genuine congestion — more venue time is the only fix |
Playing stages on different days#
Many tournaments are not one block of days but separate match days: qualifiers one weekend and the main event the next, or groups on Saturday and the knockout on Sunday. MyCup has no date on a division or a phase by default, so auto-fill sees one pool of days. With spreading on, it fills the days in playing order, so the start of a later stage can land on an earlier day that still has free slots.
The fix is to give that stage a first day.
Where the days come from#
The day tabs above the grid are the days your venues have time slots on. Nothing else creates a day. To add a match day, change its hours or remove one, use Add or change days next to the tabs (or Time slots at the top of the page). See Venue time slots.
Setting a stage's first day#
- Open Matches → Schedule and click Auto-fill empty slots.
- Under First day of each stage, find the stage that opens a new match day and pick that day. It is saved straight away; there is no separate save button.
- Click Preview, check the result, then Apply.
How it behaves:
- Auto-fill never places that stage or any stage after it before that day. You only set the stage that opens the match day, not every stage behind it.
- The stages before it are spread only across the days before it, so they do not drift onto the later day either.
- The day stays saved on the stage. Every later auto-fill run uses it until you set it back to Any day.
- Only days with time slots are offered. The list shows every stage after the first one in each division (a division's first stage is not listed; see the last case below).
- A stage that follows a dated one says so under its name, for example From Sun 13 Dec, follows Round 1, and only offers that day and later ones, since an earlier day could never take effect.
- If you delete the time slots of a day a stage starts on, the picker keeps showing it, marked (no time slots), so you can see why nothing gets placed. Pick another day or Any day.
- It applies to auto-fill only. You can still drag a match onto any day by hand.
- Start next season moves the day forward with your time slots (13 Dec 2026 becomes Sun 12 Dec 2027). If the new season does not take the time slots along, the day is left empty.
- A first day is not part of a saved structure template, and Clone tournament leaves it empty: it is a date in this tournament's calendar, not part of the format.
- If someone changes a stage's first day while you have a preview open, Apply refuses it and asks you to preview again.
- Integrations can set it too:
PUT /api/v1/tournaments/{tournament}/phases/{phase}/first-day(see the API reference).
The section only appears when you have time slots on at least two days and a division has more than one stage. It is hidden while a preview is on screen; cancel the preview to change a day.
Common setups#
Qualifiers one weekend, main event the next
Qualifiers on Sun 6 Dec; Round 1, Intermediate round and Finals on Sun 13 Dec, all in one division so the qualifier winners move into Round 1 automatically.
- Time slots: open every hall on 6 Dec and on 13 Dec.
- First day: Round 1 → Sun 13 Dec. Leave the later stages on Any day; they follow.
- Result: all qualifiers on the 6th, everything else on the 13th. Without the first day, about half of Round 1 would be put into the free afternoon of the 6th.
Groups on Saturday, knockout on Sunday
- Time slots: Saturday and Sunday.
- First day: the first knockout stage (for example Quarter-finals) → Sunday.
- Result: every group match on Saturday, the whole bracket on Sunday, even if Saturday has room left at the end of the day.
Groups over two days, finals on the third
- Time slots: Friday, Saturday and Sunday.
- First day: the first knockout stage → Sunday.
- Result: the group stage is spread across Friday and Saturday; the knockout starts on Sunday.
Some of the schedule is already fixed
You set the qualifier kick-offs by hand and pinned them, and now want auto-fill to place the rest.
- Pinned matches are never moved, and they still count: a later stage never starts before the last pinned match of the stage before it has finished.
- Set the first day on the next stage as above if it belongs on another day.
Different divisions on different days
U11 plays on Saturday, U13 on Sunday. This is not a stage question: use the time slot's Only these divisions list on the time slots page to open Saturday to U11 and Sunday to U13. That is why a division's first stage is not offered under First day of each stage: the time slots already answer it.
If matches cannot be placed#
No free slot from the day this stage is set to start means the stage's first day (and the days after it) are full. Open more hours on or after that day, add a venue, or pick an earlier first day.
Where division restrictions show up#
Under each venue's name the header states that day's settings — for example
60 min + 15 min gap. The division restriction is shown on the slot, not on the
venue: any free slot reserved for particular divisions carries their names in the
grid cell itself.
That is deliberate. A restriction belongs to the time slot, so the same pitch can be U11-only on Thursday and open to everyone on Friday, or reserved all morning and free after lunch. A label on the column would state a rule that does not hold at every hour.
Set these on the time slots page, where the same restriction is listed per row and can be applied to many slots at once.
Reading the grid when you filter by division#
Filtering to one division does not hide the fact that other divisions are using your pitches. A slot another division holds is drawn hatched and greyed, with that division's tag on it, so you can see who has the pitch and at what time.
Those slots are inert on purpose: you cannot drag into them, swap with them, or pin or unschedule them. Acting on them would move a match the filter is hiding from you.
You may also see cells hatched the other way. Those mean the venue is open, but not to the division you are viewing — for one of two reasons, each with its own fix:
| What it means | How to change it |
|---|---|
| The time slot is limited to other divisions | Edit the time slot and change Only these divisions |
| This division is assigned to different venues | Edit the division and change its Venues |
Hover any hatched cell to read which of the two it is. Auto-fill refuses these slots too, so what you see on the grid and what the placer will do agree.
With All selected there is no division to restrict against, so nothing is hatched — you see every match, every venue.
Moving matches by hand#
The grid is fully editable, and every gesture has a keyboard equivalent.
| Action | Mouse | Keyboard |
|---|---|---|
| Move a match | Drag it onto a free slot | Focus it, press Enter, arrow keys, Enter again |
| Swap two matches | Drop one onto the other | Same — drop onto an occupied slot |
| Take off the schedule | Drag onto the Unplaced rail, or use the × on the card | Tab to the × and press Enter |
| Pin / unpin | The pin button on the card | Tab to it and press Enter |
Pinning#
A pinned match stays put. Auto-fill will not move it, regenerating the structure preserves it, and Clear schedule leaves it alone. Pin the fixtures that are already published — the final, the opening game — before you let auto-fill loose.
A pinned match also refuses to be dragged or swapped. Unpin it first.
Keeping a division at certain venues#
On a division's own page (Divisions → edit a division) you can tick the venues it plays at. Auto-fill will not place that division's matches anywhere else.
This is a hard restriction: matches that do not fit at those venues are left unplaced with a reason, rather than quietly spread across the site. That way you can see the shortfall and decide — open more time there, or relax the assignment.
This is the division's view. The Only these divisions setting on a time slot is the venue's view. They answer different questions and you can use either, or both.
Clearing the schedule#
Clear schedule on the grid removes kick-off times and venues; the matches themselves are untouched and return to the unplaced rail. The confirmation offers this day only or every day, with the count for each, and respects the division filter you have on screen.
Pinned matches survive.
Conflicts#
A red-outlined card with a ! means a clash: two matches claiming the same slot, or a team playing twice at once. The Matches page carries a conflict badge too, so you do not have to be looking at the grid to know.
Conflicts can only appear from hand edits or imported data — auto-fill never creates one.
The schedule needs review#
If you regenerate the structure after scheduling, MyCup flags the schedule as needing review rather than silently discarding it. Matches that survived keep their kick-off; the banner tells you what changed so you can re-run auto-fill or fix the gaps by hand.
Was this page helpful?
Let us know if you found this documentation helpful or if you have suggestions for improvement.