Per-channel DPD OTD - which sales surface is suffering most.
At a glance
DPD on-time delivery rate broken down by the sales channel that originated the order. The card joins DPD shipment delivery data to the commerce platform’s order data onorder_ref, then groups byorder.channel(Shopify direct D2C, Amazon Seller-Fulfilled, eBay, TikTok Shop, wholesale B2B, retail order pad, etc.). Surfaces which sales surface is suffering most when DPD slips, because the downstream cost of late delivery is dramatically different per channel.
| What it counts | COUNT(dpd.shipments WHERE actual_delivery <= predicted_delivery) / COUNT(dpd.shipments) GROUP BY commerce_sibling.order.channel, joined on order_ref. The numerator and denominator are DPD shipment counts; the grouping is the commerce-platform channel. |
| Why per-channel | Marketplace customers (Amazon Seller-Fulfilled-Prime, eBay Premium Listing, TikTok Shop) penalise late deliveries with feedback hits and listing demotion. D2C customers absorb late deliveries via WISMO tickets and refund requests. Wholesale B2B customers may have contractual delivery SLAs with chargebacks. Same OTD drop, different downstream cost. |
| Cross-channel join | Requires a connected commerce platform sibling (Shopify, BigCommerce, Adobe Commerce). The join uses order_ref (Shopify order number, BC order ID, etc.) as the linking key. |
| API endpoint | DPD tracking API for shipment delivery + commerce sibling order endpoint for channel attribution. The card is a derived card; the join logic runs in Vortex IQ rather than reading a single endpoint. |
| Service level scope | All DPD services pooled (Standard, Predict, NextDay, International). Per-service breakdown lives on Shipments by Service. |
| Returns / RTO | Excluded. The card focuses on outbound delivery performance per channel. |
| Time zone | UK local for the rolling-window calculation. Channel attribution uses the order’s commerce-platform timestamp. |
| Time window | 30D (rolling 30 days). Shorter windows are noisy on per-channel breakdown for low-volume channels. |
| Alert trigger | Any single channel <90%. The aggregate may be healthy at 95 percent while one channel quietly sits at 87 percent; the per-channel alert catches the channel-specific gap. |
| Currency | n/a directly. |
| Roles | owner, operations, marketing |
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 fashion brand running a multi-channel commerce stack: Shopify D2C as the flagship, Amazon Seller-Fulfilled-Prime (SFP) for incremental volume, eBay for clearance, and a wholesale B2B portal for retail accounts. DPD is the primary carrier for everything except orders under £20 (those go Royal Mail Tracked 48). Reading taken at 09:00 GMT on 12 Mar 26 for the trailing 30 days (10 Feb 26 to 11 Mar 26).| Channel | DPD shipments | OTD | Channel notes |
|---|---|---|---|
| Shopify (D2C) | 4,820 | 95.4% | Flagship channel, highest AOV |
| Amazon SFP (Seller-Fulfilled-Prime) | 1,640 | 87.2% | Below alert threshold |
| eBay | 720 | 94.8% | Healthy |
| TikTok Shop | 380 | 96.3% | New channel, low volume |
| Wholesale B2B portal | 145 | 91.0% | Healthy |
| All channels (DPD) | 7,705 | 94.5% | Aggregate above alert |
- Aggregate hides the SFP problem. The headline OTD on On-Time Delivery Rate reads 94.5 percent, comfortably above the 95-percent threshold’s lower edge. But Amazon SFP at 87.2 percent is below the per-channel alert and below Amazon’s published SFP requirement (98 percent on-time shipment + 95 percent on-time delivery). The merchant is at risk of losing SFP eligibility on this listing.
- Why is SFP the worst? Almost certainly because Amazon orders flow through a different upstream path. Shopify orders typically print labels via the dispatch system within hours of order placement; Amazon SFP orders flow through a webhook that has a 30 to 60 minute delay, and Amazon’s “promise to customer” is calculated from order placement, not label print. The same DPD service performs identically on the parcel side; the OTD gap is the upstream time tax of the Amazon channel.
- The action is not “fix DPD”; it is “fix the Amazon dispatch lag”. Spot-check 20 Amazon SFP late shipments: the gap between order placement and label print is the lever. Tighten the dispatch SLA for Amazon orders specifically, or pre-allocate inventory at the warehouse for likely Amazon orders.
- The £ cost of an SFP late delivery is multi-fold. First, Amazon may demote the listing (ranking loss). Second, Amazon may revoke SFP eligibility on the SKU (loss of Prime badge, ~30 to 50 percent revenue drop). Third, the customer may leave a 1-star review tied to the listing (lasting damage). Fourth, Amazon issues an automatic refund and chargeback to the merchant for repeated late delivery. A late SFP shipment is roughly 5x the financial pain of a late D2C shipment.
- The wholesale B2B portal at 91 percent looks fine but watch the trend. Wholesale orders often have contractual delivery SLAs with retailer chargebacks (typically £15 to £75 per missed window). If 91 percent is the steady state, the merchant is paying chargebacks on roughly 9 percent of wholesale orders monthly; that compounds. Pair with the merchant’s wholesale-chargeback ledger.
Sibling cards merchants should reference together
Per-channel OTD is a cross-channel metric. Pair it with these to act:| Card | Why pair it | What the combination tells you |
|---|---|---|
| On-Time Delivery Rate | The aggregate OTD across all channels. | If aggregate is fine but per-channel is bad on one, the issue is upstream of the carrier (dispatch lag, channel-specific webhook delays). |
| Predict Slot Accuracy | Slot accuracy on Predict-tier deliveries. | Marketplaces care about OTD; D2C customers care about Predict slot. The two metrics shape different action plans. |
| Late Shipments | Absolute count by channel. | A 7-percent late rate on Amazon = different chargeback exposure than 7 percent on D2C. |
| Shipments Total | Volume per channel. | Channel mix shifts can drag aggregate OTD if a low-OTD channel grows. |
Cross-connector: shopify.unfulfilled_orders | Upstream. Shopify orders waiting to be picked up by DPD. | Channel-specific dispatch lag often originates here. |
Cross-connector: amazon_seller_central.sfp_otd | Amazon’s own measurement of SFP delivery performance. | Should track this card’s Amazon channel slice; if they diverge, the join logic is misattributing. |
Cross-connector: shopify.refund_rate | Downstream impact. Late D2C deliveries drive refunds. | A 4-point OTD drop on Shopify channel typically precedes a 0.5 to 1 point refund-rate rise. |
Reconciling against the vendor’s own dashboard
Where to look: This card is a derived view, there is no single vendor dashboard that surfaces it. To reconcile, the merchant can pull DPD’s per-shipment delivery data and join manually to their commerce-platform order export on order reference. The result should match this card. For Amazon SFP specifically, Amazon Seller Central → Performance → Account Health → Shipping Performance exposes Amazon’s own measurement of late delivery rate and on-time delivery rate. That figure should track this card’s Amazon channel slice closely. Why our number may legitimately differ from upstream sources:| Reason | Direction | Why |
|---|---|---|
| Order-reference join misses | Channel under-counted | Some commerce platforms (especially custom B2B portals) do not consistently pass order_ref to the dispatch system, so DPD shipments without a matching order go to “unknown” channel. Reconcile by counting the unknown bucket. |
| Amazon SFP threshold differs | Either | Amazon’s published SFP “on-time” definition includes order-acceptance time and ship-by time; this card includes only the carrier-leg OTD. Amazon may show worse than this card on the same data. |
| Channel taxonomy | Either | Different commerce platforms have different channel field names (Shopify source_name, BC order_source, Adobe order_channel). Vortex IQ normalises them; merchant-customised values may need re-mapping. |
| Webhook lag | Ours stale | Order-channel attribution comes from the commerce sibling; if that connector is lagging, the channel field may be missing. |
| Timezone of join | Boundary days off | Order timestamps from commerce platform vs delivery timestamps from DPD use different timezone bases; the join uses UTC under the hood. |
Volume-weighted average of per-channel OTD = aggregate dpd_otd_rate, ignoring rounding and join misses. If they diverge by more than 1 to 2 points, the order-reference join is dropping meaningful volume.
Cross-connector reconciliation:
| Card | Expected relationship | Causes of legitimate divergence |
|---|---|---|
shopify.fulfilment_lead_time | Per-channel fulfilment lead time on the commerce side. | A channel with high lead time also tends to have low OTD on the carrier side; the card surfaces both halves. |
amazon_seller_central.sfp_otd | Amazon’s own measurement. | Should track the Amazon slice. Divergence usually indicates Amazon includes pre-carrier time. |
Documentation cross-reference (cross-channel OTD on other carriers). Per-channel OTD cards exist on every shipping connector that supports the cross-channel join.
royal_mail.royal_mail_xc_otd_by_channelhermes_evri.hermes_xc_otd_by_channelapc.apc_xc_otd_by_channel
Known limitations / merchant FAQs
Why does Amazon SFP always look worse than D2C on this card? Two structural reasons. (1) Amazon’s “promise to customer” starts at order placement, not label print. The 30 to 90 minute lag between an Amazon order arriving and the dispatch system pulling it down counts against OTD. D2C orders typically have shorter upstream lag. (2) Amazon’s SFP standard is tighter than typical D2C expectations; the same delivery performance scores fine on D2C and just-below-threshold on SFP. My channel taxonomy is custom, can the card still group correctly? Yes if the channel field is populated consistently in the commerce platform. The card normalises channel values via the field map atdocs/vortex-mind/cards/_field_maps/<connector>.json. If the merchant uses custom values (e.g. “RetailTouchpoint”, “B2B-Q4Promo”), those need to be added to the channel allowlist; otherwise they fall into the “unknown” bucket.
A new channel just appeared with very low volume and 100% OTD, why?
Sample-size noise. Below 50 shipments per 30-day window, the per-channel rate is too volatile to read. The card surfaces channels above 50 shipments by default; very-low-volume channels can produce extreme readings. Wait for volume to stabilise before treating the number as actionable.
Why is there an “unknown” channel sometimes?
DPD shipments without a matching commerce-platform order go to “unknown”. Common causes: (a) the order was created via a custom B2B portal that does not pass order_ref to dispatch, (b) the commerce sibling connector is lagging or has stopped, (c) the order_ref format on the dispatch label does not match the commerce platform’s order number format. Spot-check 10 unknown shipments to identify the cause.
My wholesale B2B channel chargebacks are bigger than my SFP risk, why does the card alert SFP first?
The alert at <90% is a uniform threshold across channels; it does not weight by financial impact. For a brand where wholesale chargebacks are the bigger exposure, override the alert threshold for the wholesale channel separately (the connector’s manifest supports per-channel thresholds). Default: 90 percent across all channels; tune up where the financial cost is higher.
Can this card join to my custom checkout / order-management system?
Only if the OMS connector exposes order_ref and order_channel fields. If the OMS is connected via a generic connector, the join may have to use a different key (customer email, postcode + name) which produces softer attribution. The recommendation is to ensure the dispatch system passes the OMS order ID through to DPD on the consignment label, and the OMS exports order_channel cleanly.
My OTD is 95 percent aggregate but Amazon SFP is 87 percent, am I about to lose Prime eligibility?
At 87 percent SFP OTD against Amazon’s 95 percent threshold, yes the listing is at risk. The metrics Amazon uses to drive an SFP eligibility decision typically look at a 30 to 60 day window of late-delivery rate plus order defect rate plus on-time-shipment rate. A single bad month is usually a warning; two months in a row often triggers Amazon’s automated demotion process. Action: tighten the Amazon dispatch lag immediately and watch the trend on this card daily for the next 30 days.
Why are TikTok Shop and other emerging channels often the highest OTD?
Three reasons. (1) Volume is small, sample-size noise tends to push small channels to extremes. (2) The merchant is paying close attention to a new channel; orders are picked up and dispatched faster than the steady-state. (3) TikTok Shop’s customer expectations are looser because the platform itself does not surface OTD prominently. Expect the rate to decline as volume grows and the channel becomes routine.