Skip to main content
Card class: HeroCategory: Shipping & Courier

At a glance

Share of DPDLocal parcels delivered on or before DPD’s promised delivery date. The merchant-facing “did it turn up when DPD said it would” number, computed across every consignment shipped via DPDLocal in the period. DPDLocal is DPD’s lower-cost UK service line, same network, less premium tier than mainline DPD.
What it countsCOUNT(consignments WHERE actual_delivery_date <= promised_delivery_date) / COUNT(consignments WHERE actual_delivery_date IS NOT NULL). Each delivered parcel scores 0 or 1 against DPD’s expectedDeliveryDate field.
API endpointDPDLocal Shipping API (GeoSession-authenticated). The card reads consignmentNumber, expectedDeliveryDate, actualDeliveryDate, serviceCode, productCode, and lastTrackingEvent.status per consignment. Tracking events are pushed via webhook where configured, polled otherwise.
Delivery success criterionlastTrackingEvent.status = "DELIVERED" confirmed by driver-PDA scan or photo POD. Pre-collection, in-transit, and out-for-delivery rows are excluded from the denominator until they reach a terminal state.
On-time thresholdDPD’s expectedDeliveryDate exactly, no grace day. NextDay (1700 cutoff), Predict (30-min slot), Sunday, EU and Highland service codes each have their own promise; the card scores against the per-consignment promise, not a flat SLA.
Returns / RTORTOs (return to sender) are excluded from numerator and denominator. They reach RETURN_TO_SENDER not DELIVERED, and live in the Returned to Sender card.
Service level scopeAll DPDLocal service codes pooled. NextDay, Predict, Sunday, EU and Highland are all included. DPDLocal-specific service tiers like 1@10 and 1@12 (premium guaranteed by 10/12) are also pooled. Use OTD by Route for per-service breakdown.
Carrier scopeDPDLocal only. Mainline DPD UK consignments live in a separate connector and do not contribute. The two share network capacity but report separately.
Q4 / peak seasonalityDPDLocal’s network typically degrades 5 to 10 percentage points from late November through 24 December. Less acute than USPS / UPS in the US because DPD’s UK network is more contained, but BFCM week and the four days before Christmas Eve still saturate driver capacity.
Time window30D vsP (rolling 30 days vs prior 30 days)
Alert trigger<95% (warn) / <90% (critical), drives the gauge sentiment. DPDLocal’s contractual SLA is typically ~98%, so 95% is the right warn threshold.
Rolesowner, operations

Calculation

Calculated automatically from your DPDLocal 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 DTC homewares brand on Shopify, shipping ~2,800 parcels per month via DPDLocal NextDay (the cost-conscious staple) and Predict (paid premium for high-AOV orders). Reading taken at 09:00 GMT on 12 Mar 26 for the trailing 30 days (10 Feb 26 to 11 Mar 26).
Service codeConsignmentsDelivered on or before promiseOTD Rate
NextDay (cutoff 1700)2,1402,07096.7%
Predict (30-min slot)48046196.0%
Sunday11010292.7%
EU (post-Brexit, customs cleared)705882.9%
All services (this card)2,8002,69196.1%
The card reads 96.1% on the gauge; the alert at <95% (warn) is not tripped at the aggregate level, but EU at 82.9% is materially under. Five things to notice:
  1. The EU lane drags the headline. Post-Brexit customs friction is structural, not transient. Even a small EU share (2.5% of volume here) pulls 1.4 points off the headline. Pin a per-service panel for EU to track separately, the operational levers are different (HS-code accuracy, commercial-invoice templates) than mainland-UK NextDay friction.
  2. NextDay 96.7% is healthy but below DPDLocal’s contractual ~98%. A 1.3-point gap month-over-month is worth a CS conversation; persistent underperformance is a renegotiation lever. Pair with OTD by Route to see if specific UK postcode areas (Highlands and Islands typically) are responsible.
  3. Predict at 96.0% is the more telling number. Predict is the paid-premium 30-minute slot promise, customers are expecting a tight window. A 4% miss rate is twice the customer-perception cost of the same miss rate on NextDay. Use Predict Slot Accuracy for the more granular within-slot metric.
  4. Sunday at 92.7% is acceptable but the volume is low. Sunday delivery uses spare network capacity; misses double-hurt because Sunday is paid-premium and the customer trust impact is high. If Sunday volume grows, the threshold should tighten.
  5. The 109 missed parcels are not all “DPDLocal’s fault”. Recipient-not-home, address errors, customer cancellation in transit, and weather all count against OTD here. Use Exception Reasons to split carrier-fault from customer-side reasons.

