> ## 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.

# On-Time Delivery Rate, ShippyPro

> On-Time Delivery Rate for ShippyPro stores. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

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

## At a glance

> Share of ShippyPro shipments delivered on or before the carrier-promised delivery date, pooled across every carrier ShippyPro orchestrated for the merchant (BRT, DHL Express, GLS, Poste Italiane, Colissimo, SDA, UPS, FedEx, etc.). ShippyPro is the EU/Italy multi-carrier orchestration layer; the rate moves with **(a) carrier mix** more than with rate-shop savings, and **(b) which sub-carrier handled each parcel** more than with overall network performance.

|                                 |                                                                                                                                                                                                                                                                                                          |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**              | `COUNT(shipments WHERE actual_delivery_date <= expected_delivery_date) / COUNT(shipments WHERE delivered_at IS NOT NULL)` over the trailing 30 days. Each shipment is judged against its own carrier-promised delivery window stored at label creation.                                                  |
| **Delivery success criterion**  | ShippyPro normalises every carrier's POD model (BRT signature, DHL Express signature, Poste Italiane scan-only on Posta 4) to a single `delivered` flag with `delivered_at` timestamp. Updates from in-transit re-estimates do **not** move the goalposts; the original promise stands.                  |
| **On-time threshold**           | The carrier-promised `expected_delivery_date` from the label-creation rate response, no grace. Each carrier and each service tier has its own promise; the card honours per-shipment promises rather than a flat threshold.                                                                              |
| **Returns / RTO**               | Outbound only. Easy Return shipments and RTS events appear in [Returned to Sender](/nerve-centre/kpi-cards/shippy-pro/returned-to-sender).                                                                                                                                                               |
| **Service level scope**         | All services pooled (Standard, Express, Same-Day, Economy across all 100+ supported carriers). Per-carrier breakdown lives in [OTD by Route](/nerve-centre/kpi-cards/shippy-pro/otd-by-route) and [Rate-Shop Winner Mix](/nerve-centre/kpi-cards/shippy-pro/rate-shop-winner-distribution).              |
| **Multi-country complexity**    | ShippyPro is heavily IT/EU-focused but supports cross-border lanes; a UK-IT shipment via BRT and a DE-DE shipment via DHL Express have different OTD dynamics. The card pools them. Use service-mix breakdowns when comparing windows.                                                                   |
| **Mix-driven, not rate-driven** | Unlike ShipTheory (rate-shopping for savings on UK lanes), ShippyPro accounts typically optimise carrier choice by **service tier and country lane**, not by per-parcel cost. A swing in OTD usually means the merchant changed which carrier wins which lane, not that any individual carrier degraded. |
| **Currency**                    | Not applicable.                                                                                                                                                                                                                                                                                          |
| **Time window**                 | `30D vsP` (rolling 30 days vs the prior 30). Daily readings exist but are noisy below 200 shipments per day.                                                                                                                                                                                             |
| **Alert trigger**               | `<95%` warn, `<90%` critical, driven by `sentiment_key: otd_rate`. EU/IT DTC benchmark on a balanced mix is 92 to 96 percent; below 90 percent typically means Poste Italiane share has surged on cost-sensitive lanes.                                                                                  |
| **Roles**                       | owner, operations                                                                                                                                                                                                                                                                                        |

## 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

An Italian DTC fashion brand using ShippyPro to orchestrate four carriers (BRT for IT domestic, DHL Express for EU cross-border, Poste Italiane for low-value IT, GLS for FR/DE/ES). Reading taken at 09:00 CET on 12 Mar 26 for the trailing 30 days (10 Feb 26 to 11 Mar 26).

| Carrier                       | Shipments  | Delivered on or before promise | OTD Rate  |
| ----------------------------- | ---------- | ------------------------------ | --------- |
| BRT (IT domestic)             | 7,360      | 7,096                          | 96.4%     |
| DHL Express (EU cross-border) | 3,680      | 3,569                          | 97.0%     |
| Poste Italiane (IT low-value) | 2,040      | 1,729                          | 84.8%     |
| GLS (FR/DE/ES)                | 2,920      | 2,752                          | 94.2%     |
| **All carriers (this card)**  | **16,000** | **15,146**                     | **94.7%** |

The card reads **94.7 percent** on the dial; the alert at `<95%` warn is **firing marginally** but the `<90%` critical floor is not. Five things to notice that are specific to ShippyPro and the EU/IT mix-driven model:

