Suite Utils
Back to Blog
NetSuite TipsAug 17, 2026 • 7 min read

Multiple Ship Methods per Sales Order: NetSuite Options

A NetSuite sales order takes one ship method. Here are the three ways to split a single order across UPS and FedEx and what each one costs you.

Arav SharmaArav SharmaCore SuiteScript & Integration Engineer
Multiple Ship Methods per Sales Order: NetSuite Options
On this page

Standard NetSuite sales orders allow one ship method per transaction. When you have small items that ship cheapest via UPS and large boxes that rate better with FedEx One Rate on the same order, you hit a wall. The native solution doesn't let you assign different carriers line by line.

The good news: NetSuite's Multiple Shipping Routes feature exists specifically for this problem. It enables you to ship items from the same sales order to multiple places by multiple carriers. Here's how to make it work for your scenario, plus what it will and won't do for rate shopping.

What Multiple Shipping Routes Actually Does

Go to Setup > Company > Enable Features > Shipping and check Multiple Shipping Routes. This feature lets you create multiple item fulfillments from a single sales order, each with its own ship method and carrier. NetSuite defines a shipping route as a unique combination of shipping address, shipping carrier, shipping method, and origin address.

Here's the key detail that matches your use case: you don't need different shipping addresses. The feature supports multiple ship methods to the same address. Each item fulfillment you create from the sales order can carry a different ship method, even when the destination is identical.

The workflow looks like this:

  1. Open the sales order.
  2. Click Create Item Fulfillment.
  3. Select the lines you want to ship via UPS.
  4. Set the ship method to UPS Ground.
  5. Create a second item fulfillment from the same sales order.
  6. Select the remaining lines.
  7. Set the ship method to FedEx One Rate.

NetSuite allows multiple open item fulfillments against one sales order. Each fulfillment maintains the same shipping address from the sales order, so you're not introducing address complexity. Refer to the Order Fulfillment and Shipping Guide for the full feature breakdown.

The Cartonization Problem

Your thread mentioned cartonization, and this is where native NetSuite falls short. NetSuite does not determine which items should go into which box based on dimensions and weight. It has no logic that says "these three small items fit together in one carton, but this large item needs its own box."

NetSuite does let you define packing items to specify carton dimensions. You can create packing item records with preset sizes, or select the Custom option during packing to enter dimensions and weight manually. But the system won't suggest the grouping for you. That decision stays with your team.

So before you can assign ship methods intelligently, you need to decide how to group your items. That decision drives which item fulfillment each line belongs to.

If you're doing this manually, the process is straightforward but labor-intensive. Create the fulfillments, move lines between them, and assign ship methods per fulfillment. For a small operation, this works fine.

For automated cartonization, you're looking at a third-party solution. ShipHawk and Pacejet both support cartonization, but they approach it differently. ShipHawk syncs sales order details and handles order splitting in its portal before writing back to NetSuite. Pacejet works from existing fulfillments, so you'd still need to split the order in NetSuite first.

Rate Shopping and No-Touch Carrier Assignment

Here's the honest limitation: native NetSuite does not rate shop. It won't evaluate UPS versus FedEx rates for each line and automatically assign the cheapest carrier. The Multiple Shipping Routes feature gives you the structure to assign different ship methods, but the assignment itself is manual unless you build automation.

Ship Central has per-package rate shopping capabilities. It can evaluate carrier rates and suggest the most cost-effective option. But "no-touch" carrier assignment requires configuration, and it works best when your order splitting logic already exists. Check the Ship Central configuration guide for rule setup details.

For true automated assignment, you need middleware that can:

  1. Receive the sales order data.
  2. Calculate cartonization based on item dimensions.
  3. Retrieve rates from multiple carriers.
  4. Assign the best carrier per carton.
  5. Write the fulfillment details back to NetSuite.

ShipStation and similar tools can break order lines by carrier before fulfillment, but they typically operate outside NetSuite's native flow. You're introducing an iPaaS layer that becomes the source of truth for shipping decisions.