Sibling cards merchants should reference together

On-time delivery is the customer-facing outcome. Pair with these to diagnose root cause and quantify the downstream blast radius:
CardWhy pair it with OTD RateWhat the combination tells you
OTD by RouteSplits the aggregate by UK postcode area.Identifies whether the headline drop is one-region or network-wide. Highlands and Islands typically drag; London Inner is usually the strongest.
Late ShipmentsThe numerator-side counter.Spikes here predict OTD drops 2 to 4 days later as those parcels reach their delivery date.
First-Attempt Delivery RateCompanion success metric (delivered first try, no card-left-and-redeliver).Low first-attempt rate with healthy OTD = customers eventually receive but with redelivery friction. Address-data quality issue.
Predict Slot AccuracyWithin-slot precision for the Predict premium service.Premium service customers care about the 30-minute window, not just the day.
Exception ReasonsSplits the misses by reason (recipient-not-home, address error, weather, depot delay).Tells you whether to fix the address-collection flow on your storefront or escalate carrier-side.
DPDLocal Health ScoreThe composite that includes OTD as one of four pillars.If OTD held but health score dropped, the issue is elsewhere (claims, exceptions, first-attempt).
Late-Delivery Revenue at RiskCross-channel kill-shot.Quantifies the gross revenue sitting on late parcels that may refund or chargeback. The CFO conversation.
Cross-connector: shopify.unfulfilled_ordersUpstream cause.A persistent Shopify backlog means parcels are not being labelled fast enough; OTD will sag 2 to 4 days later.
Cross-connector: shopify.refund_rateDownstream impact.A 3 to 5 percentage-point OTD drop typically precedes a 0.5 to 1.5 point refund-rate climb at 7 to 14 days lag.

Reconciling against the vendor’s own dashboard

Where to look in DPDLocal’s own dashboard: DPDLocal MyDPD Business PortalReports → Service Performance. The closest like-for-like view is All Services, Last 30 Days. The portal also exposes a per-consignment audit at Tracking → Filter “Late deliveries”; each row shows the gap between expectedDeliveryDate and actualDeliveryDate. Account-managed merchants also receive a monthly Service Performance Report (SPR) email from their DPD account team with the same numbers. Why our number may legitimately differ from MyDPD:
ReasonDirectionWhy
Time zoneBoundary days offMyDPD reports in UK local time (GMT/BST); the card defaults to UTC. For a 30-day window the gap averages out; for “today” it can shift by a row or two during BST.
Service-code filterEitherMyDPD lets the merchant filter by serviceCode; the card pools every DPDLocal service unless filtered. Click a service chip to compare like-for-like.
In-transit treatmentOurs rollingIn-transit consignments without actualDeliveryDate are excluded from both numerator and denominator until they reach a terminal state. MyDPD typically separates them into a “pending” bucket.
GeoSession token expiryOurs undercounts during gapsDPDLocal GeoSession JWTs expire after ~1 hour; if the connector hits a re-auth failure window, tracking-event polling pauses and the card may underread until the next sync recovers. Check GeoSession Auth Risk.
DPDLocal vs mainline DPDEitherSome merchants have both contracts; MyDPD aggregates both under one login. The card scopes to DPDLocal consignments only.
Driver-PDA scan lagOurs lower for “today”Drivers sync PDAs at depot return; some scans take 4 to 8 hours to surface in the API after delivery. Today’s number may understate; T-1 days fully reconcile.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
shopify.unfulfilled_ordersUpstream input. Shopify orders flow to DPDLocal via shipping-app integration; backlog means parcels are not yet labelled.App-sync failures, B2B / pre-order flow that bypasses DPDLocal.
bigcommerce.unfulfilled_ordersSame upstream pressure.Same caveat.
klaviyo.shipping_status_revenueDownstream. Late deliveries depress the “post-purchase delight” flow open and click rates.Survey response bias, sample size.

Known limitations / merchant FAQs

