The finding in one sentence: the two coasts are fulfilling each other's backyards. Boston ships BOM100 to San Francisco customers (3,500 units/yr across a 2,692-mile gap) while San Francisco ships PCB100L to Newark, NJ (3,410 units/yr) — despite the Queens warehouse sitting 15 miles from that customer.
The economics are a margin story, not an expense story. Shipping charges billed to customers ($43,971/yr) come from a largely flat-rate table (~$31 per shipment appears on wildly different routes), while carrier cost certainly scales with distance and zones. Since shipping revenue is distance-insensitive and carrier cost is distance-sensitive, every needless cross-country mile comes straight out of margin — invisibly, because actual carrier cost is not captured in NetSuite. The fix is the same regardless of the exact magnitude: position stock near demand.
Top three moves:
Solid red arcs = wasteful current flows (ship-from → destination). Dashed green = recommended source. Blue squares = warehouses; circles sized by annual units.
Recommendations are expressed as baskets, not single SKUs (see §4 for why). Investment = ~3 months territory demand at item average cost.
| Priority | Basket (anchor + companions) | Stock at | Annual demand | Transit gain | Capital | Notes |
|---|---|---|---|---|---|---|
| PHASE 1 | PR100-A (+ I360-Impeller, NS-SCCT, NS-SA-EIA-Inv already at Denver) | Denver | 3,194 u / 355 shpts | −1 day | $0 — transfer ~800 u from SF (7,665 avail) | Companion coverage already good. One gap: I360-Assembly (2234) is at zero network-wide — purchasing issue, not positioning. |
| PHASE 1 | SAF200 kit: SAF200 + CTL200 + FRM200 + BLD200 + FWH200 + FSP200 | Denver | 292 u anchor + kit | −2 days | $0 — all 6 SKUs transferable from SF depth (BLD200: 4,932; FWH200: 9,385; FSP200: 1,620) | Ships as a kit in 28/28 co-orders — move all six or don't move any. |
| PHASE 1 | SBP100S + ASY107S (co-ship 35×) | San Francisco | 480 u | −4 days | Likely $0 — audit Boston excess first | COM002S/COM003S companions already at SF (39/120). |
| PHASE 2 | PCB100L basket: PCB100L + SMK001 + KAP001 + COP001 (co-ship 69/69 orders) | Queens | 3,410 u anchor | −4 days | ~$110K (4 SKUs; anchor $99K) | GATE Resolve April demand-stop (§8) first. Companions currently SF-only (SMK001: 13,680; KAP001: 682; COP001: 9,000) — likely transferable, cutting capital substantially. |
| PHASE 2 | BOM100 + COM001/2/3/4 (co-ship 89×) | San Francisco | 3,944 u anchor | −4 days | $34.7K anchor; companions mostly at SF but COM002 (96) and COM004 (85) are thin — top up | Highest billed-freight flow ($108/shipment avg from Boston). |
| PHASE 2 | SSP100CTP/CTSM + SSP100P/SM assemblies | New Jersey | 1,200 u | −2 days | $13.6K | Packaging companions (cartons 7,480 / labels 49,920) already at NJ. But demand is project-spiky (§8) — consider transfer-on-demand instead of stocking. |
| PHASE 3 | CTM200 + OPR001/OPR002 (62×) | Queens | 410 u | −4 days | $38.4K + companions | OPR001/002 at SF (157) and Boston (40), zero at Queens. Service play only. |
| PHASE 3 | Gauge family (items 105–122) | NJ / Queens | ~470 u / 8 SKUs | −3 days | ~$82K | High unit cost, thin volume — weakest case, defer indefinitely. |
For each recommended SKU, 12 months of sales orders were queried for items appearing on the same order (≥3 co-occurrences). The result shapes the recommendations fundamentally: these items are baskets, not loners — and stocking an anchor without its companions converts clean single-origin orders into permanent 2-origin splits.
| Anchor | Ships with | Orders together | Companion stock at target? | Verdict |
|---|---|---|---|---|
| PCB100L | SMK001, KAP001, COP001 | 69 / 69 — always | None at Queens/NJ — all three SF-only | 4-SKU MOVE Anchor alone would split every order |
| SAF200 | CTL200, FRM200, BLD200, FWH200, FSP200 | 28 / 28 — always | None at Denver; all six deep at SF | 6-SKU KIT Transfer as a set — still $0 capital |
| BOM100 | COM001, COM002, COM003, COM004 | 89 — always | Mostly yes at SF; COM002 (96) & COM004 (85) thin | Anchor purchase + top up two companions |
| CTM200 | OPR001, OPR002 | 62 | Zero at Queens (SF 157, Boston 40) | 3-SKU move if pursued |
| SBP100S | ASY107S (35×); COM002S/003S (25×) | 35 | COM-S items at SF; ASY107S zero avail at SF | Include ASY107S in the Boston→SF transfer audit |
| PR100-A | I360-Assembly, I360-Impeller, NS-SCCT, NS-SA-EIA-Inv | 21 | Impeller (42), NS-SCCT (20), EIA (15) already at Denver | Best-prepared target. FLAG I360-Assembly: zero at every warehouse |
| SSP100CTP/CTSM | SSP100P/SM assemblies + cartons/labels | 10–13 | Packaging already at NJ (49,920 labels, 7,480 cartons); assemblies not | Move assemblies together; packaging solved |
NetSuite holds 2,408 shipping-charge (ShipItem) lines on the 12 months of fulfillments, totaling $43,971. Regressing per-shipment charge against shipping distance across the flagged routes yields a slope of $0.0044 per mile — statistically flat. Peabody MA, Tempe AZ, Wilmette IL, Buffalo WY — radically different distances, identical $31.00 charge. A handful of outliers exist (SF-metro-from-Boston averages $108.06; San Mateo one-offs at $1,304), but the dominant pattern is a flat-rate table.
custbody_actual_freight_cost) populated from carrier invoices or a shipping-platform API (ShipStation/EasyPost/carrier webhooks). Even 60 days of data would calibrate this entire analysis.Ground transit approximated at ~500 mi/day. Improvements by cohort:
| Demand cohort | Shipments/yr | Current route | Est. days | Proposed route | Est. days | Δ |
|---|---|---|---|---|---|---|
| Newark, NJ (PCB100L basket) | 14 | SF → NJ (2,555 mi) | 5 | Queens → NJ (15 mi) | 1 | −4 |
| SF metro (BOM100, SBP100S) | ~42 | Boston → SF (2,692 mi) | 5 | SF local (<10 mi) | 1 | −4 |
| NYC metro (CTM200, SPL001, gauges) | ~40 | Boston/SF → NYC | 2–5 | Queens local | 1 | −1 to −4 |
| Winchester / Nicholasville, KY | ~25 | SF → KY (2,067 mi) | 4–5 | NJ → KY (567 mi) | 2 | −2.5 |
| Park City, UT (PR100-A) | 355 | SF → UT (615 mi) | 2–3 | Denver → UT (355 mi) | 1–2 | −1 |
| St Louis, MO (SAF200 kit + multi) | ~95 | SF → MO (1,735 mi) | 4 | Denver → MO (785 mi) | 2 | −2 |
| FL Gulf Coast (SSP100, BOM100) | ~36 | SF/Boston → FL | 5 | NJ → FL (966 mi) | 2–3 | −2 |
Roughly 600 shipments/yr improve by 1–4 business days. Split-order reduction (§4) compounds this: fewer, fuller boxes arriving sooner.
| Phase | Scope (basket-complete) | Capital | Benefit case | Verdict |
|---|---|---|---|---|
| PHASE 1 | Transfers only: PR100-A (~800 u) + SAF200 6-SKU kit → Denver; Boston excess audit for SBP100S/ASY107S/BOM100 → SF | ~$0 + one-time transfer freight | −1 to −4 days on ~490 shipments/yr; split reduction for St Louis; margin leak reduction (unquantified but real) | Do now. No inventory risk — stock is already owned, just mispositioned. |
| PHASE 2 | PCB100L 4-SKU basket → Queens (gated on §8 lifecycle check); BOM100 + companion top-up → SF; SSP100 assemblies → NJ (or transfer-on-demand) | ~$60–150K depending on how much is transferable vs. purchased | −4 days on the two biggest Eastern flows; removes the largest unit-mile block (~20M) | Pilot after Phase 1 + carrier-cost instrumentation (§5) proves the margin case with real numbers. |
| PHASE 3 | CTM200 3-SKU basket → Queens; gauge family → NJ/Queens | ~$120K+ | Service-level only; thin volume | Defer. Revisit only with carrier-cost data and/or customer SLA pressure. |
Monthly shipment units for key items, Jul 2025 – Jun 2026. Pattern matters: flat demand justifies permanent stocking; spiky demand suggests project-driven buying that shouldn't drive stocking decisions.
Every active US customer address (400 total) was validated: ZIP/state consistency against USPS prefix ranges, format checks, and placeholder detection, supplemented by US Census geocoder spot checks. 93 addresses flagged — a 23% defect rate. No records were modified; this is a findings inventory for review.
| Severity | Count | Issue | Examples | Impact / suggested handling |
|---|---|---|---|---|
| HIGH | 15 | ZIP leading zero lost ("1824", "2816", "8330") | Cust 229 Chelmsford MA "1824"→01824 · Cust 391 Tewksbury MA "1876"→01876 · Cust 528 Mays Landing NJ "8330"→08330 | Breaks carrier label validation & rate lookup. Classic spreadsheet-import artifact concentrated in MA/RI/NJ/CT. Mechanical to fix once approved. |
| HIGH | 19 | ZIP/state contradiction | "Seattle, WA 40010" (KY ZIP) · "Dublin, OH 90010" (LA ZIP) · "Pendleton, AK 97801" (that's Pendleton Oregon) · "Las Vegas, NE 45644" (NV intended? OH ZIP) | Cannot tell which field is wrong — needs human review per record, ideally against the customer's real location. |
| MED | 23 | State spelled out ("California", "Wisconsin", "Washington DC") | Customers 3476–3500 — one contiguous import batch | Breaks state-filtered saved searches, reports, and tax logic that expect 2-letter codes. One bad import; batch-normalizable. |
| MED | 2 | Missing ZIP entirely | Cust 516, 518 (San Francisco) | Undeliverable as-is. |
| LOW | 3 | Placeholder / test data · PO Box | "123 Main St, Anywhere CA" · "123 Germany, Austria CA" · PO Box 351321 | Inactivate test records; confirm PO Box is billing-only. |
| INFO | 29 | Intersection-style addresses ("West 96th and Central Park West") | All NYC-metro | Some carriers accept these; USPS standardization does not. Fine for now; blocks any future address-automation project. |
| INFO | 2 | Cosmetic (lowercase city; addr1 contains full city/state/zip) | "san mateo" · Cust 510 Lakewood NJ | Normalize whenever touched. |
ItemShip, Jul 2025–Jun 2026) joined to transactionshippingaddress + transactionline for item, quantity, and actual ship-from location; inventoryitemlocations for availability; item records for cost/weight; sales-order line co-occurrence for basket affinity; ShipItem lines for billed freight; full customeraddressbook for the audit.Recommended sequence: (1) Phase-1 transfers — zero capital, immediate service gains; (2) start capturing carrier cost; (3) resolve the PCB100L lifecycle question; (4) revisit Phase 2 in a quarter with real cost data and a proven Phase-1 result.