> ## Documentation Index
> Fetch the complete documentation index at: https://storekit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Strategieën voor bezorgkosten

> Optimaliseer bezorgkosten en servicekosten om de checkoutconversie te maximaliseren en toch de kosten te dekken. Vergelijk vaste, gelaagde, afstand- en gratis opties.

export const DeliveryFeeCalculator = () => {
  const [deliveryCost, setDeliveryCost] = useState(5.00);
  const [serviceCharge, setServiceCharge] = useState(0.99);
  const [deliveryFee, setDeliveryFee] = useState(2.99);
  const [monthlyOrders, setMonthlyOrders] = useState(500);
  const [selectedStrategy, setSelectedStrategy] = useState(null);
  const strategies = [{
    id: 'subsidy',
    name: 'Service Charge Subsidy',
    description: 'Small service charge on all orders, lower delivery fee',
    serviceCharge: 0.99,
    deliveryFee: deliveryCost - 1.50,
    icon: '💰'
  }, {
    id: 'balanced',
    name: 'Balanced Approach',
    description: 'Even split between service charge and delivery fee',
    serviceCharge: deliveryCost * 0.25,
    deliveryFee: deliveryCost * 0.65,
    icon: '⚖️'
  }, {
    id: 'full-recovery',
    name: 'Full Cost Recovery',
    description: 'Pass full delivery cost to customer',
    serviceCharge: 0,
    deliveryFee: deliveryCost,
    icon: '📊'
  }, {
    id: 'aggressive',
    name: 'Conversion Focused',
    description: 'Minimise visible fees, maximise conversions',
    serviceCharge: 1.49,
    deliveryFee: Math.max(0, deliveryCost - 2.50),
    icon: '🚀'
  }];
  const calculateMetrics = (sc, df) => {
    const customerTotal = sc + df;
    const yourRevenue = customerTotal;
    const subsidy = Math.max(0, deliveryCost - yourRevenue);
    const profit = yourRevenue - deliveryCost;
    const monthlySubsidy = subsidy * monthlyOrders;
    const monthlyRevenue = yourRevenue * monthlyOrders;
    return {
      customerTotal: customerTotal.toFixed(2),
      subsidy: subsidy.toFixed(2),
      profit: profit.toFixed(2),
      monthlySubsidy: monthlySubsidy.toFixed(0),
      monthlyRevenue: monthlyRevenue.toFixed(0),
      coveragePercent: (yourRevenue / deliveryCost * 100).toFixed(0)
    };
  };
  const customMetrics = calculateMetrics(serviceCharge, deliveryFee);
  return <div className="not-prose space-y-6">
      {}
      <div className="p-4 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-800/50">
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white mb-4">Your Delivery Costs</h3>
        <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
          <div>
            <label className="block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1">
              Average delivery cost (£)
            </label>
            <input type="number" step="0.50" min="0" value={deliveryCost} onChange={e => setDeliveryCost(parseFloat(e.target.value) || 0)} className="w-full px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-700 text-zinc-900 dark:text-white" />
          </div>
          <div>
            <label className="block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1">
              Monthly delivery orders
            </label>
            <input type="number" step="50" min="0" value={monthlyOrders} onChange={e => setMonthlyOrders(parseInt(e.target.value) || 0)} className="w-full px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-700 text-zinc-900 dark:text-white" />
          </div>
        </div>
      </div>

      {}
      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white mb-4">Compare Strategies</h3>
        <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
          {strategies.map(strategy => {
    const metrics = calculateMetrics(strategy.serviceCharge, strategy.deliveryFee);
    const isSelected = selectedStrategy === strategy.id;
    return <div key={strategy.id} onClick={() => {
      setSelectedStrategy(strategy.id);
      setServiceCharge(strategy.serviceCharge);
      setDeliveryFee(strategy.deliveryFee);
    }} className={`p-4 rounded-xl border-2 cursor-pointer transition-all ${isSelected ? 'border-blue-500 bg-blue-50 dark:bg-blue-900/20' : 'border-zinc-200 dark:border-zinc-700 hover:border-zinc-300 dark:hover:border-zinc-600'}`}>
                <div className="flex items-start gap-3">
                  <span className="text-2xl">{strategy.icon}</span>
                  <div className="flex-1">
                    <h4 className="font-semibold text-zinc-900 dark:text-white">{strategy.name}</h4>
                    <p className="text-sm text-zinc-600 dark:text-zinc-400 mt-1">{strategy.description}</p>
                    
                    <div className="mt-3 grid grid-cols-2 gap-2 text-sm">
                      <div className="bg-zinc-100 dark:bg-zinc-700/50 rounded px-2 py-1">
                        <span className="text-zinc-500 dark:text-zinc-400">Service: </span>
                        <span className="font-medium text-zinc-900 dark:text-white">£{strategy.serviceCharge.toFixed(2)}</span>
                      </div>
                      <div className="bg-zinc-100 dark:bg-zinc-700/50 rounded px-2 py-1">
                        <span className="text-zinc-500 dark:text-zinc-400">Delivery: </span>
                        <span className="font-medium text-zinc-900 dark:text-white">£{strategy.deliveryFee.toFixed(2)}</span>
                      </div>
                    </div>
                    
                    <div className="mt-2 flex items-center justify-between text-sm">
                      <span className="text-zinc-600 dark:text-zinc-400">Customer pays:</span>
                      <span className="font-bold text-lg text-zinc-900 dark:text-white">£{metrics.customerTotal}</span>
                    </div>
                    
                    <div className="mt-1 flex items-center justify-between text-sm">
                      <span className="text-zinc-600 dark:text-zinc-400">Cost coverage:</span>
                      <span className={`font-medium ${parseFloat(metrics.coveragePercent) >= 100 ? 'text-green-600 dark:text-green-400' : parseFloat(metrics.coveragePercent) >= 80 ? 'text-yellow-600 dark:text-yellow-400' : 'text-red-600 dark:text-red-400'}`}>
                        {metrics.coveragePercent}%
                      </span>
                    </div>
                  </div>
                </div>
              </div>;
  })}
        </div>
      </div>

      {}
      <div className="p-4 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white mb-4">Custom Calculator</h3>
        
        <div className="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
          <div>
            <label className="block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1">
              Service charge (£)
            </label>
            <input type="number" step="0.10" min="0" value={serviceCharge} onChange={e => {
    setServiceCharge(parseFloat(e.target.value) || 0);
    setSelectedStrategy(null);
  }} className="w-full px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-700 text-zinc-900 dark:text-white" />
          </div>
          <div>
            <label className="block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1">
              Delivery fee (£)
            </label>
            <input type="number" step="0.10" min="0" value={deliveryFee} onChange={e => {
    setDeliveryFee(parseFloat(e.target.value) || 0);
    setSelectedStrategy(null);
  }} className="w-full px-3 py-2 rounded-lg border border-zinc-300 dark:border-zinc-600 bg-white dark:bg-zinc-700 text-zinc-900 dark:text-white" />
          </div>
        </div>

        {}
        <div className="grid grid-cols-2 md:grid-cols-4 gap-3">
          <div className="bg-zinc-50 dark:bg-zinc-700/50 rounded-lg p-3 text-center">
            <div className="text-xs text-zinc-500 dark:text-zinc-400 uppercase tracking-wide">Customer Pays</div>
            <div className="text-2xl font-bold text-zinc-900 dark:text-white mt-1">£{customMetrics.customerTotal}</div>
          </div>
          <div className="bg-zinc-50 dark:bg-zinc-700/50 rounded-lg p-3 text-center">
            <div className="text-xs text-zinc-500 dark:text-zinc-400 uppercase tracking-wide">Your Subsidy</div>
            <div className={`text-2xl font-bold mt-1 ${parseFloat(customMetrics.subsidy) > 0 ? 'text-red-600 dark:text-red-400' : 'text-green-600 dark:text-green-400'}`}>
              £{customMetrics.subsidy}
            </div>
          </div>
          <div className="bg-zinc-50 dark:bg-zinc-700/50 rounded-lg p-3 text-center">
            <div className="text-xs text-zinc-500 dark:text-zinc-400 uppercase tracking-wide">Cost Coverage</div>
            <div className={`text-2xl font-bold mt-1 ${parseFloat(customMetrics.coveragePercent) >= 100 ? 'text-green-600 dark:text-green-400' : parseFloat(customMetrics.coveragePercent) >= 80 ? 'text-yellow-600 dark:text-yellow-400' : 'text-red-600 dark:text-red-400'}`}>
              {customMetrics.coveragePercent}%
            </div>
          </div>
          <div className="bg-zinc-50 dark:bg-zinc-700/50 rounded-lg p-3 text-center">
            <div className="text-xs text-zinc-500 dark:text-zinc-400 uppercase tracking-wide">Monthly Subsidy</div>
            <div className={`text-2xl font-bold mt-1 ${parseFloat(customMetrics.monthlySubsidy) > 0 ? 'text-red-600 dark:text-red-400' : 'text-green-600 dark:text-green-400'}`}>
              £{customMetrics.monthlySubsidy}
            </div>
          </div>
        </div>
      </div>

      {}
      <div className="p-4 rounded-xl bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800">
        <div className="flex items-start gap-3">
          <span className="text-xl">💡</span>
          <div>
            <h4 className="font-semibold text-blue-900 dark:text-blue-100">Recommendation</h4>
            <p className="text-sm text-blue-800 dark:text-blue-200 mt-1">
              {parseFloat(customMetrics.coveragePercent) >= 90 ? "Great balance! You're covering most of your costs while keeping fees reasonable." : parseFloat(customMetrics.coveragePercent) >= 70 ? "Good for conversions, but you're subsidising each delivery. Ensure higher order volume makes up for it." : "Heavy subsidy - consider increasing fees or focus on pickup orders to improve margins."}
            </p>
          </div>
        </div>
      </div>
    </div>;
};