1. **Poste Italiane drags the headline by 1.9 points alone.** 311 of 854 lates come from Poste's IT low-value share. The carrier's structural OTD on Posta 4 is in the 82 to 88 percent range; this is not a degradation, it is the cost-quality point the merchant signed up for. The decision is whether the cost saving still justifies the OTD trade after seeing the customer-experience cost on those parcels.
2. **DHL Express at 97 percent on cross-border is the benchmark and worth its premium.** EU cross-border via DHL Express is structurally more reliable than domestic via Poste Italiane because DHL's network is built for express. If DHL share were to drop materially (e.g. to save cost via DPD or GLS Express on cross-border), the cross-border share of OTD would dip even though no single carrier degraded.
3. **BRT at 96.4 percent on IT domestic is healthy.** BRT is the workhorse of Italian DTC; their OTD typically sits in the 95 to 97 percent band on metro-heavy mixes. Sub-95 percent for BRT alone is worth investigating, often a regional depot capacity issue (e.g. Milan, Roma during industrial action).
4. **Cross-border GLS is noisier than domestic.** GLS at 94.2 percent across FR/DE/ES is on the lower end of acceptable; FR national strikes, DE customs complexity for non-EU items, and ES regional logistics all contribute. Read [Avg Transit (days)](/nerve-centre/kpi-cards/shippy-pro/avg-transit) alongside.
5. **Italian holidays warp the dial.** August is fragile across all Italian carriers (ferragosto, mass holiday); pre-Christmas is fragile in Q4; Pasqua weeks vary year-on-year. Pre-baseline customer-facing copy on those windows; the OTD card will dip even when the merchant did nothing wrong.

## Sibling cards merchants should reference together

OTD rate is the customer-facing outcome metric. For ShippyPro the diagnostic flow runs through carrier-mix and per-lane rather than rate-shop tuning, because ShippyPro accounts typically optimise on service-tier, not per-parcel cost.

| Card                                                                                                | Why pair it with OTD Rate                                                      | What the combination tells you                                                                                                                                        |
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [OTD by Route](/nerve-centre/kpi-cards/shippy-pro/otd-by-route)                                     | The per-carrier and per-lane breakdown.                                        | Identifies which carrier and which destination country are dragging. ShippyPro's value-add is multi-carrier orchestration; this is the card that makes it actionable. |
| [Late Shipments](/nerve-centre/kpi-cards/shippy-pro/late-shipments)                                 | The absolute count behind the percentage.                                      | A 94.7 percent OTD on 16,000 shipments = 854 late deliveries = 854 customer-service tickets. The percentage feels recoverable; the count is the workload.             |
| [Avg Transit (days)](/nerve-centre/kpi-cards/shippy-pro/avg-transit)                                | Companion timing metric.                                                       | OTD falling + avg transit rising = carriers slowing. OTD falling + avg transit flat = promise dates were tight at label print.                                        |
| [Exception Rate](/nerve-centre/kpi-cards/shippy-pro/exception-rate)                                 | Leading indicator for OTD drops.                                               | Climbing exception rate predicts a 2 to 5 day OTD dip.                                                                                                                |
| [Rate-Shop Winner Mix](/nerve-centre/kpi-cards/shippy-pro/rate-shop-winner-distribution)            | Which carrier is winning the rate-shop and why.                                | Mix shifts toward Poste Italiane = OTD softening expected; mix toward DHL Express = OTD hardening but cost rising.                                                    |
| [Failed Deliveries](/nerve-centre/kpi-cards/shippy-pro/failed-deliveries)                           | Failed-and-recovered shipments still count as late.                            | Tracking together identifies recipient/address quality issues vs network speed.                                                                                       |
| [Label Generation Success](/nerve-centre/kpi-cards/shippy-pro/label-generation-success-rate)        | Adjacent operational signal.                                                   | If labels are failing to generate, the parcels never enter the OTD denominator; the headline reads better than reality.                                               |
| Cross-connector: [`shopify.unfulfilled_orders`](/nerve-centre/kpi-cards/shopify/unfulfilled-orders) | Upstream pressure.                                                             | Slow Shopify-to-warehouse handoff compresses transit time and lowers OTD.                                                                                             |
| Cross-connector: [`shopify.refund_rate`](/nerve-centre/kpi-cards/shopify/refund-rate)               | Downstream impact.                                                             | A 3 to 5 point OTD drop typically precedes a 0.5 to 1.5 point refund-rate climb at 7 to 14 days.                                                                      |
| Cross-connector: [`shipbob.sb_otd_rate`](/nerve-centre/kpi-cards/shipbob/on-time-delivery-rate)     | Adjacent 3PL OTD when ShipBob handles warehouse and ShippyPro routes carriers. | Different populations of shipments; useful for an agency running both, not a like-for-like reconciliation.                                                            |

