> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ShippyPro OTD by Sales Channel, ShippyPro

> Per-channel ShippyPro OTD. How to read it, why it matters, and how to act on it.

**Metrics type:** [Cross-Platform Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Shipping & Courier](/nerve-centre/connectors#connectors-by-type)

> 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-platform 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-platform 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 reads **94.6%** OTD, comfortably above 90%. The cross-platform 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-platform cut, the operator sees "shipping is fine" while the Amazon Buyer-Promise scorecard at Amazon's end is dropping. This is exactly the cross-platform 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-platform 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](/nerve-centre/kpi-cards/shippy-pro/on-time-delivery-rate)                   | The aggregate counterpart.                                    | Aggregate green + a channel red = the cross-platform cut is the only place the issue is visible. Aggregate red + all channels red = network-wide degradation. |
| [Shipments by Service](/nerve-centre/kpi-cards/shippy-pro/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](/nerve-centre/kpi-cards/shippy-pro/otd-by-route)                                     | Per-carrier OTD.                                              | Cross-platform 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`](/nerve-centre/kpi-cards/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`](/nerve-centre/kpi-cards/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](https://www.shippypro.com/app) → **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.                                                                                                                                                                                             |

**Cross-connector reconciliation:**

| 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`](/nerve-centre/kpi-cards/shopify/refund-rate) | Downstream sentiment for Shopify-channel only.                                                           | Refunds happen on customer dispute, not delivery scan; lag of 7 to 14 days.                                                                                                                       |

***

<details>
  <summary><em>Documentation cross-reference (for agencies running multi-platform stacks)</em></summary>

  Per-channel OTD (or its inverse, "channel-specific late rate") exists across multi-channel shipping platforms. The cut is more meaningful on platforms that handle multi-source order flows (ShippyPro, ShipStation, ShipTheory) than on single-source platforms (Sendle, where the order source is typically a single store).

  * [ShipTheory Sub-Carrier OTD Comparison](/nerve-centre/kpi-cards/ship-theory/sub-carrier-otd-comparison) (UK aggregator equivalent, but cuts by sub-carrier not channel)
  * ShipStation per-store OTD (peer aggregator, store-axis cut)
</details>

## 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
