Last updated: August 4, 2026
Pick one system to be right about each thing, run every sync through one integration layer instead of point-to-point wiring, and put a human on the error queue. The rest is detail. Important detail, and I’ll get to it, but that sentence covers most of what goes wrong.
A controller at a home goods distributor called me on a Tuesday in March. Her close was off by about $340,000 and she couldn’t find it.
It wasn’t missing. It was sitting in Shopify.
Their order sync had been failing since the first week of February. Quietly. NetSuite threw a 429, the middleware logged it, retried twice, gave up, and moved to the next batch like nothing happened. Nobody read that log. Nobody had ever been assigned to read that log. Roughly nineteen hundred promotional orders sat on the ecommerce side for six weeks and never posted to the general ledger.
A day and a half to fix. Six weeks to find.
That’s the whole genre. Integrations almost never fail loudly, and the companies that get burned are not the ones with bad architecture. They’re the ones where nobody’s name is on the thing.
Fair warning about who’s talking. I run an ERP and business systems consulting group, so any sentence I write that ends in “you should probably have someone look at this” is technically me selling something. I’ll mark the parts you can do yourself, and most of this is that. You’re also reading this on a staffing firm’s site. KORE1 places the ERP and integration people who end up owning this work long after consultants like me leave the building, their IT staffing services team closes a typical search in about 17 days, and 92 percent of those hires are still there a year later. Hang onto that number. It shows up again near the bottom, in the part where I argue your integration problem is partly an org chart problem. This is also the integration half of the argument I made about getting more out of NetSuite after go-live.

One System Wins Each Argument
NetSuite integration best practices are the design rules that keep NetSuite and your other business systems in agreement. One system of record per data object, a single integration layer instead of point-to-point wiring, syncs that can safely run twice, a monitored error queue with a named owner, and REST with OAuth 2.0 rather than legacy SOAP.
Start with the boring one, because it’s the one that decides whether everything downstream is fixable.
For every object that moves between systems, exactly one system is allowed to be right. Customer master. Item master. Pricing. On-hand quantity. Open orders. Tax. Pick the winner, write it down, and make every other system a reader.
Most mid-market stacks have never done this. Shopify has a price, NetSuite has a price, the wholesale portal has a third price, and the sync direction was decided four years ago by whoever built that particular connection. When they disagree, and they will, there is no rule to appeal to. You get a meeting instead. I’ve sat in that meeting more times than I’d like and it always runs an hour and nobody leaves happy.
Here’s the version I use with clients. Ecommerce owns the cart and the customer’s browsing behavior. NetSuite owns the item, the price, and the money. The warehouse system owns bin-level location. The tax engine owns the rate. Your CRM owns the opportunity and NetSuite owns the invoice, and the handoff between those two is exactly one direction, which is the part Salesforce and HubSpot integrations get wrong constantly because sales teams want to edit orders in the CRM and finance teams want to not lose their minds.
Write the ownership table before you write a line of code. It takes an afternoon. It will save you a quarter.
SOAP Is on a Clock Now
If your integrations run on SuiteTalk SOAP, this section is the reason you’re reading a 2026 article instead of a 2021 one.
Oracle has published a removal schedule. Support for existing WSDL versions now comes with an end date, and it is not far away.
| Release | What changes for SOAP |
|---|---|
| 2025.2 | The last planned SOAP endpoint. Nothing after this one. |
| 2026.1 | New SOAP endpoints are no longer issued by default. |
| 2027.1 | Only the 2025.2 endpoint stays supported. Everything older is on borrowed time. |
| 2028.2 | SOAP is gone. Existing SOAP integrations stop working. |
Two years and change. That sounds like plenty until you remember that the SOAP integration in question was built by a partner firm that no longer exists, using a WSDL version from 2019, and the only documentation is a Confluence page written by someone whose email bounces.
Go find out what you’re running. Setup, Integration, Integration Management, then look at what’s actually authenticated and what protocol it speaks. Then sort the list into three piles. Vendor connectors where the vendor handles the migration and you just need a date from them. Custom builds you’ll have to pay to redo. And the ones where you genuinely cannot tell what they do, which is the pile that scares me, and there is almost always a pile like that.
New work goes on SuiteTalk REST web services with OAuth 2.0. That is also the transport the NetSuite MCP connector runs on. No exceptions, no “just this once because the old library already works.” That’s how you end up with a 2028 problem in 2026.
Your Concurrency Budget Is Smaller Than You Think
This is the single most common technical surprise I run into, and it’s the reason that distributor’s orders vanished.
NetSuite caps how many API requests can hit your account at the same time. Not per integration. Per account. Web services and RESTlets draw from the same pool, and when you exceed it you get a 429 and the request is simply refused.
The numbers are published. Per Oracle’s concurrency governance limits, a Service Tier 1 account starts at 15 concurrent requests, and each SuiteCloud Plus license adds 10 more. Add five licenses on Tier 1 and you land at 65. On shared service you start at 5.
Fifteen.
Now count what’s connected. Ecommerce orders, a 3PL feed, Avalara, the payment gateway, a data warehouse job, an expense tool, whatever your bank pushes, plus whatever your admin wired up last spring and forgot to mention. All of them pulling from the same fifteen, and none of them aware the others exist.
What happens next is predictable and slow. Your nightly warehouse sync, which is a bulk job and doesn’t care how long it takes, eats the whole pool at 2am. The order feed arrives, finds nothing available, gets a 429, and drops orders that nobody notices until close.
The fix is unglamorous and takes about two hours. Go to Setup, Integration, Integration Management, Integration Governance, and allocate a specific slice of that pool to each integration record so no single job can starve the others. Give the customer-facing feeds priority. Push the bulk jobs to windows where they can’t collide. And if you’re actually out of headroom, a SuiteCloud Plus license is a real answer, though I’d exhaust the scheduling fix first because it’s free.

