The problem
An importer's margin is not in the purchase price. A container arriving from overseas carries ocean freight, insurance, customs duty at a rate that varies by HS code, port charges, terminal handling, customs broker fees, inland haulage and demurrage if it sat too long. Those costs can move the true cost of the goods materially, and they never arrive at the same time as the goods — the supplier invoice comes first, the freight forwarder's invoice weeks later, the broker's after that, and duty is settled on its own cycle.
So the item receipt posts at purchase price, the accessorial invoices get coded to a freight or duty expense account, and inventory sits on the balance sheet understated while the P&L takes a period expense that has nothing to do with when those goods actually sell. Gross margin by item is wrong. Pricing decisions are made on a cost that excludes a meaningful chunk of what it cost to get the item onto the shelf.
NetSuite has a landed cost mechanism, but it is thin in exactly the places importers need depth: allocation bases are limited, costs that arrive after the receipt is closed are awkward, duty that varies per item rather than per shipment does not fit the shipment-level model well, and there is no natural home for a shipment as a first-class object that accumulates costs over weeks.
What ECOSIRE builds
ECOSIRE builds a landed cost allocation layer as an SDF project deployed into your account, designed around how import costs actually arrive: late, partial, and from several parties.
Shipment as a record
A custom Shipment record represents the physical consignment — container or air waybill — and links to the Purchase Orders and Item Receipts it contains. This is the object that accumulates cost. It carries vessel or flight reference, ETD and ETA, Incoterm, origin and destination ports, and a status that reflects whether all expected costs have landed.
Cost capture
A Landed Cost Charge custom record holds each accessorial: charge type, vendor, currency, amount, the shipment it belongs to, and its allocation basis. Charges can be entered as estimates at receipt time and replaced by actuals when the invoice arrives, with the variance posted rather than silently overwritten. Charges link to the Vendor Bill they came from, so a broker's invoice covering three shipments splits across them with full traceability from GL to charge to receipt line.
Allocation engine
A Map/Reduce script spreads each charge across the receipt lines in the shipment using the basis you configure per charge type: by extended value, by quantity, by weight, by volume or cubic measure, by chargeable weight where air freight bills on the greater of actual and volumetric, or by a fixed per-line rate. Duty allocates differently — it is calculated per line from the item's HS code and duty rate, held on a Custom Segment or item custom field, applied against the customs value basis you specify, rather than being spread evenly across a shipment where a zero-rated item would otherwise absorb duty it never incurred.
Allocation runs as a Map/Reduce because a single container can hold thousands of receipt lines across multiple receipts, and the arithmetic has to be exact: the engine handles rounding so allocated amounts sum precisely to the charge total, with the residual assigned deterministically rather than lost.
Posting into inventory
Allocated amounts post against the Item Receipt through NetSuite's landed cost mechanism where the receipt is still open, and through Inventory Adjustment or Inventory Cost Revaluation where costs arrive after the fact. The engine respects the item's costing method — average, FIFO, LIFO or standard — and where goods have already been sold before the cost arrived, it posts the residual to cost of goods sold rather than adjusting inventory that no longer exists. Standard-cost items get purchase price variance handling against the standard rather than a silent cost change.
Multi-currency and OneWorld
Freight in one currency, duty in another and the goods in a third is the normal case, not the exception. Charges convert using the Currency Exchange Rate record at the rate date you specify per charge type — invoice date, receipt date or a customs-declared rate. Under OneWorld, shipments and charges carry subsidiary and allocate only within it.
Estimation and accrual
A Scheduled script produces an accrual for expected-but-not-received charges based on your estimate rates, so month-end inventory is not understated just because the forwarder invoices slowly. When the actual arrives, the accrual reverses and the variance is visible rather than buried.
Reporting
Saved searches give landed cost by item, by shipment, by charge type and by supplier, plus a true-margin view comparing sales price against fully landed cost rather than purchase price. An exception search lists shipments with receipts closed and charges still outstanding, which is the report that stops costs from being quietly forgotten.
Who this is for
This is for importers and distributors where accessorial costs are a material share of delivered cost — consumer goods, industrial supply, food and beverage, apparel, automotive parts — and where duty rates vary across the catalogue rather than being uniform. It matters most when you price off cost, when you report gross margin by item or category, and when the auditor cares whether inventory is stated at full cost.
If you buy domestically on delivered terms with freight included in the unit price, you do not need this and native handling is adequate.
How delivery works
1. Scoping call. We go through your actual cost stack: which charge types you incur, who invoices them and on what cycle, what allocation basis each should use, how your duty rates are held and whether HS codes exist on items today, your costing method, whether you are on OneWorld, and how late costs typically arrive relative to receipt.
2. Fixed quote. You get a written scope naming the charge types, allocation bases, duty calculation approach, accrual behaviour and reports in scope. Price is fixed against that scope.
3. Build. ECOSIRE writes the SDF project — Shipment and Landed Cost Charge custom records, HS code and duty rate fields or Custom Segment, Map/Reduce allocation, User Event scripts on Item Receipt and Vendor Bill, Scheduled accrual script, saved searches and Suitelet entry screens. Typical lead time is two to four weeks.
4. Install in sandbox. Deployed to sandbox first and run against your real historical shipments. We reconcile allocated cost back to charge totals to the cent, compare resulting item costs against what you believe them to be, and work through the discrepancies — which usually surface real costs you were not capturing. You sign off in sandbox.
5. Production deployment. The same SDF project deploys to production, with a defined start point so you are not retrospectively revaluing closed periods unless you choose to.
6. Support window. Ninety days covering defects, allocation basis adjustments, and new charge types that appear once people start looking properly at their cost stack. The project is an unmanaged bundle you own.
Built to order, not downloaded. The allocation rules are yours, the duty logic follows your tariff treatment, and the posting behaviour has to match your costing method — a generic version of this would give you confidently wrong numbers.