Shipping Economics Review - E-commerce
Use this skill when
The user suspects that shipping is quietly eating margin, or wants to set a threshold and a delivery promise they can defend.
Common requests:
- "Is our free shipping threshold still right?"
- "Shipping costs are up. What do we change?"
- "Should we charge for returns?"
- "Why is our margin worse on small orders?"
Required input
Minimum useful input:
- Carrier invoice or shipping cost export for a recent period.
- Current shipping rules: thresholds, flat rates, zones, express options.
- Order export with order value, destination, and shipping charged.
Recommended additional input:
- Product weights and dimensions.
- Packaging cost per order type.
- Return shipping policy and who pays.
- Delivery time promise shown at checkout.
- Support tickets about delivery, cost, or delays.
Before analysis
- Confirm whether shipping revenue is recorded separately from product revenue.
- Check whether the carrier invoice includes surcharges: fuel, residential, oversize, remote area, address correction. These are usually where the gap lives.
- Confirm which markets and zones matter commercially, and do not optimise a zone with four orders.
- Establish whether the threshold was ever calculated, or inherited from a competitor.
Analysis workflow
- Banding is the whole trick, and
../scripts/shipping_recovery.py does it. With an order CSV, run ../scripts/shipping_recovery.py <file> --threshold <current>. It computes recovery by zone and by order value band, and tests the threshold against the real order distribution rather than against a rule of thumb. The gap is invisible in aggregate and obvious once banded, which is the whole reason this skill exists.
- Compute shipping recovery rate: shipping charged divided by shipping paid, overall and by zone.
- Find the order value bands where the store loses money on delivery, and size each band by order count.
- Test the free-shipping threshold against actual AOV distribution. A threshold below the current AOV mode subsidises orders that would have converted anyway.
- Check whether the threshold moves basket size at all, or just discounts existing behaviour.
- Review surcharge exposure: oversize items, remote destinations, address corrections, failed deliveries.
- Compare the delivery promise at checkout with delivered performance, and connect gaps to support load and returns.
- Model two or three threshold and rate scenarios, each with the assumption stated and the risk named.
Decision and evidence standard
Tag every finding with evidence: shipping_invoice, export, policy, margin_csv, support_ticket, return_reason, screenshot, hypothesis, or needs_data. Full vocabulary: ../references/output-standard.md.
Rank findings by the annualised gap they represent, not by how wrong the rate looks.
Any scenario is a model, not a forecast. Label projected savings as projected, with the assumptions visible.
Output format
Shipping verdict
Where the gap is, how large it is, and how confident the number is.
Recovery table
| Zone or band |
Orders |
Shipping charged |
Shipping cost |
Recovery % |
Note |
Threshold analysis
Current threshold, AOV distribution, and what the data supports.
Scenarios
| Scenario |
Change |
Assumption |
Expected effect |
Risk |
Delivery promise check
Promise versus performance, and the support and return cost of the gap.
Missing data
Name which surcharge lines were legible on the invoice and which were bundled. Fuel, residential and address correction are the three that usually hide inside a single total, and a recovery rate built without them reads better than reality.
Example input and output
Input:
- carrier invoice, one month
- order export with destination and shipping charged
- current shipping rules
- support tickets tagged delivery
Good output excerpt:
| Finding |
Evidence |
Severity |
Confidence |
Business impact |
Effort |
Owner decision |
| Free shipping threshold sits below the AOV mode, so most free deliveries are subsidised orders that would convert anyway |
export, shipping_invoice |
high |
medium |
margin |
S |
test |
| Oversize surcharges appear on 11% of shipments and are not priced into any product |
shipping_invoice |
high |
high |
margin |
S |
do_now |
What not to do yet: raise the threshold sitewide before checking which SKUs depend on threshold-driven basket building.
Guardrails
- Do not touch a live rate table. A threshold change is felt by every customer in the next hour and is the hardest change in this pack to walk back cleanly.
- Do not model savings without stating the assumptions.
- Do not ignore the conversion risk of raising a threshold or adding a fee.
- Do not treat a single month of carrier invoices as seasonal truth.
- Do not recommend charging for returns without checking category norms and the return reason mix.
1---2name: shipping-economics-review-ecommerce3description: Reviews the gap between what a store charges for shipping and what shipping actually costs, including free-shipping thresholds, zone pricing, packaging, oversize surcharges, and delivery promises. Use when fulfilment cost is rising, the free-shipping threshold has never been recalculated, or delivery complaints are growing.4---56# Shipping Economics Review - E-commerce78## Use this skill when910The user suspects that shipping is quietly eating margin, or wants to set a threshold and a delivery promise they can defend.1112Common requests:1314- "Is our free shipping threshold still right?"15- "Shipping costs are up. What do we change?"16- "Should we charge for returns?"17- "Why is our margin worse on small orders?"1819## Required input2021Minimum useful input:2223- Carrier invoice or shipping cost export for a recent period.24- Current shipping rules: thresholds, flat rates, zones, express options.25- Order export with order value, destination, and shipping charged.2627Recommended additional input:2829- Product weights and dimensions.30- Packaging cost per order type.31- Return shipping policy and who pays.32- Delivery time promise shown at checkout.33- Support tickets about delivery, cost, or delays.3435## Before analysis36371. Confirm whether shipping revenue is recorded separately from product revenue.382. Check whether the carrier invoice includes surcharges: fuel, residential, oversize, remote area, address correction. These are usually where the gap lives.393. Confirm which markets and zones matter commercially, and do not optimise a zone with four orders.404. Establish whether the threshold was ever calculated, or inherited from a competitor.4142## Analysis workflow43440. **Banding is the whole trick, and `../scripts/shipping_recovery.py` does it.** With an order CSV, run `../scripts/shipping_recovery.py <file> --threshold <current>`. It computes recovery by zone and by order value band, and tests the threshold against the real order distribution rather than against a rule of thumb. The gap is invisible in aggregate and obvious once banded, which is the whole reason this skill exists.451. Compute shipping recovery rate: shipping charged divided by shipping paid, overall and by zone.462. Find the order value bands where the store loses money on delivery, and size each band by order count.473. Test the free-shipping threshold against actual AOV distribution. A threshold below the current AOV mode subsidises orders that would have converted anyway.484. Check whether the threshold moves basket size at all, or just discounts existing behaviour.495. Review surcharge exposure: oversize items, remote destinations, address corrections, failed deliveries.506. Compare the delivery promise at checkout with delivered performance, and connect gaps to support load and returns.517. Model two or three threshold and rate scenarios, each with the assumption stated and the risk named.5253## Decision and evidence standard5455Tag every finding with evidence: `shipping_invoice`, `export`, `policy`, `margin_csv`, `support_ticket`, `return_reason`, `screenshot`, `hypothesis`, or `needs_data`. Full vocabulary: `../references/output-standard.md`.5657Rank findings by the annualised gap they represent, not by how wrong the rate looks.5859Any scenario is a model, not a forecast. Label projected savings as projected, with the assumptions visible.6061## Output format6263### Shipping verdict6465Where the gap is, how large it is, and how confident the number is.6667### Recovery table6869| Zone or band | Orders | Shipping charged | Shipping cost | Recovery % | Note |70|---|---|---|---|---|---|7172### Threshold analysis7374Current threshold, AOV distribution, and what the data supports.7576### Scenarios7778| Scenario | Change | Assumption | Expected effect | Risk |79|---|---|---|---|---|8081### Delivery promise check8283Promise versus performance, and the support and return cost of the gap.8485### Missing data8687Name which surcharge lines were legible on the invoice and which were bundled. Fuel, residential and address correction are the three that usually hide inside a single total, and a recovery rate built without them reads better than reality.8889## Example input and output9091Input:9293- carrier invoice, one month94- order export with destination and shipping charged95- current shipping rules96- support tickets tagged delivery9798Good output excerpt:99100| Finding | Evidence | Severity | Confidence | Business impact | Effort | Owner decision |101|---|---|---|---|---|---|---|102| Free shipping threshold sits below the AOV mode, so most free deliveries are subsidised orders that would convert anyway | `export`, `shipping_invoice` | high | medium | margin | S | test |103| Oversize surcharges appear on 11% of shipments and are not priced into any product | `shipping_invoice` | high | high | margin | S | do_now |104105What not to do yet: raise the threshold sitewide before checking which SKUs depend on threshold-driven basket building.106107## Guardrails108109- Do not touch a live rate table. A threshold change is felt by every customer in the next hour and is the hardest change in this pack to walk back cleanly.110- Do not model savings without stating the assumptions.111- Do not ignore the conversion risk of raising a threshold or adding a fee.112- Do not treat a single month of carrier invoices as seasonal truth.113- Do not recommend charging for returns without checking category norms and the return reason mix.