top of page
Sesame Software

Business Data Integration: Sync Salesforce and NetSuite

  • Oct 11, 2025
  • 13 min read

Quick Answer

Salesforce and NetSuite contain the two halves of your business picture — CRM relationships and financial operations. Syncing them into a unified reporting layer means connecting both systems to a shared data destination, aligning the customer and transaction records that span both platforms, and building the reporting infrastructure that gives finance, sales, and operations teams a complete view without requiring anyone to log into two systems. Sesame Software's no-code business data integration platform handles the full sync — connecting to both systems, discovering schemas automatically, aligning cross-system records, and delivering unified data to your warehouse in under an hour of setup time.



Why syncing Salesforce and NetSuite matters for reporting

Most enterprise reporting problems trace back to the same root cause. The data needed to answer a business question lives in two different systems — and nobody has connected them.

A revenue operations team wants to understand which deals are closing on time versus slipping. The pipeline data is in Salesforce. The invoicing and payment data that confirms whether a deal actually closed and generated revenue is in NetSuite. Running a reliable pipeline-to-revenue report requires both — and without a unified reporting layer, someone is manually pulling exports from each system and reconciling them in a spreadsheet every week.

A finance team wants to understand customer lifetime value by segment. The segment and engagement data is in Salesforce. The order history, payment patterns, and credit data is in NetSuite. Neither system alone produces the complete picture.

A customer success team wants to identify at-risk accounts before renewal. The relationship history, support case volume, and product usage data is in Salesforce. The payment history, invoice aging, and subscription status is in NetSuite. Without unified data, the at-risk signal is incomplete — a customer who looks healthy in Salesforce may have three overdue invoices in NetSuite.

Each of these use cases requires the same foundational capability: a unified reporting layer that synchronizes Salesforce and NetSuite data into a single destination where cross-system queries run reliably. This guide covers how to build it.



What a unified Salesforce and NetSuite reporting layer looks like

A unified reporting layer for Salesforce and NetSuite is not a single report or a single dashboard. It is a data architecture that sits between your source systems and your reporting tools — continuously synchronized, schema-aligned, and joined on the cross-system keys that connect CRM records to financial records.

The destination is typically a cloud data warehouse — Snowflake, Redshift, Azure SQL, or BigQuery — that serves as the shared repository for both Salesforce and NetSuite data. Your BI tools — Tableau, Power BI, Looker, Sigma — connect to the warehouse rather than directly to Salesforce or NetSuite. This separation preserves Salesforce API capacity for users and operational integrations, eliminates the query limitations that direct Salesforce reporting imposes, and gives the data team a single environment to govern, document, and optimize.

The cross-system join is the architectural element that makes unified reporting possible. In most enterprise implementations, a Salesforce Account corresponds to a NetSuite Customer. A Salesforce Opportunity corresponds to a NetSuite Sales Order after it closes. A Salesforce Contact corresponds to a NetSuite Contact or Vendor contact depending on the relationship. These correspondences are maintained through cross-reference keys — either native keys that exist in both systems or custom fields that your implementation team has added to maintain the link.

The unified reporting layer preserves these cross-reference keys through the sync pipeline so that warehouse queries can join Salesforce and NetSuite data reliably without manual reconciliation.



Step 1: Map your cross-system data relationships

Before connecting any system, map the relationships between Salesforce and NetSuite records that your reporting use cases require. This mapping is the foundation of the unified reporting layer — without it, the warehouse contains two separate datasets that cannot be reliably joined.

Start with the primary entity relationship. In most enterprise implementations, the Salesforce Account and the NetSuite Customer represent the same real-world entity. Confirm how your implementation maintains the link between them. Options include a NetSuite Customer ID stored as a custom field on the Salesforce Account record, a Salesforce Account ID stored on the NetSuite Customer record, a shared external ID maintained in both systems, or a matching logic based on company name and address that requires probabilistic entity resolution.

Document the primary entity link explicitly. If your implementation uses a custom field, identify the Salesforce API name and the NetSuite field ID of that custom field. This field becomes the join key for all cross-system reporting.

Then map the secondary entity relationships. Salesforce Opportunities to NetSuite Sales Orders — what field connects them? Salesforce Contacts to NetSuite Contacts — is there a direct link or does the relationship run through the Account-Customer link? Salesforce Cases to NetSuite Support Cases — does your implementation use both, or does one system own customer support?

Document each relationship with the source fields on both sides of the join. This mapping document is the specification for your pipeline configuration and your warehouse schema design.



