Published on August 4, 2025.
In my last post — The Hidden Challenges of Bringing AI to NetSuite — I talked about the roadblocks that developers hit when trying to build AI-powered tools for NetSuite.
Things like the "Token Wall" — the limits of AI APIs when dealing with large, unstructured ERP data. Or the "Sync Trap" — the pain that comes with syncing NetSuite data to external systems just to make it usable by AI.
Over the past several weeks, I've been building tools that directly address these problems. This post highlights two in particular: SuiteAnalyzer, my AI assistant for NetSuite reports, and Suite.js, a JavaScript runtime and scripting engine built specifically for NetSuite developers.
In that earlier post, I introduced the idea of the Token Wall — the hard limit on how much data you can feed an AI model before it breaks, either due to token count, timeouts, or performance degradation.
To address this, I've built something called ContextEngine into SuiteAnalyzer. It uses a technique I call Just-in-Time Context Retrieval — a strategy that dynamically determines what the AI needs based on the user's question, and pulls only the required data from NetSuite in real time.
ContextEngine isn't tied to a specific type of data. It works with:
• Standard NetSuite reports
• Saved search results
• SuiteQL query results
• Analytics datasets
• Custom scripted reports
The result is a more scalable, responsive approach to AI integration — one that avoids preloading everything or forcing users to prepare data in advance. It also helps the app work around token limits without exposing the complexity to the user.
The bot sees only what it needs to see — and nothing more.
In that same post, I also talked about the Sync Trap — the urge to mirror all of your NetSuite data into an external warehouse or vector store just to make it usable by AI. It's an expensive, slow, and high-maintenance strategy. But when APIs are unreliable or slow, it often feels like the only option.
While I haven't found a silver bullet for this problem, I'm working to make sync-related development more viable — especially for developers who want fast, reliable access to NetSuite data.
That's where Suite.js comes in.
I've mentioned Suite.js before — I've been using it in client work for several years, and nearly released it more than once. The biggest reason I didn't? Until recently, it was powered by Duktape, a lightweight JavaScript engine with very limited support for modern JavaScript (no ES6+ features).
Now that's changed.
Suite.js now uses JavaScriptCore on macOS and V8 on Windows and Linux. That means full support for ES2023+, and far better compatibility with modern JavaScript and tooling.
But the bigger news is this: Suite.js now includes two powerful new components — QueryEngine and ScriptEngine.
QueryEngine lets you run SuiteQL queries locally — without needing to rely on RESTlets, SuiteTalk, or SuiteAnalytics Connect (ODBC/JDBC). With QueryEngine, you can pull up to 500,000 rows at a time. And it's insanely fast, too. On average, I'm seeing throughput of 6,000 rows per second.
ScriptEngine enables you to run ad-hoc SuiteScript 2.x code locally. It supports a wide range of NetSuite modules, including N/query, N/search, N/record, N/email, N/currency, N/runtime, N/dataset, N/workbook, and many others. With ScriptEngine, instead of needing to deploy scripts inside NetSuite or build out full APIs, you can run real NetSuite code against real NetSuite data — from outside the system. This opens up entirely new workflows for automation, data extraction, and more.
And for those times when you still need to use SuiteAnalytics Connect? Suite.js will support that, too — with both ODBC and JDBC connectivity options.
I'm also exploring the possibility of making SuiteAnalyzer's ContextEngine available in Suite.js. This would give developers the ability to leverage ContextEngine’s "AI API intelligence" — including its just-in-time data selection, token management, and dynamic prompt construction — directly in their own solutions. The goal is to give Suite.js not just access to NetSuite data, but the ability to smartly package that data for use with AI models, while staying within the limits of modern LLM APIs.
These tools don't make NetSuite AI effortless. But they do make it possible — and more importantly, practical.
With SuiteAnalyzer, I'm building an AI layer that's smart enough to get its own data, while respecting the limits of today's models.
With Suite.js, I'm giving developers new tools to work with NetSuite data on their own terms — without relying on brittle exports or heavyweight sync jobs.
If you're working on similar problems — or trying to avoid falling into the same traps — I'd love to hear from you. And if you're curious about SuiteAnalyzer or Suite.js, stay tuned. I'll have more to share soon.
As far as release dates go...
I'm hoping to start the next round SuiteAnalyzer this week. The updated ETA on the public release is now Tuesday, August 12th. To learn more, or to subscribe to the SuiteAnalyzer mailing list, visit: suiteanalyzer.com.
At that point, I'll shift my effort to Suite.js. I don't have any firm dates on it just yet, but my goal is to make it available sometime in September. To learn more, or to subscribe to the Suite.js mailing list, visit: suitejs.io.
Hello, I'm Tim Dietrich. I develop custom software for businesses that are running on NetSuite, including mobile apps, Web portals, Web APIs, and more.
I'm the developer of several popular NetSuite open source solutions, including the SuiteQL Query Tool, SuiteAPI, and more.
I founded SuiteStep, a NetSuite development studio, to provide custom software and AI solutions - and continue pushing the boundaries of what's possible on the NetSuite platform.
Copyright © 2025 Tim Dietrich.