At a glance
Share of Parcelforce Worldwide consignments that landed on or before the contracted service-day promise. Parcelforce, Royal Mail’s express-parcel arm, sells time-definite tiers (Express9, Express10, ExpressAM, Express24, Express48, Globaldirect) where the promise is a specific cutoff time on a specific working day. A shipment that misses by even five minutes is “late” against that contract; this card scores every delivered consignment 0 or 1 against its own service-level promise.
| What it counts | COUNT(shipments WHERE actual_delivery_datetime <= promised_delivery_datetime AND status = 'DELIVERED') / COUNT(shipments WHERE status IN ('DELIVERED','FAILED')) over the rolling 30-day window. Each delivered consignment is judged against its own service tier’s cutoff. |
| Delivery success criterion | Driver scan or signature-on-glass POD captured at the doorstep, returned via Parcelforce’s tracking webhook (Delivered, Delivered to neighbour, Delivered to safe place). A consignment without a final POD scan is excluded from numerator and denominator until the scan lands. |
| On-time threshold | Promised cutoff time on the promised date. Express9 = 09:00, Express10 = 10:00, ExpressAM = 12:00, Express24 = end-of-day next working day, Express48 = end-of-day day-2, Globaldirect = country-specific transit time. No grace period; Parcelforce’s published service definitions are the contract. |
| Returns / RTO | RTOs (returned-to-sender) are excluded from this card and tracked separately on par_returned_to_sender. Failed-and-redelivered parcels score against the first successful delivery datetime; a reschedule that ultimately delivers on day 2 of an Express24 is late. |
| Service level scope | All services pooled. Express9, Express10, ExpressAM, Express24, Express48, plus Globaldirect international and Saturday uplift, all in the headline rate. The dedicated parcelforce_express24_otd and parcelforce_xc_otd_by_channel cards split the picture. |
| Money-back-on-late | Parcelforce offers carriage-charge refunds on Express9 / Express10 / ExpressAM / Express24 service failures where Parcelforce was at fault (i.e. not customs delay, not address issue). Filing window is typically 30 days from the failed POD, longer than APC’s 14-day window. This card surfaces candidates; pair with par_open_claims to track recovery. |
| B2B vs B2C | Pooled. B2B reseller traffic concentrates on Express9 / Express10 / ExpressAM (corporate IT, healthcare, professional services that need stock before staff start); B2C concentrates on Express24 / Express48. The same five-minute slip is critical to a B2B audience and immaterial to a Saturday consumer; the rate treats them identically. |
| Saturday uplift | Saturday delivery is a paid-for upgrade on Express24, not a default. Saturday consignments are scored against their own Saturday-promise cutoff; ROI of paying the uplift is on parcelforce_saturday_uplift_roi. |
| Royal Mail vs Parcelforce | Parcelforce is Royal Mail’s premium parcels arm and operates a separate hub-and-spoke network (Coventry NDH plus regional depots) from Royal Mail’s tracked-letter service. A merchant running Royal Mail Tracked-24 alongside Parcelforce Express24 should treat them as distinct carriers; this card covers Parcelforce only. |
| Time zone | All scan timestamps in UK local time (GMT or BST). Globaldirect international scans are in destination time and are not yet normalised; expect minor edge-of-window noise on cross-border consignments. |
| Time window | 30D vsP (rolling 30 days, period-over-period vs prior 30 days) |
| Alert trigger | <95% warns, <90% critical, the on_time_delivery_rate gauge sentiment trips. Parcelforce’s published Express24 SLA is ~98%; any sustained slip below 95% on a Parcelforce-heavy merchant is an account-team conversation. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Parcelforce Worldwide 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 premium-electronics merchant: £320 average-order-value laptops and accessories, mix of consumer DTC and corporate B2B (a small reseller channel). Parcelforce Express24 is the consumer carrier; Parcelforce Express9 is the B2B reseller carrier (corporate IT teams need stock before staff start). Reading taken at 09:00 GMT on 13 Mar 26 for the trailing 30 days (12 Feb 26 to 12 Mar 26).| Service | Shipments (30D) | Delivered on or before promise | OTD% |
|---|---|---|---|
| Express24 (consumer DTC) | 4,180 | 3,990 | 95.5% |
| Express9 (B2B reseller) | 612 | 591 | 96.6% |
| ExpressAM (mixed) | 244 | 232 | 95.1% |
| Express48 (bulk DTC) | 198 | 191 | 96.5% |
| Globaldirect (international, EU) | 116 | 102 | 87.9% |
| Total (this card) | 5,350 | 5,106 | 95.4% |
<95% (warn) is not tripped at the aggregate level by 0.4 of a point. Five things to notice:
- The headline sits a fraction above the warn threshold. A 22-shipment swing the wrong way next week and the dial trips. Premium-express buyers paid for the ~98% Parcelforce SLA; landing at 95.4% is contractually inside spec but commercially uncomfortable. Pair with
par_shipments_trendto see if volume is rising into a strained capacity bracket. - Globaldirect 87.9% is mostly customs, not Parcelforce. Post-Brexit, EU consignments run customs-clearance delay risk on every parcel; Parcelforce’s API publishes
failure_reason: customson these. The customer experiences the lateness regardless, so the card counts them; for service-failure refund eligibility, customs delays do not qualify. - 190 missed Express24 + 21 missed Express9 = 211 domestic premium misses, all refund candidates. At an estimated £9 average carriage refund, that is ~£1,899 of recoverable carriage if the merchant files within Parcelforce’s 30-day window. Most merchants file <20% of eligible claims; this is a finance-and-ops collaboration, not a fire-drill.
- B2B Express9 is your tightest contract and runs at 96.6%. Five-minute slip past 09:00 fails Express9. The 21 misses here translate into corporate-IT-team escalations and, more importantly, into a B2B reseller’s perception of your reliability. Track Express9 separately even though it is a small slice of volume.
- Compare against the same 30-day window last year. 13 Mar 25 reading was 96.8%; the slip to 95.4% is the real story. Most likely cause: the recent product launch lifted DTC volume past the merchant’s negotiated daily collection capacity, pushing afternoon orders into next-day-collection cohorts. The fix is at the dispatch cutoff, not in carrier negotiation. Pair with
par_route_otdto localise.
Sibling cards merchants should reference together
On-time delivery rate is the customer-facing outcome metric for a Parcelforce merchant. Pair it with these to diagnose root cause and track recovery:| Card | Why pair it with On-Time Delivery Rate | What the combination tells you |
|---|---|---|
| Late Shipments | The absolute-count companion. The percent stays flat as volume rises; the count does not. | If both rise, the network is degrading. If only the count rises, the network is healthy and volume is up. Two different remedies. |
| Express24 Service Day Promise | Parcelforce’s flagship consumer service. On most DTC merchants Express24 is 80%+ of volume and dominates the headline. | Most aggregate slips are Express24 slips. Always check Express24 OTD first when this card moves. |
| OTD by Route | Splits the rate by Parcelforce’s depot-and-route network (Coventry NDH plus regional depots). | A one-route drop is an account-team conversation; a network-wide drop is a peak-period or weather event. |
| Open Claims | Each missed premium shipment is a service-failure-refund candidate. Filing rate vs miss rate tells you if you are recovering carriage. | If late count is 200 and open-claims is 30, the merchant is leaving over £1,500 of carriage refunds per period unclaimed. |
| Saturday Delivery Uplift ROI | If you pay Saturday uplift to recover Friday-late parcels, this card tracks that economic decision. | Late-shipment rise on Fridays + low Saturday-uplift ROI = the uplift is not solving the right problem. Drop the spend. |
| Parcelforce OTD by Sales Channel | Cross-channel. A drop that is all DTC and zero B2B reseller tells you it is a consumer-experience problem first. | Channel mix in the slip matches the channel mix of customer-service tickets a day later. Predictive of CS load. |
| Avg Shipping Cost | If OTD is dropping and cost is rising, you are paying more for less. The spend-to-service curve. | Negotiation lever for the next Parcelforce account review. |
Cross-connector: shopify.unfulfilled_orders | Upstream. Shopify orders booked too late in the day cannot make Parcelforce’s same-day collection cutoff. | A creep in late-day Shopify orders predicts an OTD dip on this card 2 to 4 days later. |
Cross-connector: bigcommerce.unfulfilled_orders | Upstream same as Shopify. | Same caveat for BigCommerce-driven merchants. |
Cross-connector: apc.apc_otd_rate | Peer UK premium shipper. Useful only on multi-carrier merchants. | If APC and Parcelforce both spike-low at the same time, the cause is upstream (warehouse, dispatch); if only one, it is carrier-specific. |
Cross-connector: royal_mail.rm_otd_rate | Royal Mail Tracked is the value-tier sister carrier. Different network, different SLA. | Comparing Parcelforce premium-tier to Royal Mail value-tier in the same period reveals which contract you are buying. |
Reconciling against the vendor’s own dashboard
Where to look in Parcelforce’s own dashboard: Parcelforce ParcelManager → Reports → Service Performance. Filter by All services / All depots / Last 30 days. The closest like-for-like view is the On-Time Delivery KPI tile. ParcelManager also exposes a per-consignment audit at Track and Trace → Failed Deliveries with the gap between scheduled and actual POD; useful when the headline disagrees and you need to see which parcels missed. For account-level reporting at the Royal Mail Group level, larger merchants also have access to the Royal Mail Group Online Business Account dashboard, which aggregates Parcelforce alongside Royal Mail Tracked and Special Delivery products. The Parcelforce-only view in ParcelManager is the apples-to-apples comparison for this card. Why our number may legitimately differ from Parcelforce’s portal:| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days off | ParcelManager defaults to UK local time (GMT or BST). The card defaults to UK local time. No discrepancy in steady-state, but DST transitions on the last Sunday of March and October cause one-hour boundary noise on those specific days. |
| POD scan vs delivery datetime | Either | ParcelManager treats the POD scan datetime as truth. The card uses the same field. Some merchants who reconcile against the customer’s own received-at email timestamp will see a 1 to 4 hour delta; that is not a Parcelforce-vs-card delta, it is a customer-perception delta. |
| In-transit consignments | Ours rolling | Consignments without a final POD are excluded from numerator and denominator. As they deliver, the rolling 30-day window numerator and denominator both grow. ParcelManager’s tile may include in-transit as a separate slice; the card does not. |
| Globaldirect customs delays | Ours lower for international | Customs holds add transit days that Parcelforce attributes to failure_reason: customs. The card counts the customer-experienced lateness regardless. ParcelManager’s “Parcelforce-fault-only” service-failure tile excludes them; that view will show a higher OTD%. The two reconcile when the merchant filters out international. |
| Refund-eligible vs all-late | Ours lower | Parcelforce’s account-team often quote a service-failure rate that excludes customer-fault, address-fault, customs delays. The card’s denominator is all delivered consignments and the numerator counts “delivered on or before promise”. The customer-experienced number is what this card publishes. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
shopify.fulfillment_lead_time | Upstream causation. Late Shopify fulfilment cannot make Parcelforce’s same-day collection cutoff. | App-install events, manual fulfilment overrides, B2B / pre-order workflows that bypass the standard cutoff. |
bigcommerce.unfulfilled_orders | Same as Shopify upstream. | Same caveat. |
royal_mail.rm_otd_rate | Peer service tier (Royal Mail Tracked is value-tier; Parcelforce is premium-tier). Run by the same parent group, on different networks. | Different parcel populations entirely. Most multi-tier merchants run both; the two cards are not reconciled, they are independent. |
apc.apc_otd_rate | Peer UK premium shipper. Independent network. | Different consignments. Useful for shop-around and benchmarking, not reconciliation. |
Known limitations / merchant FAQs
Why does the headline rate look fine but our customer-service team is buried in delivery complaints? Two reasons. First, customers complain about late, not about averages. A 95.4% headline still means 244 missed parcels in 30 days for the worked example above; that is at least 244 customer-service tickets even before the social-media echo. Second, complaints concentrate around premium services. A customer who paid £8.95 for Express24 expects perfection; a customer who took free standard shipping is more forgiving. Pair this card withparcelforce_express24_otd to see if the complaints map to the premium-paid cohort specifically.
What does Parcelforce mean by “service-failure refund” and how do we claim?
Parcelforce credits the carriage charge back when a time-definite consignment (Express9, Express10, ExpressAM, Express24) misses its promise where Parcelforce is at fault. Customs delays, address-fault, recipient-not-home, customer-refused, and force-majeure events do not qualify. File via the Service Failure Claim form in ParcelManager, attach the consignment number, and Parcelforce processes within 30 working days. Filing window is 30 days from the failed POD (longer than APC’s 14-day window). Most merchants leave money on the table by not filing; this card surfaces the candidates and par_open_claims tracks recovery.
Why is Globaldirect dragging our headline?
Post-Brexit, Globaldirect EU consignments run customs-clearance delay risk on every parcel. Parcelforce attributes most of these to failure_reason: customs and they do not qualify for service-failure refund. The customer experiences the lateness regardless, so the card counts them. If Globaldirect is more than 5% of your volume, monitor it on par_shipments_by_destination and decide whether the international-premium tier is worth the OTD drag. Some merchants prefer DHL Express or FedEx International Priority for high-value EU customers because their customs-clearance handling is more predictable.
Why does Parcelforce show “delivered on time” but the customer says it was late?
Three usual reasons. (1) Promised cutoff vs delivered datetime. Parcelforce judges Express24 against “end of next working day”; customers often expect “by 18:00”. A 19:30 delivery is on-time by Parcelforce’s contract and late by customer expectation. (2) Customer ordered after the cutoff but received a “next-day” promise from your checkout. The carrier promise starts at collection; the customer’s clock started at checkout. Misaligned expectations are a checkout-copy issue, not a carrier issue. (3) Re-attempted delivery. A failed-first-attempt that delivered on day 2 is late on this card; Parcelforce’s tracking page may also show “delivered” without highlighting the missed first attempt.
B2B and B2C have different sensitivities; should we split this card?
The card pools all services. If your B2B reseller channel is meaningful (>10% of volume), use parcelforce_xc_otd_by_channel for the channel split, and par_shipments_by_service for the service split. Express9 / Express10 / ExpressAM are de facto B2B-heavy services; Express24 / Express48 are de facto B2C. Track the premium services individually if a missed Express9 means a corporate-account-renewal conversation.
Do we need a separate Saturday-uplift view?
Yes if you pay it. Saturday delivery is a paid-for upgrade on Express24 and changes the promise. The card pools Saturday deliveries in the headline; the dedicated parcelforce_saturday_uplift_roi card tracks the financial decision (does the OTD lift justify the cost uplift). Most weekend-fulfilment merchants discover the Saturday spend is recovering one or two consignments per week and dropping the spend would be a net win.
Why is our Parcelforce OTD lower than DPD’s published 99% benchmark?
DPD’s 99% is a network average across all customers and is reported with a different SLA definition (DPD’s “delivered within the predicted time-window” promise, not “delivered by the cutoff time”). Parcelforce’s published Express24 SLA is ~98%. Comparing across networks requires calibrating the SLA definition. Use the dedicated peer cards (apc.apc_otd_rate, royal_mail.rm_otd_rate, interlink_express.int_otd_rate) for like-for-like.
How does this card behave during peak season (Black Friday, Christmas)?
Parcelforce’s network is one of the more peak-resilient in the UK premium tier; expect a 2 to 5 percentage-point dip in November and December (vs the typical 5 to 15 point dip on value-tier carriers). The dip recovers by mid-January. Read November and December numbers in seasonal context, not as a clean trend. Pre-position promised-date copy in checkout for the last week before Christmas: “Order by 18 December for delivery by 23 December” beats “Standard 1 to 3 day delivery” both for OTD and for refund-rate downstream.
What if we run multiple shipping accounts (Parcelforce A/C 1 for DTC, A/C 2 for B2B)?
Today the card pools all accounts under the connected Parcelforce credentials. If you need a per-account-number split, the data is in account_number per consignment; raise it on par_route_otd filter requests. Most merchants connect a single Parcelforce credential and use service-tier filters instead.