13 min read
How to Migrate from QuickBooks to NetSuite Without Losing Data
A step-by-step 2026 guide from the implementation team at Logiframe By the Logiframe team · Award-winning Oracle NetSuite implementation partners ·...
Logiframe is an Equal Opportunity Employer.
All qualified applicants will receive consideration for employment without regard to race, color, age, religion, sex, sexual orientation, gender identity / expression, national origin, protected veteran status, or any other characteristic protected under federal, state or local law, where applicable, and those with criminal histories will be considered in a manner consistent with applicable state and local laws.
Knowledge
8 min read
Wienanto Tanuwidjaja
:
Aug 27, 2026, 7:01:19 PM
Table of Contents:
1. The Distribution Challenge: Inventory in Motion
2. The Inventory Complexity in Wholesale & Distribution
3. Challenge 2: Lot Numbering & Expiration Tracking
4. Challenge 3: Serial Number Tracking
5. Challenge 4: Landed Cost Across Shipments
6. Challenge 5: Inventory Transfers Between Locations
7. Challenge 6: Inventory Holds & Allocation
8. Challenge 7: Freight Optimization & Costing
9. Vendor Management & Purchase Order Automation
10. Receiving & Three-Way Matching
11. Landed Cost Allocation in Depth
12. ABC Analysis & Inventory Optimization
13. The Close Process for Distribution
14. How to Evaluate If NetSuite Is Right for Your Distribution
15. Cost Comparison: Xero Manual vs. NetSuite
16. How Logiframe Approaches Distribution
17. Frequently Asked Questions
A wholesale or distribution business is fundamentally different from manufacturing or retail. You're not building products; you're buying them. But you're also managing inventory across multiple locations simultaneously.
Example: You're a pharmaceutical distributor. You have:
A central warehouse in Chicago
Regional hubs in Dallas, Atlanta, and Los Angeles
Customer direct-ship locations in 12 other cities
Inventory in transit between locations
At any given time, $50M in inventory is spread across these locations. Some of it is in transit. Some is damaged and being returned. Some is on allocation hold for a specific customer.
Xero and QuickBooks assume inventory is in one place. They can track it, but multi-location inventory management is manual and error-prone.
NetSuite was designed for this exact scenario.
Challenge 1: Multi-Location Stock Levels
A SKU might exist in multiple locations simultaneously:
1,000 units at Chicago warehouse
250 units at Dallas hub
500 units at Atlanta hub
75 units in transit to LA
50 units damaged (waiting for return authorization)
When a customer orders:
Which location fulfills it?
How do you ensure stock isn't over-sold?
How do you optimize fulfillment (ship from closest location)?
In Xero: You can track inventory by location, but it requires manual coordination. You'd have to check each location's balance, decide where to pull from, then manually move it. If two orders come in simultaneously, you might over-sell.
In NetSuite: Stock levels by location are real-time. When an order comes in, the system can:
Automatically reserve stock from the optimal location
Prevent over-selling (can't allocate more than exists)
Create a transfer order if the closest location is out of stock
Track the transfer and update locations when it arrives
Many distribution businesses deal with products that have lot numbers and expiration dates: food, pharmaceuticals, chemicals.
Example: You receive 5,000 units of a product. It arrives with lot number "LOT-2024-001" and expiration date March 31, 2025.
Two months later, you receive another 5,000 units with lot number "LOT-2024-002" and expiration date May 31, 2025.
When a customer orders 3,000 units, which lot should you ship? If you're not careful about FIFO (first in, first out), you might ship the newer lot first and let the older one expire.
In Xero: Lot tracking is manual. You track lot numbers in a separate spreadsheet or have users remember which lot is which. This works until you have a recall or expiration issue—then you're searching through old transactions trying to trace which customers got which lot.
In NetSuite: Lot numbers are tracked at the inventory level. When you receive inventory, you assign a lot number and expiration date. When you ship, NetSuite can automatically pull from the oldest lot first (FIFO). If there's a recall, you can query "all units with LOT-2024-001" and see which customers received them and when.
This is mission-critical for businesses dealing with regulated products.
Some distribution businesses track individual units via serial numbers.
Example: You're distributing high-end equipment. Each unit has a serial number. When you ship to a customer, you need to track which serial number went to which customer. If there's a warranty claim, you need to quickly verify what the customer has.
In Xero: Serial tracking is limited. You can attach serial numbers to line items, but querying "which customer has serial XYZ?" requires manual lookup.
In NetSuite: Serial numbers are tied to inventory. You can query by serial number and see:
When it was received
From which supplier
Which warehouse it's at
Which customer it's been shipped to
When the warranty expires
For businesses with high-value, high-accountability products, this is invaluable.
Challenge 4: Landed Cost Across Shipments
Distribution businesses receive frequent shipments. Each shipment incurs freight, tariffs, insurance, and handling fees.
Example: You receive a shipment from a supplier in Taiwan:
FOB price: $100K
Ocean freight: $3K
Insurance: $500
Port handling: $1K
Customs brokerage: $500
Import tariff: $8K
Total landed cost: $113K
If you only account for the $100K invoice, your COGS is understated by $13K.
In Xero: Landed cost allocation is manual. You'd receive the freight invoice, the tariff bill, the insurance charge—all separate invoices. Then you'd manually allocate them back to the original PO. This is tedious and prone to errors.
In NetSuite: When you receive a freight invoice, you can tag it to the original PO. NetSuite allocates the freight cost proportionally across all line items in that PO, increasing the unit cost of inventory. By the time the inventory is sold, it includes all landed costs.
You're managing multiple warehouses. You need to move inventory from one location to another for various reasons:
Rebalancing (Chicago has overstock, Dallas is under-stocked)
Customer fulfillment (customer is closer to Dallas, but Dallas is out of stock; transfer from Chicago)
Consolidation (close a small warehouse, move everything to the main hub)
In Xero: Transfers are manual. You'd create a journal entry reducing one location's inventory and increasing another's. You have to manually track that the transfer is in transit, then update when it arrives. If a transfer gets lost, you've already updated inventory and won't notice the shortage.
In NetSuite: Transfer orders are formal objects. You create a transfer order specifying source location, destination location, and items to transfer. Until the transfer is received, inventory is in a "in-transit" status. You don't physically count as sold/available until it arrives. When it arrives, you receive the transfer and inventory automatically updates in the destination location.
This creates an accurate audit trail and prevents phantom inventory (counting something twice).
Sometimes inventory is committed to a customer but not yet shipped. Or it's damaged and on hold pending inspection.
Example:
Customer X has a pending order for 500 units, slated to ship next week
200 units have minor damage and are on hold pending a decision (repair, scrap, or restock)
50 units are in quality quarantine pending testing
Without proper holds/allocation, someone might allocate those units to another customer, creating a shortage.
In Xero: You'd have to track holds manually. Maybe in a spreadsheet, maybe in a memo field. If someone isn't careful, units get over-allocated.
In NetSuite: You can mark inventory as "allocated" or "on-hold." Allocated inventory is reserved for a specific order and isn't available for other orders. On-hold inventory is removed from available balance until the hold is released. This prevents over-selling.
Distribution is low-margin, high-volume. Freight costs matter. You need to know:
What was the cost per unit shipped?
Which customer is most expensive to serve (geographically)?
Should you consider drop-shipping from a different warehouse?
Example: Customer in California orders 1,000 units. It costs $2 per unit to ship from Chicago. It would cost $0.50 per unit to ship from LA (if you had inventory there). That's $1.50 × 1,000 = $1,500 in unnecessary freight cost.
In Xero: Freight is typically expensed at the time of shipment. You'd have to manually analyze shipments to see which routes are most expensive.
In NetSuite: You can track fulfillment location per order. NetSuite can tell you:
40% of West Coast orders shipped from Chicago (expensive)
60% of West Coast orders shipped from LA (optimal)
You can use this data to make inventory positioning decisions.
Distribution businesses receive orders constantly. Most of this is replenishment ordering (buying from suppliers to restock).
In Xero: When your Chicago inventory falls below a threshold, someone creates a PO manually.
In NetSuite: You can set up automatic reorder points. When Chicago inventory drops below 500 units, NetSuite can automatically create a PO to the primary supplier for a standard order quantity (say, 2,000 units). The PO is automatically approved if it's within policy.
This is especially powerful if you have multiple suppliers. NetSuite can check which supplier has the shortest lead time, best price, or best on-time delivery record, and route the order accordingly.
When a shipment arrives, you need to verify:
What you ordered (the PO)
What you received (the receipt note)
What the supplier invoiced us (the invoice)
Three-way match: Do the receipt and invoice match the PO? If a supplier shipped 100 units but the invoice says 110, that's a red flag.
In Xero: Three-way matching is manual. Your receiving department logs what arrived. Your accounting department gets the invoice. Someone has to compare them.
In NetSuite: When you receive a shipment, you scan it against the PO. NetSuite automatically matches:
Quantity received vs. quantity ordered
Unit price on invoice vs. unit price on PO
Any discrepancies are flagged for review
This catches errors (and supplier fraud) automatically.
Here's how NetSuite handles this technically:
Step 1: Create PO
Item A: 1,000 units @ $10/unit = $10,000
Item B: 500 units @ $12/unit = $6,000
PO Total: $16,000
Step 2: Receive shipment
Actual receipt: 1,000 units of A, 500 units of B
NetSuite receives the PO
Step 3: Receive freight invoice
Ocean freight: $3,000
Customs: $2,000
Insurance: $500
Total: $5,500
NetSuite allocates this proportionally:
Item A share: ($10,000 / $16,000) × $5,500 = $3,437.50
Item B share: ($6,000 / $16,000) × $5,500 = $2,062.50
Step 4: New unit costs
Item A: ($10,000 + $3,437.50) / 1,000 = $13.44/unit
Item B: ($6,000 + $2,062.50) / 500 = $16.13/unit
These landed costs flow through inventory and into COGS when items are sold.
Distribution businesses often use ABC analysis: classify inventory by value and turnover.
A items: High value, fast-moving (carries most of the inventory investment)
B items: Medium value, medium turnover
C items: Low value, slow-moving
Different control strategies for each class:
A items: Keep tight stock, frequent monitoring, avoid stockouts
B items: Standard monitoring
C items: Can keep higher safety stock, less frequent replenishment
In Xero: ABC classification is manual. You'd calculate it in Excel and update it occasionally.
In NetSuite: You can automate ABC classification based on dollar value and turnover rate. NetSuite can then apply different reorder strategies to each class (different safety stock levels, different review frequencies).
Step 1: Inventory Count & Reconciliation
Verify your system inventory matches physical reality:
Physical count (or cycle count)
Count by location
Reconcile count to system balance
Investigate variances
In NetSuite: You can run a cycle count (count a subset of high-value items weekly) rather than a full physical. This catches inventory errors continuously rather than once per year.
Step 2: Landed Cost Accrual
Identify freight invoices that arrived but haven't been invoiced yet. Accrue them.
In NetSuite: Outstanding freight invoices linked to POs are identified and accrued automatically.
Step 3: Inventory Reserves
Identify slow-moving or damaged inventory. Set aside a reserve for obsolescence.
Step 4: Variance Analysis
Compare system inventory to physical. Large variances need investigation (shrinkage, data entry errors, theft).
You definitely need NetSuite if:
✓ You have 5+ warehouse or fulfillment locations ✓ You manage 1,000+ SKUs ✓ You track lot numbers, serial numbers, or expiration dates ✓ You have significant freight and landed cost to allocate ✓ You need frequent inventory transfers between locations ✓ You do lots of replenishment ordering (reordering constantly from suppliers) ✓ You need customer-specific inventory allocation or holds
Xero might still work if:
✗ You have 1-2 locations and inventory management is simple ✗ You have < 500 SKUs ✗ You don't track lot/serial numbers ✗ Freight costs are minimal or can be approximated ✗ Inventory transfers are rare
Xero approach:
2-3 people managing multi-location inventory manually
Daily inventory coordination (ensuring no over-sells, managing transfers)
Weekly reconciliation of locations
Monthly close takes 15-20 hours to reconcile inventory counts and allocate landed cost
2-5% inventory shrinkage due to manual tracking errors
Cost: $60-100K/year in labor + $200-500K/year in shrinkage
NetSuite approach:
1-2 people monitoring system; most allocation is automated
Real-time inventory prevents over-sells
Automatic allocation of landed costs
Monthly close takes 5-8 hours (mostly review)
<1% inventory shrinkage due to automated tracking
Cost: NetSuite software + 1.5 people's time = $40-60K/year
Net benefit: $100-250K/year in reduced labor + shrinkage prevention
NetSuite typically pays for itself in 6-12 months for multi-location distribution businesses.
We implement NetSuite for distributors with a focus on:
Multi-location inventory synchronization
Automated reorder point management
Landed cost allocation (critical for margin accuracy)
Real-time allocation to prevent over-selling
Freight optimization analysis
Most distribution clients recoup implementation costs in year 1 through reduced shrinkage and better freight optimization.
How does NetSuite prevent inventory from being over-sold across multiple locations?
When an order is placed, NetSuite reserves inventory from a specific location (based on rules you define—closest location, best stock level, etc.). That inventory is marked as "allocated" and isn't available for other orders. This prevents double-booking.
Can NetSuite automate reordering?
Yes. You set reorder points by location and item. When inventory falls below the reorder point, NetSuite can automatically create a PO to a primary supplier. The PO is created, and you can set it to auto-approve based on policy.
How does landed cost allocation work across multiple suppliers and shipments?
When you receive a freight invoice, you tag it to one or more POs. NetSuite allocates the freight cost proportionally across all line items, increasing the unit cost of inventory. This follows inventory through to COGS.
What's the difference between a transfer order and a regular journal entry?
A transfer order is a formal tracking mechanism. It shows inventory in transit, prevents counting it in both locations simultaneously, and requires a receipt at the destination. A journal entry is just moving numbers. Transfer orders are safer and create an audit trail.
13 min read
A step-by-step 2026 guide from the implementation team at Logiframe By the Logiframe team · Award-winning Oracle NetSuite implementation partners ·...
26 min read
24 min read
NetSuite OneWorld is a multi-subsidiary module that lets you manage multiple legal entities—each with its own chart of accounts, bank accounts, and...