Most of the advice about selling food on Shopify assumes you post it in a box. If your customers collect from a counter, almost none of it applies.
A butcher, a deli and a farm shop have more in common with each other than any of them has with an online store. You sell things that are cut, weighed or picked to order. Your busiest days are fixed and known. Your customers turn up in person, often all at the same time, and once a year one weekend accounts for a serious share of the year's takings.
Shopify handles the payment and the product page perfectly well. The rest of that list it has no opinion about at all.
Local pickup under Settings > Shipping and delivery costs nothing and takes ten minutes. Turn it on per location, write a real pickup instruction, and make sure your inventory is assigned to the location, which is the usual reason pickup does not appear at checkout.
What it will not do is ask which day. Shopify's expected pickup time is a sentence shown at checkout, not a date, not a constraint, and nothing about it reaches the order. For a shop open every day where collection means any time this week, that is genuinely enough. For everyone below it is not.
This is the setting a farm shop needs first and most guides never mention, because most shops are open seven days and the question never comes up.
If you are at the farmers market on Saturday, closed Sunday and Monday, and only doing collections Thursday to Saturday, then Tuesday must not be selectable. Not discouraged in a note under the calendar. Not selectable.
Same for the fixed closures every shop like this has: the week between Christmas and New Year, the day of the county show, the fortnight in February. Those are ranges, and entering a fortnight as fourteen separate rows is the kind of thing that quietly stops getting done. Check whether an app takes a range before you commit, and whether an annual closure has to be re-entered every year, because several in this category make you do exactly that.
Sliced ham from the counter is now. A whole lamb butchered into a box is not now. A twenty person cheese and charcuterie board is not now either, and it is also not the same as the lamb.
A single store-wide notice period cannot describe that, and the direction it fails in is predictable: it makes the quick things look slow, which costs you the impulse order on the way home, and it makes the big things look quick, which costs you a Saturday.
Notice belongs to the product. Roughly:
| Product | Typical notice |
|---|---|
| Counter items, pre-packed, anything already cut | Same day, after a cutoff |
| Cut to order joints, sausage made to a recipe | 24 to 48 hours |
| Platters, grazing boards, event catering | 48 to 72 hours |
| Whole or half animal boxes, dry aged to order | One to several weeks |
And then the basket that mixes them, which for this kind of shop is most baskets. A customer adds a platter for Saturday and a pack of bacon for tomorrow. The behaviour worth buying is that each line keeps its own date, so one order carries two collection dates. The alternatives on offer elsewhere are pushing the whole order out to the slowest item, or telling the customer to place two orders. Ask which one you are getting.
Shopify cannot reprice an order after it is paid. If you sell a joint at a price per kilo and the actual joint comes out at 1.34kg, there is no supported mechanism for the checkout total to follow the scale. No scheduling app changes this, and one that implies otherwise is overselling.
The three honest ways round it, in the order most shops try them:
Decide this before you look at apps, because it determines your product structure and nothing downstream can fix a wrong choice here.
Order ahead moves the queue rather than removing it. Everybody collecting at noon on Saturday is the same crowd you had before, holding receipts.
Time slots are the answer when that is genuinely happening, and overhead when it is not. A shop where people drift in over a morning does not need them. A shop where twenty orders are collected in forty minutes does.
The caveat applies to every app in this category, ours included: nobody reserves a slot while a customer is still in checkout. Two people can take the last noon slot at the same time and both get it, because the count goes up when the order exists rather than when the checkout begins. It is a limit of how Shopify checkout works. Worth knowing, not worth avoiding slots over.
For a lot of butchers and farm shops, the Christmas order book is a meaningful slice of the year, and it is the one week where getting it wrong is expensive in both directions. Oversell and you are ringing customers on the 23rd. Undersell and you left money on the counter.
What that week actually needs:
Set this up in October. Testing a booking flow in the third week of December is not a plan.
A date stored only as a cart attribute can be discarded when Shopify issues a new cart token, and it does not show against the item in your admin. Stored as a line item property it stays with the product through checkout. Place a test order and look at the line itself, not the order notes. This is the most common quiet failure in the category and it takes thirty seconds to rule out.
Shopify's default packing slip renders neither order note attributes nor line item properties, so a date captured correctly at checkout can be completely absent from the paper in the back. Edit the template before you depend on it, whichever app you use.
We build Readyby for steps three to six: collection days, closed date ranges, cutoffs, per product lead times on the free plan, daily caps and optional time slots, for pickup and for local delivery. The date is written to the order line, express checkout is blocked until one is chosen, and a basket holding a 72 hour platter and same day bacon keeps a date on each line rather than moving them both out.
Related: Click and collect on Shopify · Lead times for a bakery on Shopify · All guides