Published · Updated · sheetfolk guides
Shipping Cost Log: Comparing Carrier Rates by Package Size So You Stop Losing Margin on Postage
A shipping cost log gives line-level visibility into postage so you can spot which package sizes and carriers are eroding margin. Build a simple Aspire sheet that logs billable weight, carrier rates, surcharges, and gross margin impact, then use pivot summaries and MIN logic to pick the cheapest carrier per size band.
TL;DR: A shipping cost log gives line-level visibility into postage so you can spot which package sizes and carriers are eroding margin. Build a simple Aspire sheet that logs billable weight, carrier rates, surcharges, and gross margin impact, then use pivot summaries and MIN logic to pick the cheapest carrier per size band.
Shipping Cost Log: Comparing Carrier Rates by Package Size So You Stop Losing Margin on Postage
A shipping cost log gives line-level visibility into postage so you can spot which package sizes and carriers are eroding margin. Build a simple Aspire sheet that logs billable weight, carrier rates, surcharges, and gross margin impact, then use pivot summaries and MIN logic to pick the cheapest carrier per size band.
Why a shipping cost log matters for margins
If you sell physical goods, postage quietly eats margin like a roommate raiding the fridge at 2 a.m. A dedicated shipping cost log gives financial visibility so you can find that fridge-raider. One ledger-style sheet that records what you actually pay to move each order turns guesswork into numbers you can act on.
Common ways postage erodes margin
- Dimensional weight surprises, where a big box of light stuff gets billed like a brick.
- Surcharges and insurance that accumulate but never make it into order profitability math.
- Picking the carrier or service out of habit rather than cost, especially when package size changes the cheapest option.
- Packaging inefficiencies that raise billable weight across many orders.
What to track, specifically
- Cost-per-order, the true shipping expense including label fees and surcharges.
- Cost-per-package-size, so you know which size bands are bleeding margin.
- Exceptions, i.e., refunds, returned shipments, and manual adjustments. Those reveal recurring friction.
Track these and you stop guessing. With data you can price, pack, and pick better.
Building the shipping cost log inside the Aspire budgeting spreadsheet
Add these columns to your Aspire sheet in the order below. Treat the log as the single source of truth for shipping impact on margin.
Columns to add
- Date (date)
- Order ID (text)
- Carrier (dropdown: Carrier_A, Carrier_B, Carrier_C, etc.)
- Service (dropdown: Ground, Expedited, Priority, etc.)
- Package size (dropdown: S, M, L, XL, Custom)
- Actual weight (lbs or kg, number)
- Dimensional weight (formula cell)
- Billable weight (formula cell)
- Base rate reference (lookup to your carrier-rate table cell reference, see note)
- Surcharges (number, currency)
- Insurance/label fees (number, currency)
- Total postage (formula cell)
- Allocated shipping cost (per-package allocation if multi-package orders) (formula)
- Product price (revenue for order)
- Cost of goods sold (COGS)
- Gross margin impact (formula cell)
- Notes / exception code (text)
Suggested formulas and data plumbing
- Dimensional weight, in a cell: =IF(LEN(LENGTH)=0,"",(Length_in_inchesWidth_in_inchesHeight_in_inches)/DIM_DIVISOR)
- Replace DIM_DIVISOR with the carrier-specific published divisor (common values are 166 or 139 depending on carrier and region). Store that divisor in a small lookup table and reference it by carrier for accuracy.
- Billable weight: =MAX(Actual_weight_cell, Dimensional_weight_cell)
- Base rate reference: use a lookup such as =VLOOKUP( CONCATENATE(Carrier, "_", Package_size), Rates_Table, Rate_Column, FALSE )
- Total postage: =Base_rate_reference_cell * Billable_weight_cell + Surcharges_cell + Insurance_label_fees_cell
- Allocated shipping cost for multi-package order: =IF(Num_packages>1, Total_postage_cell * (This_package_weight / SUM(All_package_weights)), Total_postage_cell)
- Gross margin impact: =Product_price_cell - COGS_cell - Allocated_shipping_cost_cell
Dropdowns and validation
- Carrier, Service, Package size should be dropdowns driven by small tables on a secondary sheet. Keep them normalized so VLOOKUP or INDEX/MATCH calls stay predictable.
- Package dimensions: if you allow Custom size, make length, width, height required and validated as positive numbers.
Recommended conditional formatting
- Highlight Total postage when it exceeds a threshold percentage of product price, e.g., >15% (adjust to your margin targets).
- Color-code Package size rows with distinct background tints, so you can visually scan which size band is costing you.
- Flag Gross margin impact in red when negative, yellow when below your target margin, green when healthy.
Pivot summaries and slices to build
- Pivot by Package size to show average Total postage, count of orders, and average gross margin impact.
- Pivot by Carrier and Package size to surface the cheapest carrier per size band.
- Pivot by SKU or SKU group to see which products are most sensitive to shipping cost.
Keep the log small and fast. One well-maintained sheet that feeds a few pivot tables beats ten disconnected CSVs.
Worked example, comparing carrier rates by package size
This worked example uses symbolic rate variables rather than invented dollar values. The goal is to show decision logic and how formulas choose the cheapest carrier by size.
Dimensional weight formula (spreadsheet style)
- Dimensional weight = (Length * Width * Height) / DIM_DIVISOR
- Billable weight = MAX(Actual weight, Dimensional weight)
Carrier rate variables table
| Carrier | S rate variable | M rate variable | L rate variable |
|---|---|---|---|
| Carrier_A | Carrier_A_rate_S | Carrier_A_rate_M | Carrier_A_rate_L |
| Carrier_B | Carrier_B_rate_S | Carrier_B_rate_M | Carrier_B_rate_L |
| Carrier_C | Carrier_C_rate_S | Carrier_C_rate_M | Carrier_C_rate_L |
Rate selection logic
- For each shipment row, compute BillableWeight.
- Determine per-carrier postage estimate by multiplying each carrier's rate variable for that package size by BillableWeight, then add the per-carrier surcharge variables if you track those separately, for example Carrier_A_surcharge.
Example formulaic steps (pseudospreadsheet)
- Estimated_post_A = Carrier_A_rate_[PackageSize] * BillableWeight + Carrier_A_surcharge
- Estimated_post_B = Carrier_B_rate_[PackageSize] * BillableWeight + Carrier_B_surcharge
- Estimated_post_C = Carrier_C_rate_[PackageSize] * BillableWeight + Carrier_C_surcharge
- Chosen_carrier = INDEX({Carrier_A,Carrier_B,Carrier_C}, MATCH(MIN(Estimated_post_A, Estimated_post_B, Estimated_post_C), {Estimated_post_A,Estimated_post_B,Estimated_post_C}, 0))
- Final_postage = MIN(Estimated_post_A, Estimated_post_B, Estimated_post_C)
Walkthrough (no numeric invention)
- You calculate billable weight for a box that measures into the M band, actual weight 2.0 and dimensional weight 3.5. Billable weight becomes 3.5.
- The sheet looks up Carrier_A_rate_M, Carrier_B_rate_M, Carrier_C_rate_M and applies the same billable weight across them.
- Add any per-carrier surcharges and label fees.
- The MIN logic returns the lowest total postage estimate and writes the corresponding carrier into Chosen carrier.
This process makes it straightforward to pick the lowest-cost carrier for the defined rate variables without manually testing carriers on each carrier website.
How to use the log to stop losing margin, pricing, packing, and fulfillment tactics
Once the numbers flow, use them.
Pricing by package-size bands
- Group SKUs into package-size bands S, M, L and bake average shipping cost into the price per band.
- Avoid per-order custom charges unless the exception rate is substantial. Banding simplifies checkout math and expectations.
Enforce packing rules to reduce dimensional weight
- Set internal packing guidelines, for example always use the smallest volume that fits SKU plus protective material.
- Use fill materials that compress, and test final dimensions on the log before standardizing a pack method.
Choose carrier-service combos by SKU groups
- Use the pivot that shows Carrier vs Package size to assign a default carrier per band. Automate that into your fulfillment pick list.
Batch vs single shipment routing
- For small, frequent orders that fall in S band, a consolidated daily pickup with a carrier that gives low per-package rates can be cheaper than ad hoc labels.
- For large or bulky items, compare freight or pallet rates versus parcel carriers; the log will show when parcel rates spike relative to COGS.
When to add a postage pass-through or flat-rate handling fee
- If a package-size band has a predictable, higher-than-target average postage, consider a visible flat-rate handling fee for that band, or adjust product price accordingly.
- Use the log to justify the fee; show average postage by band and how the fee restores margin.
When a one-time template fits better than ongoing logging
A recurring log is great, but sometimes a one-time audit is the right move.
Criteria for choosing a one-time template approach
- Low volume operations where orders are infrequent, and the marginal benefit of ongoing logging does not justify the maintenance time.
- Very stable SKUs and packaging, where rates rarely change for the types of shipments you send.
- Fixed flat-rate shipping arrangements or free-shipping models where postage variability is limited.
How to convert a one-time audit into a recurring log
- Run the one-time template to capture baseline rates and exceptions.
- If variance in actual vs estimated postage exceeds your tolerance over the next month, flip the audit template into a daily or weekly log by adding Date, Order ID, and automatic imports from your label printer or shipping API.
- Keep the pivot summaries and alerts you used in the audit, so they start firing automatically when the log fills.
FAQ - quick answers to common follow-ups
Q: Should I log surcharges, insurance, and label fees? - Yes; include them in the total postage column so per-order margin reflects all shipping costs.
Q: How often should I refresh carrier rates in the spreadsheet? - Update whenever carriers publish rate changes or when you see consistent variance in actual vs logged costs.
Q: How do I handle dimensional weight versus actual weight? - Store both weight measures in separate columns and use a formula that selects the billable weight (max of the two) before applying the carrier rate.
Q: Can I use shipping software API rates instead of listing carrier table rates? - Yes; capture API-derived rates into the same rate-reference columns or add an import routine so the log remains the single source of truth.
Template for this guide
Handmade Shop Bookkeeping Bundle
Per-order profit after fees, inventory, expenses, a shipping log and a quarterly tax set-aside for handmade and online sellers. Browse every tab before you buy. One-time price, no subscription, free updates to the current-year edition.