<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <title>SuiteHeroes Insights</title>
  <link>https://suiteheroes.com/insights/</link>
  <atom:link href="https://suiteheroes.com/insights/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Practical NetSuite write-ups from Raja Saqib, NetSuite Consultant, SuiteHeroes.com.</description>
  <language>en-gb</language>
  <copyright>© SuiteHeroes.com Ltd</copyright>
  <image>
    <url>https://suiteheroes.com/apple-touch-icon.png</url>
    <title>SuiteHeroes Insights</title>
    <link>https://suiteheroes.com/insights/</link>
  </image>
  <lastBuildDate>Fri, 13 Nov 2026 09:00:00 +0000</lastBuildDate>
  <item>
    <title>NetSuite SuiteScript 2.1 upgrade: how to plan it and what to rewrite first</title>
    <link>https://suiteheroes.com/insights/suitescript-2-1-upgrade-plan/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/suitescript-2-1-upgrade-plan/</guid>
    <pubDate>Fri, 13 Nov 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Customisation</category>
    <description>How to plan a SuiteScript 2.1 upgrade in NetSuite before 2028.2: find your 1.0 and 2.0 scripts, decide what to retire, and rewrite the risky ones first.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/suitescript-2-1-upgrade-plan.png" alt="" width="1200" height="630"></p>
<p>A <b>SuiteScript 2.1 upgrade</b> is no longer optional. Oracle's guide to <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_7161922360.html" target="_blank" rel="noopener">transitioning to SuiteScript 2.1</a> says support for SuiteScript 1.0, SuiteScript 2.0, and scripts annotated <code>@NApiVersion 2.0</code> or <code>@NApiVersion 2.x</code>, is expected to be removed in NetSuite 2028.2. Before that, from 2027.1, SuiteScript 1.0 support covers critical issues only.</p>
<p>The short answer to "what do I rewrite first?" is this: find every legacy script, delete the ones nobody uses, then rewrite your SuiteScript 1.0 scripts in order of business risk. Scheduled scripts that yield, RESTlets used by integrations, and scripts that touch postings or approvals go to the top. Most SuiteScript 2.0 scripts are a smaller job and can come later.</p>
<p>I write all new NetSuite customisation in SuiteScript 2.1, and I maintain and upgrade older 1.0 code for clients. This is the plan I follow.</p>
<h2>The SuiteScript 2.1 timeline Oracle has published</h2>
<p>Oracle's transition guide sets out four releases:</p>
<ul><li><b>2026.2:</b> SuiteScript 2.1 becomes the standard scripting model for new and existing scripts.</li><li><b>2027.1:</b> SuiteScript 1.0 enters end-of-life support, covering critical issues only. For other problems, Oracle will ask you to convert the script to 2.1 first.</li><li><b>2028.1:</b> SuiteScript 1.0 scripts can no longer be deployed in new accounts. They remain deployable in existing accounts. SuiteScript 2.0 and 2.x scripts run as 2.1 by default.</li><li><b>2028.2:</b> all new and existing scripts must use SuiteScript 2.1.</li></ul>
<p>Release plans can move, so check Oracle's page before you fix dates in a project plan. The practical point is that 2027.1 matters more than 2028.2. After 2027.1, a SuiteScript 1.0 script that breaks in a way Oracle doesn't class as critical may have to be converted before anyone will look at it. That is a poor time to start a rewrite.</p>
<p>The same releases bring the authentication changes I covered in <a href="https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/">NetSuite TBA to OAuth 2.0 and SOAP to REST</a>. If you have RESTlets or integrations to rework anyway, plan both changes as one project.</p>
<h2>Step 1: Build an inventory of legacy scripts</h2>
<p>Oracle's guide suggests <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_0827101556.html" target="_blank" rel="noopener">three ways to find scripts not on 2.1</a>. The quickest is the script list:</p>
<ol><li>Go to <i>Customization &gt; Scripting &gt; Scripts</i>.</li><li>Use the <b>API Version</b> filter to show 1.0, then 2.0, then 2.x.</li></ol>
<p>For something you can share and sort, create a saved search on script records with the criterion <b>API Version is not 2.1</b>, and show Name, ID, Script Type, API Version, Owner and Description. A SuiteAnalytics workbook grouped by API Version or Script Type works too.</p>
<p>Then add the columns that drive the plan. For each script, note:</p>
<ul><li><b>What it does</b>, in one line a finance user would understand.</li><li><b>Whether it still runs.</b> Check its deployments and execution logs. A script with no recent activity is a candidate for retirement, not conversion.</li><li><b>Who owns it.</b> Some scripts belong to a SuiteApp or a third-party bundle. Those are the vendor's job to upgrade, so ask each vendor for their plan and date.</li><li><b>What it touches:</b> transactions, approvals, tax, payments, integrations or just a UI field.</li><li><b>Dependencies:</b> libraries it loads, other scripts on the same record, workflows that call it.</li></ul>
<h2>Step 2: Retire before you rewrite</h2>
<p>Most accounts that have been live for several years carry scripts nobody remembers writing. Oracle's guidance is to evaluate inactive or obsolete scripts for retirement instead of migration. Every script you remove is one less to convert, test and support.</p>
<p>Be careful with the word "inactive". A script that runs once a year at year-end, or only when a particular subsidiary posts an intercompany journal, can look unused. Confirm with the process owner before you undeploy anything, and keep a copy of the file.</p>
<h2>Step 3: Decide what to rewrite first</h2>
<p>Oracle recommends starting with scripts that support critical business processes, high-usage scripts, integrations and scripts with complex dependencies. Within that, this is the order I use.</p>
<h3>1. Scheduled scripts that yield or set recovery points</h3>
<p>SuiteScript 2.1 scheduled scripts have no equivalent of <code>nlapiYieldScript()</code> or <code>nlapiSetRecoveryPoint()</code>. Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_51112557168.html" target="_blank" rel="noopener">script type differences</a> say 2.1 scheduled scripts don't support manual yielding, and a restarted script begins again from the start. For work that needs yielding, Oracle points you to a Map/Reduce script.</p>
<p>That means these scripts aren't a line-by-line conversion. They are a redesign: split the work into stages, make each record safe to process twice, and decide how errors are reported. They take longest, so start them first.</p>
<h3>2. RESTlets and integration scripts</h3>
<p>RESTlets sit between NetSuite and other systems, so a failure stops data moving. If the integration also uses TBA or NLAuth, the authentication needs to change too. I built the Cape.io integration between NetSuite and Fortnox in native SuiteScript 2.1, and the lesson carries over: <a href="https://suiteheroes.com/services/netsuite-integration/">integration code</a> needs proper logging, retries and a test plan agreed with finance. See the <a href="https://suiteheroes.com/case-studies/cape-io/">Cape.io case study</a> for how that looked across eight subsidiaries.</p>
<h3>3. Finance-critical user event and workflow action scripts</h3>
<p>Next come scripts on transactions: GL impact, approval routing, vendor bank detail controls, tax fields, intercompany logic, and billing and revenue scripts like those in the <a href="https://suiteheroes.com/case-studies/cloud-billing-revenue/">multi-cloud billing case study</a>. A subtle change here may not throw an error. It may just post a different amount.</p>
<h3>4. Client scripts, Suitelets and portlets</h3>
<p>These affect what users see. Errors are usually obvious and quick to spot in testing, so they can follow the server-side work.</p>
<h3>5. SuiteScript 2.0 and 2.x scripts</h3>
<p>These come last because there is a shortcut for many of them. Under <i>Setup &gt; Company &gt; Preferences &gt; General Preferences</i>, Oracle provides two <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_157960966997.html" target="_blank" rel="noopener">account-level preferences</a>: <b>Execute SuiteScript 2.0 Server Scripts as 2.1</b> and <b>Execute SuiteScript 2.x Server Scripts as 2.1</b>. They run server scripts on the 2.1 runtime without changing the file, and you can switch them back at any time. Use them in sandbox to see which scripts work unchanged, then update the annotation.</p>
<p>Two limits apply. The preferences cover server scripts only, and there is no equivalent for SuiteScript 1.0. And SuiteScript 2.1 runs on a different engine, so some behaviour changes. Oracle lists <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_158755248128.html" target="_blank" rel="noopener">differences between 2.0 and 2.1</a> including error object properties, <code>parseInt</code>, date formatting, strict mode and RESTlet return types.</p>
<h2>What changes when you convert SuiteScript 1.0</h2>
<p>A SuiteScript 1.0 script can't be fixed by changing a tag. NetSuite doesn't support calling SuiteScript 1.0 APIs from a 2.x script, so every <code>nlapi</code> function and <code>nlobj</code> object has to be replaced with the matching N/ module. Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4752722762.html" target="_blank" rel="noopener">SuiteScript 1.0 to 2.1 API map</a> is the reference. Expect these changes:</p>
<ul><li><b>Structure.</b> Global functions become an AMD module with <code>define</code>, and each entry point receives a single context object.</li><li><b>Arguments.</b> 2.1 methods take one options object, and parameter names sometimes differ.</li><li><b>Subrecords.</b> Addresses and other subrecords work differently. You don't save them separately; NetSuite saves them with the parent record.</li><li><b>APIs with no direct equivalent.</b> Oracle lists some, such as the date-time value functions (use N/format) and <code>nlapiAddDays</code> (use standard JavaScript dates).</li><li><b>Reserved names.</b> <code>log</code> and <code>util</code> are reserved in 2.1. Oracle notes that a 1.0 variable with either name causes an error if 1.0 and 2.1 scripts run on the same record. That matters during a phased upgrade, when old and new scripts sit side by side.</li></ul>
<h2>Using AI to convert scripts, safely</h2>
<p>Oracle now publishes a <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_0818030029.html" target="_blank" rel="noopener">SuiteScript upgrade agent skill</a>, <code>netsuite-suitescript-upgrade</code>, that can analyse, convert, explain and validate legacy scripts. It's a useful first draft and a good way to size the work.</p>
<p>Oracle's own warnings are worth repeating. Validation is a static check, not a substitute for functional testing. Review entry points, dependencies, script IDs and deployment behaviour, and don't change production behaviour just because a conversion completed without errors. Oracle flags date, time zone, subrecord, search, error handling and sublist indexing as areas to check by hand.</p>
<h2>Test and release in batches</h2>
<p>For each converted script, run it in sandbox against the same records as the original and compare the results: field values, GL lines, emails sent, records created. Then release a few scripts at a time, outside month-end, and watch the execution logs before the next batch. Oracle recommends the same phased approach.</p>
<p>After go-live, make sure each release is tested too. A <a href="https://suiteheroes.com/offers/netsuite-release-readiness/">release readiness check</a> runs your scripts against the release preview before each upgrade, which matters more as 2028 approaches.</p>
<p>If you would rather hand over the inventory and rewrite, my <a href="https://suiteheroes.com/services/netsuite-customisation/">NetSuite customisation and SuiteScript development</a> service covers it, or you can <a href="https://suiteheroes.com/contact/">book a call</a> to talk it through.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Oracle expects to remove support for SuiteScript 1.0, SuiteScript 2.0 and scripts annotated 2.0 or 2.x in NetSuite 2028.2. From 2027.1, SuiteScript 1.0 support covers critical issues only.</li><li>Start with an inventory. Filter Customization &gt; Scripting &gt; Scripts by API Version, then retire anything inactive before you convert a line of code.</li><li>Rewrite SuiteScript 1.0 first, starting with scheduled scripts that yield, RESTlets and finance-critical scripts. SuiteScript 2.0 server scripts can often be tested on the 2.1 runtime with an account preference.</li><li>Treat AI conversion tools as a first draft. Test every converted script in sandbox against the original behaviour and release in small batches.</li></ul></div>
<p style="margin-top:28px;">Want a ranked list of your legacy scripts and a fixed price to upgrade them? The <a href="https://suiteheroes.com/offers/suitescript-oauth-upgrade/">SuiteScript 2.1 and OAuth 2.0 Upgrade</a> starts with a free inventory.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/suitescript-2-1-upgrade-plan/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/suitescript-2-1-upgrade-plan.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/suitescript-2-1-upgrade-plan.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/suitescript-2-1-upgrade-plan.png" type="image/png" length="66739"/>
  </item>
  <item>
    <title>NetSuite support after go-live: what good L2/L3 support looks like</title>
    <link>https://suiteheroes.com/insights/netsuite-support-after-go-live/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-support-after-go-live/</guid>
    <pubDate>Wed, 11 Nov 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Support</category>
    <description>What good NetSuite support looks like after go-live: who handles L1, L2 and L3, when to raise a case with Oracle, and how to stop the same tickets returning.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-support-after-go-live.png" alt="" width="1200" height="630"></p>
