Ask ten owners what their delivery margin is and most will quote the restaurant's overall margin: 5%, maybe 8%. For delivery decisions that number is close to useless. It blends dine-in with delivery, spreads fixed costs evenly across orders that don't consume them evenly, and hides the fact that a marketplace order and a direct order from the same kitchen can differ by $7 of profit. Zones, fees, channels, promos — every one of those calls comes down to a single number, contribution per order.
The wrong math: dividing the P&L by everything
The P&L approach takes annual profit and divides it by annual revenue. Delivery decisions don't happen at that altitude. Whether you take one more order tonight depends on one thing: what that order adds versus what it costs to serve, meaning the variable costs. Rent, the manager's salary, the dishwasher lease, none of that changes when order #41 lands. Load those fixed costs onto every order and healthy orders start to look sick. Ignore the variable costs instead and sick orders look healthy. Both errors are common, and they push owners in opposite wrong directions.
The right math: one $30 direct order, line by line
Take a $30 order on your own website, with a $2.99 delivery fee the customer pays. Money in: $32.99.
Food cost runs 30% of the menu price, so $9.00. Packaging (containers, bag, cutlery, napkins) comes to about $1.20 on a two-dish order. Payment processing at 2.9% plus $0.30 on the full amount is $1.26. Then the courier, costed honestly: wage for the trip time, mileage or scooter costs, a share of insurance. For a 3-mile run on an in-house driver handling two orders an hour, that's about $4.50.
Contribution: $17.03 per order. That's what each direct order actually puts toward rent, salaries, and profit. Run the same ticket through DoorDash or Uber Eats at a 30% commission tier and the commission alone takes $9.00, and that's before promo participation and refund leakage, which we itemized in what delivery apps really take from every order. Same kitchen, same food, and you keep roughly half the contribution.
Bring one week of orders to a 30-minute call. We'll compute your real per-order margin together.
Two costs owners get wrong: one they forget, one they overcount
The cost owners forget is refunds and remakes. Operators report that 1–3% of delivery revenue leaks out through refunds, remakes, and courtesy credits. On our order that's $0.30 to $1.00. Trivial on one ticket, five figures a year once you have volume.
The cost owners overcount is kitchen labor. If the line cooks are already on shift and delivery just fills their idle minutes, the added labor for one more order is close to zero. Labor turns into a real per-order cost only when delivery volume forces you to add shifts. Watch for that point instead of charging every order as if you'd already crossed it.
The delivery fee question, answered by the same math
Owners agonize over the fee line more than any other, and the contribution view makes it almost mechanical. Free delivery is a $4.50 discount on every order. That's fine if it visibly lifts volume or ticket size enough to pay for itself, and ruinous when you run it as the default. A flat $2.99 fee recovers about two-thirds of a typical courier cost and stays under the psychological line where customers start comparing you to the marketplaces. The pattern operators land on most often is a modest fee that disappears above a free-delivery threshold set a few dollars over your current AOV. The fee protects margin on small orders; the threshold nudges the average ticket up. Both show up in the contribution line inside a month, so you can test it instead of arguing about it.
Contribution decides everything fixed costs can't
Once you know contribution per order, the strategic questions mostly answer themselves. Covering the fixed side of delivery (a dispatcher, courier guarantees, software) is just division: a $170/day fixed block breaks even at 10 orders when each contributes $17, and needs nearly twice that at marketplace contribution. A losing zone shows itself the same way. Courier cost per order climbs to $8 because the ride runs 25 minutes each way, which is a zone-design problem rather than a volume one. And the far-away order at 9:45pm is worth taking when a courier is idle, not worth it when it delays three closer ones.
The levers, ranked by what they move
Four variables move the per-order number, and they're not equal. Channel mix does the most work: every order you shift from a marketplace to your own channel adds $6 to $9 of contribution on this ticket. Courier utilization comes next. Going from 1.5 to 2.5 orders per courier-hour cuts the per-order courier cost by 40%, and that comes from dispatching and route optimization rather than the driver working harder. Average order value is third. Food cost scales with the ticket while courier and processing barely move, so a $38 ticket beats a $30 one by more than the ratio suggests. Packaging and refunds round out the four. Track all of them per order, per channel, and per zone in reports and analytics, because monthly averages will hide the exact orders that lose money.
Do this next
Take yesterday's delivery orders, one day is enough, and work out contribution for each: revenue minus food, packaging, processing, and courier or commission. Sort them low to high. The bottom ten will have something in common, usually one zone, one channel, or one time window. That shared trait is your margin problem, and you can fix it this month.
Dots tracks the economics of every order automatically. Launch in about two weeks.