At a glance
Share of DPD parcels that arrived at the customer on or before DPD’s promised delivery date. The merchant-facing “did the parcel turn up when DPD said it would” number, computed across every DPD shipment in the window. DPD UK quotes a contract SLA of ~98% on Next Day services for premium DTC accounts; this card tracks the lived reality.
| What it counts | COUNT(parcels WHERE actual_delivery_at <= estimated_delivery_at) / COUNT(parcels WHERE actual_delivery_at IS NOT NULL), every delivered parcel scores 0 or 1 against its own promise. |
| Delivery success criterion | DPD parcelStatus = DELIVERED AND a valid Proof-of-Delivery (POD) scan with timestamp. PUDO drop-offs at DPD Pickup shops count as delivered the moment the parcel scans into the shop, not when the customer collects. |
| On-time threshold | DPD’s estimatedDeliveryDate field on the parcel object, no grace window. Predict-slot parcels (the 1-hour window) use the slot end-time as the cutoff; see dpd_predict_slot_accuracy for the in-slot variant. |
| Service-level scope | All DPD services pooled: Next Day, Next Day by 12:00, Next Day by 10:30, Saturday, Sunday, EU Classic, EU Express. Filter by productCode in OTD by Route to isolate. DPDLocal is a separate connector card. |
| Predict-slot quirk | A parcel can be “on time” by date (delivered same day) and “out of slot” (arrived 13:45 when the customer chose 10:00 to 11:00). This card scores the date; the slot is scored on dpd_predict_slot_accuracy. Treat the two as paired metrics. |
| Tracking event semantics | DPD pushes status webhooks on every scan (collection, depot in, on van, attempted, delivered). The card uses the first DELIVERED event timestamp; subsequent corrections (e.g. carded then redelivered) do not retroactively change the score. |
| Returns / RTO | Excluded. Returned-to-sender parcels (parcelStatus = RTO or refused) are removed from both numerator and denominator. They surface on dpd_returned_to_sender. |
| Geographic scope | UK domestic + DPD UK outbound to EU and rest-of-world. Inbound EU origins served by DPD Group sister carriers (DPD France, DPD Germany) report through their own connectors and are not blended here. |
| Peak-period degradation | Q4 (Black Friday through Christmas Eve) typically drops UK OTD by 3 to 8 percentage points; not as severe as Royal Mail or Evri because DPD’s network is purpose-built for parcel volume, but still meaningful. Read November and December numbers in seasonal context. |
| Time window | 30D vsP (rolling 30 days vs prior 30 days) |
| Alert trigger | <95% warns, <90% is critical, driven by sentiment_key gauge thresholds. Adjustable per workspace. |
| Roles | owner, operations |
Calculation
Calculated automatically from your DPD data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK premium-DTC menswear brand (AOV £180, ~3,000 orders / week) ships everything via DPD UK Next Day with predict-slot enabled at checkout as a paid £4.95 upgrade. Reading taken at 09:00 GMT on 12 Mar 26 for the trailing 30 days (10 Feb 26 to 11 Mar 26).| Service tier | Parcels | Delivered on date | OTD rate | In-slot rate (paired card) |
|---|---|---|---|---|
| Next Day (standard) | 8,420 | 8,150 | 96.8% | n/a |
| Next Day by 12:00 | 1,640 | 1,584 | 96.6% | n/a |
| Next Day with Predict | 2,340 | 2,278 | 97.4% | 94.1% |
| EU Classic (FR / DE / NL / IE) | 580 | 524 | 90.3% | n/a |
| All DPD (this card) | 12,980 | 12,536 | 96.6% | (slot card) |
<95% warn threshold is not tripped. Five things to notice:
- DPD’s premium-tier number is meaningfully higher than mass-market UK couriers. Industry-comparable Royal Mail Tracked 24 typically runs 91 to 94% on the same DTC-fashion lane; Evri runs 85 to 90%. This brand is paying ~£6.20 per parcel with DPD vs ~£4.10 for Royal Mail Tracked 24, a 50% premium for ~5 percentage-point OTD lift. Whether that maths works depends on AOV and refund-cost economics, see Premium-Service Uplift on DPDLocal for the same calculation in the cheaper-tier connector.
- The in-slot 94.1% is the bigger story. Customers paid £4.95 for the predict slot. 5.9% of them got the parcel on the right day but outside the chosen 1-hour window. They will not chargeback (parcel arrived) but they will file a refund-the-shipping-fee CS ticket; track Open Claims for the volume.
- EU Classic 90.3% is the actionable signal. The aggregate masks a Brexit-customs-lane problem; see UK to EU Cross-Border Exception Rate. Either the merchant accepts the EU lane is structurally slower or they switch EU outbound to DPD Express (premium DPD EU service, ~£12 per parcel).
- Lost-parcel rate sits inside the 3.4% miss. Of the 444 misses, ~70% were 1-day-late carded redeliveries (recovered next attempt), ~25% PUDO collection delay, ~5% genuinely lost. DPD’s lost-parcel rate runs ~0.05% of total, an order of magnitude below Evri’s ~0.4%; this is why premium-DTC accounts pay the premium.
- 3 to 5 percentage-point drop in OTD typically precedes a 0.5 to 1.5 percentage-point rise in refund rate at 7 to 14 days lag. Pair with the merchant’s Shopify or BigCommerce refund-rate card to confirm.
Sibling cards merchants should reference together
On-time delivery is the customer-facing outcome metric. Pair it with these to diagnose root cause and see the downstream business impact.| Card | Why pair it with OTD | What the combination tells you |
|---|---|---|
| Predict Slot Accuracy | DPD’s flagship paid premium. OTD covers the date, slot accuracy covers the hour. | High OTD + low slot = the customer received the parcel but not when promised; refund-the-shipping-fee tickets follow within 24 hours. |
| Late Shipments | The numerator behind the miss. OTD is the rate, this is the absolute count. | Useful for ops triage, OTD says “how bad”, late count says “how many tickets we are about to get”. |
| Exception Rate | Catches refused, damaged, or held-at-customs parcels that never reached the customer. | Rising exceptions while OTD holds = network is delivering, but a slice is being lost; check claims. |
| OTD by Route | Splits aggregate by destination postcode area. | One-region drops are local-depot or driver issues; network-wide drops are weather or peak-period structural. |
| UK to EU Cross-Border Exception Rate | Isolates EU outbound from UK domestic. | EU lanes typically run 5 to 10 percentage points worse on OTD post-Brexit; pull these out of the headline. |
| DPD OTD by Sales Channel | Joins shipments to commerce-sibling orders. | Reveals if Amazon-channel orders (often expedited) are over-served vs Shopify direct, or vice-versa. |
Cross-connector: shopify.unfulfilled_orders | Upstream cause. Orders waiting unfulfilled cannot meet OTD. | Climbing unfulfilled count predicts an OTD dip 1 to 2 days later. |
Cross-connector: shopify.refund_rate | Downstream impact. Late deliveries drive refund and chargeback. | A 3 to 5 pp OTD drop precedes a 0.5 to 1.5 pp refund rise at 7 to 14 days lag. |
Reconciling against the vendor’s own dashboard
Where to look in DPD’s own dashboard: MyDPD Business portal -> Reports -> Service Performance -> On-Time Delivery. The portal shows the same metric with toggles for date range, service tier, and originating depot. The closest like-for-like view is All Services, Last 30 Days, Aggregate. For per-parcel audit, MyDPD -> Track -> Filter “Late deliveries” shows individual parcels with the gap between estimated and actual delivery; useful when the headline number disagrees and you need to see which parcels missed. Why our number may legitimately differ from MyDPD’s portal:| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days off | MyDPD defaults to Europe/London local time (BST in summer, GMT in winter). The card defaults to UTC. For a 30-day window the gap averages out; for “today” or “yesterday” it can shift the count by a few percent. |
| Tracking-feed lag | Ours lower for last 4 to 6 hours | DPD pushes status webhooks within 5 to 30 seconds of each scan, but POD scans from rural rounds may not be uploaded until the driver returns to depot at end of shift. Most-recent-day numbers fully reconcile by T+1. |
| Peak-period throttling | Ours lower during BFCM | DPD’s webhook queue can throttle during BFCM peak; deliveries may post 2 to 6 hours late into the index. T-2 days fully reconcile. |
| Predict-slot vs date timestamp | Either, depending on view | MyDPD’s “On-Time Performance” tile uses the date as the SLA; their separate “Predict In-Slot” tile uses the hour. The card here uses date. Compare against the right MyDPD tile. |
| Service-tier scope | Either | MyDPD defaults to the depot or account context the user is logged into. The card pools every service. Use the MyDPD service-filter dropdown to align. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
shopify.unfulfilled_orders | Upstream input. Orders flow Shopify -> warehouse / 3PL -> DPD label print -> handoff. Persistent unfulfilled in Shopify implies orders DPD has not yet collected. | Webhook delivery failures, B2B / pre-order flows that bypass DPD, manual-fulfilment SKUs. |
bigcommerce.unfulfilled_orders | Same as Shopify upstream. | Same caveat. |
shopify.refund_rate | Downstream impact. Late deliveries drive refunds. | 3 to 5 pp OTD drop -> 0.5 to 1.5 pp refund rise at 7 to 14 days lag. |
Cross-3PL: shipbob.sb_otd_rate | Peer outcome metric for merchants split across UK-DPD and US-ShipBob. | Different parcel populations entirely, do not arithmetically reconcile. |