The problem
A WooCommerce store that sells more than a handful of orders a day quietly turns two people into full-time typists. Orders arrive in WordPress, someone opens NetSuite and re-keys the customer, the items, the shipping method and the tax; someone else exports a CSV of stock levels every morning and hopes nothing sold in between. Refunds get issued in WooCommerce and never reach the general ledger. A product gets renamed in WordPress and the SKU stops matching the NetSuite item. By month-end nobody trusts either system, and the finance team reconciles the storefront by hand.
WooCommerce makes this worse than hosted platforms in one specific way: it is self-hosted. Your store lives on your own WordPress installation, with your own plugin stack, your own tax plugin, your own shipping plugin and very often your own custom fields on the order object. A generic connector that assumes a vanilla install breaks the first time it meets a subscription plugin or a bundled-product plugin. That is precisely why ECOSIRE builds this per customer rather than shipping one binary for everyone.
What ECOSIRE builds
This is a NetSuite customization delivered as an SDF project / unmanaged bundle that you own outright. The moving parts:
### Order ingestion A Map/Reduce script polls the WooCommerce REST API (/wp-json/wc/v3/orders) on a schedule you choose, or a RESTlet receives a push from a WooCommerce webhook the moment an order reaches a chosen status. Each Woo order becomes a NetSuite Sales Order with the correct entity, subsidiary, location, department and class. Order lines map to NetSuite Inventory Items, Non-Inventory Items, Kit/Package items or Assembly Items by SKU, with a mapping custom record for the ones that do not match cleanly. Shipping cost lands on the shipping cost field, discounts on a discount item, and gift-wrap or handling fees on Other Charge items of your choosing.
### Customer identity Guest checkouts and registered accounts are handled separately. A Customer record is matched on email first, then on a stored WooCommerce customer id held in a custom field, so returning buyers do not spawn duplicates. B2B stores can route matched customers to an existing parent customer, and default terms, price level and credit limit are honoured rather than overwritten.
### Item and price publishing A scheduled script writes NetSuite item data outward — name, description, weight, dimensions, base price and the price level you nominate — into WooCommerce products and variations. Products created only in NetSuite can be published to Woo automatically or held for review, depending on how you want to control the catalogue.
### Inventory sync Available quantity is calculated from the NetSuite Item Location Configuration and inventory saved searches, respecting the locations you actually sell from, then pushed to Woo stock levels. You choose the arithmetic: on hand, available, available minus a safety buffer, or a committed-aware figure. A User Event script on Item Receipt and Item Fulfillment can trigger an immediate push for fast-moving SKUs instead of waiting for the next scheduled run.
### Fulfillment and tracking When an Item Fulfillment is created in NetSuite, a User Event script pushes the status and tracking numbers back to the Woo order and can trigger the storefront's shipping-notification email. Partial shipments are supported through repeated fulfillment events against the same Woo order.
### Money back WooCommerce refunds are turned into NetSuite Credit Memos or Cash Refunds, applied against the originating sales order or invoice, so the GL reflects what the customer actually received. Payments captured through your Woo gateway are recorded against the appropriate Undeposited Funds or bank account with the gateway fee posted where your controller wants it.
### Custom segments and OneWorld If you run OneWorld, each storefront maps to a subsidiary, and currency, tax nexus and item availability follow that subsidiary. Any custom segment you use for reporting — sales channel, brand, campaign — can be stamped on every imported transaction so channel P&L works without a spreadsheet.
### Errors you can see Every sync writes to a custom record with the payload, the direction, the outcome and the NetSuite record it touched. Failures are queued for retry rather than dropped, and a saved search plus optional email alert tells you when something needs a human. Silent failure is the single most common way integrations lose money; this one is built to be noisy.
Who this is for
Distributors and brands running WooCommerce as their primary or secondary storefront on NetSuite; companies migrating off a spreadsheet-and-CSV process; businesses running several Woo stores that need each mapped to a different subsidiary, location or channel segment; and teams whose WordPress install has enough plugins that an off-the-shelf connector has already failed them once.
How delivery works
1. Scoping call. We walk your Woo store and your NetSuite account together — order statuses, item types, tax setup, subsidiaries, locations, the plugins that add fields to orders, and which direction each data type should flow. 2. Fixed quote. You get a written scope and a fixed price before any code is written. Nothing starts until you approve it. 3. Build. ECOSIRE writes the SuiteScript 2.1 scripts, custom records, saved searches and script deployments against your requirements. Typical build time is two to four weeks depending on scope. 4. Install in your sandbox. The bundle goes into your NetSuite sandbox or a Release Preview account first, wired to a WooCommerce staging store. You test real orders end to end before anything touches live data. 5. Production. After your sign-off, the same tested artifact is installed in production with the mappings and script parameters you approved. 6. Support window. A defined post-go-live support period covers defects and configuration adjustments, with the source in your account so your own developers can read it.
You own the code. There is no per-order metering, no runtime licence key phoning home, and no vendor that can switch the integration off.