Step 2: Define your reporting requirements by team

Different business teams need different cross-system data combinations. Defining requirements by team before building the pipeline ensures you replicate the right data in the right structure.

Finance and revenue operations typically need Opportunity pipeline data from Salesforce joined to Invoice and Payment data from NetSuite — to build pipeline-to-revenue reports, cash flow forecasts, and revenue recognition schedules that reflect both committed pipeline and actual bookings.

Sales leadership typically needs Account and Opportunity data from Salesforce joined to Order history and Customer balance data from NetSuite — to understand which accounts are growing, which are churning, and which sales team members are generating revenue that actually collects.

Customer success typically needs Account health signals from Salesforce — case volume, engagement activity, NPS data — joined to financial health signals from NetSuite — invoice aging, payment history, subscription status — to build a complete at-risk identification view before renewal conversations.

Executive reporting typically needs a consolidated view across all of the above — pipeline, revenue, customer health, and financial performance in a single dashboard that does not require reconciling numbers from multiple systems.

For each team, document the specific Salesforce objects and fields needed, the specific NetSuite record types and fields needed, the join keys that connect them, the refresh frequency required — daily for most finance reporting, near real-time for live dashboards — and the aggregation level needed for reporting.

This requirements document becomes the object selection list for your pipeline configuration.



Step 3: Set up your data warehouse destination

Before connecting Salesforce and NetSuite to the pipeline, set up the warehouse destination that will receive the synchronized data. The warehouse is the shared repository that your reporting tools query — setting it up correctly before the pipeline runs avoids schema redesign after data starts flowing.

Create a dedicated database and schema for the integrated data. Separate schemas for Salesforce data and NetSuite data within the same database make it easy to identify the source of each table while keeping everything in a single queryable environment. A third schema for cross-system joined views — Customer_360, Pipeline_to_Revenue, Account_Health — organizes the reporting layer above the raw replicated data.

Create a service account with the permissions required to create tables, insert data, and modify schemas within the target database. Use key pair authentication for the service account. Grant this account access to both the Salesforce schema and the NetSuite schema so that cross-system views can query both without switching credentials.

Confirm that your chosen warehouse is in the geographic region required by your data residency obligations. If you operate under GDPR and your Salesforce and NetSuite data includes personal data of EU residents, the warehouse must be in an EU region. Configure this before the first record moves.



Step 4: Connect Salesforce to the pipeline

With the warehouse prepared, connect Salesforce to Sesame Software's platform and configure the extraction for the objects your reporting requirements identified.

Authenticate using OAuth 2.0. Sesame Software connects to Salesforce using the standard OAuth flow — no credentials stored in configuration files, no manual token management. Select the Salesforce objects that your requirements document identified: Accounts, Contacts, Opportunities, Opportunity Line Items, Cases, Activities, and any custom objects that carry data relevant to your reporting use cases.

Sesame Software's automated schema discovery reads every field on every selected object and creates the corresponding tables in your warehouse destination automatically. No manual table creation, no field mapping spreadsheets. The warehouse schema mirrors the Salesforce object structure immediately after connection.

Configure extraction frequency based on your reporting freshness requirements. For daily finance reporting, thirty-minute incremental sync intervals provide data that is current enough without placing unnecessary load on Salesforce API capacity. For live operational dashboards that sales and customer success teams monitor throughout the day, configure five-minute incremental sync or enable Sesame Software's Real-Time Option for change data capture on the objects that drive the most time-sensitive reporting.

Enable delete tracking. When a Salesforce record is deleted — a duplicate Account merged, an erroneous Opportunity removed — the deletion should propagate to the warehouse so that reporting is not skewed by records that no longer exist in Salesforce. Sesame Software tracks Salesforce soft-deletes and propagates them to the destination on the next extraction cycle.



Step 5: Connect NetSuite to the pipeline

Connect NetSuite using the same Sesame Software platform interface. Confirm that SuiteAnalytics Connect is enabled in your NetSuite account under Setup > Company > Enable Features. Create a dedicated NetSuite integration user with SuiteAnalytics Connect access and read access to the record types your requirements document identified.

Gather the token-based authentication credentials — Account ID, Role ID, Application ID, and TBA credentials. Enter these in the Sesame Software NetSuite connection configuration. The platform tests the SuiteAnalytics Connect connection before proceeding and surfaces the most common configuration issues — SuiteAnalytics Connect not enabled, insufficient role permissions, TBA tokens not activated — before any data moves.