De manier waarop je bezorg- en servicekosten inricht heeft grote invloed op zowel de conversie bij het afrekenen als je winstmarges. Deze gids verkent verschillende strategieën om de juiste balans voor jouw bedrijf te vinden.

## Je kosten begrijpen

storekit biedt twee typen kosten die je kunt configureren:

| Type kosten       | Bereik                               | Waar in te stellen        |
| ----------------- | ------------------------------------ | ------------------------- |
| **Servicekosten** | Vast bedrag op alle bestellingen     | Winkelinstellingen        |
| **Bezorgkosten**  | Per bezorgzone, variabel per afstand | Fulfillment > Bezorgzones |

Beide verschijnen als aparte regels bij het afrekenen, zodat klanten precies zien wat ze betalen.

## De psychologie van bezorgkosten

Hoge bezorgkosten zijn een belangrijke reden voor verlaten winkelwagens. Onderzoek toont:

* Klanten verwachten vaak "gratis" of gesubsidieerde bezorging bij online bestellen
* Één grote heffing voelt pijnlijker dan meerdere kleine kosten
* Klanten accepteren kleine servicekosten makkelijker dan hoge bezorgkosten

## Strategie 1: subsidie via servicekosten (aanbevolen)

**Beste voor:** Winkels die externe bezorgers gebruiken (Uber Direct, Stuart, enz.) of eigen chauffeurs