A Worked Example: Manual Split with Multiple Fulfillments

Let's walk through a concrete example. A customer orders three small items and one large item.

Sales Order Details:

  • Line 1: Widget A, Qty 2, Weight 0.5 lbs each
  • Line 2: Widget B, Qty 1, Weight 0.3 lbs
  • Line 3: Large Frame, Qty 1, Weight 40 lbs

Your rate comparison shows:

  • UPS Ground: $8.50 for lines 1-2 combined, $32.00 for line 3.
  • FedEx One Rate: $7.20 flat for lines 1-2 in a small box, $45.00 for line 3.

Step 1: Create the first item fulfillment from the sales order. Select lines 1 and 2. Set ship method to FedEx One Rate.

Step 2: Create a second item fulfillment from the same sales order. Select line 3. Set ship method to UPS Ground.

Step 3: On each fulfillment, go to the Packages subtab. Add package details including weight and dimensions. Generate labels per fulfillment.

Step 4: Fulfill both transactions. NetSuite marks the sales order as fully fulfilled when all lines are covered.

Here's the validation step: open the sales order and confirm the Fulfill field shows both fulfillments linked. The Ship Via field on the sales order remains the default, but each item fulfillment carries its own ship method. The item fulfillment documentation confirms this behavior.

What This Means for Your Workflow

The manual approach works but doesn't scale. If you're shipping dozens of orders daily with mixed carrier assignments, you'll spend significant time splitting fulfillments and assigning ship methods.

The practical middle ground is a custom record for package dimensions plus a SuiteScript that automates the split. You define rules like "items under 1 lb go together" or "items over 30 lbs ship separately." The script reads the sales order lines, applies your rules, and creates the item fulfillments with the correct ship methods.

Here's a simplified example of the logic structure:

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/record', 'N/search'], function(record, search) {
    function afterSubmit(context) {
        if (context.type !== context.UserEventType.CREATE) return;
        if (context.newRecord.type !== 'salesorder') return;
        
        // Check if order qualifies for split
        var itemCount = context.newRecord.getLineCount({sublistId: 'item'});
        if (itemCount <= 1) return;
        
        // Your cartonization rules go here
        // Group lines by weight thresholds
        // Create item fulfillments per group
        // Assign ship methods based on your rate table
    }
    return {
        afterSubmit: afterSubmit
    };
});

This is where the integration work gets real. The script needs access to your carrier rate tables, either stored in NetSuite or retrieved via API calls. The error response from a carrier API tells you exactly what went wrong when a rate lookup fails, so build retry logic into the script.

Choosing Between Native and Third-Party

ApproachSetup EffortAutomation LevelBest For
Manual multiple fulfillmentsLowNoneLow volume, occasional splits
Multiple Shipping Routes + saved search rulesMediumPartialMid volume with consistent patterns
Ship Central with rate shoppingHighHighVolume operations needing carrier comparison
Full middleware (ShipHawk, Pacejet)HighCompleteComplex cartonization + multi-carrier

Test this with a single record first. Create a test sales order in your Sandbox, enable Multiple Shipping Routes, and walk through the split manually. Verify that both fulfillments show the correct ship methods and that the shipping address stays consistent across both.

The feature is fault-tolerant by design once you understand the flow. The sales order remains the source of truth for the order details. Each item fulfillment pulls from that same source, so there's no risk of address mismatch or line duplication.

If you need to automate the carrier decision without a full TMS, start with the custom record approach for package dimensions. Define your packing rules, build the script to split fulfillments, and let the ship method assignment follow your rate logic. It's more setup than the manual path, but it removes the daily decision-making from your team.

About the author

Put these ideas to work.

Suite Utils builds small NetSuite tools that fix the specific thing breaking your day. Each one runs as a native SuiteScript SuiteApp inside your account. No sales call, no onboarding.

Browse the Tools

Enjoyed this one?

Get NetSuite tips like this in your inbox. No spam. Practical guides only.

Keep reading