## Reconciling against the vendor's own dashboard

**Where to look in ShippyPro's own dashboard:**

[ShippyPro Dashboard](https://www.shippypro.com/app) → **Analytics → Delivery Performance** (Italian: *Performance di Consegna*). The page exposes the same headline rate plus a per-carrier breakdown. Closest like-for-like view: *Last 30 Days, All Carriers, All Services*. ShippyPro also provides a per-country lane breakdown useful for diagnosing cross-border performance.

**Why our number may legitimately differ from ShippyPro's portal:**

| Reason                                   | Direction          | Why                                                                                                                                                                                                                                                                           |
| ---------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sync lag on the most recent 6 to 12h** | Ours lower briefly | ShippyPro's tracking webhook posts in near-real-time but the 30-day window includes shipments still in-flight at the boundary; the portal recomputes overnight. The gap closes within 24 hours.                                                                               |
| **Promise-date staleness during peak**   | Either             | ShippyPro stores the carrier-promised delivery date at label creation. If carriers issue mid-week service downgrades (common before Italian public holidays), the portal may judge against the re-estimate while the card stays strict against the original promise.          |
| **Carrier-event normalisation**          | Tiny               | The 100+ supported carriers have varying event taxonomies; ShippyPro normalises to a unified `delivered` flag. \~95 percent map cleanly; the residual 5 percent (typically legacy regional Italian carriers, Spanish customs codes) can shift the count by 0.1 to 0.3 points. |
| **Time zone**                            | Boundary days      | ShippyPro uses workspace timezone (typically CET/CEST for IT/EU accounts) for daily aggregation; we use UTC for cross-connector arithmetic. The 30-day window absorbs this.                                                                                                   |
| **Italian holiday smoothing**            | Either             | The portal historically allowed an "exclude ferragosto" toggle for August. The card does NOT smooth; the actual depressed rate is recorded. Year-on-year comparisons across August windows should annotate.                                                                   |
| **Returns leg**                          | Either             | Easy Return shipments excluded by default here; the portal sometimes includes them unfiltered.                                                                                                                                                                                |

**Internal identity (within ShippyPro):**

This card pairs with [Late Shipments](/nerve-centre/kpi-cards/shippy-pro/late-shipments) by the identity:

`shippy_pro.otd_rate = 1 - (shippy_pro.late_shipments_count / shippy_pro.shipments_total)` over the same window.

If the two cards do not satisfy this within \~0.5 percent on the same day, the cause is window boundary differences (late count uses 7D, OTD uses 30D), status filtering differences, or sync timing. None are bugs.

**Cross-connector reconciliation. Direct-carrier connectors vs ShippyPro:**

If you also have direct-carrier connectors (e.g. direct DHL, direct Poste Italiane) connected, do **not** sum their OTD rates. Each direct connector reads from the carrier's own API with the carrier's promise model:

* ShippyPro's view uses the promise stored at ShippyPro label creation.
* Direct-DHL connector uses DHL's promise model with its own service-day calendar.
* Differences of 1 to 3 points are normal; larger gaps suggest one of the two filters shipments differently.

***

<details>
  <summary><em>Documentation cross-reference (for agencies running multiple courier connectors)</em></summary>

  The OTD Rate metric exists with the same structural definition on every shipping connector in Vortex IQ. This is **not** a reconciliation between carriers; each carrier's network and ETA-promise model is different.

  * [`royal_mail.roy_otd_rate`](/nerve-centre/kpi-cards/royal-mail/on-time-delivery-rate)
  * [`ship_theory.shi_otd_rate`](/nerve-centre/kpi-cards/ship-theory/on-time-delivery-rate) (multi-carrier UK peer)
  * [`sendle.sen_otd_rate`](/nerve-centre/kpi-cards/sendle/on-time-delivery-rate) (single-carrier AU/US peer)
  * [`shipbob.sb_otd_rate`](/nerve-centre/kpi-cards/shipbob/on-time-delivery-rate) (3PL peer)
</details>

## Known limitations / merchant FAQs

**Why is my ShippyPro OTD rate dropping?**
Three usual causes, in order of likelihood:

1. **Carrier mix has shifted toward Poste Italiane or similar low-cost carriers.** A small change in the rate-shop ruleset (e.g. weight thresholds, country-of-destination rules) can move 10 to 20 percent of volume off DHL Express onto Poste Italiane Posta 4, dropping headline OTD by 1 to 3 points without any single carrier degrading. Open [Rate-Shop Winner Mix](/nerve-centre/kpi-cards/shippy-pro/rate-shop-winner-distribution) to confirm.
2. **An Italian or EU national event.** Ferragosto (15 Aug week), Pasqua, Christmas-New Year period, French national strikes, German rail action all hit specific carriers and lanes. The aggregate dips because affected carrier share-weighted contribution falls.
3. **Volume mix shifted to harder lanes.** A campaign expanding into Sicily/Sardinia, NL/BE cross-border, or non-EU lanes adds parcels with structurally lower OTD without any rate-shop change.

**Action:** before re-tuning, identify whether the cause is mix shift (operational decision), national/seasonal (wait or shift volume), or lane expansion (widen checkout copy on those countries).

**My OTD is 94.7 percent. Is that good or bad?**
Marginal. Most ShippyPro accounts running balanced IT/EU mixes sit at 93 to 96 percent. If trend is flat at 94.7, no action; if descending, retune before crossing 92 percent.

**How can I raise ShippyPro OTD?**
Five practical levers, in rough order of impact and cost:

1. **Move medium-value parcels off Poste Italiane onto BRT or DHL Express.** A few cents per parcel for material OTD lift. Most ShippyPro accounts under-route premium because the rate-shop optimises on cost; the OTD trade is worth it on parcels above EUR 25.
2. **Tighten Friday cutoffs.** A label printed Friday 16:00 misses BRT and DHL Express collection windows; pull cutoffs to 13:00 to claim the Friday afternoon collection.
3. **Audit rate-shop rules quarterly.** Carrier rates and SLAs change; rate-shop rules tuned 18 months ago routinely produce sub-optimal carrier choices today. Quarterly review with ShippyPro's account team typically lifts headline OTD by 1 to 2 points.
4. **Install Italian / EU address validation at checkout.** EgonReg for IT, addresseva for FR/ES, address validators for DE substantially reduce upstream address exceptions; OTD follows with 24 to 72 hour lag.
5. **Pre-empt Italian holidays in checkout copy.** Customers seeing "delivered by 18 Aug" on a 15 Aug order will complain when ferragosto delays it; "delivered by 22 Aug" sets expectation correctly and reduces the perceived OTD problem even when the operational number is unchanged.

**Why does my daily OTD swing so much?**
Small-number noise plus carrier-specific batch events. A single BRT depot incident can move daily OTD by 5 to 10 points. **Look at the rolling 7-day or 30-day rate, not the daily figure.**

**Does the August / ferragosto period affect my baseline?**
Yes, materially. Italian DTC OTD typically drops 4 to 8 points during the 10 to 25 Aug window across all carriers. Year-on-year comparisons across August should normalise; quarter-on-quarter that includes August should annotate.

**ShippyPro shows higher OTD than my direct DHL Express connector. Is that real?**
Often yes. ShippyPro pools across all carriers including premium DHL Express and lower-tier Poste Italiane; the direct DHL connector only sees the DHL leg. Direct DHL OTD can be 97 to 99 percent while ShippyPro aggregate sits at 94 to 96 percent because the slower carriers drag the aggregate. Both are correct; they answer different questions.

**Should I retune my rate-shop ruleset based on this card alone?**
No, not without the per-carrier breakdown. The aggregate tells you something is wrong; [OTD by Route](/nerve-centre/kpi-cards/shippy-pro/otd-by-route) and [Rate-Shop Winner Mix](/nerve-centre/kpi-cards/shippy-pro/rate-shop-winner-distribution) tell you which carrier and lane. Always pair before retuning.

**My cross-border parcels show different OTD from domestic. Is that normal?**
Yes. EU cross-border via DHL Express typically delivers at 96 to 98 percent OTD; cross-border via GLS/DPD typically 92 to 95 percent; non-EU (UK, CH) adds customs variability and runs 88 to 94 percent. The card's aggregate hides this; the per-lane breakdown surfaces it. Customer expectations for cross-border should be set looser at checkout.

**When does today's OTD reading swing most?**
After 15:00 CET. Before that, the morning's BRT and Poste deliveries have not all completed; same reading at 17:00 is more stable. Use 24-hour-old readings for board-grade decisions; same-day for triage only.

***

### Tracked live in Vortex IQ Nerve Centre

*On-Time Delivery Rate* 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.