Voeg een kleine vaste servicekost toe aan alle bestellingen en verlaag vervolgens de bezorgkosten die klanten zien.

### Hoe het werkt

1. Bereken je gemiddelde bezorgkosten (bijv. £ 4,50 per bestelling)
2. Voeg een servicekost van £ 0,99 toe aan alle bestellingen
3. Stel je bezorgkosten in op £ 2,99 in plaats van £ 4,50

**Klant ziet:**

* Servicekosten: £ 0,99
* Bezorging: £ 2,99
* **Totale kosten: £ 3,98**

**Je ontvangt:** £ 3,98 richting je £ 4,50 kosten (je subsidieert £ 0,52 per bestelling)

<Tip>
  Een servicekost van 99 pence voelt onbelangrijk voor klanten maar telt op. Bij 1.000 bestellingen/maand levert dat £ 990 op voor bezorgkosten.
</Tip>

### Configuratie

1. Ga naar **Instellingen > Winkelinstellingen**
2. Stel **Servicekosten** in op het gewenste bedrag (bijv. 99)
3. Stel eventueel een **label voor servicekosten** in (bijv. "Orderfee" of "Verpakking")
4. Ga naar **Fulfillment > Bezorgzones**
5. Verlaag de bezorgkosten van elke zone met het bedrag van de servicekosten

