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

At a glance

Share of DHL InExpress shipments that were delivered to the recipient on or before the carrier-promised delivery date. The merchant-facing “did the parcel turn up on time” number, computed across every shipment the DHL InExpress connector closed in the period, with customs handling time included in the transit clock.
What it countsCOUNT(shipments WHERE actualDeliveryDate <= estimatedDeliveryDate) / COUNT(shipments WHERE status IN ('Delivered','POD')). Each closed shipment scores 0 or 1 against its DHL-quoted promise. Shipments still in transit are excluded from both numerator and denominator.
Delivery success criterionA Delivered event with a Proof-of-Delivery scan recorded by the DHL driver, or an POD status returned on the /shipments/{id}/tracking endpoint. Recipient signature is captured where the service requires it; “left with neighbour” and “left in safe place” both count as delivered.
On-time thresholdThe DHL-issued estimatedDeliveryDate (per shipment, per service level). No grace window is applied. A shipment closed at 18:01 on the promised date is on-time; closed at 00:01 the following day is late.
Returns / RTOReturned-to-sender shipments are excluded from the on-time numerator (they never delivered to the customer) but still count in the volume denominator if status = 'Returned'. Use Returned to Sender for the RTO leg in isolation.
Service level scopeAll InExpress service tiers pooled. Economy Select, Express Worldwide, and InExpress Domestic are blended. Each shipment is judged against its own promise, not a flat SLA. For UK to EU traffic, the customs clearance leg counts toward the transit clock, a shipment held 36h at Coventry East Midlands customs against a 48h promise would arrive late even with zero handling delay at origin.
Multi-carrier opacityDHL InExpress is a wholesaler service: the trunk leg is DHL but the final-mile carrier varies (Yodel, Evri, DPD, GLS depending on country and zip). The card scores the customer-perceived outcome, not which sub-carrier was responsible. Use Shipments by Service and OTD by Route to slice.
Brexit / customs scopeUK to EU and EU to UK shipments add a 24 to 48h customs leg to the headline transit time, even when duties are paid up-front (DDP). This is included in the on-time scoring. A shipment quoted 72h that took 96h with 36h held at customs is late.
CurrencyThis card is unitless (percent). It does not interact with shipmentCharges or duty figures, those live on Avg Shipping Cost and Duty-Billing Mismatch Rate.
Time window30D vsP (rolling 30 days vs prior 30 days)
Alert trigger<95% warns; <90% is critical. Driven by the on_time_delivery_rate sentiment.
Rolesowner, operations

Calculation

Calculated automatically from your DHL InExpress 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-based outdoor-apparel brand selling into Germany, France, Netherlands, and Ireland via DHL InExpress, with 60% of volume going post-Brexit cross-border. Reading taken at 09:00 GMT on 12 Mar 26 for the trailing 30 days (10 Feb 26 to 11 Mar 26).
LaneShipmentsDelivered on or before promiseOn-Time Rate
GB → IE (domestic-feel, no customs)4,1804,03296.5%
GB → DE (customs cleared at Leipzig hub)3,2602,93790.1%
GB → FR (customs cleared at Roissy)2,1401,84086.0%
GB → NL (customs cleared at Schiphol)1,5601,47194.3%
All lanes (this card)11,14010,28092.3%
The card reads 92.3% on the dial; the warn threshold at <95% is tripped, the critical threshold at <90% is not. Five things to notice:
  1. The aggregate masks one bad lane. GB to FR alone is at 86.0%, well below the critical floor, and is dragging the network number. This is exactly what Customs Dwell Time by Lane is built to surface; pair the two cards. The pattern of “one lane caves while the rest hold up” is the dominant DHL InExpress failure mode post-Brexit.
  2. The IE lane runs ~10 points above the FR lane and is doing the heavy lifting. Republic of Ireland customs is straightforward (no UK-EU border step), so the lane behaves more like domestic. If your IE volume drops, your headline will sag even with zero operational change.
  3. The 860 missed shipments are not all “DHL’s fault”. Customs holds for HS-code mismatches, missing commercial-invoice line items, recipient-not-home retries, and address-validation failures all count against on-time delivery. DHL controls only the truck leg and the customs filing it submits on your behalf; a missing tariff code on your end is your delay.
  4. Compare against Avg Transit (days). If transit days drift up while OTD drifts down by the same magnitude, the carrier network is structurally slower (truck capacity, customs queue, weather). If transit days hold steady but OTD drops, the issue is the promise, not the performance. DHL is quoting tighter dates than the network is delivering, and the fix is to recalibrate the checkout copy.
  5. Q4 / Christmas drop is structural. This same brand was at 84.7% on 1 Dec 25 to 7.6 points lower, because UK-EU customs queues at Coventry, Leipzig, and Roissy add 6 to 18 extra hours during peak. Do not benchmark February against December; track the same window year-on-year instead.

