Skip to main content
Card class: Cross-ChannelCategory: Shipping & Courier
Per-channel ShippyPro OTD.

At a glance

ShippyPro On-Time Delivery rate split by the sales channel that originated the order: Shopify, BigCommerce, Adobe Commerce, Amazon, eBay, B2B portal, etc. The cross-channel cut answers a marketing question (which sales channel are we under-serving?) using shipping data, not the other way around. A 30D window with a per-channel <90% alert.
What it countsCOUNT(shipments WHERE actual_delivery_date <= expected_delivery_date) / COUNT(delivered shipments) for each source_channel tag on the shipment, over a 30-day window.
API endpointGET /shipments joined with order-source metadata (carried through the rate-shop request as metadata.source or tags.channel).
Delivery success criterionCarrier POD delivered_at <= expected_delivery_date, identical to the headline OTD metric. The cut is by source-channel only; the criterion does not change.
On-time thresholdCarrier-promised expected_delivery_date per shipment, no grace.
Returns / RTOOutbound shipments only.
Service level scopeAll carriers and services pooled, per channel. The point of the cross-cut is to expose which channel is being routed to slower carriers (often a rate-shop ruleset that prioritises cheap-and-slow for marketplace orders).
Channel attributionChannels are identified by the source metadata tag on the order at rate-shop time. ShippyPro inherits this from the upstream platform: Shopify orders carry source: shopify, marketplace orders carry source: amazon or source: ebay, B2B portal orders carry source: b2b. Untagged orders fall into source: unknown.
CurrencyNot applicable.
Time window30D (rolling 30-day window per channel)
Alert triggerany channel <90%. The card alerts as soon as any individual channel falls below 90% OTD even if the aggregate is healthy. This is the cross-channel point: you would never see an Amazon-channel issue from the headline number alone.
Sentiment keyon_time_delivery_rate
Rolesowner, operations, marketing

Calculation

Calculated automatically from your ShippyPro 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 multi-channel Italian fashion brand: Shopify DTC store, Amazon IT marketplace, eBay IT, and a B2B wholesale portal. Reading taken at 09:00 CET on 12 Mar 26 for the trailing 30 days.
Source channelShipmentsDelivered on timeOTD rateAlert
Shopify (DTC)9,4009,11897.0%OK
Amazon IT4,2003,69688.0%<90%, FIRING
eBay IT1,1501,12798.0%OK
B2B portal48047097.9%OK
Unknown / direct API11010191.8%OK
All channels15,34014,51294.6%(aggregate OK)
The aggregate reads 94.6% OTD, comfortably above 90%. The cross-channel cut surfaces that Amazon IT alone is at 88.0%, alert FIRING. Five things to notice:
  1. The aggregate hides the channel-level problem entirely. Amazon at 88% is being absorbed by Shopify at 97% on three times the volume. Without the cross-channel cut, the operator sees “shipping is fine” while the Amazon Buyer-Promise scorecard at Amazon’s end is dropping. This is exactly the cross-channel pattern this card exists to surface.
  2. Why Amazon-channel specifically? Almost always: the rate-shop ruleset routes Amazon orders to the cheapest-qualifying carrier (often Poste Italiane economy) because Amazon’s marketplace margin is thin. The cost saving is small per parcel; the OTD penalty triggers Amazon’s algorithmic punishment (Buy Box loss, listing demotion). Shifting Amazon orders to BRT recovers OTD at ~10 percent higher per-label cost.
  3. Read this card with the channel’s revenue-at-risk weight. Amazon at 28% of volume but maybe 35% of revenue (higher AOV) is more reputationally exposed than the volume share suggests. Marketing and ops should jointly decide whether to absorb the cost increase to recover Amazon-channel OTD.
  4. eBay at 98% is the comparator. eBay orders use the same rate-shop rules but average smaller parcels going to nearer customers; the same ruleset produces different outcomes given the order mix. Channel-OTD is a function of (rate-shop rule x order mix x destination geography), not a clean apples-to-apples.
  5. B2B at 97.9% on 480 shipments is the inverse pattern. B2B orders typically use premium carriers (DHL Express) regardless of rate-shop because customers expect it; OTD is structurally high. If B2B drops below 95%, something has gone wrong in the wholesale fulfilment workflow itself.

Sibling cards merchants should reference together

Cross-channel OTD answers “which channel is being under-served?” Pair with these to make the answer actionable:
CardWhy pair it with OTD by Sales ChannelWhat the combination tells you
On-Time Delivery RateThe aggregate counterpart.Aggregate green + a channel red = the cross-channel cut is the only place the issue is visible. Aggregate red + all channels red = network-wide degradation.
Shipments by ServiceThe carrier mix per shipment.If the underperforming channel uses a different carrier mix, the rate-shop ruleset is the lever.
OTD by RoutePer-carrier OTD.Cross-channel underperformance + a single carrier underperformance = the channel is over-routed to that carrier.
Cross-connector: Amazon Seller Central performance metricsDirect downstream impact for Amazon-channel underperformance.Drops in Amazon-channel OTD here precede Amazon Buyer-Promise scorecard dings within 7 to 14 days.
Cross-connector: shopify.unfulfilled_ordersUpstream pressure for Shopify-channel volume.Spikes in Shopify-channel volume often produce a temporary OTD drop on that channel; staffing and pick velocity catch up.
Cross-connector: marketplace-channel revenue or take-rate (Amazon, eBay)The revenue-at-risk denominator.A 5pp OTD drop on a high-take-rate channel is materially worse than the same drop on a low-take-rate channel.
Cross-connector: shopify.refund_rateDownstream confirmation for Shopify-channel issues.Shopify-channel OTD drop predicts Shopify refund-rate climb at 7 to 14 days.