## Strategie 2: gelaagde bezorgkosten

**Beste voor:** Winkels met een grote bezorgradius waar de kosten aanzienlijk variëren

Stel verschillende bezorgkosten per zone in op basis van werkelijke kosten en gebruik een servicekost om de dichtstbijzijnde zone erg betaalbaar te houden.

### Voorbeeldconfiguratie

| Zone   | Afstand  | Werkelijke kosten | Servicekosten | Bezorgkosten | Totaal klant |
| ------ | -------- | ----------------- | ------------- | ------------ | ------------ |
| Zone 1 | 0-2 mijl | £ 3,50            | £ 0,99        | £ 1,99       | £ 2,98       |
| Zone 2 | 2-4 mijl | £ 5,00            | £ 0,99        | £ 3,49       | £ 4,48       |
| Zone 3 | 4-6 mijl | £ 7,00            | £ 0,99        | £ 4,99       | £ 5,98       |

Deze aanpak:

* Houdt lokale bezorging zeer concurrerend
* Legt hogere kosten neer bij klanten die van verder bestellen
* Behoudt consistente omzet uit servicekosten

## Strategie 3: drempel voor gratis bezorging

**Beste voor:** Winkels die de gemiddelde bestelwaarde willen verhogen

Combineer een minimale bestelwaarde met verlaagde of gratis bezorging.

### Voorbeeldopstelling

* Servicekosten: £ 1,49 (alle bestellingen)
* Bezorgkosten: £ 2,99 (bestellingen onder £ 25)
* Gratis bezorging: bestellingen boven £ 25

Configureer dit met:

1. Stel je servicekosten in in Winkelinstellingen
2. Maak een [kortingscode](/docs/nl/guides/discounts/discount-codes) aan met:
   * Type: Gratis bezorging
   * Minimale bestelling: £ 25
   * Automatisch toepassen: Ingeschakeld

<Note>
  Zelfs bij "gratis bezorging" behoud je de omzet uit servicekosten om kosten te compenseren.
</Note>

## Strategie 4: volledige kostendekking

**Beste voor:** Premium restaurants waar klanten verwachten te betalen voor kwaliteitsservice

Leg de volledige bezorgkosten bij de klant, maar presenteer ze transparant.

### Configuratie

* Servicekosten: £ 0 (of klein bedrag voor verpakking)
* Bezorgkosten: volledige kosten per zone

Dit werkt als:

* Je eten premiumprijzen heeft
* Klanten kwaliteit boven prijs waarderen
* Je gezonde marges wilt behouden

<Warning>
  Deze aanpak levert doorgaans lagere conversiepercentages op maar hogere winst per bestelling. Test zorgvuldig.
</Warning>

## Strategie 5: prikkel voor afhalen

**Beste voor:** Winkels met veel loopverkeer of die het bezorgvolume willen verlagen

Maak afhalen aanzienlijk goedkoper dan bezorgen om afhalen te stimuleren.

### Voorbeeld

| Methode   | Kosten                        |
| --------- | ----------------------------- |
| Afhalen   | £ 0                           |
| Bezorging | £ 3,99 + £ 0,99 servicekosten |

Dit werkt goed in combinatie met:

