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 counts | COUNT(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 endpoint | GET /shipments joined with order-source metadata (carried through the rate-shop request as metadata.source or tags.channel). |
| Delivery success criterion | Carrier 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 threshold | Carrier-promised expected_delivery_date per shipment, no grace. |
| Returns / RTO | Outbound shipments only. |
| Service level scope | All 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 attribution | Channels 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. |
| Currency | Not applicable. |
| Time window | 30D (rolling 30-day window per channel) |
| Alert trigger | any 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 key | on_time_delivery_rate |
| Roles | owner, 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 channel | Shipments | Delivered on time | OTD rate | Alert |
|---|---|---|---|---|
| Shopify (DTC) | 9,400 | 9,118 | 97.0% | OK |
| Amazon IT | 4,200 | 3,696 | 88.0% | <90%, FIRING |
| eBay IT | 1,150 | 1,127 | 98.0% | OK |
| B2B portal | 480 | 470 | 97.9% | OK |
| Unknown / direct API | 110 | 101 | 91.8% | OK |
| All channels | 15,340 | 14,512 | 94.6% | (aggregate OK) |
- 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.
- 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.
- 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.
- 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.
- 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:| Card | Why pair it with OTD by Sales Channel | What the combination tells you |
|---|---|---|
| On-Time Delivery Rate | The 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 Service | The carrier mix per shipment. | If the underperforming channel uses a different carrier mix, the rate-shop ruleset is the lever. |
| OTD by Route | Per-carrier OTD. | Cross-channel underperformance + a single carrier underperformance = the channel is over-routed to that carrier. |
| Cross-connector: Amazon Seller Central performance metrics | Direct 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_orders | Upstream 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_rate | Downstream 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 Dashboard → Analytics → 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:| Reason | Direction | Why |
|---|---|---|
| Source-tag completeness | Either | Channel 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 variance | Either | Different 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 orders | Either | Direct-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. |
| Timezone | Boundary days off | UTC vs workspace timezone, identical to the headline OTD card. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
| Amazon Seller Central Buyer-Promise scorecard | Direct 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 metrics | Counterpart for eBay-channel. | Similar definition variance to Amazon; eBay tolerates “1 day late” as on-time in some categories. |
shopify.refund_rate | Downstream 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 asource 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).