How much to charge for delivery when you're the one driving

To figure out how much to charge for delivery, add up what one round trip costs you — gas, the driver's hour, and wear on the vehicle — and divide it by the orders it actually holds. Then charge by zone, not with one flat number.

Efraín sells building materials in San Luis Potosí. One Tuesday a good order came in: twenty bags of cement and three of mortar, $4,300. The customer lives across town and asked the usual question, “can you bring it to me?”, and Efraín gave the usual answer: “sure, I’ll bring it over.”

The truck left at ten and got back at eleven-thirty. Gas, an hour and a half of his helper loading and unloading, and the trip he couldn’t make somewhere else. None of that shows up on any receipt, because he never charged for it.

If you’re trying to figure out how much to charge for delivery, the problem is almost never the number. It’s that most people don’t have one at all, and “sure, I’ll bring it over” ends up being a pricing decision Efraín made forty-something times last month without realizing he was making it.

What is the delivery cost for a local business?

The delivery cost is what you charge to bring the order to the customer. For a local business, it isn’t a courier rate: it’s the price of a round trip that leaves your door, gets driven by someone you’re paying, and comes back.

That difference matters because it changes the math. Shipping a box by courier is priced by weight and dimensions. Yours is priced by round trip: the same truck, the same helper, and the same forty minutes, whether they’re carrying two bags or twenty.

How much should you charge for delivery if you’re the one driving it?

Work out what one full round trip costs you and divide it by the orders that actually fit into that trip. That’s three numbers, and you already have them.

Take Efraín’s numbers: about $70 in gas for the round trip, an hour and a half of his helper’s time at $90 an hour comes to $135, plus a set-aside for tires and maintenance, say $25 per trip. That’s $230 for the round trip. If that trip only delivers to one order, that’s the cost of the order. If he fits three deliveries from the same area into it, it drops to about $77.

That’s the number you were missing. Charging $50 for delivery on a $230 round trip isn’t charging cheap — it’s paying the customer $180 to let you deliver to them.

Is it wrong to charge for delivery?

No, and your customers don’t mind it nearly as much as you think: what bothers people isn’t paying for delivery, it’s finding out about the delivery charge at the very end. What’s expensive is never deciding it in the first place. Free shipping works great when it’s a choice — because it raises the ticket size, because it wins you the sale, because the order can absorb the cost — and it gets very expensive when it just happened.

Notice who’s paying when you don’t charge: you are, but not evenly. The customer who lives nearby and buys often pays more, because their order is subsidizing the long trip out to the one who ordered three bags all the way out by the highway exit. The customer who’s least worth it to you is exactly the one you’re giving the most away to.

Does it make sense to offer free shipping above a certain amount?

Yes, and it’s the easiest way to charge for it without it feeling like a charge. You set a threshold — “free delivery from $1,500” — and that threshold does two things at once: it covers the trip, and it gives the customer a reason to add the one more bag they were missing.

The threshold isn’t something you make up: it’s the amount at which your profit already covers the $230 trip. If your margin runs around 20%, a $1,150 order barely breaks even, so Efraín sets it at $1,500 and the trip pays for itself. Setting it at $800 means giving away free shipping out of your own pocket.

What if some neighborhoods are really far?

That’s what zone-based pricing is for, instead of one flat number. A flat rate for the whole city is always wrong at both ends: it scares off the customer just around the corner and leaves you losing money on the one fifteen kilometers away.

On your site, this is set up using postal codes. You group nearby zip codes into a zone with its own rate, the farther ones into a pricier zone, and the ones you simply can’t reach you leave out: a customer in that zone sees “Out of coverage” before they even build their order, instead of both of you finding out over WhatsApp after they’ve already paid.

How do you set this up on your site?

In your site’s console there’s a Shipping options section, and you can have several turned on at once. There are three types:

  • Pick up in store. No cost, for customers who’d rather come by for their materials. This is the option that keeps charging for delivery from feeling unfair: there’s always a free one available.
  • Flat rate. One single price for your area, if your city is small or you deliver evenly across it.
  • By zone (postal code). Each zone with its own zip codes and rate. They’re entered by prefix, so “78” covers all of San Luis, while “78000, 78100” covers only downtown.

Any of the three also has “Free shipping from”, which is your threshold. If you leave it blank, there’s never free shipping, and that’s fine — it’s a decision, not an oversight.

When the customer enters their postal code, the cart shows the cost for their zone on the Shipping line and adds it to the total. The charge is calculated server-side, using your rates, not whatever the browser sends: what the customer sees is what gets charged.

What won’t your site do for you?

It doesn’t measure distances or plan routes. It doesn’t know that the neighborhood up north has become an eternity because of construction on the avenue; you group the zones yourself, by hand, because you’re the one who knows the city.

It also doesn’t quote courier rates to other states — that’s a different business, with its own weights and dimensions — and it won’t guess your free-shipping threshold for you.

And here’s a practical detail: an option’s type can’t be changed after it’s created. If you set up a flat rate and want zones instead, you create the new option and delete the old one. It takes two minutes, but better to know that going in.

Most important: if you never set up a shipping option, your local delivery starts out free. That’s the state your business is in right now if you never priced it, and it’s the state that cost Efraín $230 one Tuesday.

Measure a single round trip

Don’t try to do the math for the whole month. On the next delivery that goes out, jot down four things: kilometers at departure, kilometers on return, minutes it took, and how many orders were in that trip.

With those four numbers you can already work out your rate, and it’s almost always a surprise. Once you have it, describe your business to Proyecta — “a hardware store in San Luis with my catalog, free in-store pickup, shipping by zone based on postal code, and free shipping from $1,500” — and publish it on proyecta.dev with the pricing already set.