* Vooruit bestellen voor afhalen
* Loyaliteitsbeloningen voor afhaalbestellingen
* Prominente boodschap "Klaar in X minuten"

## Je break-even berekenen

Om de juiste kostenstructuur te vinden, bereken je je werkelijke kosten:

### Kosten van externe bezorging

| Provider         | Typische kosten     | Opmerkingen          |
| ---------------- | ------------------- | -------------------- |
| Uber Direct      | £ 4-7 per bezorging | Varieert per afstand |
| Stuart           | £ 4-6 per bezorging | Zonegebaseerd        |
| Eigen chauffeurs | £ 2-5 per bezorging | Brandstof + loon     |

### Je break-even-formule

```
Break-even = Bezorgkosten - Servicekosten - Bezorgkosten voor klant
```

**Voorbeeld:**

* Bezorgkosten: £ 5,00
* Servicekosten: £ 0,99
* Bezorgkosten voor klant: £ 2,99
* **Break-even: £ 1,02** (je subsidie per bestelling)

<Tip>
  Een kleine subsidie per bestelling is vaak de moeite waard als het de conversie en het totale bestelvolume verhoogt.
</Tip>

## Je kosten A/B-testen

Voordat je je vastlegt op een strategie, test verschillende benaderingen:

1. **Week 1-2:** Huidige kosten (basislijnconversie)
2. **Week 3-4:** Lagere bezorgkosten + servicekosten
3. **Week 5-6:** Ander bedrag servicekosten

Volg:

* Conversiepercentage bij afrekenen
* Gemiddelde bestelwaarde
* Totale omzet
* Winst per bestelling

## Veelgemaakte fouten om te vermijden

| Fout                          | Waarom het schaadt           | Betere aanpak                                 |
| ----------------------------- | ---------------------------- | --------------------------------------------- |
| Zeer hoge bezorgkosten        | Verlaten winkelwagen         | Splits in servicekosten + lagere bezorgkosten |
| £ 0 servicekosten             | Laat geld liggen             | Zelfs £ 0,49 telt op                          |
| Zelfde tarief voor alle zones | Verlies op verre bezorgingen | Gelaagde bezorgzones                          |
| Afronden op hele ponden       | Voelt duurder                | Gebruik £ X,99-prijzen                        |

## Aanbevolen startpunt

Voor de meeste winkels raden we aan te beginnen met:

| Instelling                  | Waarde      |
| --------------------------- | ----------- |
| Servicekosten               | £ 0,99      |
| Label servicekosten         | "Orderfee"  |
| Bezorging zone 1 (0-2 mijl) | £ 1,99-2,49 |
| Bezorging zone 2 (2-4 mijl) | £ 2,99-3,49 |
| Minimale bestelling         | £ 10-15     |

Dit balanceert conversie met kostendekking en houdt flexibiliteit om aan te passen op basis van je resultaten.

## Strategieën vergelijken

Gebruik deze calculator om verschillende kostenstructuren te vergelijken en te zien hoe ze je kosten en wat klanten betalen beïnvloeden.

<DeliveryFeeCalculator />

## Volgende stappen

* [Bezorgzones instellen](/docs/nl/guides/fulfillment/delivery/delivery-zones) met je gekozen tarieven
* [Een promotie voor gratis bezorging maken](/docs/nl/guides/discounts/promotions) voor bestellingen met hoge waarde
* [Minimale bestelwaarden configureren](/docs/nl/guides/fulfillment/delivery/delivery-zones) per zone


## Related topics

- [Bezorgkosten in kortingen](/docs/nl/guides/discounts/delivery-fee-inclusion.md)
- [Kortingen voor gratis bezorging](/docs/nl/guides/discounts/free-delivery.md)
- [Kortingscodes](/docs/nl/guides/discounts/discount-codes.md)
- [TISSL](/docs/nl/guides/integrations/pos/tissl.md)
- [Minimale besteding & maximale korting](/docs/nl/guides/discounts/minimum-spend-maximum-discount.md)