Sibling cards merchants should reference together

On-time delivery is a customer-facing outcome metric. Pair it with these to diagnose root cause:
CardWhy pair it with On-Time Delivery RateWhat the combination tells you
Customs Dwell Time by LaneSplits aggregate OTD by origin/destination customs lane.Identifies whether the headline drop is one lane (UK to FR customs queue) or network-wide. One-lane drops are a documentation fix (HS codes, commercial invoice); network-wide drops are seasonal carrier saturation.
International Express OTDThe cross-border-only slice of this card.Tells you whether the drop is concentrated in international lanes (customs problem) or also bleeding into domestic (carrier capacity problem).
Avg Transit (days)Companion timing metric (door-to-door days, customs included).Long transit + low OTD = network is slower than the promise; the fix is to widen quoted delivery windows in checkout. Short transit + low OTD = OTD scoring artefact (timezone, rounding); investigate the calculation, not operations.
Late ShipmentsAbsolute count complement to this rate.A 3-point OTD drop on 11k shipments is ~330 angry customers. The count anchors the rate to volume; useful for support-team capacity planning.
OTD by RouteDistribution of OTD across lanes, sorted.Identifies the worst lane (often a Brexit lane) so you know which contract amendment to chase with DHL.
Exception RateUpstream cause. Customs holds, address-not-found, and damage events all become exceptions; exceptions become late deliveries 24 to 72h later.Climbing exception rate predicts an OTD drop 2 to 4 days later, a 1pp exception rise typically becomes a 1.5pp OTD drop in the same period.
Duty-Billing Mismatch RateSpecific Brexit-era exception type. Mismatched duty figures cause customs to hold the parcel pending resolution.If duty-mismatch is climbing alongside OTD dropping, your commercial-invoice template is wrong; fix it once and both numbers recover.
Cross-connector: shopify.refund_rateDownstream impact. Late deliveries drive refund and chargeback requests, especially on cross-border orders where the customer was promised a holiday-season delivery.A 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.

Reconciling against the vendor’s own dashboard

Where to look in DHL InExpress’s own dashboard: MyDHL+ portal (the merchant-facing DHL InExpress portal) → Reports → Service Performance → On-Time Delivery. Pick the same date range and account number; you should see a near-identical figure for aggregate OTD. The portal also exposes a per-shipment audit table at Track → Detailed View → Filter “Late deliveries”, where each row shows the gap between estimatedDeliveryDate and actualDeliveryDate. For UK exporters specifically, the Customs & International tab inside MyDHL+ surfaces the customs-leg breakdown (origin filing, destination clearance, release-to-final-mile) which is collapsed into a single transit-time figure on this card. Why our number may legitimately differ from MyDHL+:
ReasonDirectionWhy
Time zoneBoundary days offMyDHL+ defaults to the account’s billing-country time zone (typically GMT for UK accounts). The card defaults to UTC. The two converge for 30D windows; daily figures can drift by one calendar day.
Customs dwell inclusionEitherMyDHL+ exposes a “Transit OTD” toggle that excludes customs hold time. The card always includes customs in the transit clock. UK shippers post-Brexit often see MyDHL+ “Transit OTD” several points above this card; the gap is the customs leg.
POD scan vs delivery eventOurs lower for “today”DHL’s actualDeliveryDate is the POD scan timestamp from the driver’s handheld. Drivers may scan in batches at end-of-shift, delaying the POD timestamp by 2 to 6 hours behind actual handoff. Today’s number can understate; T-2 days fully reconcile.
Service-level filterEitherMyDHL+ defaults to a single product (Express Worldwide, Economy Select, etc.). The card pools every InExpress service tier. To match like-for-like, deselect the product filter in MyDHL+.
Account-level scopeEitherDHL accounts often have parent-child relationships (head office + subsidiaries). The card reads the account number you authenticated with; MyDHL+ may default to a parent view.
Returned-to-sender attributionOurs higherMyDHL+ excludes RTO shipments from the OTD denominator entirely. The card excludes them from the numerator only (they’re still in volume). For a tight match, switch the MyDHL+ “Include RTO” toggle on.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
Other carrier OTD on the same parcelIndependent measurement. If you also run Royal Mail Tracked, DPD, or Evri in parallel, each carrier’s OTD is on its own population. They are not comparable apples-to-apples; use them to decide carrier-mix shifts, not to reconcile.Different carrier networks, different SLA definitions, different customs paths.
shopify.unfulfilled_orders (if connected)Upstream input. Orders sitting unfulfilled in Shopify cannot meet OTD, regardless of how fast DHL is.Webhook lag, B2B / pre-order flows, free-shipping cutoff misses.
Customer NPS / refund rateDownstream sentiment. OTD drops correlate with NPS dips and refund-request volume at 7 to 14 days lag.Survey response bias; refunds also driven by product issues unrelated to delivery.
Internal identity (within DHL InExpress): dhl_otd_rate = COUNT(on-time shipments) / COUNT(closed shipments) dhl_late_shipments_count is the numerator’s complement on the same population. If this card reports 92.3% over 11,140 shipments, Late Shipments should report (1 - 0.923) × 11,140 ≈ 858. A discrepancy >1% indicates a sync gap; recheck the period boundaries.

