At a glance
Average label cost per shipment, pooled across every carrier ShippyPro orchestrates. Because rate-shopping picks the carrier dynamically, the shipping mix drives this number as much as carrier-rate movements; a sudden swing means the rate-shop ruleset is producing different winners, not necessarily that any single carrier raised prices.
| What it counts | SUM(label_cost) / COUNT(shipments) for shipments dispatched in the window. Cost includes base rate + fuel surcharge + service surcharges (signature, insurance, residential, oversize). Excludes customs duty (paid by recipient or merchant separately) and recovery fees on RTO. |
| API endpoint | GET /shipments joined with GET /labels for cost data. Reads label_cost, currency, carrier, service_level, weight, dimensions, from_country, to_country per shipment. |
| Currency | Workspace base currency (most ShippyPro accounts default to EUR; UK operators use GBP). Multi-currency carrier invoices (e.g. UK→EU on USD-quoting carriers) are FX-converted at label-creation time using the workspace’s daily rate. |
| Service level scope | All services and all carriers pooled. Filter by carrier in Cost by Zone and by service in Shipments by Service. |
| Returns / RTO | Outbound labels only. Easy Return labels, RTO charges and recovery fees are separated; they appear in Returned to Sender. |
| Mix-vs-rate sensitivity | The number is dominated by mix for most accounts. A swing from 60% Poste Italiane / 40% BRT to 40% Poste / 60% BRT lifts avg cost by 15 to 25 percent on Italian domestic flow without any carrier raising rates. |
| Outliers | High-weight or oversize shipments distort the average; trimmed-mean variant lives in Cost Per Shipment Trend. The headline is the unweighted arithmetic mean. |
| Time window | 30D vsP (rolling 30 days, period-over-period comparison vs prior 30 days) |
| Alert trigger | +10% vsP. Tripped when 30D avg exceeds the prior 30D avg by more than 10 percent. Sensitive to mix swings; the alert fires before any carrier raises rates. |
| Roles | owner, finance, 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
The Italian DTC fashion brand again. Reading taken at 09:00 CET on 12 Mar 26 for the trailing 30 days vs the prior 30 days.| Period | Shipments | Total label spend | Avg label cost | Carrier mix |
|---|---|---|---|---|
| Current 30D (10 Feb to 11 Mar) | 16,400 | EUR 89,200 | EUR 5.44 | BRT 38%, Poste 22%, GLS 18%, DHL Express 12%, others 10% |
| Prior 30D (11 Jan to 9 Feb) | 14,800 | EUR 73,600 | EUR 4.97 | BRT 31%, Poste 35%, GLS 16%, DHL Express 11%, others 7% |
| Change | +10.8% | +21.2% | +9.5% | Poste down 13pp, BRT up 7pp |
+10% vsP is just under at +9.5%. Five things to notice:
- The cost-per-shipment rose because the rate-shop ruleset shifted volume off Poste Italiane. This was a deliberate operations decision in early February to reduce late-shipment count (Poste 15% late vs BRT 4%). The cost lifted EUR 0.47 per parcel but the late count dropped; the trade is intentional. The card flags the cost; the operator must read it next to Late Shipments.
- The alert is a near-miss, not a near-event. At +9.5%, no alert fires; at +10.5% it would. This is the right time to check whether the next BRT contract negotiation is upcoming, because if Poste rates fall in April and the rate-shop swings back, this card resets to ~EUR 4.95 with no operator action.
- Total spend grew 21.2% on 10.8% volume. Half the spend growth is volume, half is mix-driven cost-per-shipment. Finance forecasting against this number must split the two; otherwise the budget conversation gets confused.
- Carrier rate inflation is invisible here. No carrier raised prices in this window. If BRT had pushed rates up 5% on 1 Feb, this card would still show 9.5% rise but the cause attribution would be different. Always ask “did any carrier raise rates” before reading mix conclusions.
- DHL Express stays at 12%, dragging the average up. DHL Express averages EUR 14 per parcel vs BRT EUR 4.50; on 12 percent volume share they contribute disproportionately to the mean. If DHL Express volume rises during peak (rate-shop picks them for guaranteed speed), this card spikes regardless of any other change.
Sibling cards merchants should reference together
Avg cost is one number; the mix and rate movements behind it are several. Pair with these to attribute change:| Card | Why pair it with Avg Shipping Cost | What the combination tells you |
|---|---|---|
| Cost Per Shipment Trend | The 90-day shape of this number. | Sloping rise = either rate-card escalation or sustained mix shift. Spike-and-recover = a single peak event (Q4 surcharge week, DHL fuel-surcharge update). |
| Cost by Zone | Splits cost across origin-destination zones. | Identifies which lane is dragging. Cross-border lanes typically average 3 to 5x domestic. |
| Shipments by Service | The mix-by-service pie that drives the cost average. | Mix change visible here typically explains the cost change in this card 1:1. |
| High-Cost Shipment Outliers | Surfaces the >2x avg shipments dragging the mean. | If outlier count rises, trim-mean and median diverge from the mean; consider segmenting by weight tier. |
| Late Shipments | Trade-off counterpart. | Operators frequently buy down late-count by raising avg cost (rate-shop more to faster carriers). The trade is rational; both cards must be read together. |
Cross-connector: shopify.aov | Margin sensitivity. | Avg shipping cost as percentage of AOV is the operative finance ratio. >12 percent of AOV is structurally tough to absorb without raising shipping fees in checkout. |
Cross-connector: shopify.refund_rate | Downstream impact. | Higher avg cost without higher checkout-shipping fees compresses margin; refunds on top further compress. |
Reconciling against the vendor’s own dashboard
Where to look in ShippyPro’s own dashboard: ShippyPro Dashboard → Analytics → Spend Analysis → Average Cost (Italian: “Costo Medio Spedizione”). The portal exposes the same number plus the carrier breakdown. The closest like-for-like is Last 30 Days, All Carriers, All Services, Workspace Currency. Why our number may legitimately differ from ShippyPro’s portal:| Reason | Direction | Why |
|---|---|---|
| Carrier-invoice reconciliation | Ours can drift slightly | The card reads label_cost from the rate quote at label creation. Carrier monthly invoices sometimes adjust for actual weight (re-weighed at the depot) or fuel-surcharge corrections. ShippyPro’s portal shows quoted cost; the carrier invoice is final truth. Variance is typically <1.5%. |
| FX conversion timing | Either, small | Multi-currency labels FX-convert at label-creation date. Long windows with euro-vs-other-currency volatility produce small drift if a label is recosted later. |
| Surcharge attribution | Ours sometimes lower | Some carrier surcharges (residential, signature) post separately to the invoice and are not always passed back through ShippyPro’s API. The card can understate by 2 to 4 percent for surcharge-heavy mixes. |
| Customs duty exclusion | Both exclude | Customs duty is paid separately by recipient or merchant; neither the card nor the portal includes it. Net true landed cost is higher for cross-border. |
| Returns labels | Both exclude in this card | Easy Return labels are tracked separately. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
shopify.aov | Margin denominator. Avg shipping cost / AOV ratio is the operative pricing question. | AOV moves with discount campaigns; the ratio shifts even if shipping cost is flat. |
| Stripe / payment-processor net revenue | Downstream truth on revenue side. Combined with this card gives shipping-as-share-of-revenue. | FX, refunds, payment-processor fees all sit between AOV and net revenue. |
| Direct carrier invoices | Source-of-truth on actual cost. | Carrier monthly invoice is final; expect 0.5 to 2 percent reconciliation gap. |