Design for the Retry, Not the Happy Path
Every integration works on a good day. The whole job is deciding what happens on a bad one.
Four rules I don’t negotiate on:
- Every sync has to be safe to run twice. Match on an external ID, not on a name or a date range. If you replay yesterday’s orders and get duplicate sales orders, your integration isn’t finished. It’s just untested.
- Retries need a limit and a backoff. Three attempts, spaced out, then stop and complain. Infinite retry loops against a rate-limited API are how a small problem becomes an outage.
- Failed records go to a queue a human can see. Not a log file. Not an email alias that routes to a distribution list from 2019. A queue, with a count, that somebody looks at on Monday morning as part of their actual job.
- Alert on silence, not just on errors. The failure mode that hurt the distributor wasn’t an error nobody fixed. It was a number that quietly went to zero. If your order feed normally moves 400 records a day and it moves 6, something should scream, even though technically nothing failed.
That last rule is the one almost nobody implements, and it catches more real money than the other three combined.
One more thing while I’m on it. Log the payload, not just the status. When something breaks nine months from now and you open the log hoping for an answer, a line that reads “record 88213 failed” tells you nothing useful, and the vendor’s support team will immediately ask you for the request body that you did not keep.
Connector, Platform, or Custom
Everybody wants a rule here. No rule exists. What does exist is a decent heuristic, and it barely touches the technology. It’s about who maintains the thing in year three.
| Your situation | What to use | What it costs you later |
|---|---|---|
| Standard flow between two popular systems, standard fields | Prebuilt connector from the vendor or SuiteApp marketplace | Cheapest to run. You inherit their roadmap and their idea of a field mapping. |
| Several systems, custom fields, business logic in the middle | An integration platform such as Celigo, Boomi, or Workato | Subscription plus someone who knows the tool. Retry and error handling come built in, which is most of the value. |
| High volume, real-time, or logic no platform models well | SuiteTalk REST, or a RESTlet when you need NetSuite-side logic on arrival | You own everything. Monitoring, retries, governance, and the migration when Oracle changes something. |
| Trading partner dictates the format | EDI or SFTP through a broker, then into NetSuite | Slow to change, painful to debug, and non-negotiable if a big-box retailer is on the other end. |
I build custom things for a living, and I still tell most mid-market companies to buy the platform. A Celigo subscription is cheaper than the third developer you’d need to hire to babysit a custom fleet, and the retry logic you’d write is worse than theirs, because theirs has been kicked by ten thousand customers and yours has been kicked by you.
Custom earns its keep when the logic is genuinely yours. Pricing rules nobody else has, an allocation algorithm that’s a competitive advantage, a volume profile that breaks normal tooling. Not because a connector was missing one field.
The Data Underneath Is Worse Than You Think
You can build all of this correctly and still get garbage, because integration doesn’t clean data. It distributes it.
Harvard Business Review published research by Nagle, Redman, and Sammon finding that only 3 percent of companies’ data meets basic quality standards. Not 3 percent of small companies. Three percent of companies. That study is a few years old now and I have seen absolutely nothing since that suggests it got better.
What that looks like in a NetSuite account is mundane. Three customer records for the same buyer, because somebody typed “Inc.” twice and “Incorporated” once and nobody merged them, and now two of those records have open invoices against them and the third one is the only one your ecommerce platform knows about. Item records with a unit of measure that means one thing in the warehouse and another in purchasing. Sixty inactive items that still have open demand pointed at them.
Push that through a working integration and you now have the same mess in four systems, updating hourly, with an audit trail.
So before the build, do the unglamorous pass. Deduplicate the customer and vendor master. Fix units of measure. Kill records nobody has touched in two years. And write validation into the integration itself, so a bad record gets rejected at the boundary and lands in that error queue instead of quietly becoming somebody’s problem in a different system. If you want the operational version of this argument, I wrote about what bad item data does to stockout visibility and inventory accuracy, and it’s the same disease.