Known limitations / merchant FAQs

Why is my DHL InExpress OTD lower than DHL Express? DHL InExpress is the SME-tier wholesaler service: cheaper and slower than DHL Express. It uses a different transit network (consolidated trunk legs, longer customs queues, third-party final-mile in some lanes). A 92% OTD on InExpress is a healthy figure; DHL Express typically runs 96 to 98%. If you need the higher number, the price is roughly 2 to 3x. Why does the OTD always dip in the second week of January? EU-side customs offices (especially Roissy and Leipzig) reduce staffing over the Christmas/New Year break and reopen with a backlog. Shipments arriving 27 Dec to 3 Jan typically clear customs 36 to 72h slower than usual; that backlog washes through on-time numbers in the first half of January. Pattern is structural, not a contract failure. Plan stock-up volume to ship by 15 Dec or after 10 Jan. A customer says their parcel arrived on time but the card scored it late. Why? Three usual reasons.
  1. POD scan delay. The driver delivered at 17:30 but didn’t sync the handheld until 22:00, so the POD timestamp is the next day in some time zones. Look at the carrier-side tracking event timestamps for the truth; the card uses POD scan as actual delivery.
  2. Promised date variance. DHL InExpress’s estimatedDeliveryDate is computed at label generation. If the merchant’s checkout copy quoted a wider window, the customer thinks the parcel was on-time but the card scores against the tighter DHL promise.
  3. Customs leg counted. A parcel held 36h at customs but delivered the same day it released will appear on-time to the customer (it just took longer than expected) but the card may score it late if the held time pushed past the promise.
Does Brexit / cross-border customs really slow things down by 24 to 48h? Yes, even when duty is paid in advance (DDP). The customs declaration step is mandatory regardless of payment status, and EU-side clearance offices process declarations in batches. A typical UK to DE shipment that took 48h pre-Brexit now takes 72 to 96h post-Brexit; UK to FR is the slowest because Roissy is the most congested clearance point. The 24 to 48h figure is the median; tail cases (incomplete commercial invoice, HS-code dispute) can hit 5 to 10 days. The fix is operational: get your commercial-invoice template and HS-code library tight. Pair this card with Customs Dwell Time by Lane. My OTD dropped 4 points week-on-week. What do I check first? In order of likelihood.
  1. One bad lane. Check OTD by Route. 80% of the time, one lane caved (often Brexit-era UK to FR or UK to DE) and dragged the aggregate. Fix is lane-specific, not network-wide.
  2. Customs documentation regression. A new SKU launched without HS codes, or a description-line change, can trigger customs holds for that SKU on every lane. Check Duty-Billing Mismatch Rate and Exception Rate.
  3. Carrier capacity. Pre-Christmas, pre-Easter, or post-strike days run slow. Check the date, if it’s a known peak window, the dip is structural.
  4. Promised-date tightening. DHL occasionally revises transit-time tables. If estimatedDeliveryDate is now tighter than last month for the same lanes, OTD drops mechanically without any operational change. Ask your DHL account manager.
Does the card include weekend delivery? DHL InExpress runs Saturday delivery on Premium tiers in some countries (UK, DE, FR). Sunday delivery is not part of the service. The estimatedDeliveryDate skips Sundays automatically, so a Friday-shipped parcel for “next-day” delivery is promised Saturday (Premium) or Monday (Standard). The card scores against whatever the API returned. Why is the InExpress OTD higher in IE than in DE despite IE being further? No EU-UK customs step on UK to IE. The Northern Ireland Protocol means parcels move under modified customs arrangements that look more like domestic-UK than international-EU. IE lanes typically run 4 to 7 points higher OTD than mainland-EU lanes for this reason alone. Is “delivered to neighbour” or “left in safe place” counted as delivered? Yes. DHL records both as Delivered with a POD scan; the card treats them identically to “delivered to recipient”. The fact that the customer themselves didn’t physically receive the parcel doesn’t change the OTD scoring. If the customer disputes receipt, that’s a claim, see Open Claims.

Tracked live in Vortex IQ Nerve Centre

On-Time Delivery Rate is one of hundreds of KPI pulses Vortex IQ tracks across DHL InExpress 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.