ml-connector
Oracle NetSuiteShipStation

Oracle NetSuite and ShipStation integration

Oracle NetSuite is your system of record for finance and customer data. ShipStation is your order fulfillment and shipping platform. Connecting the two keeps your fulfillment status and inventory in sync without re-entry. When an order ships in ShipStation, ml-connector updates the sales order in Oracle NetSuite with tracking information and fulfillment status. When inventory or customer data changes in Oracle NetSuite, ShipStation's warehouse records reflect the update. The integration runs on your schedule with automatic retries and a complete audit trail.

How Oracle NetSuite works

Oracle NetSuite is a cloud-based ERP and CRM platform that exposes sales orders, invoices, customers, inventory items, employees, and accounting records through REST and SOAP APIs. The modern approach uses SuiteTalk REST Web Services with OAuth 2.0 Client Credentials authentication (M2M with certificate), though legacy Token-Based Authentication is still supported. Oracle NetSuite publishes Event Subscriptions that push webhooks on record create, edit, and delete for supported types like Sales Orders and Inventory Items, though webhook retry and signature handling require IP allowlist configuration. For bulk reads and historical data, SuiteQL queries work via REST. OAuth tokens valid 60 minutes with no refresh token available, so M2M credential refresh is required periodically.

How ShipStation works

ShipStation is a cloud shipping and order management platform that aggregates orders from multiple e-commerce sales channels. It exposes orders, customers, products, shipments, and warehouses through REST APIs; the V2 API is current while V1 remains for legacy order management. Authentication uses API Key (V2 header-based, V1 HTTP Basic), with keys generated in account settings and never shown again. ShipStation publishes outbound webhooks for order notifications and shipment events, though webhook payloads contain only resource pointers, so ml-connector must follow up with authenticated GET calls to fetch the actual data. V1 and V2 serve different purposes; full integration typically uses both. Polling is required to catch order edits since ORDER_NOTIFY fires only on new orders. Rate limits are 200 requests per minute on V2 (40 on V1) with X-Rate-Limit headers provided. All V1 datetime fields are in PST/PDT, not UTC.

What moves between them

Orders flow primarily from ShipStation into Oracle NetSuite. When an order ships in ShipStation, ml-connector receives a webhook, fetches the full shipment record via authenticated GET, and posts the tracking number and fulfillment status to the matching Oracle NetSuite sales order. Inventory and customer reference data flows from Oracle NetSuite into ShipStation to keep warehouse stock levels and customer profiles aligned. The sync runs on a schedule configured per customer, typically once per day for inventory updates and in real-time for shipment webhooks. Order IDs are the natural join key between systems.

How ml-connector handles it

ml-connector stores both credential sets encrypted: ShipStation API keys decrypted on each outbound call, and Oracle NetSuite OAuth credentials cached after the initial M2M handshake. When ShipStation webhooks arrive, they contain only resource pointers, so ml-connector immediately fetches the full shipment and order records using the ShipStation API Key. It then maps tracking numbers and fulfillment status to the corresponding Oracle NetSuite sales order using order ID lookup. For inventory updates, ml-connector polls Oracle NetSuite inventory items on schedule via SuiteQL and syncs the quantities to ShipStation warehouses. OAuth token refresh is handled on 401 response and cached for the 60-minute window. ShipStation's V2 rate limit of 200 requests per minute is tracked via response headers; ml-connector queues and retries if limit is approached. All webhook payloads are deduplicated using order ID to prevent duplicate shipment posts. Every record carries a full audit trail and can be replayed if a downstream write fails.

A real-world example

A mid-sized e-commerce merchant runs Oracle NetSuite for finance, CRM, and master product and customer data. Orders arrive from multiple channels: direct website, marketplace, and B2B reseller channels. Before the integration, the fulfillment team used ShipStation to pick, pack, and ship orders, then manually logged back into Oracle NetSuite to update each order with tracking numbers and mark it fulfilled. Inventory counts in Oracle NetSuite drifted from ShipStation because stock transfers in the warehouse were never reflected in the ERP, causing forecast and reorder-point calculations to be inaccurate. With Oracle NetSuite and ShipStation connected, each shipment automatically updates the sales order with tracking data, inventory movements in Oracle NetSuite flow into ShipStation within hours, and the warehouse team has a single source of truth for available stock. Month-end close is faster because fulfillment status and inventory reconciliation are already complete.

What you can do

  • Sync shipment status and tracking numbers from ShipStation back into Oracle NetSuite sales orders in real-time via webhooks.
  • Keep inventory quantities aligned between Oracle NetSuite and ShipStation warehouses on a schedule you control.
  • Deduplicate orders and shipments across both systems using order ID as the natural key.
  • Handle ShipStation's API Key authentication and Oracle NetSuite's OAuth 2.0 M2M flow with automatic token refresh.
  • Decrypt and securely present stored credentials, track rate limits, and provide full audit trail on every record posted or updated.

Questions

In which direction do orders and inventory move between Oracle NetSuite and ShipStation?
Shipment status and tracking flow from ShipStation into Oracle NetSuite sales orders in real-time. Inventory quantities flow from Oracle NetSuite into ShipStation warehouses on a schedule you define, typically daily. Customer master data also flows from Oracle NetSuite to ShipStation so that reseller or account hierarchy information stays synchronized.
Does the integration handle ShipStation's webhook pointer payloads?
Yes. ShipStation webhooks contain only resource_type and resource_url pointers, not the full shipment or order data. ml-connector immediately fetches the full record using an authenticated GET call to the ShipStation API, then maps the tracking number and status to the Oracle NetSuite sales order. This ensures ml-connector always works with the latest, complete data.
How does ml-connector manage OAuth token refresh and ShipStation API rate limits?
Oracle NetSuite OAuth tokens expire after 60 minutes with no refresh token, so ml-connector handles the full M2M credential cycle on demand. ShipStation's V2 API returns rate limit status in response headers (X-Rate-Limit-Limit, X-Rate-Limit-Remaining, X-Rate-Limit-Reset); ml-connector tracks these and queues calls if the limit is approaching. All retries carry exponential backoff and a full audit trail.

Related integrations

Connect Oracle NetSuite and ShipStation

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started