Nobody’s Name Is on the Integration
Here’s the part that costs me consulting revenue to admit.
Most integration failures I get called into are not engineering failures. The build was fine. It was fine for eleven months. Then a vendor rotated a certificate, or a field got renamed, or a tax rule changed, and the thing that broke had no owner, so it stayed broken until it showed up in a close.
Every NetSuite account I’ve opened in the last couple of years has had at least one live integration that nobody in the room could confidently explain, including, on two occasions, the person who had signed the invoice for it. Sometimes three. And the honest reason is that integrations get funded as projects and then get operated as nothing.
You can tell in about thirty seconds. Ask who gets paged when the order sync fails at 3am. If the answer is a job title rather than a person, or a name that already owns four other things, you don’t have an integration program. You have a collection of scripts with good intentions attached.
Fixing that is a staffing question, not a software one, and it usually starts as a contractor rather than a hire, because you rarely know what the permanent role should look like until somebody has done it for a quarter. That’s KORE1’s side of the fence, not mine. Start with their contract staffing model. If the person you need lives in the connector and API layer rather than doing general admin work, they recruit for that directly through NetSuite integration specialists, and the broader architecture version of the role runs through their API and integration architect practice. They cover more than 30 U.S. metros, and their recruiters average 15-plus years in the seat. That last bit matters more than usual here. A resume that says “NetSuite” covers about nine different jobs, and only two of them are this one.
Six Things Clients Argue with Me About
We’re on SOAP and it works fine. Do we really have to move?
Yes, and the deadline is Oracle’s, not mine. SOAP disappears with the 2028.2 release and existing SOAP integrations stop working at that point. Budget the migration in your next planning cycle rather than the one after, because rebuilds always find surprises.
Is an integration platform worth the subscription, or is that just a tax?
For most mid-market companies, worth it, and it’s not close. You’re not paying for the data pipe. You’re paying for retry logic, error queues, connector maintenance, and someone else’s on-call rotation. Write those yourself and the true cost lands well above the subscription. It just hides inside payroll where nobody looks at it.
How many integrations should a company our size actually have?
Wrong unit of measure. Count owners, not integrations. A $200M distributor running fourteen well-documented flows with a named owner is in far better shape than one running five that nobody can explain. If you can’t name the owner, the integration is a liability regardless of how many there are.
Our admin says we’re hitting API limits. Do we just buy more capacity?
Maybe, but check the schedule first. Most accounts that feel starved are running three bulk jobs in the same overnight window against a shared pool of 15 concurrent requests. Allocate limits per integration in Integration Governance, move the bulk work apart, then see whether you still need the SuiteCloud Plus license. Often you don’t.
Should we clean up our data before we integrate, or after?
Before, for master data. After, for everything else. Customers, vendors, items, and units of measure have to be right going in, because integration copies your mistakes into more places at higher speed. Transactional history can stay ugly. Nobody is syncing 2019 invoices anywhere.
Can our NetSuite admin own this, or is it a different person?
Usually different, and this is where companies lose a year. A strong admin owns configuration, saved searches, roles, and workflows. Integration ownership means authentication, API governance, error triage, and arguing with vendor support. Some people do both well. Most do one well and quietly resent the other half.
Your Integrations Are a Product, Not a Project
Projects end. Integrations don’t. They keep running long after the kickoff deck is archived, and they degrade the way anything unattended degrades, which is slowly and then all at once at month-end.
So treat them like something you own. A list of what exists. One name against each. A queue somebody reads. A migration plan for SOAP with a date on it, not a vague intention. None of that is architecture. It’s maintenance, which is deeply unfashionable and also the entire difference between a stack that unifies and a stack that merely has a lot of connections in it.
Every business I walk into is underusing what it already bought. Integration is where that shows up most expensively, because the gap between systems is where the money hides.
Go pull your integration list this week. Not the diagram somebody drew. The actual list, from the account. I’d bet money there’s something on it you can’t explain.
Want to argue with that table, or get a second read on a statement of work before you sign it? Hit me up on LinkedIn. And if the thing you turn up is an empty chair rather than a broken sync, talk to the KORE1 team instead. Filling that chair is their job. They’re considerably faster at it than I am.