Select the NetSuite record types for your reporting use cases. For a complete ERP CRM synchronization, the standard starting scope includes Customers, Transactions — Sales Orders, Invoices, Credit Memos, Payments — Items, and the custom record types specific to your NetSuite implementation.

Pay particular attention to the NetSuite fields that contain cross-reference keys to Salesforce. If your implementation stores Salesforce Account IDs on NetSuite Customer records, include that field explicitly in the extraction scope. This field is the join key that makes your unified reporting layer work.

Sesame Software's automated schema discovery reads the complete NetSuite schema — including custom record types and custom fields specific to your implementation — and creates the corresponding warehouse tables automatically. Configure the same extraction frequency for NetSuite as you configured for Salesforce so that both datasets refresh at the same rate and the joined views in your reporting layer remain synchronized.



Step 6: Build the cross-system join layer

With Salesforce and NetSuite data flowing into your warehouse, build the cross-system join layer that turns two separate datasets into a unified business data view.

In your warehouse, create a Customer_Master view that joins the Salesforce Account table and the NetSuite Customer table on your documented cross-reference key. This view is the foundation of all 360-degree customer view reporting — every subsequent cross-system report joins through this view rather than performing the Account-Customer join independently.

Create a Pipeline_to_Revenue view that joins Salesforce Opportunities to NetSuite Sales Orders and Invoices. This view connects the pipeline that your sales team manages in Salesforce to the orders and invoices that finance manages in NetSuite — enabling the pipeline-to-revenue reports that revenue operations teams need without manual reconciliation.

Create an Account_Health view that combines Salesforce engagement signals — case volume, activity recency, NPS scores — with NetSuite financial signals — invoice aging, payment history, account balance — joined through the Customer_Master view. This view is the foundation for customer success reporting that surfaces at-risk accounts before they churn.

Build these views as warehouse views rather than materialized tables where your warehouse supports it. Views query the underlying replicated tables directly, which means they always reflect the most recently synced data without a separate refresh step. For reporting use cases where query performance on large datasets is a concern, materialize the views on a schedule that matches your reporting freshness requirement.



Step 7: Connect your BI tools and validate reporting

With the unified reporting layer built, connect your BI tools — Tableau, Power BI, Looker, Sigma — to the warehouse rather than directly to Salesforce or NetSuite. This single connection gives your reporting tools access to both datasets through the cross-system join layer without requiring separate connections to each source system.

Before publishing reports to business users, validate the joined data against known values from each source system. Check Customer_Master record counts against both Salesforce and NetSuite to confirm that the join is not dropping records. Check Opportunity-to-Invoice joins for a sample of known closed deals to confirm that the cross-reference keys are resolving correctly. Check Account_Health signal values against what users see in Salesforce and NetSuite directly to confirm that the warehouse data matches the source systems.

Address any join gaps discovered during validation. Records that appear in Salesforce but not in NetSuite — or vice versa — may represent legitimate cases where the relationship has not been established in one system, or may indicate missing cross-reference keys that need to be populated. Document the approach for each gap category so that business users understand the scope of coverage in the unified reporting layer.

Once validation confirms that the unified data is accurate and complete, publish the reports to business users and establish a regular validation cadence — monthly checks that confirm record counts and spot-check key metrics against source systems keep the reporting layer trustworthy over time.



Step 8: Monitor and maintain the unified pipeline

A unified Salesforce and NetSuite reporting layer requires ongoing monitoring to stay accurate as source systems evolve. Schema changes in either system — new fields, modified record types, new custom objects — need to propagate to the warehouse and the cross-system join layer without breaking reports that depend on them.

Sesame Software's automated schema management detects schema changes in both Salesforce and NetSuite and propagates them to the warehouse automatically. New fields appear in the warehouse tables on the next extraction cycle without manual intervention. The platform alerts on schema changes so your team can assess whether they affect existing reports or create new reporting opportunities.

Monitor extraction health for both pipelines through Sesame Software's dashboard — record volumes per cycle, error rates, latency, and the last successful extraction timestamp for each object. Set alerts for extraction failures and for record count anomalies that may indicate source system issues affecting the completeness of your reporting layer.

Review the cross-system join layer quarterly to confirm that new Salesforce and NetSuite records are resolving correctly through the Customer_Master join. As your business grows and the volume of both Salesforce and NetSuite records increases, the join logic may need tuning to maintain the match rate that your reporting accuracy requires.



Why Sesame Software is the right platform for Salesforce and NetSuite reporting integration