Reconciling against the vendor’s own dashboard

Where to look in ShippyPro’s own dashboard: ShippyPro DashboardAnalytics → Tracking Performance with the Source/Channel filter. The portal exposes the same per-channel breakdown when shipments carry the source metadata correctly. The closest like-for-like view is Last 30 Days, Group By: Source, All Carriers. Why our number may legitimately differ from ShippyPro’s portal:
ReasonDirectionWhy
Source-tag completenessEitherChannel attribution depends on the source metadata being set on the rate-shop call. If the upstream platform integration is missing, orders fall into unknown. The card and portal use the same source field; tagging gaps affect both.
Channel naming varianceEitherDifferent upstream integrations sometimes tag the same channel differently (e.g. shopify, Shopify, shopify-it-store). The card normalises lowercase; the portal sometimes splits. Reconcile via the channel-renaming rule in the connector settings.
Untagged ordersEitherDirect-API orders with no source tag fall into “unknown” in the card; the portal sometimes hides them. Set a default source in the connector to avoid the unknown bucket.
TimezoneBoundary days offUTC vs workspace timezone, identical to the headline OTD card.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
Amazon Seller Central Buyer-Promise scorecardDirect counterpart for Amazon-channel OTD. Amazon scores its own buyer-promise rate from delivery scans.Amazon’s window and definition differ slightly (their on-time-delivery counts day-of-promise as buffer day; ShippyPro’s is strict). Amazon is typically 2 to 5 percentage points more permissive.
eBay Seller Hub late-shipment metricsCounterpart for eBay-channel.Similar definition variance to Amazon; eBay tolerates “1 day late” as on-time in some categories.
shopify.refund_rateDownstream sentiment for Shopify-channel only.Refunds happen on customer dispute, not delivery scan; lag of 7 to 14 days.

Known limitations / merchant FAQs

Why is Amazon-channel OTD lower than the rest? Almost always: rate-shop ruleset routes Amazon orders to the cheapest qualifying carrier (low-margin marketplace), and that carrier (often Poste Italiane economy) runs structurally lower OTD than the carriers used for DTC orders. The fix is a per-channel rate-shop rule: Amazon orders should not auto-route to lowest-cost without an OTD floor. Why is eBay similar volume to Amazon but better OTD? eBay order mix differs. Amazon Italian volume tends to be higher value with stricter delivery promises (Prime-eligible listings); eBay volume is more long-tail with looser delivery windows. The same carrier mix produces different OTD against different promise tightness. My B2B portal channel is at 99%, should I just route everything that way? No, the trade-off is cost. B2B uses DHL Express for everything because the wholesale buyer expects it; the cost-per-parcel is 3 to 5x DTC carriers. Routing all DTC orders to DHL Express would lift channel OTD to >98% across the board but multiply shipping spend. The marketplace channels are the operational sweet spot, small cost increase to recover OTD enough to clear marketplace algorithm thresholds. Untagged / direct-API channel is showing up, what is it? Orders rate-shopped directly via API without a source tag, typically internal tooling, B2B re-orders, manual create-order flows from customer service. Set a default source: direct in the connector and re-tag historical for cleaner view. Why per-channel and not per-store? Some merchants run multiple Shopify stores (e.g. one per country: shopify-it, shopify-fr, shopify-de). The card cut by source shows them as separate channels if they tag separately; otherwise they pool into “shopify”. Edit the source-tag mapping in connector settings to split. How does this card help the marketing team? Direct: it identifies whether shipping is a brake on channel performance. Marketing wants to scale Amazon spend; if Amazon-channel OTD is dropping below marketplace thresholds, increased ad spend will be wasted on demand the operations cannot serve. The card is the input to a pause-or-fix decision. What about Black Friday / Q4, does the per-channel cut matter more or less? More. Q4 carrier saturation drops aggregate OTD by 3 to 8 points uniformly, but channel-specific cuts widen because cheap carriers (used for marketplace channels) suffer more than premium carriers (used for B2B). Amazon-channel OTD can fall 10 to 15 points during BFCM; B2B holds. The card surfaces the channel where the margin pressure first becomes operationally visible. Shopify direct vs Shopify marketplace orders, is the card cutting them right? Depends on tagging. Shopify orders carry a single source: shopify by default. If you sell on Shopify Marketplace as well, those orders need their own tag (source: shopify_marketplace) configured in the Shopify connector. Without that, both pool. Cross-check the Shopify order admin to confirm the tag mapping. Can I set per-channel alert thresholds? Yes, in the workspace settings. Default is <90% for any channel; you can set tighter for Amazon (which has its own algorithmic thresholds at ~92 to 94%) and looser for B2B (where 88% may be acceptable given the carrier-mix economics).

Tracked live in Vortex IQ Nerve Centre

ShippyPro OTD by Sales Channel is one of hundreds of KPI pulses Vortex IQ tracks across ShippyPro 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.