Nobody wants to be the person who has to phone a customer at 11:04 to explain that the breakfast sandwich they just paid for stopped existing four minutes ago. If your café runs a menu that changes through the day — breakfast until 11, a lunch block, a limited evening list — the fix is a scheduling setting, not a staff habit.
Square gives you two different tools for this depending on which product you’re in, and there’s one trap in the middle that catches most setups. Here’s the whole thing.
The two tools, and which one you need
Square Online → time-based categories. For online ordering, kiosk, and anything reading your Square Online catalogue, availability is scheduled at the category level. You create a category, set it to be available only during certain days and times, and everything inside it appears and disappears on that schedule (Square Support: set up time-based categories).
Square for Restaurants → menu hours. If you’re on Square for Restaurants, you can build genuinely separate menus — Breakfast, Lunch, Dinner — and set hours on each one for dayparting or time-limited specials like happy hour (Square Support: create and update menus).
Most independent cafés need the first. Cafés running Square for Restaurants on the counter and Square Online for pickup need both, configured to agree with each other. That last part is where the drift happens: nothing automatically reconciles a Restaurants menu schedule with a Square Online category schedule, so if you change one, put a reminder on the other.
Setting up a breakfast cutoff, step by step
The mechanics take about ten minutes.
- Group the items. Items & services → Items → Categories. Create Breakfast and move everything into it — the sandwiches, the breakfast-only drinks, the combos. Anything you want to vanish together has to live together.
- Open Availability. Select the category and find the Availability section. Switch it from always-available to only during certain days and times.
- Set days and hours. Tick the days, then enter a window for each. You can add multiple windows on the same day with the plus button — useful if you also run an evening block from the same category structure.
- Save and check your storefront in a private browser window at a time inside the window and a time outside it.
Square also lets you build subcategories that follow the same schedule — for example a Breakfast category running 7:00–11:00 with Breakfast Drinks and Breakfast Combos underneath on the same hours. That keeps the online menu organised without forcing you to maintain three separate schedules.
The prep-time trap
This is the part that isn’t in the documentation, and it’s the reason most breakfast cutoffs still generate friction.
Availability is evaluated against when the customer orders, but your kitchen’s constraint is when the food has to be made. An order-ahead app puts real distance between the two. If your pickup prep time is 15 minutes and your category window ends at 11:00, an order placed at 10:58 hits the pass at 11:13 — after the flat top is cleaned and the lunch mise is down.
The fix is arithmetic:
Category end time = the moment you stop cooking it − your prep time − a small buffer.
For a café with a 15-minute prep time and a hard 11:00 changeover, set the breakfast category to end at 10:45. You’ll take slightly fewer breakfast orders and you’ll stop having the conversation at the pass entirely. If you haven’t set your prep times deliberately yet, do that first — see how to set prep times for Square online ordering.
The same logic applies at the front of the window. If your café opens at 7:00 but the espresso machine isn’t pulling until 7:10, starting the category at 7:10 is more honest than absorbing three angry pickups a week.
Time-based categories vs. marking something sold out
These solve different problems and get confused constantly.
| Time-based category | Sold out | |
|---|---|---|
| Nature | Recurring schedule | One-off manual state |
| Who touches it | Nobody, after setup | Staff, in the moment |
| Good for | Breakfast ending at 11, weekend-only items, evening specials | The croissants went at 9:15 today |
| Failure mode | Wrong hours quietly cost you orders for weeks | Someone forgets to un-sold-out it tomorrow |
Use both. Schedule the predictable things so nobody has to remember them, and keep the sold-out toggle for genuine daily variance — that workflow is covered in how to 86 sold-out items on Square Online.
What this setup can’t do (honestly)
Worth knowing before you design around it:
- Scheduling is per category, not per item. If you want one item on a schedule, you make a category containing only that item. It works, but a menu with a dozen individually-scheduled items becomes a dozen categories. Item-level time restrictions have been a persistent request in Square’s community feature requests — check current docs before assuming it hasn’t shipped.
- Online scheduling doesn’t govern your counter POS. A time-based category controls the online store and kiosk. Staff ringing items in person are working off the POS catalogue. If you need the counter menu to change too, that’s Square for Restaurants menu hours.
- Time zones and holidays are your problem. Schedules run on your location’s regular hours. Statutory holidays, seasonal changes, and one-off closures need handling separately — see managing holiday hours across Square, Google, and Apple.
A worked schedule for a typical café
Here’s a realistic configuration for a café serving breakfast, all-day coffee, and a small evening list. Times assume a 15-minute prep time.
| Category | Days | Window | Why that end time |
|---|---|---|---|
| Breakfast | Mon–Fri | 7:10 – 10:45 | Kitchen changes over at 11:00; 15 min prep + buffer |
| Breakfast | Sat–Sun | 8:10 – 13:45 | Weekend brunch runs to 14:00 |
| All-day drinks | Every day | Always available | No schedule; use sold-out for one-offs |
| Lunch | Mon–Fri | 11:00 – 14:30 | Starts as breakfast ends |
| Evening / pastry clear-out | Mon–Sat | 16:00 – 18:30 | Pairs well with an end-of-day discount |
That last row is where scheduling starts making you money rather than just preventing complaints — a standing evening category is the cleanest way to run end-of-day surplus sales without a daily decision, and it pairs with time-based discounts on Square if you want the price to move too.
What customers see when the menu is off — and what they should see
A scheduled category doesn’t explain itself. At 11:15 a customer opening your app just sees a menu with no breakfast on it, and a meaningful share of them conclude you’re sold out, or that the app is broken, and close it. That’s a silent cost that never shows up in your reports.
Three cheap fixes, in order of effort:
- Name the window in the category itself. “Breakfast (until 10:45)” reads as a schedule rather than an absence, and it sets expectations before someone builds a cart they can’t check out.
- Say it once in your menu description or app copy. A single line — “Breakfast is served 7:10–10:45; lunch starts at 11” — prevents most of the confusion, and it’s also the sentence an AI search engine will quote when someone asks what time your café stops serving breakfast.
- Announce the window opening, don’t just wait for it. A push notification or a story at 7:10 turns a passive schedule into a demand spike at the exact moment you have the most capacity to absorb it. This is one of the few genuinely well-timed uses of push — the general rules are in push notifications and café customer retention.
The same reasoning applies to the front door and the internet at large. If breakfast hours are a thing customers search for, they belong on your Google Business Profile and your menu page, not only inside the ordering flow — see adding an online ordering link to your Google Business Profile.
Test it at the boundary, not in the middle
The only test that matters is at the edges. Before you call it done:
- Place an order five minutes before your cutoff. Confirm it goes through and check the promised pickup time against what your kitchen can actually deliver.
- Try again five minutes after. The items should be gone from the online store and from your app, not merely greyed out.
- Come back the next morning and confirm the category reappeared on its own.
If you’re launching a menu change alongside this — a new seasonal drink, a revamped breakfast block — the same boundary test applies; there’s a fuller launch checklist in how to launch a seasonal drink on Square.
How this looks in a branded app
If your ordering lives in your own iOS and Android app rather than only on a Square Online page, the underlying schedule is the same — the app reads your Square catalogue, so a category that’s outside its window simply isn’t there. The difference is presentation: an app can show tomorrow’s breakfast window rather than an empty menu, and you can send a push notification at 7:10 telling regulars breakfast is live rather than hoping they check.
That’s the model Tany runs for Square cafés — a branded order-ahead app plus web ordering on your existing Square catalogue, at $99 CAD/month per location, so menu scheduling stays a single setting in Square rather than something you maintain in three places.
Whichever channel you’re on, the principle holds: any menu rule you can express as a schedule should be a schedule. Every rule that lives in someone’s head instead is one shift-change away from a refund.