Why is my DPDLocal OTD lower than DPD’s mainline figure? DPDLocal is the cost-conscious tier; same network, same drivers, lower-priority routing. When the network saturates (BFCM, late-November through Christmas Eve), DPDLocal parcels are deprioritised after mainline DPD next-day commitments. Expect 1 to 3 percentage points below DPD mainline at the same period; more during peak. My EU lane is dragging the headline. What can I actually do? Three usual fixes after Brexit, in order of leverage. (1) HS-code accuracy. Wrong or missing HS codes are the single largest cause of EU customs holds; review the codes on your top-50 EU SKUs against a customs broker’s recommendations. (2) Commercial-invoice templates. DPDLocal’s EU service requires fields like EORI, VAT-IOSS-or-IOSS-equivalent, country-of-origin per line item. Missing fields cause holds. (3) DDP vs DDU. Switching to Delivered Duty Paid removes per-parcel customs friction at the cost of a higher checkout-time charge; many UK merchants who shipped DDU through 2021-22 have since switched. The OTD lift on EU lanes is typically 5 to 12 points. OTD dropped 4 points overnight. What broke? Three things to check, in order. (1) GeoSession auth. Check GeoSession Auth Risk. If polling stalled overnight, the card may have a missing-data artefact rather than a real OTD drop. (2) Network event. A depot fire, a major weather event, or an industrial-action day at DPD typically lifts late-count visibly. Search the news for “DPD depot” or check the DPDLocal status page. (3) Address-data quality regression. A storefront change to the address-validation flow (e.g. switching off PostcodeAnywhere or Loqate) lifts recipient-not-home and address-error reasons. Check Exception Reasons. Why does DPDLocal show “Delivered” but my customer says they did not receive it? Two usual reasons. (1) Driver photo POD captured “delivered to safe place”. DPD drivers can leave parcels at safe places (porches, sheds, neighbours) when the customer is out. The POD photo is the contractual evidence. Customer often reports “missing” without checking the safe place, the photo, or with neighbours. CS workflow should ask “did you check the photo POD on the tracking link?” before opening a claim. (2) Wrong address but valid postcode. A typo in the house number with a valid postcode delivers the parcel to a real house that is not the customer’s. Address-data hygiene is the long-term fix. Predict slot accuracy and OTD are different. Which one matters more? Both, for different audiences. OTD is the right number for finance and operations (the day the parcel arrives, vs the day promised). Predict Slot Accuracy is the right number for the marketing and CS teams (the 30-minute window the customer was told). A merchant who is at 96% OTD and 78% Predict accuracy is hitting the day but missing the slot, customer-perception cost is high. Use Predict Slot Accuracy for a customer-experience read, OTD for a contract-compliance read. Sunday delivery is paid-premium. Should I tighten the alert threshold for it? Yes, often. Customers pay specifically for Sunday; misses are double-hurt (refund + brand promise broken). If Sunday is more than 2% of your DPDLocal volume, set a per-service alert at <95% for Sunday specifically (vs <92% global). The Sunday Delivery Success Rate card gives the focused view. Why is the count of in-transit parcels excluded from this card’s denominator? A parcel that has not delivered yet cannot be scored as “on time” or “late” deterministically (it could still hit the promise). Including in-transit rows in the denominator with a numerator of zero makes the card jump up and down as parcels deliver each day, hiding the steady-state signal. The card waits for actualDeliveryDate before counting; the Parcels In Flight card tracks the in-transit pool separately. How does this card differ from the Late Shipments count? Late Shipments is the absolute count of misses (numerator); OTD Rate is the proportion (numerator / denominator). On a fast-growing merchant, Late Shipments will rise even as OTD Rate stays flat (more total parcels, more late ones, same percentage). Use OTD Rate for trend and SLA conversations; use Late Shipments for daily-triage queue length and CS staffing. The card threshold is <95% warn but DPDLocal told me my contract is 98%. Should I raise it? Yes. Match the alert to the contract. The default threshold is the cross-merchant average; if your account team commits to 98%, set warn at <97% and critical at <95% so you can hold them to it.

Tracked live in Vortex IQ Nerve Centre

On-Time Delivery Rate is one of hundreds of KPI pulses Vortex IQ tracks across DPDLocal and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.