NetSuite Case Studies
Real examples of how we've solved complex NetSuite challenges with custom automation, APIs, and integrations.
OAuth 2.0 M2M Migration for a Multi-Location Entertainment Operator
Legacy authentication required a weekly manual re-auth that silently broke integrations whenever it was missed. NetSuite's shift away from TBA toward M2M meant a one-time fix wasn't an option — the entire auth model needed to change.
Migrated to OAuth 2.0 client credentials with PS256 JWT signing. Eliminated the weekly manual re-auth entirely. Provided reference implementation, Postman collection, and runbook so their team could extend the pattern to the Corrigo integration and other consumers.
Multi-Subsidiary AP Aging to Balance Sheet Reconciliation
Pre-audit variances between AP aging and balance sheet across two subsidiaries (87 and 43) with no clear path to resolution. Trial Balance filtering was producing inconsistent numbers and saved searches weren't returning signed-net values correctly.
Reconciled both subsidiaries to zero variance. Identified and corrected Trial Balance filter issues, rebuilt saved search formulas for signed-net JE logic, and documented the reconciliation method so the finance team could repeat it without us.
Automated Procurement Invoice Processing
Manual data entry of vendor invoices from BuyerQuest platform into NetSuite was time-consuming and error-prone, with frequent GL account mismatches and location assignment errors affecting franchise financial reporting.
Fully automated invoice processing system using Map/Reduce script eliminates manual entry, processes invoices within hours of export, and maintains complete audit trail with intelligent SKU-to-item mapping and ancillary charge distribution.
Secure API for Real-Time Rate Distribution
Partners requested rate updates through manual email distribution, creating delays and pricing disclosure concerns. No authentication, usage tracking, or rate limiting controls existed.
Secure RESTful API with granular permission controls, rate limiting, and usage monitoring provides instant rate distribution to all integrated systems with complete access control audit trail and zero security incidents.
Automated Rate Calculation & Management
Manual multi-tier pricing calculations using spreadsheets were error-prone, lacked transparency, and required frequent spot rate retrieval from external systems with transcription errors and outdated multipliers.
Integrated system with automated rate retrieval every 30 minutes, visual calculation displays, and formula-driven management eliminates math errors while providing complete pricing audit trail and transparency.
OAuth 2.0 M2M Migration for a Multi-Location Entertainment Operator
Client Overview
Industry: Hospitality & Entertainment
Size: Mid-market operator with 300+ locations
NetSuite Environment: Multi-subsidiary NetSuite with several integrations to operational systems (including Corrigo for facilities/maintenance) relying on NetSuite APIs for financial and transactional data.
The Challenge
The client's NetSuite integrations relied on a token-based authentication pattern that required a manual re-authorization roughly every week. When the step was missed, integrations would fail silently until someone noticed downstream data hadn't moved.
With NetSuite sunsetting SOAP and phasing out Token-Based Authentication in favor of OAuth 2.0 Machine-to-Machine, the legacy pattern was on a deadline. A one-time credential rotation wouldn't solve the problem — the auth model itself had to change, and every consuming application needed to be updated to match.
The team had tried OAuth 2.0 M2M internally and hit the usual wall: repeated 401 INVALID_LOGIN errors that pointed at the credentials (which were fine) rather than at what was actually wrong (request construction, token handling, cookie headers, and signing).
The Solution
We migrated their NetSuite integrations to OAuth 2.0 client credentials flow with PS256 JWT signing. Integration records, roles, and permissions were reconfigured on the NetSuite side; certificates were generated and handed off through a secure channel.
We paired directly with their developers on the consuming-application side — assembling the JWT, exchanging it for a bearer token, and proving a working authenticated call against their tenant before leaving. The manual weekly re-auth was eliminated entirely.
We delivered a reference implementation, a pre-configured Postman collection with a JWT pre-request script, and a diagnostic runbook covering the most common 401 failure modes (cookie header interference, empty POST body rejection, stale token behavior, sandbox vs. production differences). The client's team reused the pattern to extend the Corrigo integration and other consumers.
Key Results
- • Weekly manual re-auth eliminated — integrations run unattended
- • Working authenticated call verified before handoff
- • Reusable pattern extended to Corrigo and other integrations
- • Diagnostic runbook reduces future 401 debugging time from days to hours
- • Infrastructure aligned with NetSuite's SOAP sunset trajectory
Key Takeaways
- • M2M auth requires owning both sides — NetSuite config alone isn't enough
- • 401 INVALID_LOGIN is a diagnostic dead-end; the fix is almost never in the credentials
- • Productized reference implementations let the client's team extend the pattern without external dependency
Technologies
OAuth 2.0 Client Credentials, PS256 JWT, NetSuite Integration Records, Postman, Corrigo
Multi-Subsidiary AP Aging to Balance Sheet Reconciliation
Client Overview
Industry: Hospitality & Timeshare
Size: Large timeshare operator with multiple legal subsidiaries
NetSuite Environment: Multi-subsidiary NetSuite with complex intercompany activity, pre-audit reconciliation requirements across two specific subsidiaries (internally referenced as 87 and 43).
The Challenge
Ahead of an external audit, the finance team was seeing variances between AP aging reports and the balance sheet's AP control account for two subsidiaries. The variance wasn't small enough to wave off and wasn't large enough to obviously point at a specific transaction — it needed to be traced.
Standard Trial Balance filters weren't producing consistent numbers when sliced by subsidiary, and saved searches intended to surface the reconciling journal entries weren't returning signed-net values correctly. Every refinement of the search surfaced a new inconsistency.
The work was time-sensitive — it was blocking audit prep — and the variance had to be explained and closed before numbers could be signed off.
The Solution
We worked the reconciliation end-to-end over multiple weeks. The first fix was Trial Balance filtering — identifying which filter combinations produced stable subsidiary-level numbers and which silently included or excluded intercompany legs.
The second fix was saved search formulas. Journal entry lines needed signed-net treatment (debits and credits netted per transaction with correct sign retention), and the existing formulas were aggregating in a way that double-counted some lines. We rebuilt the formulas to produce auditable, signed-net results that matched balance sheet movement.
Both subsidiaries reconciled to zero variance. The reconciliation method was documented so the finance team could run the same process quarterly without us.
Key Results
- • Zero variance reconciliation on both subsidiaries (87 and 43)
- • Audit prep unblocked and numbers signed off on schedule
- • Reusable Trial Balance filter patterns documented
- • Signed-net JE formulas in saved searches produce consistent, auditable output
- • Finance team can run the same reconciliation independently going forward
Key Takeaways
- • Trial Balance filter behavior in multi-subsidiary environments is subtle and easy to get subtly wrong
- • Saved search aggregation of signed JE amounts requires explicit formula design — defaults will often double-count
- • Reconciliation is a diagnostic exercise, not a report — the method is as valuable as the number
Technologies
NetSuite Saved Searches, Trial Balance, Multi-Subsidiary Reporting, Journal Entry Analysis
Automated Procurement Invoice Processing: Eliminating Manual Data Entry
Client Overview
Industry: Hospitality & Entertainment
Size: Multi-location franchise operation with both corporate-owned and franchised properties
NetSuite Environment: Multi-subsidiary implementation with separate legal entities per location, complex chart of accounts requiring location-specific GL mapping, integrated procurement through BuyerQuest vendor management platform, and shared services model where corporate AP team processes invoices for all locations.
The Challenge
The client processed vendor invoices from BuyerQuest, their centralized procurement platform that consolidates purchasing across all locations. The accounts payable team spent 4-6 hours daily on manual data entry, downloading CSV files with 50-200 invoices, matching vendor names, determining NetSuite item or GL account mappings, identifying location codes, and calculating tax and shipping allocations.
Data entry errors were frequent and costly. Clerks transposed digits, selected wrong vendors, or assigned invoices to incorrect locations. Reconciliation errors weren't discovered until weeks later during month-end close, requiring journal entries and difficult conversations with franchise owners when royalty calculations were affected.
The manual bottleneck created 2-3 day processing delays, making accurate cash flow forecasting impossible. Incorrect expense allocation between locations had direct financial consequences for franchise royalty calculations and created audit trail issues.
The Solution
We implemented a fully automated invoice processing system using Map/Reduce architecture that monitors SFTP for BuyerQuest export files, intelligently maps line items to NetSuite records, and creates vendor bills with zero manual intervention.
The system uses a two-tier mapping logic: special SKU mapping table for high-volume items requiring exact control, and GL account lookup via External ID for standard items. Ancillary charges (tax, shipping, freight) use "most frequent GL" logic to apply charges to the invoice's primary expense category rather than generic accounts.
Comprehensive error handling isolates problematic invoices without stopping batch processing. Failed invoices create custom error records with complete source data, enabling manual recovery while other invoices process successfully.
Technical Implementation
Architecture: SuiteScript 2.1 Map/Reduce Script chosen for ability to handle large data volumes through automatic parallel processing, yielding, and governance recovery. Each invoice processes in isolation (map stage), then consolidates by invoice number (reduce stage), with automatic failure recovery.
Key Components: SFTP integration with NetSuite credential management, PapaParse CSV library for handling quoted fields and multi-line values, two-tier item lookup (special SKU array search + indexed External ID search), dynamic record creation with line-by-line addition, and custom error records preserving full audit context.
Notable Decisions: Map/Reduce provides automatic concurrency (8-12 minutes vs 50 minutes sequential), reduce stage consolidation ensures one transaction per invoice with unique External IDs, configuration-over-code approach using script parameters enables business users to manage mappings without developer dependency.
Key Results
- • 100% automation for standard invoices (92-95% of volume)
- • Processing time reduced from 4-6 hours to 30-45 minutes
- • Data entry errors effectively eliminated for automated invoices
- • Invoices appear in NetSuite within 30-90 minutes vs 2-3 days
- • Month-end close accelerated by 1.5-2 days
- • Complete audit trail with archived source files and timestamps
- • Improved expense classification accuracy for franchise reporting
- • Error records reveal systemic data quality issues for root cause fixes
Key Takeaways
- • Integration ROI comes from high-volume, rules-based processes
- • Intelligent error handling enables graceful partial success vs all-or-nothing failure
- • Configuration over hard-coding reduces maintenance cost and enables business user management
- • Two-tier mapping balances precision control with self-service scale
- • Automation reveals process improvement opportunities hidden in manual workflows
Technologies
SuiteScript 2.1, Map/Reduce, SFTP Integration, PapaParse CSV Library, NetSuite Custom Records
Secure API for Real-Time Precious Metal Rate Distribution
Client Overview
Industry: Financial Services & Precious Metals
Size: Multi-channel precious metals dealer
NetSuite Usage: Enterprise resource planning, pricing management, customer relationship management
The Challenge
The client needed to distribute real-time precious metal rate information to multiple external systems—partner websites, mobile applications, and third-party integrations—while maintaining strict security controls and usage monitoring.
Partners were requesting rate updates through email or phone calls, creating delays of minutes to hours between rate changes and partner system updates. Staff manually sent rate sheets via email, which introduced data entry errors when partners transcribed values into their systems.
There was no way to control which partners could access which rate types (spot, wholesale, or market rates), creating pricing disclosure concerns. Without authentication or usage tracking, there was no audit trail. The lack of rate limiting meant a single integration could overwhelm the system with requests, impacting performance for all users.
The Solution
We implemented a secure RESTful API that provides authenticated, real-time access to precious metal rates with granular permission controls and comprehensive usage monitoring.
The API supports multiple specialized endpoints—clients can request only the specific rate type they need (current spot rate, wholesale rate, or market rate), reducing data transfer and improving performance. Each API credential includes checkbox-based permissions controlling access to specific rate types.
Built-in rate limiting enforces configurable request limits per credential (default: 100 requests per 60 minutes), with automatic window reset and detailed error messages. The system automatically updates the "last used" timestamp on each credential, providing instant visibility into which integrations are active.
Technical Implementation
Architecture: SuiteScript 2.1 RESTlet with GET and POST support chosen for cleaner RESTful architecture and built-in HTTP method routing over Suitelet alternatives.
Key Components: API key validation against custom credential records with expiration date enforcement, five independent permission flags providing granular access control (Allow All Rates, Allow Spot Rate, Allow Market Rate, Allow Wholesale Rate, Allow Multipliers), per-credential request counting with rolling time windows, field-specific lookups using search.lookupFields for single-rate requests instead of loading full records, and consistent error response format with HTTP status codes.
Notable Decisions: Permission checkboxes stored on credential records (not as script parameters) for per-client granularity, rate limit tracking uses record.submitFields for minimal governance consumption, API automatically identifies newest rate configuration by searching with internal ID descending sort eliminating manual configuration, health check endpoint requires authentication but doesn't consume rate limit for monitoring use cases.
Key Results
- • Rate updates propagate to all integrated systems within seconds
- • Zero authentication incidents with complete access control audit trail
- • Granular permissions prevent pricing strategy disclosure
- • "Last Used" timestamps provide instant integration health visibility
- • Rate limiting protects system performance with clear retry guidance
- • Eliminated manual email distribution process entirely
Key Takeaways
- • Credential-level permissions enable different access levels without deploying multiple APIs
- • Single-rate endpoints with field-specific lookups reduced response times for 80% use case
- • Rate limiting as a feature enables partners to build smarter polling strategies
Technologies
SuiteScript 2.1, NetSuite RESTlet, API Key Authentication, Custom Record Types
Automated Rate Calculation & Management System
Client Overview
Industry: Financial Services & Precious Metals
Size: Multi-tier precious metals dealer with wholesale and retail operations
NetSuite Usage: Pricing management, rate configuration, external API integration
The Challenge
The client operated a complex multi-tier pricing model where retail market rates were calculated from wholesale rates, which were themselves derived from spot rates using proprietary formulas involving multiple multipliers and fixed premiums. Managing these interdependent calculations manually was error-prone and time-consuming.
Staff logged into a third-party precious metals pricing service multiple times per day to check current spot rates, then manually entered the values into a spreadsheet alongside multiplier constants. They used Excel formulas to calculate wholesale rates, then calculated market rates by applying an additional 10% markup.
The calculation complexity created frequent errors: staff occasionally transposed digits when copying spot rates, used outdated multiplier values when formulas weren't refreshed, or forgot to round to the nearest $0.02 increment as required by industry standards. The manual process also lacked transparency—there was no visual representation of how rates flowed through the calculation tiers.
The Solution
We implemented an integrated system combining automated rate retrieval, visual calculation displays, and formula-driven rate management with audit trails.
The Scheduled Script runs on a configurable interval (typically every 30 minutes) to automatically retrieve current spot rates from the external pricing API. It applies the multi-tier calculation formulas automatically, with each rate retrieval creating a new configuration record with a timestamp for complete history.
The Suitelet interface provides a visual calculation display showing the exact formula flow with live values in color-coded boxes. Users can see spot rate → wholesale rate → market rate with each multiplier and operation displayed visually, making the pricing structure immediately clear.
When users modify multipliers or premiums, client-side JavaScript recalculates all dependent rates in real-time before saving, showing exactly how changes will affect wholesale and market pricing. The system creates new configuration records on save rather than editing existing ones, preserving a complete audit trail.
Technical Implementation
Architecture: Three-component system (Scheduled Script, Suitelet, Client Script) with shared calculation logic. Scheduled Script handles automated retrieval, Suitelet provides visual interface, Client Script performs real-time calculations in browser.
Key Components: Automated rate retrieval from external API with OAuth/token authentication, JavaScript implementation of Excel MROUND function using Math.round(value / multiple) * multiple for industry-standard penny rounding, dynamic HTML generation creating color-coded calculation boxes with live formula display, server-side serverWidget form generation with field groups and custom layouts, audit trail system with new record creation on every save.
Notable Decisions: MROUND implementation uses standard rounding rather than ceiling to match Excel's nearest-even-multiple behavior, Suitelet creates new records rather than editing existing ones to maintain complete pricing audit trail, field-level permissions separate calculation fields (editable) from raw API response data (read-only), client script performs calculations in browser before submission to provide instant feedback, script automatically selects newest rate configuration by internal ID descending sort.
Key Results
- • Eliminated manual spot rate transcription and login process
- • Formula-driven calculations eliminated math errors and rounding inconsistencies
- • 30-minute automated refresh (configurable to 15 minutes) during volatile markets
- • Visual interface improved partner communications and accelerated training
- • Complete audit trail with every rate change preserved as new record
- • On-demand "Retrieve Rate" button provides manual override during volatility
Key Takeaways
- • Color-coded formula display transformed opaque math into intuitive visual flow
- • Automation with manual override: scheduled for routine, on-demand for volatility
- • Creating new records vs editing existing ones provided audit compliance without complexity
Technologies
SuiteScript 2.1, Scheduled Script, Suitelet, Client Script, External API Integration, NetSuite Custom Records
Need Custom NetSuite Development?
Whether you need automation, API integrations, or custom workflows, we can help you solve complex NetSuite challenges.