Back to Selected Work
Manufacturing/Cosmetics IngredientsRescue & extensionUSD 20M+/yr through ERPSince 2022, ongoing

NetSuite Real-Time Event Layer

NetSuite already ran the business, but every downstream system saw data hours late through batch syncs and polling scripts that failed silently

1

The Problem

Live NetSuite, But Everything Downstream Ran Hours Behind

This ingredient manufacturer already ran sales, inventory, and invoicing through NetSuite, with over USD 20 million a year flowing through it. The ERP itself worked. The problem sat at its edges. NetSuite was never built to tell the outside world when something changed, so every connected system (finance, HR, compliance platforms, and internal notifications) had to go looking for updates instead of being told about them. That gap was filled with scheduled scripts and manual exports, which is a normal thing to do until the business outgrows it.

Original Workflow

  • 1. A sales order, inventory adjustment, or invoice approval changes inside NetSuite
  • 2. Many of these record types have no native event support, so nothing downstream is notified
  • 3. A scheduled script or manual export pulls a bulk batch roughly every 20 minutes, around 10MB per pull
  • 4. Finance, HR, and notification systems pick up the batch on their own schedule, often hours later
  • 5. When a sync script fails, it fails silently; nobody finds out until someone downstream questions a number
  • 6. Every new downstream system needs its own point-to-point integration built from scratch inside NetSuite
2

Our Approach

Make NetSuite Emit Events Instead of Waiting to Be Asked

Rather than build another one-off integration, we gave NetSuite a general-purpose way to announce what had happened. A SuiteScript event capture layer watches for record changes, including the ones NetSuite does not natively expose events for, and a subscription API lets any new downstream service register itself without a NetSuite developer opening the account to wire up a bespoke script each time.

Caveats & Considerations

  • Our NetSuite toolkit adds capabilities and improves integration stability and development speed
  • The 20-minute bulk pull was kept running as a fallback rather than removed; if a webhook fails to deliver, the batch is still there as a safety net
  • Not every NetSuite record type has native event support, so capturing workflow transitions and custom record changes meant working around platform limits without touching the records themselves
  • Downstream consumers include finance, HR, compliance platforms (e-invoicing, customs), and chat notifications (Teams, Telegram, Slack), all on the same layer
3

The Solution

A Subscription API on Top of a SuiteScript Event Capture Layer

The toolkit has three moving parts. An event capture layer built in SuiteScript 2.x watches for record changes. A subscription registry keeps track of which external endpoint wants which event type. A webhook dispatcher sends the event out asynchronously, with retries if delivery fails, and does not care what the receiving service is built on.

Event capture layer in SuiteScript 2.x (User Event, Scheduled, Map/Reduce) detecting create, update, and delete on records without native event support
Event subscription endpoint for real-time data integrations, so new consumers register without touching NetSuite configuration
Optimised webhook with backoff strategy
4

Results

From Hours-Old Batches to Seconds

Data freshness to downstream systems
Hours (batch sync)Seconds (real-time webhook)
New integration setup time
Days to weeksHours (subscribe via API)
Downstream systems connected
1-25+, and growing
Bulk polling pull
Every 20 minutes, ~10MB/pullKept only as a fallback
Event payload size
No event existed~10KB, relevant fields only
Daily ERP operations via API
Manual or batch-driven4,500 a day, automated

Related Reading

Have a Similar Challenge?

Let's discuss how we can build something similar for your business.

Book The Blueprint