3PL Contribution Margin Tracker
Track contribution margin per client without a finance department. Type in monthly revenue and variable costs for each account, rank by margin %, see who to renegotiate and who to scale. Free, browser-only, CSV export.
3PL contribution margin tracker
Pick a reporting month
Use the arrows to step through prior months. The selected month is included in your CSV export filename and header so saved files stay organized over time.
Enter revenue and variable costs per client
Type directly into the table. Revenue covers what you bill — storage, handling, pick & pack, packaging, freight markup. Variable costs are usage-based: direct labor, packaging consumables, freight pass-through, account-specific surcharges. Contribution margin and ranking update live.
| Client | Revenue ($) | Variable costs ($) | CM $ | CM % | Status | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Storage Monthly storage fees billed. Typically per pallet/month or per cubic foot/month. | Handling Inbound/outbound handling fees. Receiving, putaway, cycle counts — anything not order-specific. | Pick & pack Per-order fulfillment fees. Base pick + additional lines + pack labor billed to the client. | Packaging Packaging materials billed back to the client. Cartons, void fill, branded inserts. | Freight markup Your markup on outbound shipping. e.g., 8–15% over the carrier's base rate. | Direct labor Warehouse hours your team spent on this client × loaded labor rate. If you can't measure directly, estimate from order share × total monthly labor. | Packaging cost Your cost for the packaging materials passed through — what you paid the supplier. | Freight pass-thru The carrier invoice for this client's shipments. The base rate plus any accessorials you absorbed. | Surcharges Account-specific costs. Pallet rental, temperature control, hazmat handling, special compliance — variable costs tied to this client. | |||||
| Portfolio | $0 | $0 | $0 | $0 | $0 | $0 | $0 | $0 | $0 | $0 | 0% | ||
Results
The chart plots monthly revenue against contribution margin % for every client with revenue entered. The list ranks the same clients by margin %. Color thresholds (≥ 30%, 25–30%, < 25%) are taken from Casey Winans's framework — see the callout above for the source article.
Margin vs. revenue
to see where they land.
Ranked by contribution margin %
Add a client with revenue to see them ranked here.
Once you've spotted the red clients, the question is why they're red — and most of the time it's billing leakage, not unprofitable pricing. A Profit Leak Audit reconciles your WMS, shipping, rate cards, and invoices and ships back a written report with the recoverable dollars per client. Free for early customers.
About this tool
The framework on this page comes from Casey Winans's post, How to start tracking contribution margin at a 3PL — without drowning in complexity. Read it first — Casey explains why per-client contribution margin matters, what to include in revenue and variable cost, how to read the results, and the cadence to run on. Once you've read it, the tool above is what you use to actually do the math each month.
The rest of this page is about the tool itself: what it computes, how to get your data into it, and how to read the outputs we render.
What the tool computes
Per client, the math is:
- Total revenue = sum of the five revenue columns (storage, handling, pick & pack, packaging, freight markup).
- Total variable costs = sum of the four cost columns (direct labor, packaging cost, freight pass-thru, surcharges).
- Contribution margin $ = revenue − costs.
- Contribution margin % = CM $ ÷ revenue, or "—" if revenue is zero.
Per portfolio, the footer row sums each column and computes a weighted-average margin (total CM ÷ total revenue, not the average of per-client percentages). The summary cards above the chart show the same totals plus a count of clients running below the 25% threshold.
Cells with no value, blank text, or negative numbers are treated as zero. Currency symbols and commas in pasted values are stripped automatically.
Importing from a CSV
Click Sample CSV to download the column template with example rows. The header row is required to include a client column; everything else is optional — missing columns just leave those cells blank.
Headers are case-insensitive and accept common aliases:
client,client_name,customer,name→ client namestorage,storage_revenue→ storage revenuepickpack,pick_pack,pick_and_pack,fulfillment→ pick & pack revenuefreight_markup,shipping_markup,freight_uplift→ freight markup revenuelabor,direct_labor,warehouse_labor→ direct labor costfreight_cost,carrier_cost,shipping_cost,freight_passthrough→ freight pass-thru costsurcharges,accessorials,accessorial_costs,other_costs→ surcharge cost
One header is intentionally not aliased: a bare packaging column will fail to import. The column is ambiguous — packaging shows up as both a billed line (revenue) and a consumable (cost) — so the importer requires packaging_revenue or packaging_cost explicitly. Splitting them is the only way to avoid silently bucketing a revenue line as a cost or vice versa.
On import, existing rows are replaced after a confirmation prompt. A trailing "Portfolio" totals row (the one our own CSV export adds) is filtered out automatically, so you can round-trip an exported file without manual cleanup.
Frequently asked questions
- What's the difference between this and the Margin Calculator?
- The Margin Calculator runs a single client through a full per-client P&L using a labor-minute model and a storage-cost-per-pallet model — it's a deep look at one account. This tracker is the wider, shallower view: type revenue and variable costs for every client in your book on one screen and rank them. The tracker is what you run monthly as an operating cadence; the calculator is what you reach for when one account looks off and you want to break down its economics in detail.
- Why contribution margin and not full P&L?
- The tool computes strict contribution margin — revenue minus variable costs only. Rent, overhead, and fixed labor aren't allocated. That's a deliberate scoping choice that fits a manual / CSV-driven monthly workflow. If you want fully-loaded per-client P&L with allocations, use the Client Profitability Analyzer. For why contribution margin is the right place to start tracking, Casey's article explains the rationale.
- What counts as a variable cost?
- The tool exposes four cost columns: direct labor, packaging cost, freight pass-thru, and surcharges. Anything that scales with the activity for the specific client belongs in one of those. Fixed costs (rent, supervisor salary, WMS license, sales) aren't represented because they don't change with per-client volume. Casey's article walks through what to include and what to leave out in more detail.
- How accurate does the labor allocation need to be?
- Directionally accurate is fine for a first pass. The most pragmatic estimate is total monthly warehouse labor × this client's share of activity (orders, units, or hours, whichever your WMS tracks). If you don't have that, eyeballing it from the floor lead's gut sense — 'Acme is about 15% of our pick-pack load' — is better than skipping the exercise. Refine over time once you see which clients are close to the margin thresholds and need a tighter number.
- What do the traffic-light colors mean?
- Three thresholds, mapped from Casey Winans's framework: green at ≥ 30%, yellow at 25–30%, red below 25%. The pill in each row, the dot in the chart, and the left-edge color bar in the ranked list all use the same scale. For the rationale behind the thresholds — and how they shift for different business models (cold chain, bulky-goods, etc.) — see Casey's article.
- What's the quadrant chart telling me?
- Monthly revenue runs along the x-axis (auto-scaled to fit your largest client). Contribution margin % runs along the y-axis between −10 and 60. A dashed vertical line marks the median revenue across your tracked clients; a thin horizontal line marks the 30% threshold. Dots are color-matched to row status. The chart describes the data; Casey's article covers how to interpret each quadrant and what to do about it.
- Does my data leave my browser?
- No. Everything runs in your browser. Your client names, revenue, and cost figures save to localStorage so the table is still there when you come back, but they never transit a server. Close the tab and the data stays on your device. CSV export is generated client-side.
- Can I import a CSV instead of typing every client?
- Yes. Click "Sample CSV" to download the template — it has the exact column shape with example data. Required header is `client`; everything else (storage, handling, pickpack, packaging_revenue, freight_markup, labor, packaging_cost, freight_cost, surcharges) is optional. Headers are case-insensitive and accept common aliases (e.g., `direct_labor`, `carrier_cost`, `accessorials`). Currency symbols and commas in numeric cells are stripped. Click "Import CSV" to load the file; existing rows will be replaced after a confirmation. The "packaging" column is required to be explicit — use `packaging_revenue` for billed packaging and `packaging_cost` for consumables, since the bare word is ambiguous.
- What do I do once I've ranked everyone?
- The tool's job ends at the ranking. What to do next is operator judgment — Casey's article walks through how to think about it. The one thing we'd add from our side: most red clients are profitable accounts with billing leakage, not bad pricing. Auditing the last 90 days of carrier accessorials and rate-card application typically recovers margin without renegotiating a single rate. That's what our free Profit Leak Audit does.