At a glance
Returns as a percentage of outbound parcels, split by the PostNord service code the original parcel went out on (MyPack Home, MyPack Collect, MyPack Mailbox, Express, and the cross-border variants), over the trailing 30 days against the prior 30. The point of the split is that the service you choose at checkout shapes the return rate: a parcel left at the door with nobody home behaves very differently from one collected from a pickup point. A high return rate on a single service code is revenue leaking through a specific delivery experience.
| What it counts | For each PostNord service code: COUNT(return shipments mapped to that outbound service) / COUNT(outbound shipments on that service) over the trailing 30 days, period-over-period. Returns are matched back to the outbound order, so a return inherits the service code its parcel originally shipped on. |
| Data source | Outbound shipments and their serviceCode come from the PostNord Booking / Shipping API. Returns are identified two ways: return-label consignments booked through PostNord Return Drop-off / Returns Portal, and RETURN_TO_SENDER events on the original parcel from GET /shipments/v1/parcels/{id}/events. Both are matched to the source order via the store order feed. |
| Service codes covered | MyPack Home (driver hand-off to the door), MyPack Collect (pickup point / parcel locker), MyPack Mailbox (fits a standard Nordic letterbox), PostNord Express, and the cross-border SE / NO / DK / FI variants of each. Each code is reported as its own row. |
| Merchant-return vs RTS | Two return types are distinguished but both count: a customer-initiated return (the customer sends the item back through the returns portal) and a return-to-sender (PostNord could not deliver and sent the parcel back). The detail view splits them; the headline rate combines them because both are reverse-logistics cost and revenue reversal. |
| Why service code matters | MyPack Mailbox and MyPack Collect have structurally lower failed-delivery RTS than MyPack Home, because there is no “nobody home” failure mode. If MyPack Home shows a much higher return rate than Collect on the same catalogue, the gap is delivery-experience driven, not product driven. |
| Cross-border nuance | Cross-border returns (Norway especially) carry customs reversal and are slower and costlier. A high cross-border return rate is more expensive per unit than a domestic one. |
| Scope | Matched returns only. Returns posted through a non-PostNord channel (a customer dropping into another carrier, or an in-store return) are not visible to this card and belong on the commerce platform’s own returns metric. |
| Refresh cadence | Daily, recomputed at 02:00 UTC. |
| Time window | 30D vsP (rolling 30 days versus the prior 30). Return rate is slow-moving, so 30 days is the right resolution; daily readings are too noisy. |
| Alert trigger | >8% on any service code. The alert is per-row, not on the blended average, so a single bad service code trips it even when the overall rate looks healthy. |
| Roles | owner, operations, finance, merchandising |
Calculation
Calculated automatically from your PostNord and store-order data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
The Stockholm outdoor-apparel brand, around 10,000 outbound parcels in the trailing 30 days, Shopify front-end. Reading taken at 09:00 CET on 18 Mar 26 for the trailing 30 days, compared against the prior 30.| Service code | Outbound (30d) | Returns matched | Return rate | Customer return | RTS | vs prior |
|---|---|---|---|---|---|---|
| MyPack Home (SE) | 4,820 | 463 | 9.6% | 388 | 75 | +1.4pp |
| MyPack Collect (SE) | 3,150 | 198 | 6.3% | 189 | 9 | +0.2pp |
| MyPack Mailbox (SE) | 1,180 | 71 | 6.0% | 70 | 1 | flat |
| Cross-border MyPack (NO / FI) | 620 | 77 | 12.4% | 41 | 36 | +2.1pp |
| Express | 230 | 12 | 5.2% | 12 | 0 | -0.3pp |
| All PostNord (blended) | 10,000 | 821 | 8.2% | 700 | 121 | +1.1pp |
>8% per-code threshold. Five things to notice:
- The per-code alert is the whole value of the card. The blended 8.2 percent looks borderline; you might shrug. The split shows two genuinely sick rows hiding behind two healthy ones (Collect at 6.3, Mailbox at 6.0). Always act on the rows, not the average.
- MyPack Home’s 9.6 percent is mostly customer returns (388), not RTS (75). That points at product or sizing, not delivery: customers received the item and chose to send it back. But the RTS share (75) is meaningfully higher than Collect’s (9), which is the structural “nobody home” failure mode of door delivery. Some of MyPack Home’s excess return rate is the delivery method itself.
- Cross-border 12.4 percent is the most expensive row. It is half RTS (36 of 77), and a cross-border RTS to Norway means a parcel that cleared Norwegian customs outbound now has to clear it again on the way back, plus reverse shipping. At an estimated SEK 180 to 250 all-in per cross-border return, that row alone is roughly SEK 15,000 of reverse-logistics cost in the period.
- The shift to test is service mix, not just product. If you moved cost-sensitive volume from MyPack Collect to MyPack Home this quarter to improve perceived convenience, you may have bought yourself a higher RTS rate. Pair with MyPack Mailbox vs Home Delivery Split to see whether the mix moved.
- This is revenue reversed, not just cost. 821 returns at an average order value of SEK 750 is roughly SEK 615,000 of revenue handed back in 30 days, before restocking, refund-processing and reverse-shipping cost. A 1.1pp rise in the blended rate is around SEK 82,000 of additional reversed revenue versus the prior period. That is why the card sits in the Revenue at Risk class.
Sibling cards merchants should reference together
Return rate by service code tells you which delivery experience is leaking revenue. Pair it with these to separate product cause from delivery cause:| Card | Why pair it with Return Rate by Service Code | What the combination tells you |
|---|---|---|
| Returned to Sender | The RTS half of this card in isolation. | If RTS drives a service code’s return rate, the cause is delivery failure (nobody home, bad address), not product. |
| First-Attempt Delivery Rate | The MyPack Home failure mode. | Low first-attempt on Home explains a high RTS share on the Home row. |
| MyPack Mailbox vs Home Delivery Split | The service-mix lever. | A mix shift toward Home raises blended RTS even if each code’s rate is steady. |
| Exception Rate | Upstream delivery problems. | ADDRESS_INVALID and RECIPIENT_NOT_HOME exceptions convert into RTS returns days later. |
| Shipments by Service | The denominator of each row. | Confirms whether a return-rate change is rate-driven or volume-mix-driven. |
| Claim Value (open) | Damaged-goods returns. | A DAMAGED return feeds both this card and an open claim; the overlap is recoverable cost. |
Cross-connector: shopify.refund_rate | The revenue-reversal companion. | A return on this card usually becomes a refund on Shopify; the two should track within days. |
Cross-connector: shopify.return_rate | The platform-side returns view. | The platform sees all returns including non-PostNord channels; this card sees only PostNord-matched. The gap is your off-carrier return volume. |
Reconciling against the vendor’s own dashboard
Where to look in PostNord’s own portal: PostNord Business Portal → Returns (for return-label consignments booked through PostNord Return Drop-off / Returns Portal) and Shipments filtered onRETURN_TO_SENDER status for the RTS half. PostNord does not publish a single “return rate by service code” dial; you assemble it by counting return consignments per service against outbound consignments per service. This card automates that match-back.
The closest like-for-like view is Returns, Last 30 Days, grouped by original service code. Because PostNord’s portal often shows returns as their own consignments (with their own return service code), you have to trace each back to the outbound order to recover the original outbound service. The card does that join for you via the store order feed.
Why our number may legitimately differ from a manual count:
| Reason | Direction | Why |
|---|---|---|
| Return-to-outbound match-back | Either | The card attributes a return to the outbound service code; the portal lists returns under the return service code. Different attribution changes which row a return lands in. |
| Off-carrier returns | Ours lower | A customer who returns via a different carrier or in store is invisible to PostNord and to this card; the commerce platform sees it. Reconcile the gap against shopify.return_rate. |
| Customer-return vs RTS blend | Either | The portal separates booked returns from RTS; this card’s headline combines them. Use the detail split to match a specific portal view. |
| Time zone | Boundary days off | Portal uses carrier-local time (CET / CEST); the card normalises to UTC. Boundary-day returns can land in different days. |
| In-flight returns | Ours lags | A return parcel created today but not yet scanned at a PostNord point is counted once it has a first scan; the portal may show it on label creation. |
| Cross-border customs reversal | n/a | Cross-border returns can re-clear customs, which the portal logs as extra events; this card counts the return once regardless of customs leg count. |
| Card | Expected relationship | Causes of legitimate divergence |
|---|---|---|
shopify.return_rate | Platform-side returns, all channels. | Off-carrier and in-store returns inflate the platform figure above the PostNord-matched figure. |
shopify.refund_rate | Money side of the return. | Not every return is refunded (exchanges, store credit); not every refund has a physical return. |
| PostNord Returned to Sender | The RTS subset. | RTS is a strict subset; if RTS exceeds this card’s return count, something is mis-matched. |
Known limitations / merchant FAQs
Why split by service code instead of just showing one return rate? Because the service code is a lever you control at checkout, and it changes the return rate. MyPack Collect and MyPack Mailbox have no “nobody home” failure mode, so their return-to-sender rate is structurally lower than MyPack Home. If you only watch the blended rate you cannot tell whether a rise is “customers returning more product” or “we shifted volume to a delivery method that fails more often”. The split separates the two so you act on the right cause. One service code is over 8 percent but my blended rate is fine. Should I care? Yes, that is exactly the case the per-code alert is built for. A single sick row (often cross-border, or MyPack Home in rural areas) can be hidden by healthy rows in the average. The bad row is real reversed revenue and real reverse-logistics cost; the average is just arithmetic. Act on the row. How do you tell a customer return from a return-to-sender? A customer return is booked through the returns portal by the customer (they decided to send it back). A return-to-sender is generated by PostNord because delivery failed (nobody home after retries, bad address, refused, customs not cleared). The headline rate combines both because both reverse revenue, but the detail view splits them. A high customer-return share points at product, sizing or expectation; a high RTS share points at the delivery experience. Why is the cross-border return rate so much higher and more expensive? Two reasons. First, cross-border (especially Norway) has more delivery friction: customs on the outbound leg, longer transit, more chance of a failed or refused delivery, so RTS is higher. Second, a cross-border return that re-clears customs costs far more to process than a domestic one. A 12 percent cross-border return rate is not just twice as frequent as a 6 percent domestic one, it is several times more expensive per unit. Treat the cross-border row as its own line item. Returns lag the original despatch. How does the 30-day window handle that? A return is counted in the period in which the return is detected, but matched back to whatever service code the original parcel shipped on, even if that despatch was weeks earlier. So a spike here can reflect a product or service decision made a month or more ago. When diagnosing, look at the despatch cohort the returns belong to, not just the current despatch mix. My platform shows a higher return rate than this card. Why? This card only sees returns that came back through PostNord. Customers who return via a different carrier, drop into a store, or who you refund without requiring a physical return are invisible here but visible onshopify.return_rate. The gap between the two is your off-PostNord return volume, which is itself useful to know.
Can a damaged-goods return show up here and as a claim?
Yes. A DAMAGED parcel that the customer sends back counts as a return on this card and can open a claim on Claim Value (open). That overlap is recoverable cost: the return is your reverse-logistics expense, the claim is the carrier reimbursing you for the damage. Track both so you do not double-count the loss or miss the recovery.
Does service-tier mix shift trip this card on its own?
The per-code rates do not move from a mix shift, but the blended rate does. If you move 1,000 parcels from MyPack Collect (6 percent) to MyPack Home (9.6 percent), the blended rate rises even though no individual code got worse. Use MyPack Mailbox vs Home Delivery Split and Shipments by Service to confirm whether a blended-rate change is a mix effect before chasing a product cause.