There are two ways to lose money on a delivery order. The first is to undercharge and absorb the gap yourself. The second is to overcharge and watch customers abandon their basket at the last screen. Most restaurants do a bit of both, often on the same order.
The problem isn’t usually greed or generosity. It’s that the true cost of getting an order out the door is harder to pin down than people assume, and the conversation about delivery fees tends to skip straight to “what do customers expect” without asking “what does this actually cost us”.
This post is about the maths. What goes into a delivery, what the options are for charging for it, and how to choose a structure that pays for itself without making the basket look hostile.
What an order actually costs to deliver
Before you can decide what to charge, you need to know what you’re charging for. A delivery order has costs that sit-in orders don’t, and they’re easy to underestimate because they’re spread across small line items.
A rough breakdown for a single delivery order:
- Packaging — between £0.30 and £1.50 depending on what you’re sending. A burger and chips might be £0.50. A two-course meal with drinks, sauces and cutlery can easily hit £2.
- Driver cost — if you’re paying a driver £12/hour and they’re doing 3 drops an hour, that’s £4 per drop. If they’re doing 5, it’s £2.40. If you’re using a third-party fleet, expect £4–£7 per drop depending on distance and time of day.
- Fuel and vehicle wear — if you’re running your own driver, this is usually £0.50–£1.50 per drop depending on radius.
- Payment processing — typically 1.4% + 20p for UK cards via Stripe or similar. On a £25 order, that’s about 55p.
- Time on the operational side — the kitchen takes the order, the front of house dispatches it, someone handles the issue if a customer calls about a missing item. This is harder to cost but it’s real.
For most takeaways doing their own delivery, the true cost per drop sits between £4 and £8 once you add it all up. For restaurants using a fleet service, it’s £5 to £10. If you’re not charging at least that much in some form, you’re either eating the cost or pricing it into the food.
Three ways to charge, and what each one signals
The structure you choose sends a message before the customer has read a single number. Pick the wrong one and you’re fighting the perception before you’ve explained the value.
Flat delivery fee
The simplest and the most honest. One line on the basket: “Delivery: £3.50”. The customer knows what they’re paying and can decide.
This works well when your delivery zone is small and consistent. If everyone you deliver to is within a 2-mile radius and the drive time is broadly similar, a flat fee is fair and easy to explain.
It struggles when your zone is wider. A £3.50 fee that covers a 4-mile drop subsidises the people 4 miles out at the expense of the people round the corner. Customers further away love it. Customers nearby notice and resent it.
Distance- or zone-based fees
The fairer model for any meaningful delivery area. The customer near you pays £2.50. The customer at the edge of your zone pays £5. This reflects actual cost and lets you push your radius without losing money on the long drops.
The downside is that it adds a small mental load at checkout. The customer doesn’t know what they’ll be charged until they’ve entered their address. If your platform handles this cleanly — showing the fee as soon as the postcode is entered, not after they’ve filled their basket — it’s a non-issue. If it surfaces the fee at the final screen, you’ll see drop-offs from people who feel ambushed.
Service charge or “small order fee”
A separate line item that covers the operational cost of an order regardless of distance. Often used as a minimum-order threshold (“orders under £20 incur a £2 service charge”) or as a flat charge on every order.
This is useful for two cases. The first is when you genuinely have a fixed cost per order that’s separate from delivery — payment processing, packaging, admin. The second is when you want to nudge basket sizes up without raising menu prices. A service charge that disappears at £25 will pull a £19 order up to £25 more often than you’d expect.
The risk with service charges is they look like fees-on-fees. A customer who sees “subtotal, delivery, service charge, VAT” stacked on a basket starts to feel nickel-and-dimed even if the total is reasonable. Use them with care, and label them so they’re obviously not delivery.
Pricing it into the menu: tempting, but a trap
A common move when delivery fees feel awkward is to bake them into menu prices. “Free delivery over £15” with prices nudged up 8% to cover it. On paper it looks clean — the customer sees one price and there’s no friction at checkout.
The problem is that those prices follow you everywhere. They sit on Google. They’re on the menu boards in your shop. They’re what walk-in and dine-in customers pay. You’ve effectively asked your highest-margin customers to subsidise the cost of delivering to your lowest-margin ones.
Worse, you’ve made yourself look expensive against competitors who keep food prices honest and charge delivery as a separate line. The customer comparing your £14 chicken to their £12 doesn’t know yours includes delivery. They just see a more expensive bird.
If you’re going to bake costs in, do it on a delivery-only menu with delivery-only prices. Most platforms let you maintain separate pricing per channel. It’s more work to keep in sync but it preserves margin where it should sit.
Free delivery thresholds: when they actually work
“Free delivery over £30” is one of the most-used upselling tools in food. It works because it gives the customer something to aim for, and because the marginal cost of an extra £5 of food is much lower than the £4 delivery fee they avoid.
A few things to get right if you’re using one:
- Set the threshold above your current average order. If your average is £24, set the threshold at £30, not £20. The whole point is to lift the average, not to give away delivery on orders you’d have got anyway.
- Watch the marginal cost of the food you’re encouraging. If the order pushes over the threshold by adding a £6 dessert that costs you £1 to produce, you’re better off. If it pushes over by adding a £6 drink you’ve barely marked up, you’re worse off.
- Don’t make it the only option. A flat or zone-based fee for sub-threshold orders is fine. “We don’t deliver under £30” turns away small orders that would have been profitable at a normal fee.
Surcharges: peak times, bank holidays, weather
If you’re using a fleet that surge-prices, you’re already paying more for drops at 7pm on a Friday than at 2pm on a Tuesday. The question is whether you pass it through.
Some operators add a peak surcharge — £1 extra on Friday and Saturday evenings, sometimes £2. It’s defensible because the cost is real. But it’s also visible at the worst possible moment: when the customer is hungry, has decided what they want, and is about to confirm.
The cleaner approach is usually to set zone fees that reflect blended weekly cost, accept slightly thinner margins on peak orders, and use the lighter weeknight margins to absorb it. Customers don’t hold a grudge against a Friday surcharge, but they remember a surprise one.
Bank holidays and adverse weather are different. A clearly labelled “bank holiday surcharge” with an explanation tends to be accepted because the reason is obvious. If your driver is doing a snow-day delivery, a £2 weather fee with a one-line explanation in the basket is fair and most customers will pay it without comment.
The number that matters: contribution per order
Every conversation about delivery pricing eventually has to come back to one number: how much money you keep on a typical order after the cost of food, packaging, payment processing and delivery.
Work it backwards.
Take a typical order. £22 subtotal. £3 delivery fee. £25 total.
- Food cost (30% of subtotal): £6.60
- Packaging: £0.80
- Payment processing (1.4% + 20p): £0.55
- Delivery cost (driver, fuel): £5.00
- Contribution: £12.05
That £12 has to cover your kitchen labour, your rent, your utilities, your software, your insurance, and whatever you’re paying yourself. If that number feels thin, the question isn’t “should I charge more for delivery” but “what does my full P&L look like at this volume”. Sometimes the answer is a delivery fee tweak. Sometimes it’s a menu repricing. Sometimes it’s a hard look at which products you should stop offering for delivery at all.
The point of pricing delivery transparently is that it forces this maths to be visible. If you bury it in menu prices, you never quite know whether delivery is paying for itself. If you charge for it directly, you find out fast.
What good looks like
A delivery pricing structure that works tends to share a few features:
- The fee covers cost. Not generously, not punitively. It pays for the drop and a bit of the overhead.
- The customer sees it before the final screen. Ideally as soon as they’ve entered an address, so there are no surprises at checkout.
- It’s labelled clearly. “Delivery £3.50” is fine. “Service & handling fee” feels like a hidden charge even when it isn’t.
- It scales with cost, not with order size. Charging £5 delivery on a £15 order and £5 on a £45 order is honest. Charging 15% of the basket as “delivery” is not.
- Menu prices are the same as in-store. If you have to subsidise delivery from somewhere, do it on a delivery-only menu that doesn’t poison your overall pricing.
The customers who order from you regularly don’t mind paying for delivery. They mind being surprised by it, or feeling they’re paying for something that should obviously be free, or noticing that the food itself costs more than down the road. Get the structure honest and most of the resistance goes away.
The maths is rarely flattering. Delivery is expensive, margins are thin, and there’s no fee structure that makes it cheap. But there’s a difference between thin margins on purpose and thin margins by accident. Knowing which one you’ve got is the first job.