Sesame Software's business data integration platform is built for exactly this use case — connecting enterprise source systems, managing schemas automatically, preserving cross-system relationships, and delivering unified data to a warehouse where reporting tools can query it reliably.

The customer-hosted architecture keeps all pipeline processing inside your own environment. Salesforce data and NetSuite financial data — some of the most sensitive data in your organization — move directly from source systems to your warehouse through pipelines running on your infrastructure. Sesame Software's servers are never in the data path.

Automated schema discovery handles the complexity of both Salesforce customization and NetSuite implementation specifics — custom objects, custom fields, multi-subsidiary structures, multi-currency records — without requiring manual field mapping or developer involvement.

Predictable annual pricing based on connectors means the cost of your unified reporting layer stays fixed as data volumes grow. No per-row charges, no consumption-based billing surprises as your Salesforce and NetSuite records accumulate over time.

With 23+ years of enterprise data management expertise and a customer base that includes Procter & Gamble, Bank of America, and the U.S. Government, Sesame Software scales to the data volumes that enterprise ERP CRM synchronization requires — without performance degradation and without the operational overhead that custom-built pipelines create.

Man holding a laptop in a dark data center aisle, surrounded by glowing blue server racks and cables, focused and quiet



If you're ready to take back control of your Salesforce data movement strategy, talk to a Sesame Software data expert today.


Business Data Integration Frequently Asked Questions


What is the best way to sync Salesforce and NetSuite for reporting?

The most reliable approach is to replicate both systems into a shared cloud data warehouse using a no-code business data integration platform, then build cross-system join views that connect Salesforce customer records to NetSuite financial records on your implementation's cross-reference keys. This architecture keeps reporting queries out of both source systems, preserves Salesforce API capacity for operational use, and gives your BI tools a single queryable environment for both CRM and ERP data.

How do I join Salesforce Accounts to NetSuite Customers in reporting?

The join depends on how your implementation maintains the cross-system link. Most enterprise implementations store a NetSuite Customer ID as a custom field on the Salesforce Account record, or a Salesforce Account ID on the NetSuite Customer record. Identify this field in both systems, include it in your extraction scope, and use it as the join key in your warehouse Customer_Master view. Sesame Software preserves this cross-reference field through replication so the join is always available in the warehouse.

How frequently should Salesforce and NetSuite data sync for reporting?

Refresh frequency depends on your reporting use case. Daily finance reporting is well-served by thirty-minute incremental sync intervals. Live operational dashboards that sales and customer success teams monitor throughout the day benefit from five-minute incremental sync. For the most time-sensitive use cases, Sesame Software's Real-Time Option implements native Salesforce change data capture for near-real-time freshness on key objects.

Does syncing Salesforce and NetSuite to a warehouse affect Salesforce performance?

No — when the pipeline uses incremental extraction rather than full extraction on every cycle. Sesame Software's incremental extraction queries only records modified since the last successful cycle using Salesforce's SystemModstamp field, consuming API calls proportional to change volume rather than total record count. For high-freshness use cases, the Real-Time Option uses Salesforce Change Data Capture through the platform event bus, which does not consume REST API calls at all during normal operation.

What warehouse platforms work with Sesame Software for unified Salesforce and NetSuite reporting?

Sesame Software connects to all major cloud data warehouse destinations including Snowflake, AWS Redshift, Azure SQL, Google BigQuery, and SQL Server. The warehouse choice depends on your existing infrastructure, your BI tool's native connectivity, and your data residency requirements. Sesame Software configures the destination connection, creates warehouse schemas automatically, and manages schema updates as source systems evolve — regardless of which warehouse platform you use.

How does Sesame Software handle multi-currency and multi-subsidiary NetSuite data for reporting?

Sesame Software's NetSuite connector preserves both transaction currency values and base currency values for all financial records — ensuring that cross-currency reporting in the warehouse has access to both the native transaction amount and the standardized base currency equivalent. Multi-subsidiary data structures are replicated with subsidiary context preserved, enabling warehouse reports to roll up, drill down, or segment by subsidiary without losing the organizational hierarchy that NetSuite maintains.



Inside the customer's own environment. Sesame Software installs and runs on the customer's own servers — on-premise or in the customer's own cloud accounts. Salesforce data moves from the Salesforce API directly to Sesame Software running on your infrastructure, and from your infrastructure directly to your warehouse destination. Sesame Software's servers are never in the data path during extraction, processing, or loading.



Found this post helpful? Share it with your network using the links below.



bottom of page