SuitePortal
User GuideGetting Started

Integrating NetSuite

Connect SuitePortal with your NetSuite instance using the SuiteBundle

Integrating NetSuite

SuitePortal connects to NetSuite via a SuiteBundle that runs Map/Reduce scripts to sync data.

Prerequisites

  • NetSuite administrator access
  • Permission to install SuiteBundles
  • Role with "Log in using OAuth 2.0 Access Tokens" permission (if using OAuth)

Integration Method

SuitePortal uses Token-Based Authentication (TBA) to authenticate with NetSuite. TBA credentials are entered directly in the organization settings.

Installation Steps

1. Install the SuiteBundle

  1. In NetSuite, navigate to Customization → SuiteBundler → Search & Install Bundles
  2. Search for Bundle ID: 581756
  3. Click Install
  4. Follow the installation wizard

2. Configure Global Settings

After installation, the bundle creates a Global Settings record. Configure:

SettingDescription
Tenant IDYour SuitePortal organization's tenantId
Webhook URLhttps://suiteportal.io/api/ingest/{tenantId}
API KeyGenerated from SuitePortal dashboard

3. Enter TBA Credentials in SuitePortal

In your SuitePortal dashboard, navigate to Settings → NetSuite Integration and enter:

FieldDescription
Account IDNetSuite account number (e.g., 1234567 or 1234567_SB1 for sandbox)
Consumer KeyFrom NetSuite Integration record
Consumer SecretFrom NetSuite Integration record
Token IDFrom NetSuite Access Token record
Token SecretFrom NetSuite Access Token record

Bundle Components

The SuiteBundle includes:

Custom Fields

Field IDDescription
custbody_sp_flagTransaction body field to flag records for sync
custentity_sp_flagEntity field to flag records for sync

Map/Reduce Scripts

ScriptRecord Type
SP_MR_Customers.jsCustomer sync
SP_MR_Contacts.jsContact sync
SP_MR_Vendors.jsVendor sync
SP_MR_Employees.jsEmployee sync
SP_MR_Invoices.jsInvoice sync
SP_MR_SalesOrders.jsSales order sync
SP_MR_PurchaseOrders.jsPurchase order sync
SP_MR_ItemFulfillments.jsItem fulfillment sync

Integration Endpoints

EndpointPurpose
/api/ingest/{tenantId}Receives batch data from NetSuite
/api/ingest/finalizeOptional finalization after sync batch
/api/check-in/{tenantId}Health check endpoint

Verifying Integration

After configuration:

  1. In NetSuite, run the Check-In Suitelet (SP_SL_Check_In.js)
  2. Verify the response shows successful connection
  3. In SuitePortal, check that integrationComplete flag is true

Data Flow

NetSuite                          SuitePortal
   │                                   │
   ├─ Map/Reduce runs ──────────────► │
   │  (batches of 500 records)         │
   │                                   │
   ├─ POST /api/ingest/{tenantId} ──► │
   │                                   ├─ Store in database
   │                                   │
   ├─ POST /api/ingest/finalize ────► │
   │  (optional)                       ├─ Mark sync complete
   │                                   │

Next step: Invite Team Members