<p>Good <b>NetSuite support</b> after go-live is not a help desk that closes tickets. It is a clear split of who answers what, a quick route to a fix when something breaks, and someone who finds out why it broke so it doesn't happen again. Most businesses handle simple questions in-house. What they lack is the second and third levels: someone senior who can read a script log, trace a failed integration record, or work out why a journal posted to the wrong period.</p>
<p>I've provided L2/L3 support and administration to NetSuite customers for years. Most of them came to me after going live with someone else. This is what I think good support looks like, and how to tell whether you have it.</p>
<h2>What L1, L2 and L3 NetSuite support mean</h2>
<p>Oracle doesn't define these levels for you. They are a common way to divide the work, and this is how I use them:</p>
<ul><li><b>L1: how-to and access.</b> Password resets, "where do I find this report", a user who can't see a field. Usually handled by a key user or your NetSuite administrator.</li><li><b>L2: diagnosis and configuration.</b> Something is wrong and needs investigating. A saved search returns the wrong totals, an approval workflow stalls, a tax code posts to the wrong account, a CSV import fails. L2 fixes configuration, roles, forms, searches and data.</li><li><b>L3: technical and design.</b> The cause sits in SuiteScript, a workflow, an integration or the way the account was designed. L3 reads code and logs, fixes or rewrites scripts, and changes the design where it's wrong.</li></ul>
<p>The test of a good set-up is that each request reaches the right level quickly. An L3 problem that sits with L1 for two weeks costs more than the fix.</p>
<h2>Where Oracle NetSuite Customer Support fits</h2>
<p>Oracle's own support is part of the picture, but it covers the product, not your configuration. The defects it tracks are cases "when a feature doesn't work as intended" (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N338747.html" target="_blank" rel="noopener">Oracle: NetSuite issue resolution</a>). Your custom scripts, workflows, saved searches and third-party integrations are yours to support, or your partner's.</p>
<p>What you can do through Oracle depends on your support level. Oracle's help on <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_1205115443.html" target="_blank" rel="noopener">creating support cases</a> says:</p>
<ul><li>On <b>Basic Support</b>, you go to the Support tab, select Go to SuiteAnswers, then Contact Support. You start with the Virtual Support Assistant, and you can submit only critical problems that affect business operations. Other questions go to the NetSuite Support Community.</li><li>On <b>Premium Support</b>, you go to Contact Support &gt; Create Support Case, choose a case type and set a severity. For a C1 case you tick the 24 x 7 availability box.</li></ul>
<p>Only authorised support contacts can report problems and manage cases with Oracle on your behalf. The limit is two contacts on Basic Support and four on Premium. You manage them from the Support tab, in NetSuite 360 &gt; Authorized Support Contacts (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_80140211562.html" target="_blank" rel="noopener">Oracle: adding authorised support contacts</a>). When an administrator leaves, check this list straight away, so you aren't left without a valid contact when you need to raise an urgent case.</p>
<p>A good L2/L3 partner knows when an issue is a genuine product defect and writes the case for you: steps to reproduce, the record IDs, the role used, screenshots and the business impact. Oracle says the more case questions you answer, the faster the response. If you have access to NetSuite 360, you can follow defects linked to your cases under See Support Issues.</p>
<h2>What good L2/L3 NetSuite support looks like</h2>
<h3>1. A clear way in, and agreed response times</h3>
<p>One channel for requests, whether that's email, Teams or Slack, and a written response time. Everyone should know what counts as urgent. A blocked payment run or failed month-end close is urgent. A new column on a report is not.</p>
<h3>2. Triage that starts with evidence</h3>
<p>Good support asks for the record, the user, the role and the time, and then looks at the evidence NetSuite already keeps:</p>
<ul><li><b>System notes</b> on the record show who changed what and when, with the old and new values (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_160225379741.html" target="_blank" rel="noopener">Oracle: system notes</a>).</li><li><b>Script execution logs</b>, at Customization &gt; Scripting &gt; Script Execution Logs, show script errors across all scripts. Oracle purges user-generated logs after 30 days and system error logs after 60 days, and the log subtab on a script can lose entries sooner when log volume is high (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N3352137.html" target="_blank" rel="noopener">Oracle: governance on script logging</a>). If an error happened six weeks ago, the log may be gone, so act on errors promptly.</li><li><b>Application Performance Management (APM)</b>, a SuiteApp from Oracle, shows which scripts and workflows slow down pages and processes (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_160319247019.html" target="_blank" rel="noopener">Oracle: APM for the SuiteCloud platform</a>).</li><li><b>Integration error queues</b> in Celigo, Boomi or your own logs.</li></ul>
<p>This is the difference between L2 and guesswork. Many "NetSuite is broken" reports come down to a changed role, an edited form or a closed period, and the system notes show that quickly.</p>
<h3>3. Fix the cause, not the symptom</h3>
<p>Re-running a failed integration record clears today's error. Fixing the missing mapping stops tomorrow's. When the same ticket comes back each month, treat it as a design problem, not a support problem. On the Jockey Club's Coupa integration, finance and support see every flow's health and every error, with a suggested fix, in a control centre built inside NetSuite (<a href="https://suiteheroes.com/case-studies/the-jockey-club/">case study</a>).</p>
<h3>4. Changes made safely</h3>
<p>Even small changes should be made in a sandbox first, where you have one, then moved to production with a note of what changed and why. Script and workflow changes need a quick regression test of the process they touch. This is where many support arrangements fall down: a quick fix in production that breaks a scheduled script nobody remembered.</p>
<h3>5. A log of every request</h3>
<p>Each request should be recorded: what was asked, what was found, what was done and how long it took. The log is how you spot patterns, such as one integration that causes half the tickets. It also means the next person who supports your account doesn't start from nothing.</p>
<h3>6. Release readiness twice a year</h3>
<p>NetSuite is upgraded twice a year. Before each release, you can request a Release Preview account, which lets you test your daily business processes against the new version (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/subsect_1121105228.html" target="_blank" rel="noopener">Oracle: the Release Preview account</a>). Good support uses that window to test scripts, workflows, integrations and key reports, and fixes problems before they reach production. I cover this as part of support, or as a fixed <a href="https://suiteheroes.com/offers/netsuite-release-readiness/">NetSuite Release Readiness check</a>.</p>
<h3>7. Steady improvement</h3>
<p>Support should leave the account better each month: a saved search tidied up, a manual step automated, a role tightened, a user trained. If your support provider only ever reacts, you are paying for the same problems twice.</p>
<h2>Warning signs your NetSuite support isn't working</h2>
<ul><li>The same errors appear every month-end.</li><li>Nobody can say which scripts or integrations run in your account, or who owns them.</li><li>Small changes wait weeks because the implementation partner is busy or expensive.</li><li>Fixes are made directly in production with no record.</li><li>Your only NetSuite expert has left, and the authorised support contact list still has their name on it.</li></ul>
<p>If several of these sound familiar, start with a review of the account. My <a href="https://suiteheroes.com/insights/netsuite-health-check-checklist/">NetSuite health check checklist</a> covers the areas I look at first.</p>
<h2>In-house, partner or independent support</h2>
<p>There's no single right model. A strong in-house administrator handles L1 and much of L2, and brings in senior help for L3 and design questions. Smaller teams often have no administrator at all, and need someone to cover all three levels for a set number of hours a month. Either way, the person helping should know your account before something breaks, not learn it during an outage.</p>
<p>My <a href="https://suiteheroes.com/services/netsuite-support/">NetSuite support and administration service</a> covers L2/L3 support, administration, performance tuning and release reviews, for accounts I implemented and accounts set up by other partners. If you want a set number of hours each month with agreed response times, a support log and a monthly summary, see the <a href="https://suiteheroes.com/offers/netsuite-support-retainer/">NetSuite Support Retainer</a>. If your integrations generate most of your tickets, read how I <a href="https://suiteheroes.com/insights/netsuite-integration-project-plan/">plan and test NetSuite integration projects</a> so errors are designed out from the start.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Split NetSuite support into three levels. L1 answers how-to questions in-house, L2 diagnoses and fixes configuration and data, and L3 fixes scripts, integrations and design.</li><li>Oracle NetSuite Customer Support handles product defects, not your own scripts, workflows or integrations. Someone has to own those.</li><li>Good L2/L3 support fixes the cause, logs every request, and checks scripts and integrations in Release Preview before each upgrade.</li><li>Keep your authorised support contacts current. On Basic Support you can have two, on Premium Support four.</li></ul></div>
<p style="margin-top:28px;">Need senior NetSuite support after go-live, or a second pair of hands for your administrator? <a href="https://suiteheroes.com/contact/">Book a call</a> and we can talk through what you need.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-support-after-go-live/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-support-after-go-live.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-support-after-go-live.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-support-after-go-live.png" type="image/png" length="65235"/>
  </item>
  <item>
    <title>Running a NetSuite integration project: scoping, mapping, error handling and sign-off</title>
    <link>https://suiteheroes.com/insights/netsuite-integration-project-plan/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-integration-project-plan/</guid>
    <pubDate>Tue, 10 Nov 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Integration</category>
    <description>How to run a NetSuite integration project: scope each flow, map fields and IDs, design error handling and retries, then test and sign off with finance.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-integration-project-plan.png" alt="" width="1200" height="630"></p>
<p>A <b>NetSuite integration</b> rarely fails because the API call didn't work. It fails because nobody agreed which system owns the customer record, a field was mapped by guesswork, or an error sat unnoticed in a log until month-end. Those are project problems, not coding problems. They are solved by four pieces of work: scoping, mapping, error handling and sign-off.</p>
<p>I've led integrations on Celigo, Dell Boomi and native SuiteScript 2.1, with Coupa, Salesforce, HubSpot, Shopify, Stripe, Fortnox and others. This is the plan I follow, whichever tool carries the data. If you're still choosing the tool, I've covered that separately in <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs iPaaS</a>.</p>
<h2>Step 1: Scope the NetSuite integration flow by flow</h2>
<p>"Integrate Salesforce with NetSuite" is not a scope. It is a dozen separate flows, each with its own rules, as the <a href="https://suiteheroes.com/case-studies/pink-group-salesforce/">Pink Group Salesforce integration</a> showed. Break the integration into flows and write a short specification for each one. For every flow, answer these questions:</p>
<ul><li><b>Which records?</b> For example, customers, sales orders, invoices, payments or vendor bills.</li><li><b>Which system is the source of truth?</b> One system owns each record type, or even each field. If both systems can edit the same field, decide which wins.</li><li><b>Which direction?</b> One way, or both. Two-way sync needs protection against echo loops, where an update in one system triggers an update back, and so on forever.</li><li><b>What triggers it?</b> Real time on save, a schedule, or a manual run.</li><li><b>How many, and how often?</b> Daily and peak volumes, and the busiest day of the month.</li><li><b>What happens to history?</b> Whether open or historical records are loaded at go-live, and how.</li><li><b>Who owns errors?</b> A named person or team, not "IT".</li></ul>
<p>Two NetSuite limits belong in scope. First, every account has a concurrency limit on web services and RESTlet requests, which depends on your service tier and SuiteCloud Plus licences. Oracle documents that requests over the limit are rejected, and you can reserve part of the limit for a single integration at Setup &gt; Integration &gt; Integration Management &gt; Integration Governance (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/bridgehead_156224824287.html" target="_blank" rel="noopener">Oracle: concurrency limit per integration</a>). If three integrations all run at 2am, they compete for the same pool.</p>
<p>Second, give each application its own integration record. In Oracle's model each application can have its own record, listed at Setup &gt; Integration &gt; Manage Integrations. That lets you see each application's own execution log and block one application without touching the others (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4389727047.html" target="_blank" rel="noopener">Oracle: integration record overview</a>). Pair it with a dedicated integration role that has only the permissions the flow needs.</p>
<p>Then write down what is out of scope. Exclusions agreed early are far cheaper than exclusions argued about in UAT.</p>
<h2>Step 2: Map identifiers first, then fields</h2>
<p>Before you map a single amount, decide how each system will recognise a record it has seen before.</p>
<p>In NetSuite the usual answer is the external ID. You store the other system's ID on the NetSuite record, and the integration looks records up by it. NetSuite's REST web services support an upsert operation that uses it: a PUT request with the external ID in the URL creates the record if it doesn't exist and updates it if it does (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156335203191.html" target="_blank" rel="noopener">Oracle: using the upsert operation</a>). That is what makes a retry safe. Without it, a timeout followed by a retry gives you two invoices.</p>
<p>Write the other system's reference back as well, so a user in either system can trace a record to its partner. On the Cape.io Fortnox integration, the Fortnox document number was stamped back on every NetSuite transaction for exactly that reason.</p>
<p>Then map fields, and be explicit about the awkward ones:</p>
<ul><li><b>Subsidiary, currency and tax code.</b> In OneWorld, a record in the wrong subsidiary is a consolidation problem, not a typo.</li><li><b>GL accounts, departments, classes and locations.</b> Map each value. Don't let an unmapped value fall back to a default account. In the Cape.io build, unmapped accounts fail loudly by design, so the statutory accounts still reconcile line by line.</li><li><b>Items.</b> Decide what happens when a line has no matching item. On the Jockey Club's Coupa integration, a line with no item match posts as an expense line coded from the billing string, rather than stopping the whole invoice.</li><li><b>Dates, rounding and line order.</b> Small differences here cause most reconciliation breaks.</li></ul>
<p>Keep crosswalks, such as entity to subsidiary or tax code to tax code, as data the business can maintain, in a custom record or a lookup table. Hard-coded lists in scripts become a change request every time finance adds a code.</p>
<h2>Step 3: Design NetSuite integration error handling before you build</h2>
<p>Every integration will fail sometimes: an inactive supplier, a closed period, a blank mandatory field. What matters is what happens next. Agree these rules in design, not after the first bad month-end:</p>
<ol><li><b>Classify errors.</b> Separate temporary errors (timeouts, concurrency rejections, an unavailable endpoint) from data errors (a missing vendor, a closed period). Temporary errors can retry automatically with a growing delay between attempts. Data errors need a person, and retrying them only fills the log.</li><li><b>Make every write safe to repeat.</b> Use upserts or a lookup on the external ID, and decide the order of writes. On the Jockey Club build, NetSuite IDs are written back to Coupa first and the exported flag second, because Coupa locks exported invoices.</li><li><b>Log in one place, with context.</b> Each error should record the flow, the source record, the message and a suggested fix. On that project, finance and support see every flow's health and every error in an integration control centre built as a Suitelet inside NetSuite, without logging in to Celigo. You can try a similar screen in the <a href="https://suiteheroes.com/demo/netsuite-integration-control-tower/">Integration Control Tower demo</a>.</li><li><b>Alert the owner.</b> Send failures to the named owner from Step 1, and alert on silence too. A flow that hasn't run for a day is often a bigger problem than one that failed once.</li><li><b>Guard against bad runs.</b> Before a large run, check a known record first. The Jockey Club chart-of-accounts flow checks a "golden record" combination before it starts, so a change to the segment order stops the run before it can do damage.</li><li><b>Write the runbook.</b> For each common error: what it means, who fixes it, and how to re-run.</li></ol>
<h2>Step 4: Test like finance will use it</h2>
<p>Build and test in a sandbox, and plan for refreshes. Oracle notes that a sandbox refresh deletes the token key and token secret, so they have to be regenerated, and it recommends separate integration records in each account so sandbox changes can't break production (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_1515141510.html" target="_blank" rel="noopener">Oracle: TBA credentials and accounts</a>). If your integration still uses token-based authentication, read my note on the <a href="https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/">move from TBA to OAuth 2.0</a> before you build.</p>
<p>Test in three layers:</p>
<ul><li><b>Unit tests</b> of each mapping, run by the developer.</li><li><b>System integration tests (SIT)</b> end to end across both systems, with scripted cases for creates, updates, cancellations, credits, partial payments and each error you designed for in Step 3.</li><li><b>User acceptance tests (UAT)</b> run by the people who will live with it, using real scenarios from a recent month.</li></ul>
<p>Test volume, too. Run a realistic month-end batch, not ten records. And if you're loading history, load it through the same flows and rules as live data. On the Jockey Club project, a 777-invoice backlog was re-imported through the live rules, and every remaining error was traced to a named data fix.</p>
<h2>Step 5: Sign off against evidence</h2>
<p>Sign-off is where projects either end cleanly or drift. Agree the criteria at the start, and make them measurable:</p>
<ul><li>Every SIT and UAT script passed, or has an agreed workaround and an owner.</li><li>A reconciliation report that ties the count and value of records in both systems for a test period, by subsidiary.</li><li>The runbook, mapping document and support contacts handed over.</li><li>Alerts tested, by forcing a failure and checking the right person was told.</li><li>A go-live plan: cut-off times, who switches each flow on, and how to roll back.</li></ul>
<p>Signatures should come from the finance owner and the business owner of each flow, not just the developer. The first two or three month-ends after go-live are the real test, so agree who is on hand for them. Ongoing <a href="https://suiteheroes.com/services/netsuite-support/">NetSuite support</a> after that can be in-house or a retainer, but someone must own the error queue.</p>
<h2>When an integration is already live and failing</h2>
<p>If an existing NetSuite integration keeps breaking, work the same steps in reverse: list the flows, rebuild the mapping from what the integration actually does, then add the missing error handling. My fixed-price <a href="https://suiteheroes.com/offers/integration-rescue-sprint/">NetSuite Integration Rescue Sprint</a> does that for Celigo, Boomi and SuiteScript integrations.</p>
<p>For a new project, my <a href="https://suiteheroes.com/services/netsuite-integration/">NetSuite integration services</a> cover scoping, mapping, build, testing and sign-off. You can see how a 24-flow, nine-entity build came together in <a href="https://suiteheroes.com/case-studies/the-jockey-club/">the Jockey Club case study</a>.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Scope a NetSuite integration flow by flow. For each one, write down the source of truth, the direction, the trigger, the volume and who owns errors.</li><li>Map identifiers before fields. An external ID on every integrated record is what lets a retry update a record instead of duplicating it.</li><li>Design error handling as part of the build. Every failure should be logged, visible to the person who can fix it, and safe to retry.</li><li>Sign off against agreed test scripts and reconciliation reports, signed by finance and the business owner, not just the developer.</li></ul></div>
<p style="margin-top:28px;">Planning a NetSuite integration, or living with one that keeps failing? <a href="https://suiteheroes.com/contact/">Book a call</a> and I'll walk through your flows with you.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-integration-project-plan/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-integration-project-plan.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-integration-project-plan.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-integration-project-plan.png" type="image/png" length="72542"/>
  </item>
  <item>
    <title>How to choose a NetSuite consultant in the UK: 10 questions to ask before you sign</title>
    <link>https://suiteheroes.com/insights/choose-netsuite-consultant-uk/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/choose-netsuite-consultant-uk/</guid>
    <pubDate>Mon, 09 Nov 2026 14:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Implementation</category>
    <description>Choosing a NetSuite consultant in the UK? Ten questions to ask before you sign, from who does the work and references to certifications, scope and support.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/choose-netsuite-consultant-uk.png" alt="" width="1200" height="630"></p>
<p>If you're looking for a <b>NetSuite consultant in the UK</b>, the hard part isn't finding one. It's telling apart the consultant who will deliver your project from the one who will learn on it. The quickest way to do that is to ask the same ten questions of everyone on your shortlist, and listen to how specific the answers are.</p>
<p>I've seen this from both sides. I was a Senior NetSuite Consultant at RSM US, a NetSuite partner, and I now run SuiteHeroes, an independent NetSuite consultancy in London. I've also been brought in to <a href="https://suiteheroes.com/services/netsuite-project-recovery/">rescue stalled implementations</a>, and most of them went wrong in ways these questions would have exposed before anyone signed.</p>
<h2>10 questions to ask a NetSuite consultant in the UK</h2>
<h3>1. Who will actually do the work?</h3>
<p>This matters more than anything else on the list. The person who runs the sales meeting is not always the person who configures your account. Ask for the names of the people who will lead design, build any scripts and run data migration, and ask to meet them.</p>
<p>Then ask how much of their time you get. A consultant spread across six clients will be slow to answer when your month-end breaks. A good answer names people and gives a realistic commitment, such as days per week during build.</p>
<h3>2. Have you done projects like ours?</h3>
<p>"Yes, we've done lots of NetSuite implementations" isn't an answer. Ask about projects with the same shape as yours: the same number of entities, the same modules, the same systems to integrate, the same source system you're leaving.</p>
<p>If you're a UK group with overseas subsidiaries, ask about OneWorld, multi-currency and intercompany. If you're moving from Xero or Sage, ask how they handled opening balances and history. If you sell subscriptions, ask about revenue recognition. Then ask for a reference you can call, not just a logo. A short conversation with a finance director who has been through it tells you more than any proposal.</p>
<h3>3. Can you verify your NetSuite certifications?</h3>
<p>Oracle runs NetSuite certifications, including SuiteFoundation and the ERP Consultant exam. You don't have to take a badge on a website at face value. Oracle's certification portal, CertView, lets a candidate publish their credentials to a third party: you receive a link and a password by email, and they're only valid for a limited time (<a href="https://docs.oracle.com/en/education/customer-success/digital-learning-kit/ml-cert-faq/topics/OracleCertViewRelated.html" target="_blank" rel="noopener">Oracle CertView FAQ</a>). Oracle says it won't verify a certification for an employer without the candidate starting the request, so ask them to send it.</p>
<p>Treat certification as a floor, not proof. It shows someone has passed an exam. Questions 1 and 2 tell you whether they've delivered.</p>
<h3>4. Do you understand our finance processes, or just the system?</h3>
<p>NetSuite is an accounting system first. A consultant who knows every setting but not why a controller locks a period, how VAT is reported, or what IFRS 15 asks of revenue recognition will build something that works on screen and fails at month-end.</p>
<p>Ask them to walk you through how they would set up your close, or your approval for supplier bank detail changes. This is where my CIMA qualification earns its keep: on one project I helped take a monthly close from 12 days to 2.5 days, and the work was as much finance process as system configuration.</p>
<h3>5. How do you build, test and document customisation?</h3>
<p>Scripts and workflows are where long-term cost hides. Ask:</p>
<ul><li>Do you write new scripts in SuiteScript 2.1?</li><li>Where is the code kept, and do we get a copy?</li><li>What documentation do we receive at the end?</li><li>How do you test before NetSuite's twice-yearly upgrades?</li></ul>
<p>On the last point, Oracle provides a Release Preview account before each release so you can <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4471776042.html" target="_blank" rel="noopener">check that your existing business processes still work</a>. A consultant who has never mentioned it is unlikely to plan for it. The same goes for integrations: ask how errors are logged, who is alerted and how failed records are retried. I've written about the choice of tool in <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs iPaaS</a>.</p>
<h3>6. How did you arrive at this estimate, and what's excluded?</h3>
<p>A credible estimate shows days by workstream (design, configuration, data migration, integrations, testing, training and go-live support), with assumptions and exclusions written down. A single total with no breakdown can't be compared with anything.</p>
<p>Look hardest at the exclusions. A low fixed price with a long list of them is often how a cheap project becomes an expensive one. I cover what drives the number in <a href="https://suiteheroes.com/insights/netsuite-implementation-cost-uk/">NetSuite implementation cost in the UK</a>.</p>
<h3>7. How do you handle change and open decisions?</h3>
<p>Scope will change. That's normal. What you want to know is how: who raises a change request, how it's priced, and who signs it off. Ask also how they keep design decisions from sitting open. In my experience, many troubled projects didn't fail on technology. They ran over because decisions waited weeks for an answer.</p>
<h3>8. How will you access our NetSuite account?</h3>
<p>Each consultant should have their own named login, with a role that gives them what they need and no more, and two-factor authentication. Shared logins wreck the audit trail and make it impossible to remove one person's access cleanly. Ask also what happens at the end: who removes their access, and how integration credentials are handed over.</p>
<h3>9. What happens after go-live?</h3>
<p>The first two or three month-ends usually need hands-on help. After that, someone has to fix issues, make small changes and test each release. Ask whether the consultant offers support, how fast they respond, and whether the person answering will know your account. A <a href="https://suiteheroes.com/offers/netsuite-support-retainer/">NetSuite support retainer</a> is one option. Training an internal NetSuite administrator is another. Either way, agree it before go-live, not after the first problem.</p>
<h3>10. Are the contract basics in place?</h3>
<p>These are dull questions, but they protect you:</p>
<ul><li><b>The company.</b> Check the business on <a href="https://find-and-update.company-information.service.gov.uk/" target="_blank" rel="noopener">Companies House</a>. Know who you're contracting with.</li><li><b>Insurance.</b> Ask whether they hold professional indemnity insurance, and for what cover.</li><li><b>Data protection.</b> Your consultant will see customer, supplier and employee data. Expect clear data processing terms in the contract.</li><li><b>IR35.</b> If you're a medium or large business and you hire an individual who works through their own limited company, the off-payroll working rules make you responsible for deciding their employment status. HMRC's guidance says this has applied to private sector clients <a href="https://www.gov.uk/hmrc-internal-manuals/employment-status-manual/esm10011" target="_blank" rel="noopener">since 6 April 2021</a>. Whether the rules apply to your engagement depends on the facts, so check with your accountant or tax adviser.</li></ul>
<h2>Red flags to watch for</h2>
<ul><li>They propose a solution before asking about your processes.</li><li>They can't name the people who'll do the work.</li><li>Every requirement gets "yes, NetSuite does that", with no trade-offs.</li><li>They have no references from a project of similar size and shape.</li><li>They want to customise heavily where standard NetSuite would do.</li><li>There's no plan for testing, training or support after go-live.</li></ul>
<h2>Partner, independent or both?</h2>
<p>You can choose a NetSuite partner, an independent NetSuite consultancy, or a mix, such as a partner for licences and an independent consultant for design and delivery. Each has strengths. A larger firm offers more people and cover. An independent consultant usually means the senior person you met is the one doing the work. Ask all ten questions either way.</p>
<p>If you're planning a new project, my <a href="https://suiteheroes.com/services/netsuite-implementation/">NetSuite implementation services</a> cover requirements and design through to data migration, integrations and go-live. You can see how a multi-entity integration project ran in <a href="https://suiteheroes.com/case-studies/the-jockey-club/">the Jockey Club case study</a>. If you already have NetSuite and want an independent view of how well it's set up, a <a href="https://suiteheroes.com/offers/netsuite-health-check/">NetSuite health check</a> is a sensible place to start.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Ask who will actually do the work, and meet them before you sign. The sales conversation and the delivery team are often different people.</li><li>Ask for references from projects like yours, and check certifications through Oracle CertView rather than a logo on a website.</li><li>A good estimate shows days by workstream, assumptions and exclusions. A good consultant also explains how change requests and open decisions are handled.</li><li>Settle access, documentation, support after go-live and the contract basics, including IR35 where it applies, before work starts.</li></ul></div>
<p style="margin-top:28px;">Shortlisting NetSuite consultants? <a href="https://suiteheroes.com/contact/">Book a call</a> and put these ten questions to me. I'll answer them straight, including when I'm not the right fit.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/choose-netsuite-consultant-uk/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/choose-netsuite-consultant-uk.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/choose-netsuite-consultant-uk.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/choose-netsuite-consultant-uk.png" type="image/png" length="72092"/>
  </item>
  <item>
    <title>NetSuite e-invoicing: prebuilt add-ons or a custom native localisation?</title>
    <link>https://suiteheroes.com/insights/netsuite-e-invoicing-custom-localisation/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-e-invoicing-custom-localisation/</guid>
    <pubDate>Mon, 09 Nov 2026 11:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Localisation</category>
    <description>NetSuite e-invoicing deadlines start on 1 January 2027. When a prebuilt add-on is enough, and when a custom native build gives you control as you grow.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-e-invoicing-custom-localisation.png" alt="" width="1200" height="630"></p>
<p>E-invoicing is no longer something a few countries do. On 1 January 2027 new <b>NetSuite e-invoicing</b> obligations start in Germany, the UAE, Norway and Croatia, with France, Spain and the rest of the UAE following during 2027. For many NetSuite customers the question isn't whether to comply, but how: switch on a prebuilt add-on, or build a native localisation inside NetSuite that you control.</p>
<p>There's no single right answer. This article sets out the deadlines, where prebuilt add-ons work well, where they start to hold a growing business back, and what a custom native solution gives you in return.</p>
<h2>The NetSuite e-invoicing deadlines to plan for</h2>
<p>These are the dates that affect most of the groups we work with. Each was checked against tax authority or official sources in November 2026:</p>
<ul><li><b>31 December 2026, Philippines:</b> structured e-invoicing under the EOPT Act for large taxpayers, e-commerce sellers and businesses using computerised accounting systems.</li><li><b>1 January 2027, Germany:</b> issuing structured e-invoices becomes mandatory where prior-year turnover was above €800,000. Everyone else follows on 1 January 2028.</li><li><b>1 January 2027, UAE:</b> businesses with revenue of AED 50m or more go live through an Accredited Service Provider, under <a href="https://mof.gov.ae/wp-content/uploads/2025/09/Ministerial-Decision-No.-244-of-2025-on-the-Implementation-of-the-Electronic-Invoicing-System.pdf" target="_blank" rel="noopener">Ministerial Decision 244 of 2025</a>. Smaller businesses follow on 1 July 2027.</li><li><b>1 January 2027, Norway:</b> businesses must send EHF or Peppol e-invoices to other businesses.</li><li><b>1 September 2027, France:</b> SMEs and micro-businesses must issue e-invoices and e-report through an approved platform, a year after large companies (<a href="https://entreprendre.service-public.gouv.fr/actualites/A15683?lang=en" target="_blank" rel="noopener">official timetable</a>).</li><li><b>6 October 2027, Spain:</b> B2B e-invoicing for businesses above €8m, including reporting payment status.</li></ul>
<p>Our <a href="https://suiteheroes.com/services/netsuite-e-invoicing-compliance/">country-by-country guide</a> covers 38 countries, including the statutory reports that sit alongside each mandate.</p>
<h2>What NetSuite gives you out of the box</h2>
<p>Oracle's starting point is the <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4536869579.html" target="_blank" rel="noopener">Electronic Invoicing SuiteApp</a>. It's a framework for creating, sending and receiving XML or JSON e-documents. Oracle's documentation says it's free for one country and needs a licence for more. On top of it, Oracle offers country SuiteApps for places such as Belgium, France, Germany and Spain (Veri*Factu), as well as Brazil, Mexico, Chile, India, Saudi Arabia, the UAE, Israel and Malaysia. Several of these route documents through Oracle Business Network and Avalara.</p>
<p>Third-party add-ons fill many of the gaps, from Italian SDI connectors to Argentine localisations. For a single subsidiary with a standard sales process, one of these is often the quickest way to comply. We recommend them where they fit.</p>
<h2>Where prebuilt add-ons start to hurt as the business changes</h2>
<p>The trouble usually starts a year or two after go-live, when the business no longer looks like it did on the day the add-on was installed. These are the issues we see most often.</p>
<h3>You depend on someone else's roadmap</h3>
<p>Mandates change often. Germany's tax ministry issued new guidance in October 2026, Malaysia changed its exemption threshold in August 2026, and Spain has announced but not yet enacted a delay to Veri*Factu. When a rule changes, you wait for the vendor's next release. If that release lands after your deadline, or doesn't cover your edge case, you have no way to fix it yourself.</p>
<h3>Locked records, fields and scripts</h3>
<p>Most add-ons ship as locked bundles. You can't change their custom records, add a field the authority now wants, or alter the script logic. When your process needs something slightly different, such as a self-billing flow, a marketplace channel or a new document type, you end up building workarounds around a black box.</p>
<h3>Costs and coverage that grow with every country</h3>
<p>Each new subsidiary can mean another licence, another vendor or another connector. A group in five countries can easily end up with three different e-invoicing products, three support contracts and three ways of handling rejections. Finance teams then have to learn a different process for each entity.</p>
<h3>Your data leaves NetSuite for someone else's cloud</h3>
<p>Many connectors copy invoice data to the vendor's platform before it reaches the authority. Sometimes the law requires an intermediary anyway, such as approved platforms in France, Accredited Service Providers in the UAE, PACs in Mexico and Peppol access points elsewhere. But adding a second, optional copy outside NetSuite means more contracts to review and more places where data is kept.</p>
<h3>Reporting that doesn't reconcile</h3>
<p>When e-invoices live in one product and VAT returns, SAF-T files and ledgers are built somewhere else, the figures drift apart. The authority then sees invoice data that doesn't match the return you filed.</p>
<h2>What a custom native localisation gives you</h2>
<p>A native build lives entirely inside your NetSuite account, written in SuiteScript 2.1 and using records you own:</p>
<ul><li><b>Records and fields:</b> custom records for each e-document, its status history, the country profile and your code mappings, with fields on the transaction that your team can see, report on and change.</li><li><b>Scripts:</b> one engine that builds XML (UBL, CII, FatturaPA, CFDI) or JSON, checks it against the official schema, signs it with your certificate and sends it. Adding a country means adding a format, not a new product.</li><li><b>Workflows:</b> approvals, blocks on editing cleared invoices and rejection handling that match how your finance team actually works.</li><li><b>Security:</b> credentials in NetSuite API Secrets, documents sent from NetSuite straight to the authority wherever its API allows, and no copy held by us or by middleware. The legal archive stays in your account.</li><li><b>Reporting:</b> VAT returns, SAF-T files and reconciliations built from the same data as the e-invoices, so they agree.</li></ul>
<p>The trade-off is ownership. With a custom build you're responsible for keeping up with rule changes, testing each NetSuite release and keeping the code documented. That's manageable with good tests and a <a href="https://suiteheroes.com/offers/netsuite-support-retainer/">support retainer</a>, but it's a real commitment, and it's one reason we compare options honestly before recommending a build.</p>
<h2>Prebuilt, custom or both?</h2>
<p>A simple way to decide, entity by entity:</p>
<ol><li><b>One country, a standard process and an Oracle SuiteApp that covers it:</b> start with the SuiteApp.</li><li><b>Several countries, non-standard flows or a fast-changing regime:</b> build on Oracle's Electronic Invoicing framework with your own templates and sending plug-ins, or go fully custom.</li><li><b>No Oracle SuiteApp, or a requirement that no data leaves NetSuite except to the authority:</b> build natively.</li></ol>
<p>Many groups end up with a mix: Oracle's SuiteApp for Belgium or Germany, and a custom engine for the countries where nothing fits. What matters is one data model, one way of handling rejections and reporting that reconciles across every subsidiary. The <a href="https://suiteheroes.com/demo/netsuite-e-invoicing-control-centre/">E-Invoicing Control Centre demo</a> shows what that looks like in practice.</p>
<h2>Start with the deadlines you can't move</h2>
<p>If you have subsidiaries in Germany, the UAE, Norway or Croatia, 1 January 2027 is close. Map each entity to its obligation now, decide the route per country, and leave time to test with the authority's sandbox. Our consultants have delivered NetSuite localisation, e-invoicing and statutory reporting across 38 countries. Our <a href="https://suiteheroes.com/services/netsuite-e-invoicing-compliance/">NetSuite e-invoicing and tax reporting service</a> sets out how we get each entity ready.</p>
<p>For a German example in more depth, read <a href="https://suiteheroes.com/insights/german-e-invoicing-netsuite/">German §14 UStG e-invoicing in NetSuite</a>. For the wider build-or-buy question, see <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs third-party iPaaS</a>.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>E-invoicing mandates start on 1 January 2027 in Germany, the UAE, Norway, Croatia and New Zealand B2G, with France, Spain and the rest of the UAE following during 2027.</li><li>Prebuilt add-ons are quick to switch on, but you depend on someone else's roadmap, data model and licensing as you add countries and processes.</li><li>A custom native build keeps the records, fields, scripts, workflows and audit trail in your own NetSuite account, under your control.</li><li>The best answer is often a mix: Oracle's SuiteApp where it fits, and custom templates or connectors where it doesn't.</li></ul></div>
<p style="margin-top:28px;">Not sure which route fits your entities and deadlines? <a href="https://suiteheroes.com/contact/">Book a call</a> and we'll map each subsidiary to its obligations and the simplest compliant way to meet them.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-e-invoicing-custom-localisation/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-e-invoicing-custom-localisation.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-e-invoicing-custom-localisation.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-e-invoicing-custom-localisation.png" type="image/png" length="63713"/>
  </item>
  <item>
    <title>How much does a NetSuite implementation cost in the UK? What drives the price</title>
    <link>https://suiteheroes.com/insights/netsuite-implementation-cost-uk/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-implementation-cost-uk/</guid>
    <pubDate>Sun, 08 Nov 2026 10:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Implementation</category>
    <description>What drives NetSuite implementation cost in the UK: licences, scope, data migration, integrations and support, and how to get a quote you can trust.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-implementation-cost-uk.png" alt="" width="1200" height="630"></p>
<p>The honest answer to "how much does a NetSuite implementation cost in the UK?" is that it depends on scope, and anyone who quotes a single number before understanding yours is guessing. What I can do is show you where the money goes and which decisions move the price, so you can build a realistic budget and test the quotes you receive.</p>
<p>I've worked on NetSuite for more than 15 years, as a Senior NetSuite Consultant at RSM US, a NetSuite partner, and now as an independent NetSuite consultancy in London. The same few factors decide the cost of almost every project.</p>
<h2>The two bills: subscription and implementation</h2>
<p>A NetSuite budget has two separate parts, and it's worth keeping them apart from the start.</p>
<p><b>The subscription</b> is what you pay Oracle (or a reseller) to use NetSuite. It's normally made up of a base licence, user licences and any add-on modules, such as OneWorld, Advanced Revenue Management, Fixed Assets or Advanced Inventory. Extra sandbox accounts are also licensed separately; Oracle's help says you <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/subsect_1121105332.html" target="_blank" rel="noopener">buy a sandbox through your NetSuite account manager</a>. Oracle doesn't publish a price list, so the only reliable figure is a written quote for your configuration.</p>
<p><b>The implementation</b> is the work of designing, configuring, migrating, integrating, testing and training. Whether you use Oracle's own services team, a NetSuite partner or an independent consultant, this is priced in consultant days, either as time and materials or as a fixed fee built from an estimate of days.</p>
<p>Published guides on NetSuite implementation cost are mostly written by US partners, priced in dollars, and disagree with each other by a wide margin. That's not because some are wrong. It's because "a NetSuite implementation" can mean anything from one UK company on core financials to a multi-country group with a dozen integrations.</p>
<h2>What drives NetSuite implementation cost in the UK</h2>
<p>These are the factors I look at first when I estimate a project. Users matter less than most people expect. Adding ten users adds licences and a little training, but adding one subsidiary or one integration can add weeks.</p>
<h3>1. Number of entities and countries</h3>
<p>A single UK company is the simplest case. A group with subsidiaries needs <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_N266468.html" target="_blank" rel="noopener">NetSuite OneWorld</a>, and each subsidiary brings its own base currency, tax set-up, intercompany rules and consolidation. Oracle's help notes that you can't change a subsidiary's base currency once the record is saved, so the hierarchy has to be designed properly up front.</p>
<p>Each overseas country also adds local tax and reporting. Cape.io, for example, runs a OneWorld account with eight subsidiaries across eight countries, and the Fortnox integration I built had to reconcile VAT line by line for Swedish statutory reporting (<a href="https://suiteheroes.com/case-studies/cape-io/">read the Cape.io case study</a>).</p>
<h3>2. Modules and processes in scope</h3>
<p>Core financials, order to cash and procure to pay are the base. Each module beyond that, such as revenue recognition, SuiteBilling, projects, inventory, manufacturing or planning and budgeting, needs its own design workshops, configuration and testing. Revenue recognition under IFRS 15 is a common example where the set-up looks small on a feature list but takes careful design.</p>
<h3>3. Data migration</h3>
<p>Moving from Xero, Sage or QuickBooks is a different job from moving off SAP or a bespoke system. The cost depends on how many years of history you bring across, whether you migrate open transactions only or full detail, and how clean the source data is. Duplicate customers, inconsistent item codes and unreconciled balances all have to be fixed somewhere, and it's cheaper to fix them before the load than after go-live. My <a href="https://suiteheroes.com/services/netsuite-data-migration/">NetSuite data migration service</a> covers mapping, trial loads and reconciliation sign-off.</p>
<h3>4. Integrations</h3>
<p>Every system that talks to NetSuite, such as a CRM, e-commerce platform, payment provider, payroll or a hotel PMS, needs mapping, build, error handling and testing. On a Coupa to NetSuite source-to-pay integration I led for The Jockey Club, the build ran to 24 flows across nine entities on Celigo (<a href="https://suiteheroes.com/case-studies/the-jockey-club/">the Jockey Club case study</a>). That's at the larger end, but it shows how integration scope multiplies.</p>
<p>The tool matters too. An iPaaS such as Celigo or Boomi has its own subscription; native SuiteScript has no extra licence but needs a developer. I've compared the two in <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs iPaaS for NetSuite integrations</a>.</p>
<h3>5. Customisation</h3>
<p>Every custom field, form and saved search is cheap on its own. Custom workflows and SuiteScript cost more, and they keep costing after go-live, because each one has to be tested before every NetSuite release. The cheapest projects are the ones that adapt the process to standard NetSuite where the business can live with it, and customise only where there's a real reason.</p>
<h3>6. UK tax and compliance</h3>
<p>UK VAT and Making Tax Digital are well supported. Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_157235633810.html" target="_blank" rel="noopener">UK Localization SuiteApp</a> provides templates for the VAT100 return, EC Sales List and Intrastat, and supports digital submission to HMRC. It still needs installing, configuring and testing against your tax codes, and that time belongs in the estimate. If you have VAT complications such as partial exemption, check the treatment with your tax adviser before design starts.</p>
<h3>7. Your own team's time</h3>
<p>This is the cost most budgets leave out. Your finance team will spend time in workshops, cleaning data, writing and running user acceptance tests, and learning the system, usually while doing their day jobs. If they can't give that time, the project slows down, and a slower project costs more in consultant days. Some companies backfill roles or bring in temporary help for the busiest months.</p>
<h2>Costs that turn up after the quote</h2>
<p>A few items are often missing from the first budget:</p>
<ul><li><b>Support after go-live.</b> The first two or three month-ends usually need hands-on help. After that you need someone for fixes, small changes and release testing, whether that's an internal administrator or a <a href="https://suiteheroes.com/offers/netsuite-support-retainer/">NetSuite support retainer</a>.</li><li><b>Third-party subscriptions.</b> iPaaS tools, tax engines, banking connectors and some SuiteApps carry their own fees.</li><li><b>Change requests.</b> Anything not in the signed scope will be charged extra. That's fair, but it's where budgets drift.</li><li><b>Rework.</b> A project that goes live with poor data or untested processes costs more to fix afterwards than it would have cost to do properly.</li></ul>
<h2>How to get a quote you can trust</h2>
<p>You can't compare quotes unless they describe the same project. Before you ask for one, write down:</p>
<ol><li>your entities, countries and currencies</li><li>the processes and modules in scope, and those out of scope</li><li>every system that will integrate with NetSuite, with rough volumes</li><li>what data you'll migrate and how many years of history</li><li>your target go-live date and any fixed deadlines, such as a year-end.</li></ol>
<p>Then ask each NetSuite partner or consultant to show days by workstream (design, configuration, migration, integrations, testing, training, go-live support), their assumptions and their exclusions. The total cost is simply the days multiplied by the day rate. As an illustration only: if two quotes use similar day rates but one has half the days for data migration, ask what they've left out.</p>
<p>Be wary of a low fixed price with a long list of exclusions. It's often how a project that looks cheap at signing becomes expensive by go-live.</p>
<h2>Keeping the cost down without cutting corners</h2>
<ul><li><b>Phase the scope.</b> Go live on core financials first and add modules or integrations in a second phase, once the team is using the system.</li><li><b>Clean data before migration</b>, not during it.</li><li><b>Stay close to standard NetSuite</b> and customise only where it pays back.</li><li><b>Decide quickly.</b> Many of the stalled implementations I've been asked to rescue didn't fail on technology. They ran over because design decisions sat open for weeks.</li></ul>
<p>If your project is already over budget or behind, the <a href="https://suiteheroes.com/offers/implementation-rescue-sprint/">Implementation Rescue Sprint</a> is a fixed-scope way to find out why and get go-live back on track. For a longer engagement, see <a href="https://suiteheroes.com/services/netsuite-project-recovery/">NetSuite project recovery</a>. For a new project, my <a href="https://suiteheroes.com/services/netsuite-implementation/">NetSuite implementation services</a> cover everything from requirements and design through to data migration, integrations and go-live support.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>There's no list price for a NetSuite implementation. The cost is consultant days, and the days come from scope.</li><li>Budget separately for the Oracle subscription, the implementation, integrations, data migration, your own team's time and support after go-live.</li><li>Subsidiaries, integrations, data migration and customisation move the price more than user numbers do.</li><li>A useful quote lists assumptions, exclusions and days by workstream, so you can compare like with like.</li></ul></div>
<p style="margin-top:28px;">Planning a NetSuite project, or worried one is running over? <a href="https://suiteheroes.com/contact/">Book a call</a> and I'll give you an honest view of scope and effort before you commit.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-implementation-cost-uk/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-implementation-cost-uk.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-implementation-cost-uk.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-implementation-cost-uk.png" type="image/png" length="75163"/>
  </item>
  <item>
    <title>NetSuite health check checklist: 12 areas to review in your own account</title>
    <link>https://suiteheroes.com/insights/netsuite-health-check-checklist/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-health-check-checklist/</guid>
    <pubDate>Sun, 08 Nov 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Optimisation</category>
    <description>A practical NetSuite health check checklist: 12 areas to review in your own account, from accounting preferences and roles to scripts and integrations.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og-health-check.png" alt="" width="1200" height="630"></p>
<p>A NetSuite account rarely breaks in one go. It drifts. A preference is changed to get a transaction through at month-end. A leaver keeps access. A script is deployed for a one-off fix and never switched off. Each change is small, but after a few years the account is slower, harder to close and harder to trust.</p>
<p>A health check is a structured look at that drift. You don't need a consultant to start one. This checklist covers 12 areas you can review in your own account, with the menu paths to find each one and what to look for when you get there. You'll need the Administrator role, or a role with view access to setup, for most of it.</p>
<p>Menu paths can vary with your edition, enabled features and role, so treat them as a guide and check <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/" target="_blank" rel="noopener">Oracle's NetSuite help</a> if something isn't where you expect.</p>
<h2>Controls and set-up</h2>
<h3>1. Enabled features</h3>
<p>Go to <i>Setup &gt; Company &gt; Enable Features</i> and work through each subtab. You're looking for two things: features that are switched on but not used, and features you're paying for, or that would solve a known problem, that are switched off.</p>
<p>Features that are on but unused add fields, forms and confusion. Before switching anything off, check with the people who use that area, as some features can't easily be turned off once there's data behind them.</p>
<h3>2. Accounting preferences</h3>
<p>Go to <i>Setup &gt; Accounting &gt; Accounting Preferences</i>. On the General subtab, check <b>Allow Transaction Date Outside of Posting Period</b>. It has three options: Disallow, Warn and Allow. Allow lets users post outside the period with no warning at all, which is rarely what a finance team wants.</p>
<p>On the same subtab, check whether <b>Require Approvals on Journal Entries</b> is set, unless journal approval runs through a workflow instead. On the Items/Transactions subtab, look at <b>Duplicate Number Warnings</b>.</p>
<p>The Audit Trail under the More menu on this page shows who changed each preference, when, and the values before and after. It's worth a look if a setting surprises you.</p>
<h3>3. Accounting periods and locks</h3>
<p>Go to <i>Setup &gt; Accounting &gt; Manage G/L &gt; Manage Accounting Periods</i>. Look at how far back periods are open. Old periods left open invite back-dated postings that change figures you've already reported.</p>
<p>The page also shows locks for A/R, A/P, payroll (if used) and all G/L transactions. Oracle's help describes how to <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N1451780.html" target="_blank" rel="noopener">lock and unlock periods</a> through the Period Close Checklist. If periods are closed months late, or never locked between month-end and close, that's a finding in itself.</p>
<h3>4. Chart of accounts and segments</h3>
<p>Review the chart of accounts for duplicate or near-duplicate accounts, accounts with the wrong type, and old accounts that should be inactive. Then look at departments, classes, locations and any custom segments. Ask two questions: is each one used consistently, and is it mandatory where your reporting depends on it? A segment that's optional on half your transactions won't give you a reliable report.</p>
<h2>Security and access</h2>
<h3>5. Roles and permissions</h3>
<p>Review who has the Administrator role and how many custom roles carry wide permissions. Look for roles that combine duties that should be separate, such as creating vendors and approving payments to them.</p>
<p>NetSuite <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_1532968056.html" target="_blank" rel="noopener">requires two-factor authentication</a> for the Administrator and other highly privileged roles, and this can't be removed. Use the Two-Factor Authentication Roles page to see which other roles are flagged, and decide whether any more sensitive roles, such as those that approve payments, should require it too.</p>
<h3>6. User access and leavers</h3>
<p>Go to <i>Setup &gt; Users/Roles &gt; View Login Audit Trail</i>. It shows login activity by user, role, date and IP address. Compare it with your list of current staff. Anyone who has left should not have access, and anyone with access who hasn't logged in for months may not need it.</p>
<p>This is also a good point to compare active users with the number of licences you pay for.</p>
<h2>Data and finance</h2>
<h3>7. Duplicate customers and vendors</h3>
<p>Duplicate records split history, confuse credit control and can hide payment errors. If Duplicate Detection is enabled, its settings are under <i>Setup &gt; Company &gt; Duplicate Detection</i>, and an administrator can review flagged records in bulk at <i>Lists &gt; Mass Update &gt; Entity Duplicate Resolution</i>. Oracle's help on <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_N490932.html" target="_blank" rel="noopener">duplicate record detection</a> explains the matching rules and the limits on merging.</p>
<p>For vendors, also check who can change bank details and whether those changes are approved.</p>
<h3>8. Bank reconciliation</h3>
<p>Check that every bank and credit card account is reconciled up to the last month-end, and how old the oldest unmatched items are.</p>
<p>Oracle now uses the Match Bank Data and Reconcile Account Statement pages (<i>Transactions &gt; Bank &gt; Reconcile Account Statement</i>). The older Reconcile Bank Statement and Reconcile Credit Card Statement pages still work but are no longer supported, according to Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4842302228.html" target="_blank" rel="noopener">bank data matching and reconciliation</a> help. If your team still uses the old pages, plan the move.</p>
<h3>9. Open subledger balances</h3>
<p>Run your A/R and A/P ageing reports and look past the totals. Common findings are:</p>
<ul><li>customer payments and deposits left unapplied</li><li>vendor credits never applied to bills</li><li>sales orders fulfilled but never billed</li><li>purchase orders received but never billed, with no accrual.</li></ul>
<p>Each one means the ledger and the subledger tell slightly different stories. Agree the subledger totals to the balance sheet control accounts as part of the check. Sales orders fulfilled but never billed are often a sign of wider revenue leakage, which a <a href="https://suiteheroes.com/offers/revenue-leakage-audit/">revenue leakage audit</a> traces from contract to invoice.</p>
<h2>Technical layer</h2>
<h3>10. Scripts and workflows</h3>
<p>Go to <i>Customization &gt; Scripting &gt; Script Deployments</i>. For each deployment, ask whether it's still needed, who owns it and whether it's documented. Clearing the <b>Deployed</b> box stops a deployment running without deleting it, which is a safer first step than removing a script.</p>
<p>Check log levels too. Oracle recommends Debug only while testing, and Audit, Error or Emergency in production. Deployments left on Debug fill the execution log and add overhead. Apply the same questions to workflows: which are active, which still matter and which overlap with scripts on the same record.</p>
<h3>11. Integrations</h3>
<p>Go to <i>Setup &gt; Integration &gt; Manage Integrations</i>. Tick <b>Show Inactives</b> so you also see blocked records. List each integration, what it does, who owns it and how it authenticates.</p>
<p>This matters now. From 2027.1, Oracle won't allow new integrations that use token-based authentication, and SOAP web services are planned for removal in 2028.2. I've covered the dates and a plan in <a href="https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/">NetSuite TBA to OAuth 2.0 and SOAP to REST</a>. The Web Services Usage Log (<i>Setup &gt; Integration &gt; Web Services Usage Log</i>) shows which integrations still call SOAP.</p>
<h3>12. Performance</h3>
<p>Users often say "NetSuite is slow" without being able to say where. Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_4283522055.html" target="_blank" rel="noopener">Application Performance Management (APM)</a> SuiteApp gives you the evidence. It tracks record page performance, splits response time between client, server and network, and monitors user event scripts, workflows, RESTlets, scheduled scripts and Suitelets.</p>
<p>Install it from the SuiteApp Marketplace. Oracle notes that older versions installed from the Search &amp; Install Bundles page stopped working on 7 March 2023, so if you have an old bundle, replace it. Then look at your busiest record pages and the slowest scripts and saved searches behind them.</p>
<h2>Turning findings into a plan</h2>
<p>A checklist produces a list of findings. To be useful, each one needs an owner, a rating for impact and effort, and a date. I sort findings into three groups:</p>
<ul><li><b>Quick wins:</b> settings and access fixes that take hours, such as tightening a preference or removing a leaver.</li><li><b>Next 90 days:</b> clean-ups that need some testing, such as merging duplicates or retiring unused scripts.</li><li><b>Roadmap:</b> larger changes, such as rebuilding an integration or redesigning segments.</li></ul>
<p>Make changes in a sandbox first where you can, and avoid month-end. Keep a short record of what you changed and why, so the next review has a starting point.</p>
<p>Run the check once a year, and again before a large change such as a new subsidiary, module or integration. Each NetSuite upgrade is also a good prompt; a <a href="https://suiteheroes.com/offers/netsuite-release-readiness/">release readiness check</a> tests your scripts and integrations before each release lands.</p>
<p>If you'd rather have someone independent do it, the <a href="https://suiteheroes.com/offers/netsuite-health-check/">NetSuite Health Check</a> covers these areas and more, read-only, with a written report and a prioritised plan. Or <a href="https://suiteheroes.com/contact/">book a call</a> to talk it through.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Most NetSuite problems start as small settings, access or data issues that nobody revisits after go-live.</li><li>Start with the controls: accounting preferences, period locks, roles and two-factor authentication.</li><li>Then look at data quality, bank reconciliation and open subledger balances.</li><li>Finish with the technical layer: scripts, integrations and performance data from the APM SuiteApp.</li></ul></div>
<p style="margin-top:28px;">Want an independent view? The fixed-price <a href="https://suiteheroes.com/offers/netsuite-health-check/">NetSuite Health Check</a> reviews your account read-only and gives you a findings register and a prioritised plan.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-health-check-checklist/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og-health-check.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og-health-check.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og-health-check.png" type="image/png" length="59432"/>
  </item>
  <item>
    <title>NetSuite TBA to OAuth 2.0: what the 2027.1 and 2028.2 changes mean</title>
    <link>https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/</guid>
    <pubDate>Sun, 08 Nov 2026 08:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Integration</category>
    <description>What Oracle's 2027.1 and 2028.2 changes mean for NetSuite integrations that use TBA or SOAP, and a practical six-step plan to move to OAuth 2.0.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og-tba-oauth.png" alt="" width="1200" height="630"></p>
<p>Two changes to NetSuite integrations are now on Oracle's published roadmap. From release 2027.1, you can't create new integrations that use token-based authentication (TBA). Then, in 2028.2, Oracle plans to remove SOAP web services completely.</p>
<p>If your NetSuite account talks to a bank, an e-commerce platform, a payroll system, a 3PL or an iPaaS such as Celigo or Dell Boomi, at least one of those connections is probably affected. This article sets out what's changing, why 2027.1 is the date that matters most, and a practical plan to move in good time.</p>
<h2>What's changing, and when</h2>
<p>These are the dates Oracle has published so far:</p>
<ul><li><b>2025.2:</b> the last planned SOAP web services endpoint.</li><li><b>2026.1:</b> no new SOAP endpoints. OAuth 2.0 with REST is the recommended route for new integrations.</li><li><b>2027.1:</b> no new integrations using TBA, whether for SOAP, REST web services or RESTlets. New integrations using the OAuth 2.0 authorisation code grant must also send PKCE parameters, and NLAuth authentication for RESTlets is switched off, with limited exceptions.</li><li><b>2027.2:</b> the 2025.2 endpoint is the only SOAP endpoint still supported. Older endpoints keep running, but without fixes or support.</li><li><b>2028.2:</b> SOAP web services are removed, and existing SOAP integrations stop working. Oracle has tentatively given the same release as the end of support for existing TBA integrations.</li></ul>
<p>Release plans can change, so check Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_158921905537.html" target="_blank" rel="noopener">authentication release notes</a> and <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_2104046421.html" target="_blank" rel="noopener">SOAP removal FAQ</a> before you finalise a plan.</p>
<h2>Why 2027.1 is the date that matters</h2>
<p>It's tempting to look at 2028.2 and decide there's plenty of time. Existing TBA integrations do keep working after 2027.1. But from that release, anything new has to use OAuth 2.0: a new integration record, a new connector, a new subsidiary or a new environment that needs fresh TBA credentials.</p>
<p>That catches more than people expect. Developers have pointed out that a refreshed sandbox may not be able to issue new TBA tokens, which would make testing old integrations after a refresh difficult. If you test in sandbox before every release, plan to have OAuth 2.0 working before 2027.1.</p>
<h2>SOAP integrations need two changes, not one</h2>
<p>OAuth 2.0 can't be used with SOAP web services. It works with REST web services, RESTlets and SuiteAnalytics Connect. That splits your integrations into two groups:</p>
<ul><li><b>Integrations on REST or RESTlets with TBA</b> have the smaller job. The endpoints stay the same, and only the authentication changes.</li><li><b>Integrations on SOAP</b> need a new transport as well, usually REST web services and SuiteQL, or a RESTlet where REST doesn't cover what's needed. Payloads, field mappings and error handling all change, so treat these as small rebuilds and test them properly.</li></ul>
<p>Until a SOAP integration is moved, switching it to the 2025.2 endpoint gives it the longest support window.</p>
<h2>Which OAuth 2.0 flow to use</h2>
<p>NetSuite offers two OAuth 2.0 flows, and the right one depends on how the integration runs:</p>
<ul><li><b>Client credentials (machine to machine):</b> for server-to-server integrations with no user involved, such as nightly syncs, payment files and warehouse feeds. Authentication uses a certificate rather than a user signing in. You set it up under <i>Setup &gt; Integration &gt; Manage Authentication &gt; OAuth 2.0 Client Credentials (M2M) Setup</i>.</li><li><b>Authorisation code grant:</b> for applications where a user signs in and approves access. From 2027.1, new integrations using this flow must use PKCE.</li></ul>
<p>Most back-office finance integrations suit client credentials. Whichever you choose, give each integration its own role with only the permissions it needs. The same rule applies if you connect AI agents such as Claude to NetSuite through MCP, as in my <a href="https://suiteheroes.com/services/netsuite-ai-integration/">NetSuite AI integration</a> work and the <a href="https://suiteheroes.com/case-studies/netsuite-agentic-ai/">agentic AI case study</a>.</p>
<h2>A practical six-step plan</h2>
<ol><li><b>Take an inventory.</b> List every integration record (<i>Setup &gt; Integration &gt; Manage Integrations</i>) and access token (<i>Setup &gt; Users/Roles &gt; Access Tokens</i>). The web services usage log (<i>Setup &gt; Integration &gt; Web Services Usage Log</i>) shows which integrations still call SOAP.</li><li><b>Rank by risk.</b> Note what each integration does, who owns it and what breaks if it stops. Anything touching cash, payroll, tax or customer orders goes to the top.</li><li><b>Move SOAP integrations first.</b> They need the most work, so start them early. Move any still on old endpoints to 2025.2 in the meantime.</li><li><b>Build OAuth 2.0 in sandbox.</b> Create the new integration records and certificates, update the code or connector settings, and test end to end, including errors and retries.</li><li><b>Switch over in batches.</b> Release a few integrations at a time, outside month-end, and keep the old credentials until each one is proven in production.</li><li><b>Retire what's left.</b> Revoke old tokens, deactivate unused integration records and remove scripts nobody uses.</li></ol>
<p>Third-party connectors need the same care. Ask each vendor, including your iPaaS, when their NetSuite connector supports OAuth 2.0 and what you need to do to switch.</p>
<h2>A good moment to tidy up</h2>
<p>An authentication project touches every integration, so it's a good time to deal with other technical debt at the same time: SuiteScript 1.0 RESTlets rewritten in SuiteScript 2.1, hard-coded IDs replaced with parameters, proper logging added and code moved into source control. Doing it in one planned project costs less than doing it twice.</p>
<p>It's also worth checking each release before it lands. A <a href="https://suiteheroes.com/offers/netsuite-release-readiness/">release readiness check</a> tests your scripts and integrations in the release preview account before each upgrade, so 2027.1 doesn't come as a surprise.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>From NetSuite 2027.1, new integrations can't use token-based authentication (TBA).</li><li>Oracle plans to remove SOAP web services in 2028.2, and expects support for existing TBA integrations to end then too.</li><li>OAuth 2.0 doesn't work with SOAP, so SOAP integrations need a new transport as well as new authentication.</li><li>Start with an inventory, move SOAP integrations first, and have OAuth 2.0 tested in sandbox before 2027.1.</li></ul></div>
<p style="margin-top:28px;">Need help planning the move? The fixed-price <a href="https://suiteheroes.com/offers/suitescript-oauth-upgrade/">SuiteScript 2.1 and OAuth 2.0 Upgrade</a> starts with a free inventory of your scripts and integrations.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og-tba-oauth.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og-tba-oauth.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og-tba-oauth.png" type="image/png" length="67692"/>
  </item>
  <item>
    <title>Native SuiteScript vs iPaaS for NetSuite integrations: how to choose</title>
    <link>https://suiteheroes.com/insights/native-suitescript-vs-ipaas/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/native-suitescript-vs-ipaas/</guid>
    <pubDate>Sat, 20 Jun 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Integration</category>
    <description>Native SuiteScript vs iPaaS for NetSuite integrations: when Celigo or Boomi earns its place, when a native build is cheaper and clearer, and how to decide.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/native-suitescript-vs-ipaas.png" alt="" width="1200" height="630"></p>
<p>The <b>native SuiteScript vs iPaaS</b> question comes up on almost every NetSuite integration I scope. The first instinct is usually to reach for a third-party integration platform, such as Celigo, Dell Boomi, Workato or Make. They are capable tools, and for some jobs they are the right call. But the reflex to default to an iPaaS deserves more scrutiny than it usually gets, because the licence is rarely the real cost.</p>
<p>My short answer: for integrations that touch the general ledger, tax or statutory reporting, a native SuiteScript 2.1 build is usually cheaper over its life and easier to defend in an audit. For connecting many SaaS tools with strong pre-built connectors, an iPaaS often wins. I've delivered both, natively for Cape.io and on Celigo for The Jockey Club, so this is not a religious position.</p>
<h2>What each option means</h2>
<p><b>Native SuiteScript</b> means the integration lives inside NetSuite. Each script type does the job it suits: Map/Reduce for bulk syncs, Scheduled scripts for pollers, User Event scripts for create and update triggers, RESTlets for inbound webhooks, and a Suitelet for an admin console. Outbound calls use the N/https module, and credentials sit under <i>Setup &gt; Company &gt; Preferences &gt; API Secrets</i> (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_160216486846.html" target="_blank" rel="noopener">Oracle: secrets management</a>).</p>
<p><b>An iPaaS</b> is a separate platform that sits between NetSuite and the other system. It reads from and writes to NetSuite through SOAP or REST web services or RESTlets, and runs its own mappings, schedules and error queues.</p>
<h2>The hidden costs of an iPaaS</h2>
<p>An iPaaS adds a permanent third party to your finance architecture. That brings recurring costs that build up over the life of the integration:</p>
<ul><li><b>Licence creep.</b> iPaaS pricing is usually tied to endpoints, flows or volume, which are exactly the things that grow as your business grows. Ask the vendor what drives the price before you sign.</li><li><b>Opaque error handling.</b> When a sync fails at month-end, you're debugging someone else's platform, often through a support queue.</li><li><b>Limited control over mapping.</b> Audit-grade requirements, such as line-by-line VAT reconciliation or explicit chart-of-accounts mapping, can be awkward to express cleanly in a connector.</li><li><b>A data-residency question.</b> Your transactions pass through a third party's infrastructure, which procurement and compliance will rightly ask about.</li></ul>
<h3>NetSuite concurrency limits</h3>
<p>There is a NetSuite-side cost too. Requests an iPaaS sends to NetSuite through web services and RESTlets count towards your account's concurrency limit. Oracle sets the base limit by service tier, and each SuiteCloud Plus licence adds 10 (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/bridgehead_1500275603.html" target="_blank" rel="noopener">Oracle: concurrency governance</a>). The limit covers web services and RESTlet requests combined (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_1500275531.html" target="_blank" rel="noopener">Oracle</a>), so several busy connectors can compete with each other. Your current limit is shown on the Integration Governance page. If you plan to add integrations, check it before you buy another connector.</p>
<h2>Where native SuiteScript wins</h2>
<p>Building natively keeps everything inside NetSuite's own governance and audit trail. You own every mapping, every retry policy and every log line. There's no monthly platform fee, no extra vendor in the data path, and no translation layer between what finance needs and what the connector can express.</p>
<p>The platform also does some heavy lifting for you. A Map/Reduce script yields and reschedules its work automatically when it hits certain governance limits. Oracle sets a soft limit of 10,000 usage units per map and reduce job, and a <b>Yield After Minutes</b> setting on the deployment that defaults to 60 (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4480364878.html" target="_blank" rel="noopener">Oracle: map/reduce governance</a>). Long runs show on <i>Customization &gt; Scripting &gt; Map/Reduce Script Status</i> (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4478613244.html" target="_blank" rel="noopener">Oracle</a>).</p>
<p>For integrations that touch the general ledger, tax and statutory reporting, that control is not a nice-to-have. It's the difference between an integration finance can defend in an audit and one they have to apologise for.</p>
<p>The <a href="https://suiteheroes.com/case-studies/cape-io/">Cape.io case study</a> is a good example. It's a native SuiteScript 2.1 integration between NetSuite and Fortnox across eight OneWorld subsidiaries, covering six record types in both directions, with audit-grade COA and VAT mapping and an admin Suitelet the finance team operates themselves. I describe the approach in <a href="https://suiteheroes.com/insights/netsuite-fortnox-integration/">NetSuite Fortnox integration</a>.</p>
<h2>What native SuiteScript costs you</h2>
<p>Native has its own costs, and they should be on the table:</p>
<ul><li><b>You own the code.</b> Someone has to maintain it, fix it and understand it after the original developer has gone. Document it, and keep it in version control.</li><li><b>Platform changes land on you.</b> Oracle expects to remove SuiteScript 1.0 and 2.0 support in 2028.2, and authentication is moving from TBA to OAuth 2.0. See my <a href="https://suiteheroes.com/insights/suitescript-2-1-upgrade-plan/">SuiteScript 2.1 upgrade plan</a> and <a href="https://suiteheroes.com/insights/netsuite-tba-oauth-2-soap-rest/">TBA to OAuth 2.0 guide</a>.</li><li><b>Monitoring has to be built.</b> An iPaaS gives you a dashboard on day one. A native build needs its own logging, alerting and reprocessing, which is why I always include an admin console.</li><li><b>Release testing.</b> Scripts need checking against each NetSuite release preview, like any customisation.</li></ul>
<h2>Where an iPaaS still earns its keep</h2>
<p>An iPaaS is a sensible choice when:</p>
<ul><li>You're connecting many SaaS systems that already have strong pre-built connectors.</li><li>You have no in-house scripting capability to maintain a native build, and don't want to retain one.</li><li>Time to live matters more than long-run control, and the data is low-stakes, such as marketing events rather than the GL.</li></ul>
<p>The honest test is whether the connector is doing real, ongoing work that justifies its seat in your architecture.</p>
<p>A hybrid often works best. On <a href="https://suiteheroes.com/case-studies/the-jockey-club/">The Jockey Club</a> Coupa integration, Celigo carries the data across 24 flows and nine group entities, while ten SuiteScript 2.1 scripts and a set of custom records in NetSuite hold the controls, logs and operating console. The platform moves data; NetSuite holds the rules.</p>
<h2>Comparing the cost over the life of the integration</h2>
<p>Most comparisons look at year one: the iPaaS subscription against the cost of a native build. That flatters whichever option is cheaper to start. A fairer comparison covers three to five years and includes:</p>
<ul><li><b>For an iPaaS:</b> the subscription at the volume you expect in year three, any extra connectors or environments, the build itself (someone still has to design the mappings), and the time your team spends working through its error queues.</li><li><b>For native SuiteScript:</b> the build, documentation, the support arrangement after go-live, and an allowance for platform changes such as the SuiteScript 2.1 and OAuth 2.0 deadlines.</li><li><b>For both:</b> the cost of a failed month-end sync. If a broken integration delays the close or the VAT return, that cost usually dwarfs the licence.</li></ul>
<p>Put the numbers side by side, and the right answer is often obvious for each flow.</p>
<h2>Native SuiteScript vs iPaaS: a simple way to decide</h2>
<p>Ask three questions about each integration:</p>
<ol><li>Does it touch the ledger, tax, or anything an auditor will examine?</li><li>Will its volume, and therefore its licence and its concurrency use, grow with the business?</li><li>Do you have, or can you retain, the capability to maintain a native build?</li></ol>
<p>The more "yes" answers to the first two, and the stronger your answer to the third, the stronger the case for native SuiteScript.</p>
<h2>Checklist before you commit</h2>
<ul><li>List every system you need to connect now and in the next two years.</li><li>Mark each flow as finance-critical or not.</li><li>Check which systems have a mature connector, and what it doesn't cover.</li><li>Check your NetSuite concurrency limit and current usage.</li><li>Get the iPaaS price for year three, not just year one.</li><li>Decide who will support the integration after go-live, and how they'll see failures.</li><li>Agree error handling, retries and reconciliation with finance before the build starts.</li></ul>
<p>You can see what good monitoring looks like, native or not, in the <a href="https://suiteheroes.com/demo/netsuite-integration-control-tower/">Integration Control Tower demo</a>.</p>
<h2>The bottom line</h2>
<p>An iPaaS is a tool, not a default. For finance-critical NetSuite integrations, a well-built native SuiteScript solution is usually cheaper over its life, more transparent when it matters, and fully inside your control. Reach for the platform when it genuinely earns its place, not by reflex.</p>
<p>My <a href="https://suiteheroes.com/services/netsuite-integration/">NetSuite integration services</a> cover native SuiteScript, Celigo and Dell Boomi, so the recommendation follows the integration, not the tool I happen to sell.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>The iPaaS licence is rarely the real cost. Error handling, mapping control, data residency and NetSuite concurrency limits matter as much.</li><li>Native SuiteScript keeps finance-critical integrations inside NetSuite's own governance and audit trail, but you own the code and its upkeep.</li><li>An iPaaS still suits many-system SaaS connectivity, strong pre-built connectors, or teams without SuiteScript skills. Many good designs are hybrid.</li><li>Decide on three axes: ledger and audit exposure, volume growth, and in-house capability to maintain a native build.</li></ul></div>
<p style="margin-top:28px;">Weighing up native SuiteScript against an iPaaS for a new integration? <a href="https://suiteheroes.com/contact/">Book a free call</a> and we'll talk it through, with no obligation. If an existing integration is already failing, the <a href="https://suiteheroes.com/offers/integration-rescue-sprint/">NetSuite Integration Rescue Sprint</a> fixes the root causes and adds monitoring at a fixed price.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/native-suitescript-vs-ipaas.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/native-suitescript-vs-ipaas.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/native-suitescript-vs-ipaas.png" type="image/png" length="74853"/>
  </item>
  <item>
    <title>NetSuite for schools and nurseries: a finance guide for multi-setting groups</title>
    <link>https://suiteheroes.com/insights/netsuite-for-schools-and-nurseries/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-for-schools-and-nurseries/</guid>
    <pubDate>Sun, 14 Jun 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Education</category>
    <description>NetSuite for schools and nurseries: why groups outgrow setting-level billing, how iSAMS and Famly feed NetSuite, and how to handle VAT, funded hours and fees.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-for-schools-and-nurseries.png" alt="" width="1200" height="630"></p>
<p><b>NetSuite for schools and nurseries</b> usually enters the conversation at a particular moment. The billing system that got the group started, iSAMS, Famly or a patchwork of spreadsheets, can no longer answer the questions the board is asking. How much are we actually owed across all settings? Where is revenue leaking? Are funded hours being billed and claimed completely? NetSuite answers those questions by becoming the group ledger, while the settings keep the systems they already know.</p>
<p>I've connected iSAMS and Famly to NetSuite OneWorld, and this article sets out the architecture I use, the finance rules that shape it, and how to roll it out without disrupting the settings.</p>
<h2>Why education groups outgrow their billing system</h2>
<p>iSAMS and Famly are excellent at what they do: managing pupils and children, fees, registers and parent communication at setting level. What they are not built for is consolidated, multi-entity finance: a group P&amp;L, intercompany positions, debtor-day analysis across every school and nursery, and audit-ready statutory reporting.</p>
<p>As a group acquires settings, the gap widens. Finance ends up exporting from each system every month and rekeying into the ledger. Nobody can see enrolment and billing side by side, so pupils who are enrolled but never invoiced go unnoticed.</p>
<h2>What NetSuite brings to schools and nurseries</h2>
<p>NetSuite OneWorld gives a school or nursery group one general ledger across every entity, with consolidation, intercompany handling and a single view of receivables. Each setting, or each legal entity, becomes a subsidiary under <i>Setup &gt; Company &gt; Subsidiaries</i>. Departments or classes can then carry year groups, rooms or sites for reporting.</p>
<p>The framing stays commercial: profit and loss, fee debtors, debtor days. A commercially run group shouldn't be forced into charity-specific vocabulary that doesn't fit. Design the chart of accounts for how the group is managed and reported.</p>
<p>If you are planning a new NetSuite implementation for an education group, my <a href="https://suiteheroes.com/netsuite-schools-nurseries/">NetSuite for schools and nurseries</a> page covers the sector in more detail.</p>
<h2>The integration question</h2>
<p>The right architecture keeps iSAMS and Famly as the billing sub-ledger. That's where fees are raised and parents are managed. NetSuite is the group general ledger. A native, bidirectional integration moves invoices, credit notes, payments and bill-payer records into NetSuite, and writes external identifiers back, so every transaction can be reconciled from the board pack to the source record.</p>
<p>The parts that matter most:</p>
<ul><li><b>One identity per payer.</b> A parent who pays for two children in two settings should be one customer, with each child as a sub-customer. A cross-reference record stops duplicates.</li><li><b>External IDs everywhere.</b> Store each source record's ID as the NetSuite external ID. NetSuite's REST web services can then upsert on it: create the record if it's new, update it if it exists (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156335203191.html" target="_blank" rel="noopener">Oracle: using the upsert operation</a>). A re-run never duplicates an invoice.</li><li><b>A fee-code map.</b> Each source fee code, such as tuition, lunch, trips or wraparound care, maps to a NetSuite item, GL account and tax code. An unmapped code should stop the record with a clear error, not post to a default.</li><li><b>Staging and a retry queue.</b> Raw data lands in a staging record first, then posts once it validates. Failed records wait in a queue for review and one-click reprocessing.</li><li><b>A sync frequency per record type.</b> Payers, invoices and payments usually need to arrive within the day so receivables stay current. Occupancy can often be a daily snapshot. Agree each one with finance rather than syncing everything as often as possible.</li></ul>
<p>There's no need to re-platform what the settings already do well. You connect it. My <a href="https://suiteheroes.com/case-studies/netsuite-isams-famly/">iSAMS and Famly case study</a> shows how I structure this across 40 subsidiaries, with the record mappings in full.</p>
<h2>VAT: schools and nurseries are now treated differently</h2>
<p>This is where many education groups need to revisit their setup. Since 1 January 2025, education and boarding services provided by a private school for a charge are subject to VAT at the standard rate of 20% (<a href="https://www.gov.uk/guidance/vat-on-education-and-vocational-training-notice-70130" target="_blank" rel="noopener">HMRC VAT Notice 701/30</a>). Before that date they were exempt.</p>
<p>Nursery classes, meaning classes made up wholly or almost wholly of children below compulsory school age, are still VAT exempt under the same guidance. A mixed group can therefore have standard-rated school fees and exempt nursery fees in the same consolidated ledger.</p>
<p>In NetSuite, that means separate tax codes, and a fee-code map that applies the right one to each fee type and setting. Extras such as trips, uniform or lunches may each have their own treatment. The rules have detail and exceptions, so confirm the VAT treatment of each fee type with your tax adviser and let the integration apply it consistently.</p>
<h2>Funded hours and revenue leakage</h2>
<p>Two numbers tend to surprise education groups when they finally get a consolidated view.</p>
<p>The first is <b>revenue leakage</b>: sessions delivered but never billed, discounts applied inconsistently, or credits that quietly erode fee income. Once enrolment and billing sit side by side, a report can flag every child enrolled but not invoiced.</p>
<p>The second is <b>funded-hours reconciliation</b>. In England, eligible working parents can get 30 hours of funded childcare a week, for 38 weeks of the year, for children from 9 months old to school age, and every 3 and 4 year old can get 15 hours (<a href="https://www.gov.uk/free-childcare-if-working/what-youll-get" target="_blank" rel="noopener">GOV.UK</a>). The funding comes from the local authority, not the parent, so the nursery has to track hours expected, claimed and paid.</p>
<p>A practical way to model this in NetSuite is to treat each local authority as a customer and post funded hours as a separate item. Expected, claimed and received amounts then reconcile per setting like any other receivable. A finance dashboard that pulls occupancy and billing together makes both numbers visible, often for the first time. You can explore one in the <a href="https://suiteheroes.com/demo/netsuite-isams-famly-dashboard/">schools and nurseries finance dashboard demo</a>, and a <a href="https://suiteheroes.com/offers/revenue-leakage-audit/">revenue leakage audit</a> puts a figure on the gap.</p>
<h2>Recognising termly fees properly</h2>
<p>Fees billed termly in advance are not all revenue on the day you bill them. They belong to the months the term covers. Posting them as revenue when invoiced overstates income at the start of each term and understates it later.</p>
<p>NetSuite's Advanced Revenue Management automates deferral and recognition. It is enabled at <i>Setup &gt; Company &gt; Enable Features</i>, on the Accounting subtab, as <b>Advanced Revenue Management (Essentials)</b>. Oracle notes that you must enable Accounting Periods first, and that once enabled the feature can't be disabled (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_1110092646.html" target="_blank" rel="noopener">Oracle: advanced accounting features</a>). Plan the recognition rules with your auditors before you switch it on. Term dates from the source system can then drive each schedule.</p>
<h2>A checklist for school and nursery groups</h2>
<ol><li>List every setting and legal entity, and decide the subsidiary structure before anything else.</li><li>Agree a single customer identity per bill payer, with children as sub-customers.</li><li>Build the fee-code map: every code to an item, GL account and tax code.</li><li>Confirm the VAT treatment of school fees, nursery fees and extras with your adviser.</li><li>Model local-authority funding as a receivable you can reconcile per setting.</li><li>Decide how termly fees are recognised, and test it in sandbox across a full term.</li><li>Pilot one or two settings, reconcile the first month-end line by line, then roll out.</li></ol>
<h2>Getting started</h2>
<p>You don't need a big-bang migration. A sensible first phase connects one or two settings, proves the billing-to-GL flow and the reconciliation reporting, then rolls out across the group. The goal is a finance function that can answer the board's questions on demand, with the settings still running the tools they know.</p>
<p>My <a href="https://suiteheroes.com/services/netsuite-implementation/">NetSuite implementation services</a> cover the full roll-out, and my <a href="https://suiteheroes.com/services/netsuite-integration/">NetSuite integration services</a> cover the iSAMS and Famly connection on its own. For why I build finance-critical integrations like this natively, see <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs iPaaS</a>.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Keep iSAMS and Famly as the billing sub-ledger and make NetSuite OneWorld the group general ledger, with one subsidiary per setting or legal entity as your structure requires.</li><li>A native integration that uses external IDs and writes identifiers back makes every invoice and payment reconcilable end to end.</li><li>Since 1 January 2025 private school education and boarding fees carry 20% VAT, while nursery classes stay exempt. Your tax codes have to tell them apart.</li><li>A consolidated view exposes revenue leakage and funded-hours gaps, often for the first time. Recognise termly fees over the term, not when they are billed.</li><li>Roll out setting by setting. A big-bang migration isn't needed.</li></ul></div>
<p style="margin-top:28px;">Running a group of schools or nurseries and outgrowing spreadsheets? <a href="https://suiteheroes.com/contact/">Book a free call</a> and we'll talk it through, with no obligation.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-for-schools-and-nurseries/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-for-schools-and-nurseries.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-for-schools-and-nurseries.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-for-schools-and-nurseries.png" type="image/png" length="69435"/>
  </item>
  <item>
    <title>German e-invoicing in NetSuite: what §14 UStG changes and how to prepare</title>
    <link>https://suiteheroes.com/insights/german-e-invoicing-netsuite/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/german-e-invoicing-netsuite/</guid>
    <pubDate>Sat, 06 Jun 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Localisation</category>
    <description>German e-invoicing in NetSuite: the 2025, 2027 and 2028 §14 UStG deadlines, XRechnung and ZUGFeRD, Oracle's SuiteApp setup, SuiteTax, DATEV and archiving.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/german-e-invoicing-netsuite.png" alt="" width="1200" height="630"></p>
<p><b>German e-invoicing in NetSuite</b> is one of the larger compliance changes for any group with a German entity this decade. The first date has already passed: since 1 January 2025 every German business must be able to receive a structured electronic invoice. The obligation to issue them is phased in from 1 January 2027. If you run a German subsidiary on NetSuite, the practical question is whether you can receive, validate and post e-invoices today, and issue them in time for your deadline.</p>
<p>I've worked on German NetSuite localisation covering SKR03, DATEV, XRechnung and ZUGFeRD. This is what matters, with the official sources so you can check each point.</p>
<h2>What is changing, and when</h2>
<p>Germany introduced mandatory B2B e-invoicing through the Growth Opportunities Act (Wachstumschancengesetz) of 27 March 2024, which reformed §14 UStG. The Bavarian State Tax Office sets out the phases clearly (<a href="https://www.lfst.bayern.de/steuerinfos/weitere-themen/e-rechnung" target="_blank" rel="noopener">LfSt Bayern</a>):</p>
<ul><li><b>From 1 January 2025:</b> every domestic business must be able to receive e-invoices for domestic B2B supplies. Issuing them was allowed from the same date, without the recipient's consent.</li><li><b>From 1 January 2027:</b> businesses whose total turnover in 2026 was more than €800,000 must issue e-invoices for domestic B2B supplies.</li><li><b>From 1 January 2028:</b> all domestic businesses must issue them.</li></ul>
<p>Some invoices are excluded: small invoices up to €250, travel tickets, invoices from small businesses under §19 UStG, and certain tax-exempt supplies. B2C sales and B2B supplies that aren't between German businesses are not currently covered.</p>
<p>The receiving rule applies to every business, whatever its size. If your German entity cannot accept an e-invoice, the supplier is not obliged to send you something else instead.</p>
<p>Germany's Federal Ministry of Finance (BMF) has published guidance letters on 15 October 2024, 15 October 2025 and 15 October 2026, covering format, validation, corrections and retention. The <a href="https://www.bundesfinanzministerium.de/Content/DE/FAQ/e-rechnung.html" target="_blank" rel="noopener">BMF FAQ on e-invoicing</a> is a good starting point. Rules can change, so confirm your position with your Steuerberater.</p>
<h2>What counts as an e-invoice</h2>
<p>Under <a href="https://www.gesetze-im-internet.de/ustg_1980/__14.html" target="_blank" rel="noopener">§14(1) UStG</a>, an e-invoice is issued, sent and received in a structured electronic format that allows electronic processing. The format must meet the European standard EN 16931, or allow the required details to be extracted into a format that does.</p>
<p>Two formats dominate in Germany:</p>
<ul><li><b>XRechnung</b> is a pure XML invoice. It has been used for public-sector invoicing for years.</li><li><b>ZUGFeRD</b>, from version 2.0.1, is a hybrid: a readable PDF with the structured XML embedded inside it.</li></ul>
<p>Other EN 16931 formats, such as Factur-X, are also allowed. A plain PDF, image or Word file is not an e-invoice, even if it is sent by email. Because the XML is hard to read by eye, the tax authority offers a free <a href="https://e-rechnung.elster.de/" target="_blank" rel="noopener">ELSTER e-invoice viewer</a> for XRechnung files.</p>
<h2>What NetSuite provides for German e-invoicing</h2>
<p>Oracle's <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_1210104611.html" target="_blank" rel="noopener">European Union Electronic Invoicing SuiteApp</a> includes Germany-specific features for inbound and outbound transactions using the PEPPOL and ZUGFeRD standards. The documented setup for PEPPOL in Germany looks like this (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_89161005318.html" target="_blank" rel="noopener">Oracle: Germany PEPPOL transactions</a>):</p>
<ol><li>Fill in the <b>Legal Name</b> on the German subsidiary at <i>Setup &gt; Company &gt; Subsidiaries</i>.</li><li>Enter the subsidiary's <b>PEPPOL ID</b> at <i>Setup &gt; E-Documents &gt; Electronic Invoicing Preferences</i>.</li><li>On each customer and vendor, at <i>Lists &gt; Relationships &gt; Customers</i> or <i>Vendors</i>, set the PEPPOL ID and the Germany e-document package on the E-Document subtab.</li><li>Assign the German subsidiary to the invoice and credit memo templates at <i>Setup &gt; E-Documents &gt; E-Document Templates</i>.</li><li>Set the <b>EI PEPPOL Tax Category</b> on every tax code, at <i>Setup &gt; Tax &gt; Tax Codes</i> in SuiteTax accounts.</li></ol>
<p>Oracle recommends creating your own EI PEPPOL tax categories rather than editing the defaults, because exemption reasons set on the defaults are removed when the SuiteApp updates. Categories such as exempt, reverse charge and intra-community supply also need an exemption reason and code.</p>
<p>Inbound documents are converted into inbound e-document records by a scheduled Map/Reduce script that runs every 15 minutes. Someone then reviews each one and converts it into a NetSuite transaction.</p>
<p>Read the <a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_1211031357.html" target="_blank" rel="noopener">known limitations</a> before you commit. Germany XRechnung inbound transactions appear on that list. Test your real supplier invoices in sandbox, not only the samples. Where the SuiteApp doesn't fit your flows, a custom native localisation can fill the gap; I compare the two routes in <a href="https://suiteheroes.com/insights/netsuite-e-invoicing-custom-localisation/">prebuilt e-invoicing add-ons or a custom native localisation</a>.</p>
<h2>Receiving: the job to get right first</h2>
<p>Receiving has been mandatory since 2025, so start here. A sound receive pipeline does four things:</p>
<ul><li><b>Extracts</b> the XML from inbound XRechnung and ZUGFeRD invoices.</li><li><b>Validates</b> it against EN 16931 before anything posts.</li><li><b>Maps</b> it cleanly onto NetSuite vendor bills: vendor, items or expense accounts, tax codes and amounts.</li><li><b>Rejects</b> non-conformant documents loudly, with a reason the AP team can act on, rather than failing silently.</li></ul>
<p>Decide who owns the inbound queue. With the SuiteApp, converted documents wait for someone to review and convert them, so name the person in AP who checks it daily, and agree what happens when a document fails validation. Clean master data helps too: for PEPPOL, each German customer and vendor needs its PEPPOL ID and e-document package set on the E-Document subtab.</p>
<p>Watch for a common gap: suppliers who still email a PDF. From 2027, larger suppliers must send a real e-invoice, so AP needs a clear process for asking for one.</p>
<h2>Issuing: numbering and content</h2>
<p>The content rules for invoices haven't changed. Each invoice still needs a sequential number that identifies it uniquely, as <a href="https://www.gesetze-im-internet.de/ustg_1980/__14.html" target="_blank" rel="noopener">§14(4) UStG</a> requires. In NetSuite, check that the German subsidiary uses its own numbering and that manual overrides are locked down.</p>
<p>Find out which formats your German customers can receive. Many will accept XRechnung or ZUGFeRD by email; some will expect PEPPOL. Your output has to match what they can process.</p>
<h2>Tax codes, DATEV and archiving</h2>
<p><b>Tax.</b> SuiteTax codes should cover the 19% and 7% rates under <a href="https://www.gesetze-im-internet.de/ustg_1980/__12.html" target="_blank" rel="noopener">§12 UStG</a>, EU intra-community supplies and §13b reverse charge, each posting to the correct control account. Map the chart of accounts, SKR03 or SKR04, cleanly. The e-invoice simply carries what your tax setup produces, so errors there show up on every document.</p>
<p><b>DATEV hand-off.</b> Many German subsidiaries hand their books to an external Steuerberater who works in DATEV. Agree the export format, account mapping and timing with them early.</p>
<p><b>Archiving.</b> Invoices must be kept for eight years for VAT purposes under §14b UStG. For an e-invoice, at least the structured part must be kept unaltered in its original format, even if you also received a PDF copy (<a href="https://www.lfst.bayern.de/steuerinfos/weitere-themen/e-rechnung" target="_blank" rel="noopener">LfSt Bayern</a>). The GoBD rules on electronic records also apply, and the BMF updated them for e-invoices in <a href="https://www.bundesfinanzministerium.de/Content/DE/Downloads/BMF_Schreiben/Weitere_Steuerthemen/Abgabenordnung/2025-07-14-GoBD-2-aenderung.pdf?__blob=publicationFile&amp;v=4" target="_blank" rel="noopener">its letter of 14 July 2025</a>. Check with your adviser how this applies to your records.</p>
<h2>German e-invoicing checklist for NetSuite</h2>
<ol><li>Confirm the German entity can receive, validate and post XRechnung and ZUGFeRD invoices today.</li><li>Work out which issuing deadline applies, from 2026 turnover: 1 January 2027 or 1 January 2028.</li><li>Install the European Union Electronic Invoicing SuiteApp in sandbox and test it against real invoices and the known limitations.</li><li>Clean up SuiteTax codes, EI PEPPOL tax categories and the SKR03 or SKR04 mapping.</li><li>Check invoice numbering is unique and sequential for the German subsidiary.</li><li>Ask your main customers which formats and channels they can receive.</li><li>Agree the DATEV export with your Steuerberater.</li><li>Confirm the original XML is archived for eight years, and that you can find it.</li></ol>
<h2>The bottom line</h2>
<p>German e-invoicing is a data-quality and configuration exercise as much as a compliance one. Get the receive pipeline, tax mapping and archiving right, and the issuing deadline becomes a straightforward extension rather than a scramble.</p>
<p>To see receiving, validation and rejections handled in one place, try the <a href="https://suiteheroes.com/demo/netsuite-e-invoicing-control-centre/">E-Invoicing Control Centre demo</a> or read about my <a href="https://suiteheroes.com/services/netsuite-e-invoicing-compliance/">NetSuite e-invoicing and tax reporting</a> service. For the wider German set-up, see <a href="https://suiteheroes.com/netsuite-germany/">NetSuite in Germany</a>, and for other countries' deadlines, <a href="https://suiteheroes.com/netsuite-e-invoicing-countries/">NetSuite e-invoicing by country</a>. On a German marketplace launch, the <a href="https://suiteheroes.com/case-studies/luxury-menswear-germany/">luxury menswear case study</a> shows how German VAT was handled with Avalara.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Since 1 January 2025 every German business must be able to receive a structured e-invoice. Issuing becomes mandatory from 1 January 2027 if prior-year turnover exceeded €800,000, and for all businesses from 1 January 2028.</li><li>A compliant e-invoice is a structured format that meets EN 16931, such as XRechnung or ZUGFeRD from version 2.0.1. A plain PDF is not an e-invoice.</li><li>Oracle's European Union Electronic Invoicing SuiteApp covers Germany using PEPPOL and ZUGFeRD. Check its setup steps and known limitations against your own invoice flows.</li><li>Get SuiteTax codes, sequential numbering, the DATEV hand-off and archiving right. Invoices must be kept for eight years, with the structured part in its original format.</li></ul></div>
<p style="margin-top:28px;">Need your German entity ready for the 2027 issuing deadline? <a href="https://suiteheroes.com/contact/">Book a free call</a> and we'll talk it through, with no obligation.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/german-e-invoicing-netsuite/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/german-e-invoicing-netsuite.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/german-e-invoicing-netsuite.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/german-e-invoicing-netsuite.png" type="image/png" length="73457"/>
  </item>
  <item>
    <title>NetSuite Fortnox integration: a native, audit-grade approach</title>
    <link>https://suiteheroes.com/insights/netsuite-fortnox-integration/</link>
    <guid isPermaLink="true">https://suiteheroes.com/insights/netsuite-fortnox-integration/</guid>
    <pubDate>Sat, 30 May 2026 09:00:00 +0000</pubDate>
    <dc:creator>Raja Saqib</dc:creator>
    <category>Integration</category>
    <description>How to build a NetSuite Fortnox integration for a Swedish subsidiary: what to sync, COA and VAT mapping, Fortnox API limits, echo-loops and a go-live checklist.</description>
    <content:encoded><![CDATA[<p><img src="https://suiteheroes.com/og/insights/netsuite-fortnox-integration.png" alt="" width="1200" height="630"></p>
<p>A <b>NetSuite Fortnox integration</b> solves a common two-ledger problem. Your group runs NetSuite OneWorld, but the Swedish subsidiary keeps its books in Fortnox, a widely used Swedish accounting platform. The Swedish team needs Fortnox for local invoicing and statutory reporting. The group needs everything in NetSuite. The answer is a disciplined, bidirectional integration: Fortnox stays the local system of record, NetSuite stays the group ledger, and every transaction can be traced across both.</p>
<p>I built exactly this for Cape.io, a native SuiteScript 2.1 integration between NetSuite and Fortnox across an eight-subsidiary OneWorld estate. This article sets out how I approach it: what to sync, how to map it, what the Fortnox API expects, and what to check before go-live.</p>
<h2>Why a NetSuite Fortnox integration comes up</h2>
<p>Fortnox is deeply embedded in Swedish accounting practice. Swedish finance teams, and often their external accountants, know it well. Rather than fight that, the pragmatic architecture lets Fortnox stay the local system of record for the Swedish entity, while NetSuite remains the group ledger, with a clean, auditable bridge between them.</p>
<p>There is a local reason to keep that bridge tidy. Under the Swedish Bookkeeping Act, accounting records must be kept until the end of the seventh year after the calendar year in which the financial year ended, and kept in Sweden unless specific conditions are met (<a href="https://www.bfn.se/fragor-och-svar/arkivering/" target="_blank" rel="noopener">Bokföringsnämnden on archiving</a>, <a href="https://www.riksdagen.se/sv/dokument-och-lagar/dokument/svensk-forfattningssamling/bokforingslag-19991078_sfs-1999-1078/" target="_blank" rel="noopener">Bokföringslag 7 kap.</a>). Which system holds which record matters, so agree it with the Swedish team and their adviser at the start.</p>
<p>If the subsidiary sells to the Swedish public sector, e-invoicing is also a requirement. Suppliers must send e-invoices to public bodies for purchases under procurements started from 1 April 2019 (<a href="https://www.upphandlingsmyndigheten.se/digitalisering-och-e-handel/e-handel/regler-for-e-handel-och-e-faktura/" target="_blank" rel="noopener">Upphandlingsmyndigheten</a>).</p>
<p>If you are still deciding whether to keep Fortnox at all, my <a href="https://suiteheroes.com/netsuite-sweden-nordics/">NetSuite in Sweden and the Nordics</a> page covers the wider picture. This article assumes Fortnox stays.</p>
<h2>What to synchronise</h2>
<p>A complete integration covers six core record types in both directions, with full create, update and cancel handling:</p>
<ul><li>Customers</li><li>Suppliers</li><li>Sales invoices</li><li>Credit memos</li><li>Journals</li><li>Customer and supplier payments</li></ul>
<p>For each one, decide which system is the master and which direction data flows. On the Cape.io build, the admin console shows this per record type, inbound, outbound or both, so finance can see the rules without reading code.</p>
<p>Sales invoices raised in NetSuite can be issued through Fortnox, with the Fortnox document number stamped back onto the originating NetSuite transaction. That one field gives you end-to-end traceability: from any NetSuite invoice you can find its Fortnox twin, and the reverse.</p>
<h2>The mapping discipline that makes finance trust it</h2>
<p>The mapping layer is what separates a robust integration from a fragile one. I keep the mappings in custom records, created under <i>Customization &gt; Lists, Records &amp; Fields &gt; Record Types</i>, so finance can maintain them without a developer.</p>
<h3>Chart of accounts</h3>
<p>Every NetSuite GL account maps explicitly to its Fortnox counterpart, including VAT and tax control accounts. On Cape.io that meant 256 accounts, maintained one by one or by bulk import. Unmapped accounts must fail loudly with an actionable error, never fall back silently to a suspense account. That discipline is what lets the Swedish statutory accounts reconcile line by line for Skatteverket.</p>
<h3>VAT and tax codes</h3>
<p>VAT codes need the same treatment, on both the customer and supplier side, so amounts reconcile precisely and post to the correct control accounts in both systems. Sweden's main rates are 25%, 12% and 6%, plus reverse charge and exports.</p>
<p>Build the VAT mapping with effective dates. Swedish rates do change: Skatteverket confirmed that VAT on food fell from 12% to 6% from 1 April 2026, while restaurant services stayed at 12% (<a href="https://www.skatteverket.se/omoss/pressochmedia/nyheter/2026/nyheter/livsmedelsmomsensankstill6procent.5.70685bee19c85dd5dd0a3f.html" target="_blank" rel="noopener">Skatteverket</a>). A mapping table with no dates either breaks or posts the wrong rate when that happens. Agree the VAT treatment itself with your Swedish tax adviser; the integration should only carry it faithfully.</p>
<h3>Currency and payment terms</h3>
<p>Every inbound and outbound handler should set the currency code and exchange rate explicitly for non-SEK transactions, from a currency mapping record. Payment terms need aligning across the receivables and payables sub-ledgers too, or due dates drift between the systems.</p>
<h2>Designing for the Fortnox API</h2>
<p>A sound design starts with how Fortnox's API actually behaves. Three points shape the build.</p>
<p><b>Authentication.</b> Fortnox uses the OAuth 2.0 authorisation code flow. An access token lasts one hour and a refresh token 45 days. Each refresh issues a new refresh token and invalidates the old one, and if the refresh token expires, a user has to authorise the integration again (<a href="https://www.fortnox.se/developer/authorization" target="_blank" rel="noopener">Fortnox authorisation</a>). In NetSuite, keep the client secret under <i>Setup &gt; Company &gt; Preferences &gt; API Secrets</i> (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_160216486846.html" target="_blank" rel="noopener">Oracle: secrets management</a>), let one process own token refresh, and alert someone well before the 45 days run out.</p>
<p><b>Rate limits.</b> Fortnox allows 300 requests per minute per client ID and tenant, enforced as 25 requests in a sliding five-second window. Over the limit, it returns HTTP 429 (<a href="https://www.fortnox.se/developer/guides-and-good-to-know/rate-limits-for-fortnox-api" target="_blank" rel="noopener">Fortnox rate limits</a>). Bulk syncs and month-end catch-ups need throttling and back-off built in, not added after the first failure.</p>
<p><b>Change detection.</b> Fortnox offers a WebSocket stream with topics such as invoices and supplier invoices (<a href="https://www.fortnox.se/developer/guides-and-good-to-know/websockets" target="_blank" rel="noopener">Fortnox WebSockets</a>). SuiteScript's N/https module makes request-and-response calls rather than holding a connection open, so a native build usually polls Fortnox on a schedule instead. On Cape.io, scheduled scripts poll for changes and Map/Reduce scripts handle bulk syncs.</p>
<h2>Echo-loops and idempotency</h2>
<p>Bidirectional syncs have a typical failure mode. A record updated on one side is picked up as a fresh change on the other, sent back, and the two systems ping-pong forever.</p>
<p>The fix is last-sync hash stamping on every inbound handler. When the integration writes a record, it stores a hash of what it wrote. When it next sees that record, it compares hashes and ignores its own echo. Combine that with external IDs, so a retried run updates the existing record instead of creating a duplicate.</p>
<h2>Native, not iPaaS</h2>
<p>This is precisely the kind of finance-critical, audit-exposed integration where a native SuiteScript 2.1 build pays off. You get full control over mapping and retry behaviour, no iPaaS licence fees, and every log line inside NetSuite. I compare the two approaches in <a href="https://suiteheroes.com/insights/native-suitescript-vs-ipaas/">native SuiteScript vs iPaaS for NetSuite integrations</a>.</p>
<p>The Cape.io architecture used each script type for its job: Map/Reduce for bulk syncs, Scheduled for pollers, User Event for create and update triggers, RESTlet for inbound calls, Suitelet for the admin dashboard and Client Script for form validation. Long runs show on <i>Customization &gt; Scripting &gt; Map/Reduce Script Status</i> (<a href="https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4478613244.html" target="_blank" rel="noopener">Oracle</a>).</p>
<p>An admin dashboard turns the integration from a script into something a finance team can operate. On Cape.io, one Suitelet covers OAuth 2.0 token management, COA, currency, VAT and payment-terms mapping, and run and queue monitoring. You can see the idea in the <a href="https://suiteheroes.com/demo/netsuite-integration-control-tower/">Integration Control Tower demo</a>, and the full build in the <a href="https://suiteheroes.com/case-studies/cape-io/">Cape.io case study</a>.</p>
<h2>Go-live checklist</h2>
<p>Before you switch a NetSuite Fortnox integration on in production, check:</p>
<ol><li>Every record type has an agreed master system and direction, signed off by group and Swedish finance.</li><li>Every NetSuite GL account used by the Swedish subsidiary has a Fortnox mapping, and an unmapped account stops the record with a clear error.</li><li>VAT mappings cover sales and purchases, reverse charge and exports, each with an effective date.</li><li>Token refresh runs on a schedule, and someone is alerted if it fails.</li><li>Throttling keeps bulk runs under 25 requests per five seconds, with back-off on HTTP 429.</li><li>Echo-loop hashes and external IDs are tested by editing the same record on both sides.</li><li>Opening balances and open items reconcile between the systems before the first live run.</li><li>Finance can see failed records, the reason, and how to reprocess them, without asking a developer.</li></ol>
<p>For a wider plan covering scoping, testing and sign-off, see <a href="https://suiteheroes.com/insights/netsuite-integration-project-plan/">running a NetSuite integration project</a>.</p>
<h2>The outcome</h2>
<p>Done properly, the Swedish team keeps the tool they need, the group gets clean consolidated numbers, and every transaction can be reconciled across both systems, with no third-party platform in the middle of your statutory data.</p>
<p>If you need this built, my <a href="https://suiteheroes.com/services/netsuite-integration/">NetSuite integration services</a> cover design, build and support. If an existing integration is already failing, the <a href="https://suiteheroes.com/offers/integration-rescue-sprint/">Integration Rescue Sprint</a> fixes the causes at a fixed price.</p>

<div class="ins-key"><h3>Key takeaways</h3><ul><li>Let Fortnox stay the Swedish system of record and keep NetSuite as the group ledger. Decide which system owns each record type before you build.</li><li>Sync six core record types in both directions with full create, update and cancel coverage, and stamp the Fortnox document number back onto NetSuite.</li><li>Map every GL and VAT account explicitly. Unmapped accounts must fail loudly, and VAT mappings need effective dates because Swedish rates change.</li><li>Design for the Fortnox API. Access tokens last an hour, refresh tokens 45 days, and the rate limit is 25 requests per 5 seconds per tenant.</li><li>Last-sync hash stamping stops bidirectional echo-loops. A finance-critical, audit-exposed sync is the textbook case for native SuiteScript.</li></ul></div>
<p style="margin-top:28px;">Planning a NetSuite Fortnox integration, or fixing one that keeps failing? <a href="https://suiteheroes.com/contact/">Book a free call</a> and we'll talk it through, with no obligation.</p>
<p>Originally published at <a href="https://suiteheroes.com/insights/netsuite-fortnox-integration/">suiteheroes.com</a>.</p>]]></content:encoded>
    <media:content url="https://suiteheroes.com/og/insights/netsuite-fortnox-integration.png" type="image/png" medium="image" width="1200" height="630"/>
    <media:thumbnail url="https://suiteheroes.com/og/insights/netsuite-fortnox-integration.png" width="1200" height="630"/>
    <enclosure url="https://suiteheroes.com/og/insights/netsuite-fortnox-integration.png" type="image/png" length="66825"/>
  </item>
</channel>
</rss>
