← marketplace-ops-toolkit
marketplace-ops-toolkit · tool #6

Logistics Supply Forecaster

3PL DAILY
Translate a marketplace forecast into the supply you actually need: couriers, vehicles, sortation lines, pickers, packers, receivers, dock doors. Two personas (3PL last-mile and fulfillment warehouse), two granularities (daily horizon and intraday hourly+zone). Side-by-side operational and financial output, plus sensitivity at +/- 15% and +/- 30% forecast error.
Daily view: forecast packages per day across 14 calendar days. Hourly view: 12 two-hour buckets across one 24h day, by hub or by inbound/outbound flow.

Pick a scenario preset

Pre-loaded operational patterns. Click to load defaults, then customize any input. Presets locked to a specific persona+granularity will show as inactive in other modes.

Forecast input 3PL · DAILY

14-day daily package volume. Weekends auto-tagged. Enter zeros to skip a day.

Operating parameters 3PL

Productivity and capacity per resource. Defaults reflect typical LATAM marketplace 3PL benchmarks; calibrate to your operation.

Cost inputs 3PL · USD

Fully-loaded daily or hourly costs per resource plus per-package SLA penalty. USD only in v1.

Result

Anchor numbers for forecast and cost. Detailed breakdowns below.

Required supply
0
Load a scenario to forecast.
Total cost horizon
$0
Labor + fleet + facility + SLA penalty.
Operational breakdown
Resource peaks and capacity utilization.
Resource utilization over horizon
Stacked view across days.
Financial breakdown
Cost composition, annualized projection, penalty exposure.
Cost stack waterfall
Where every horizon dollar goes: labor, fleet, facility, SLA penalty.

Sensitivity

If the forecast is off by +/- 15% or +/- 30%, what does total cost do? The asymmetry on the upside reveals where capacity bottlenecks compound. The SLA hit probability stresses the plan at the +15% upside case, the most common bad outcome ops planners actually face. Each scenario re-runs the day-over-day cascade, so upside cases compound non-linearly.

SLA hit probability at +15% upside
0%
Probability that booked capacity covers actual demand within SLA.

How this forecaster works

"How much capacity do we need next week?" is the question logistics ops gets every Monday. The answer depends on the same five drivers across very different operations: forecast volume, productivity per resource, shrinkage (PTO + sickness), peak buffer (variance protection), and shift length. This tool runs the math for two distinct personas and lets you check how the answer changes under realistic forecast error.

V2 update (2026-05-15): rebuilt around operator feedback from a former Shopee BR logistics ops lead who runs hub occupation analysis as a daily workflow. Five upgrades: (1) day-over-day backlog cascade (today's overflow is tomorrow's effective inbound), (2) two-layer capacity model (processing throughput vs storage holdability), (3) storage occupation percent as a primary headline anchor with configurable alert threshold, (4) origin mix decomposition (Line haul / Seller / FBS) for Persona A, (5) operational levers card (boost capacity + negotiate origin defer) that activates when baseline peak crosses the alert.

Real-world impact

Illustrative scenarios drawn from operator practice. Numbers are realistic order-of-magnitude estimates, not measurements from any specific deployment.

Case 1: 3PL last-mile facing a 35% Q4 volume jump
SetupNetwork planner at a regional 3PL handling 12,000 daily parcels with 140 couriers and 18 vans across 3 hubs.
ProblemStandard linear model said add 50 couriers; gut said that was wrong because backlog from Day 1 would cascade into Day 3-4 vehicle saturation, but no one could quantify it cleanly. Wrong-sizing risk was roughly $180K either way (overhire or service collapse).
Tool surfacedV2 backlog cascade with 2-layer capacity showed couriers were not the bottleneck (occupation 78%); vans were (occupation 96% with origin mix shift from urban to peri-urban), recommending 8 extra vehicles and 22 couriers, not 50.
OutcomeQ4 ran at 94% on-time vs 89% prior year, courier overstaffing avoided, net cost vs the linear-model plan came out about $140K lower with better service.
Case 2: DTC fulfillment warehouse missing cutoff 3 days in 5
SetupOps manager at a DTC brand's contracted fulfillment site, 2 shifts, 60 pickers, 8 sorters, processing 8,000 orders per day with same-day cutoff at 2 PM.
ProblemSame-day promise was failing on roughly 60% of weekdays, refund and re-ship cost about $11K per missed-cutoff day, and the brand was threatening to switch 3PLs.
Tool surfacedForecaster's intraday view showed sorter capacity at 102% utilization 11 AM to 1 PM while pickers ran at 71%; the bottleneck was sortation, not pick. Adding 2 sorters on a split shift was modeled to fix it.
Outcome2 sorters added on a 10 AM start, cutoff miss rate dropped to 8% of days within 3 weeks, retained the brand account worth about $1.4M annually.

Day-over-day cascade

day[0].inboundEffective = forecast[0] day[0].backlog = max(0, inboundEffective - processingCapacity) day[0].occupation = backlog / storageCapacity for d in 1..horizon: day[d].inboundEffective = forecast[d] + day[d-1].backlog day[d].backlog = max(0, inboundEffective - processingCapacity) day[d].occupation = backlog / storageCapacity

Storage breach is a soft signal. Occupation can exceed 100% and is shown in red; the model does not cap it. Persona B uses the same cascade as a directional model, treating inbound + outbound as the total processable load.

Persona A · 3PL last-mile

processed_d = min(inboundEffective_d, processingCapacity) arrivals_d = processed_d * inductionRate / 100 stops_d = arrivals_d / pkgPerStop couriers_d = ceil(stops_d * shiftMin / routeStops / shiftMin / (1 - shrinkage) * (1 + peakBuffer)) vehicles_d = ceil(arrivals_d / vehicleCapacity * (1 + peakBuffer)) sort_hrs_d = processed_d / sortThroughputPerHour dock_util_d = arrivals_d / (sortLines * sortThroughput * shiftH)

Persona B · Fulfillment warehouse

effective_out = forecast_out * (1 + damageRate) productive_m = shiftHours * 60 - breaksMin pickers = ceil(effective_out / pickerRate * 60 / productive_m / (1 - shrinkage) * (1 + peakBuffer)) packers = ceil(effective_out / packerRate ... same form) receivers = ceil(forecast_in / receiverRate ... same form) dock_demand_h = (forecast_in + forecast_out) / dockThroughputPerHour dock_util = dock_demand_h / (dockDoors * shiftHours)

Sensitivity logic

For each of -30%, -15%, base, +15%, +30%, the forecast is scaled and the full pipeline re-runs. Cost typically grows roughly linearly on the downside but compresses on the upside (you cannot un-buy fixed shifts), and breaks asymmetrically once a resource saturates. The SLA hit probability formula is a heuristic: clamp(1 - max(0, demand - base_capacity) / demand, 0, 1). It treats capacity as locked to the base forecast (which is the realistic case for a Monday plan).

Where the numbers come from

What this tool is NOT