Suite Utils
Back to Blog
NetSuite TipsAug 11, 2026 • 6 min read

How to Manage Refurbished Inventory in NetSuite

Returned equipment is not sellable until it is repaired. Here is how to track refurbished stock in NetSuite without breaking inventory costing.

Sarah Jenkins, CPASarah Jenkins, CPAPrincipal Finance Automation Specialist
How to Manage Refurbished Inventory in NetSuite
On this page

When a customer returns a piece of equipment, like an analyzer or a high-end server, it rarely returns to the warehouse in "ready-to-sell" condition. It often requires a data pull, physical repair, or refurbishment. This creates a complex accounting and inventory challenge: how do you track the item's status, capture the cost of third-party repairs, and maintain accurate inventory counts without creating a mess in your General Ledger?

The core of the problem lies in how NetSuite handles custody changes and cost layers. If you simply move a "New" item back into stock, your inventory value is incorrect because it hasn't been refurbished. If you create a new item record for "Refurbished" but don't have a clean process to transition the inventory, you end up with "ghost" stock or mismatched quantities.

The Strategy: Separate Item Records vs. Cost Tracking

The first rule of thumb for refurbishing programs is clear: Refurbished items must have their own unique Item Record.

You cannot simply change the description of a "New" item to "Refurbished." These are different products with different market values and expected lifians. You should maintain two distinct records:

  1. Item A (New): The original SKU.
  2. Item B (Refurbished): A separate SKU with its own part number and description.

By maintaining two records, you ensure that when a customer buys a refurbished unit, the sales order reflects the correct price and inventory quantity. However, the challenge remains: how do you move a physical unit from "Item A" status to "Item B" status while accounting for the vendor's repair costs?

Modeling the Workflow: Outsourced Manufacturing vs. Transfer Orders

There are two common ways to handle this, and choosing the right one depends on whether you want to capture the cost of the repair in the inventory value or just move the item location.

Option 1: The Transfer Order (TO) Approach

This is often the "heavier" path because it involves multiple transactions. You move the item to a virtual location (e.g., "Vendor Warehouse") and then back into your own warehouse.

  • Pros: Easy to track where the item is physically located.
  • Cons: It does not naturally "convert" one item record into another. You are still holding the original SKU's cost profile.

This is the preferred method for high-accuracy refurbishing. It allows you to "consume" the old item and "produce" the new refurbished item in one flow.

To do this correctly, you create an Assembly Item for the Refurbished Product. The Bill of Materials (BOM) for this Assembly Item includes:

  1. The Refurbished Item itself (as a component).
  2. A "Service/Labor" item or the cost of the repair.

By using Outsourced Manufacturing, you can record the vendor's work and the physical receipt of the refurbished item in a single transaction. This captures the cost of the repair directly into the inventory value of the refurbished unit.

Step-by-Step Configuration for Refurbished Inventory

To implement a clean swap program using the Outsourced Manufacturing method, follow these steps:

1. Create the Item Records

Navigate to Lists > Inventory > Items.

  • Create a record for the "New" item.
  • Create a second record for the "Refurbished" item. Ensure it has its own unique Item Name and Item Number.
  • Set the Inventory Item Type to Assembly_Item for the refurbished version.

2. Configure the Bill of Materials (BOM)

On the Refurbished Item record:

  • Go to the Other Costing & Assembly tab.
  • In the Components subtab, list the components required to "build" the refurbished state.
  • Note: Ensure you are following the Item Record Management Guide to ensure your BOM structure is compliant with current NetSuite standards, as older nested BOM styles are being deprecated.

3. The Transactional Flow

When a customer returns an item for swap:

  1. Receive the Return: Create an Item Receipt (or Purchase Order, depending on your flow) to bring the item back into a "QA" or "Inbound" location.
  2. Outsourced Manufacturing: Create a Purchase Order with the vendor who performs the refurbishing.
  3. Create the Transaction: Use the Outsourced Manufacturing transaction type. This allows you to record the receipt of the refurbished item while simultaneously "consuming" the old part and recording the vendor's service cost.

Handling Data Pulls vs. Physical Refurbishment

A common point of confusion is whether a "Data Pull" (extracting data from the machine) counts as refurbishing.

If you are simply paying a vendor to extract data, the item's physical state hasn't changed. In this case, you do not need to change the item record or use a complex BOM. You are simply paying for a service.

However, if the vendor is physically repairing the hardware, the item's value has changed. This requires a change in the inventory record. You should only use the Outsourced Manufacturing route for actions that result in a "Refurbished" status.

Technical Implementation: Tracking Refurbishment via SuiteScript

If you need to automate the creation of these transactions or track which items have undergone a "Swap" status, you can use SuiteScript. For example, when an Item Receipt is received from a customer for a swap, you might want to flag that specific serial number as "Pending Refurbish."

Here is a snippet showing how you might check if an item is eligible for the swap program before creating a record:

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/record', 'N/log'], (record, log) => {
    /**
     * Logic to check if a received item is part of a swap program.
     * This example checks a custom field on the Item Receipt.
     */
    const beforeSubmit = (scriptContext) => {
        const newRec = scriptContext.newRecord;
        
        // Check if the custom field for 'Is_Swap_Program' is checked
        const isSwap = newRec.getValue({ fieldId: 'custbody_is_swap_program' });

        if (isSwap === true) {
            log.audit({ 
                title: 'Swap Program Detected', 
                details: 'Item is flagged for swap. Ensure correct item_type is used.' 
            });
        }

        // Example of getting a value from the line item sublist
        // Note: Use 'item' for the standard item sublist ID.
        const lineItem = newRec.obj.getSubListValue({ 
            sublistId: 'item', 
            fieldName: 'quantity' 
        });
    };

    return { beforeSubmit };
});

| Action | Recommended Method | Reason | | :--- | :--- | | | Item Identification | Separate Item Records | Ensures accurate SKU tracking and distinct pricing. | | Cost Capture | Outsourced Manufacturing | Accurately builds the cost of repair into the inventory value. | | Location Tracking | Inventory Transfer | Best for moving items between warehouses without changing ownership. | | Data Extraction | Service Expense / PO | Does not change the physical item's value; no need for complex BOMs. |

Keeping "New" and "Refurbished" items in distinct records makes SKU tracking reliable. The Outsourced Manufacturing transaction automates consumption of old parts and production of refurbished units while capturing third-party repair costs directly in inventory value, so your balance sheet reflects the true cost of goods sold and your inventory counts stay accurate.

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