Overview
This article explains how the Salesforce-NetSuite integration app manages fields during sync, what it writes back, and where to check when records don’t sync as expected.
Important: Integration app-managed fields should usually be treated as read-only. Don’t manually edit ID fields, skip flags, status fields, or line-matching fields unless Celigo Support advises you to do so. Changing these fields can cause duplicate records, missed updates, or records that keep syncing.
| What do you want to know | Where to look |
| Which Salesforce and NetSuite fields are managed by the integration app | Salesforce fields managed by the integration app and NetSuite fields managed by the integration app |
| Why does a field change after sync | Start here if you are troubleshooting, and learn how to investigate an unexpected field change |
| Why is a record duplicated | Start here if you are troubleshooting and the related flow section |
| Why is a NetSuite ID or order number not written back | Post-submit behavior in the related flow section |
| Why did the Opportunity Stage or Name not update | NetSuite Sales Order to Salesforce Opportunity |
| Why did fulfillment fail with ‘ACCOUNT_MISSING’ | NetSuite Item Fulfillment to Salesforce Item Fulfillment |
Start here if you are troubleshooting
Use this table to identify the likely cause before reviewing the flow sections below.
| Symptom | Likely cause | What to check |
| A field changed unexpectedly | A field mapping or integration app processing step updated the field. | Check the field mapping for the flow. Then check the flow section in this article. |
| A Customer, Account, Sales Order, or line item was duplicated | A matching ID field was blank or was not written back during a previous run. | Check the NetSuite ID, Salesforce ID, and line ID fields before re-running the record. |
| A Salesforce record keeps exporting to NetSuite | The Skip Export flag is blank, false, or was not updated after the last sync. | Check celigo_sfnsio__Skip_Export_To_NetSuite__c on the Salesforce record. |
| NetSuite ID was not written back to Salesforce | Post-submit processing failed after the destination record was created or updated. | Review the flow audit log for post-submit errors. Also check Salesforce field permissions. |
| NetSuite Order Number is missing in Salesforce | The Sales Order was created, but the transaction number was not written back. | Check post-submit errors and access to celigo_sfnsio__NetSuite_Order_Number__c. |
| Opportunity Stage or Name did not update from NetSuite | The Sales Order originated in Salesforce, so the integration app protected Salesforce-managed fields. | Check custbody_celigo_sfio_sf_originated_ord on the NetSuite Sales Order. |
| Item sync fails with MISSING_STANDARD_PRICEBOOK | Standard Price Book settings or pricebook mappings are missing or invalid. | Refresh or verify Standard Price Book settings. Then check price level and currency mappings. |
| Fulfillment sync fails with ACCOUNT_MISSING | The NetSuite Customer is not linked to a Salesforce Account. | Run the NetSuite Customer to Salesforce Account flow for that customer. Then retry the fulfillment flow. |
How the integration app processes records
The integration app runs logic at specific points in a flow. These processing points are called hooks.
| Processing stage | When it runs | What it does |
| Pre-save page | Before exported records are sent to the import step. | Filters records, removes duplicates, or updates sync status information. |
| Pre-map | After data is fetched and before field mapping runs. | Looks up related records, resolves IDs, or adds data needed for mapping. |
| Post-map | After field mapping and before the destination record is created or updated. | Adjusts mapped values or protects fields from being overwritten. |
| Post-submit | After the destination record is created or updated. | Writes IDs or status information back to the source record. |
For writeback issues, check post-submit first.
Example: If a NetSuite Sales Order was created but the NetSuite Order Number did not appear on the Salesforce Opportunity, the issue is usually in post-submit processing or Salesforce field permissions.
Field ownership model
When a field changes, first identify how the integration app uses that field.
| Field behavior | Meaning |
| Reads | The integration app uses the field value during sync. |
| Writes | The integration app updates the field. |
| Uses for matching | The field helps decide whether to update an existing record or create a new one. |
| Protects from overwrite | The integration app may remove the field from the update payload. |
A field change can also come from a configured field mapping. Always check the flow mapping and the relevant flow behavior.
Salesforce fields managed by the integration app
| Field API name | Object | How the integration app uses it | Troubleshooting note |
| celigo_sfnsio__NetSuite_Id__c | Account, Contact, Opportunity, Order | Stores the NetSuite internal ID of the synced record. Used for matching and duplicate prevention. | If this field is blank, a future run may create a new NetSuite record instead of updating the existing one. |
| celigo_sfnsio__NetSuite_Record__c | Account, Contact, Opportunity, Order | Stores a link to the related NetSuite record after successful sync. | If the link is missing, check whether the post-submit completed successfully. |
| celigo_sfnsio__NetSuite_Order_Number__c | Opportunity, Order | Stores the NetSuite transaction number after a Sales Order is created or updated. | If the order number is missing, check post-submit errors and field permissions. |
| celigo_sfnsio__NetSuite_Line_Id__c | Opportunity Line Items, Order Items, fulfillment-related line records | Stores NetSuite line identifiers for future line updates. | If line IDs are blank, future syncs may create duplicate lines. |
| celigo_sfnsio__Skip_Export_To_NetSuite__c | Account, Contact, Opportunity, Order | Set after a successful Salesforce to NetSuite sync to prevent an immediate re-export. | If this field is true after sync, that is expected. |
| celigo_sfnsio__Test_Mode_Record__c | Account, Contact, Opportunity, Order | Identifies records created during test-mode flow runs. | Use this to separate test records from production records. |
| celigo_sfnsio__NetSuite_Item_Id__c | Item Fulfillment Lines | Stores the NetSuite item ID on Salesforce fulfillment line records. | Used for fulfillment-line matching and downstream processing. |
| celigo_sfnsio__Celigo_Last_Modified_Date__c | Product2 or Items | Tracks when the integration app last modified the item. | If item changes are not picked up, review item sync settings. |
| celigo_sfnsio__Celigo_NetSuite_integration_status__c | Integration status object | Tracks sync status information such as last sync and last error. | If the status looks old, re-run the flow and review the integration status record. |
NetSuite fields managed by the integration app
| NetSuite field script ID | Record type | How the integration app uses it | Troubleshooting note |
| custentity_celigo_sfio_sf_id | Customer or Entity | Stores the Salesforce Account ID on the NetSuite Customer record. | If this is missing, NetSuite to Salesforce flows may not find the related Salesforce Account. |
| custbody_celigo_sfio_sf_id | Sales Order body | Stores the Salesforce Opportunity or Order ID on the NetSuite Sales Order. | Used to associate the Sales Order with the Salesforce source record. |
| custbody_celigo_sfio_sf_originated_ord | Sales Order body | Indicates that the Sales Order originated from Salesforce. | If true, some Salesforce fields may be protected during writeback. |
| custbody_celigo_sfio_sf_pricebook_id | Sales Order body | Stores the Salesforce Pricebook ID associated with the order. | Check this field when troubleshooting pricebook-related order issues. |
| custcol_celigo_sfio_order_id | Sales Order lines | Stores the Salesforce Order Item ID on NetSuite Sales Order lines. | Missing values can cause duplicate lines. |
| custcol_celigo_sfio_sf_id | Sales Order lines | Stores the Salesforce line ID, such as OpportunityLineItem or OrderItem. | Used for line-level matching. |
| custitem_celigo_sfio_sf_id | Inventory or Non-inventory Items | Stores the Salesforce Product ID on the NetSuite item record. | Used to match NetSuite items with Salesforce products. |
Expected behavior that looks like an issue
Skip Export flag is set to true after sync
After a Salesforce record syncs successfully to NetSuite, the integration app sets celigo_sfnsio__Skip_Export_To_NetSuite__c to true.
This prevents the same Salesforce record from being exported again right away.
Don’t clear this field unless Celigo Support advises you to do so.
Opportunity Stage and Name may not update from NetSuite
When a NetSuite Sales Order was originally created from Salesforce, the integration app may remove StageName and Name from the Salesforce update payload.
This protects Opportunity fields that sales users may manage directly in Salesforce.
To confirm this behavior, check custbody_celigo_sfio_sf_originated_ord on the NetSuite Sales Order.
Missing Account or Customer links can cause downstream errors
Some flows need the related Account or Customer to be synced first.
Example: The NetSuite Item Fulfillment to Salesforce Item Fulfillment flow needs the NetSuite Customer to be linked to a Salesforce Account. If that link is missing, the fulfillment record can fail with ACCOUNT_MISSING.
Item sync depends on pricebook settings
Item sync can fail if the Salesforce Standard Price Book setting is missing, invalid, or not mapped correctly.
If you see MISSING_STANDARD_PRICEBOOK, verify the Standard Price Book setting and the price level to pricebook mapping.
Flow-by-flow field impact
Salesforce Account to NetSuite Customer
This flow creates or updates NetSuite Customer records from Salesforce Accounts.
| Stage | Fields read | Fields written | What happens |
| Post-submit | Salesforce Account ID and existing NetSuite ID. | NetSuite ID, NetSuite record link, Skip Export flag, and Test Mode indicator on the Salesforce Account. | The integration app links the Salesforce Account to the NetSuite Customer and helps prevent duplicate re-export. |
Troubleshoot Account to Customer sync issues
| Issue | What to check |
| NetSuite ID not written back | Review post-submit errors in the flow audit log. Check Salesforce field permissions. |
| Duplicate Customer created | Check whether celigo_sfnsio__NetSuite_Id__c was blank before the record was re-run. |
| Contacts not syncing with Account | Verify Account and Opportunity contact sync settings. |
Salesforce Contact to NetSuite Contact
This flow creates or updates NetSuite Contact records from Salesforce Contacts.
| Stage | Fields read | Fields written | What happens |
| Post-submit | Salesforce Contact ID and Account ID. | NetSuite ID, NetSuite record link, Skip Export flag, and Test Mode indicator on the Salesforce Contact. | The integration app links the Salesforce Contact to NetSuite and resolves the parent Customer relationship when needed. |
Troubleshoot Contact sync issues
| Issue | What to check |
| Parent Customer missing | Sync or verify the related Account or NetSuite Customer first. |
| NetSuite ID not written back | Review post-submit errors and Salesforce field permissions. |
| Contact created but not linked correctly | Check whether the related Account has a valid NetSuite Customer ID. |
Salesforce Opportunity to NetSuite Sales Order
This flow creates NetSuite Sales Orders from Salesforce Opportunities.
| Stage | Fields read | Fields written | What happens |
| Pre-map | Opportunity Account ID, Account billing and shipping fields, and optional channel-tier account fields. | No permanent customer-facing fields are written. | The integration app adds the Account data needed to create the NetSuite Sales Order. |
| Post-submit | NetSuite internal ID and transaction number. | NetSuite ID, NetSuite Order Number, NetSuite record link, Skip Export flag, and Test Mode indicator on the Salesforce Opportunity. | The integration app links the Opportunity to the NetSuite Sales Order and writes the transaction number back to Salesforce. |
Troubleshoot Opportunity to Sales Order sync issues
| Issue | What to check |
| Account not found | Run the Account sync first or check Account sync settings. |
| Sales Order created, but Order Number missing in Salesforce | Review post-submit errors and permissions for celigo_sfnsio__NetSuite_Order_Number__c. |
| Team Selling issues | Verify the Team Selling setting and access to Opportunity Team Member records. |
| Attachments or files not syncing | Check whether the related attachment or file sync setting is enabled. |
Salesforce Order to NetSuite Sales Order
This flow creates NetSuite Sales Orders from Salesforce Orders.
| Stage | Fields read | Fields written | What happens |
| Pre-map | Salesforce Order Account ID and Account address fields. | No permanent customer-facing fields are written. | The integration app verifies the related NetSuite Customer and prepares line pricing or discount handling. |
| Post-submit | NetSuite internal ID and transaction number. | NetSuite ID, NetSuite Order Number, NetSuite record link, Skip Export flag, and Test Mode indicator on the Salesforce Order. | The integration app links the Salesforce Order to the NetSuite Sales Order. |
Troubleshoot Order to Sales Order sync issues
| Issue | What to check |
| Order ID or transaction number is missing | Review post-submit errors for the record. |
| Unexpected pricing | Review line item mappings, discount handling, pricebook settings, and currency settings. |
| Order keeps exporting | Check the Skip Export flag and post-submit status. |
NetSuite Customer to Salesforce Account
This flow creates or updates Salesforce Accounts from NetSuite Customers.
| Stage | Fields read | Fields written | What happens |
| Pre-save page | NetSuite Customer internal ID. | Salesforce integration status information for the Account. | The integration app updates sync status information shown on Salesforce records. |
| Post-submit | No customer-facing NetSuite record fields are changed by this stage. | Flow status only. | Salesforce ID writeback to NetSuite is handled through configured mappings. |
Troubleshoot Customer to Account sync issues
| Issue | What to check |
| Old sync status | Re-run the flow and review the integration status record. |
| Missing Salesforce ID in NetSuite | Review field mappings and permissions. |
| Account not updating as expected | Check whether the issue is caused by field mapping. |
NetSuite Sales Order to Salesforce Opportunity
This flow updates or creates Salesforce Opportunities from NetSuite Sales Orders.
| Stage | Fields read | Fields written | What happens |
| Pre-map | Existing Opportunity and Opportunity line items using NetSuite IDs, team or split data when enabled, and Customer Salesforce Account ID. | No permanent customer-facing fields are written. | The integration app matches existing Opportunity lines and adds pricebook or currency context. |
| Post-map | Salesforce-originated flag on the NetSuite Sales Order. | May remove Opportunity StageName and Name from the update payload. | The integration app protects Salesforce-managed Opportunity fields when the order originated in Salesforce. |
| Post-submit | NetSuite internal ID and transaction number. | NetSuite ID and NetSuite Order Number on newly created Opportunities. | The integration app links new Salesforce Opportunities to the NetSuite Sales Order. |
Troubleshoot Sales Order to Opportunity sync issues
| Issue | What to check |
| Stage or Name not updated | Check whether custbody_celigo_sfio_sf_originated_ord is true on the NetSuite Sales Order. |
| Line duplication | Verify line ID fields are populated. |
| Missing Account | Sync or validate the NetSuite Customer to Salesforce Account relationship. |
| Pricebook or currency issues | Review pricebook and currency mappings. |
NetSuite Sales Order to Salesforce Order
This flow updates or creates Salesforce Orders from NetSuite Sales Orders.
| Stage | Fields read | Fields written | What happens |
| Pre-map | Existing Salesforce Order and Order Item data using NetSuite IDs, and Customer Salesforce Account ID. | No permanent customer-facing fields are written. | The integration app matches existing Order Items and validates the related Account. |
| Post-submit | NetSuite internal ID. | NetSuite ID on the Salesforce Order and NetSuite Line ID on each Order Item. | The integration app maintains order and line-level matching for future updates. |
Troubleshoot Sales Order to Order sync issues
| Issue | What to check |
| Order Items duplicated | Verify line IDs are present on existing lines. |
| Order not linked | Review post-submit errors and field permissions. |
| Account missing | Confirm the NetSuite Customer is linked to a Salesforce Account. |
NetSuite Item to Salesforce Product
This flow syncs NetSuite items to Salesforce Products and Price Book Entries.
| Stage | Fields read | Fields written | What happens |
| Pre-save page | NetSuite Item records. | No permanent customer-facing fields are written. | The integration app filters or removes unsupported item records before import. |
| Pre-map | NetSuite price levels and amounts, existing Salesforce Pricebook Entries, pricebook mapping settings, and currency mapping settings. | No permanent customer-facing fields are written. | The integration app resolves Salesforce Pricebooks and determines whether Pricebook Entries should be created or updated. |
Troubleshoot Item to Product sync issues
| Issue | What to check |
| MISSING_STANDARD_PRICEBOOK | Refresh or verify Standard Price Book settings. |
| Pricebook mismatch | Review price level to pricebook and currency mappings. |
| Products created, but prices are missing | Check whether the related price level and currency combination is mapped. |
NetSuite Item Fulfillment to Salesforce Item Fulfillment
This flow syncs NetSuite fulfillment records to Salesforce fulfillment objects.
| Stage | Fields read | Fields written | What happens |
| Pre-map | Existing Salesforce Item Fulfillment and line records using NetSuite IDs, and Customer Salesforce Account ID. | No permanent customer-facing fields are written. | The integration app matches fulfillment lines and validates that the related Customer is linked to Salesforce. |
| Post-submit | Newly created Salesforce Fulfillment Line IDs. | No customer-editable fields are updated. | The integration app passes line IDs to downstream fulfillment or asset processing when configured. |
Troubleshoot Item Fulfillment sync issues
| Issue | What to check |
| ACCOUNT_MISSING | Run NetSuite Customer to Salesforce Account for the related customer. Then retry the fulfillment sync. |
| Fulfillment lines duplicated | Verify line ID matching fields. |
| Downstream asset processing issue | Check whether asset processing is enabled and review downstream flow errors. |
NetSuite Financials to Salesforce
This flow syncs financial files or document data from NetSuite to Salesforce.
| Stage | Fields read | Fields written | What happens |
| Pre-save page | NetSuite financial records with file or document data. | No permanent customer-facing fields are written. | The integration app keeps valid financial records and excludes unsupported or duplicate entries. |
| Post-submit | Salesforce ContentDocument and ContentDocumentLink details. | No permanent business record fields are changed. | The integration app finds the created document and links it to the parent Salesforce record. |
Troubleshoot Financials sync issues
| Issue | What to check |
| Financial file not linked | Review content document creation and Salesforce permissions. |
| Duplicate files | Verify source record filtering and prior sync status. |
| File created but not visible | Check ContentDocumentLink creation and parent record access. |
How to investigate an unexpected field change
Follow these steps when a field is cleared, overwritten, or changed after sync.
Step 1: Identify the flow
Confirm the source system, destination system, object type, and flow direction.
Example: Salesforce Opportunity to NetSuite Sales Order.
Step 2: Check whether the field is integration-managed
Review the Salesforce and NetSuite field tables in this article. If the field is listed, don’t manually edit it unless Celigo Support advises you to do so.
Step 3: Check the field mapping
If the field is not listed as integration-managed, check the field mapping for the flow.
Example: If a NetSuite Customer field, such as Credit Limit, was cleared, check whether that field is included in the Customer flow mapping.
Step 4: Check the processing stage
| What happened | Where to look |
| ID or order number is missing | Post-submit |
| Parent Account or Customer is missing | Pre-map |
| Field did not update by design | Post-map |
| Duplicate records or lines were created | Matching ID fields and line IDs |
| Record keeps exporting | Skip Export flag and post-submit processing |
Step 5: Review the flow audit log
Look for errors on the same record during pre-map, post-map, or post-submit processing.
Post-submit errors matter when the destination record was created, but the source record was not updated with the destination ID or transaction number.
Information to collect before contacting Support
| Information | Why it helps |
| Flow name and direction | Identifies which processing logic applies. |
| Source record ID and destination record ID | Helps compare both sides of the sync. |
| Run ID or audit log entry | Shows where the failure occurred. |
| Field name and before or after values | Helps identify whether the change came from mapping or integration app processing. |
| Whether the record was created or updated | Helps confirm whether writeback or matching logic should have run. |
| Relevant integration-managed field values | Helps identify missing IDs, skip flags, or line-matching issues. |
| Recent mapping or settings changes | Helps isolate configuration-related behavior. |
Best practices
| Recommendation | Why it matters |
| Don’t manually edit integration-managed fields unless advised by Support. | Manual edits can cause duplicates or repeated syncs. |
| Check mappings before assuming the issue is caused by integration app processing. | Many field changes come from configured mappings. |
| Test flow changes in a sandbox before updating production. | This helps catch mapping or writeback issues before they affect live records. |
| Review the flow audit log for the affected record. | The audit log shows whether the issue happened during pre-map, post-map, or post-submit. |
| Fix missing ID or line-matching fields before re-running records in bulk. | Re-running records without fixing matching fields can create more duplicates. |
Glossary
| Term | Meaning |
| Hook | Automated flow logic that runs at a specific stage, such as pre-map, post-map, post-submit, or pre-save page. |
| Flow | A sync process that moves data between Salesforce and NetSuite in one direction. |
| Pre-save page | Processing that runs before exported records are passed to the import step. |
| Pre-map | Processing that runs before field mappings execute. It is often used to fetch related data or resolve IDs. |
| Post-map | Processing that runs after field mapping and before the destination record is written. |
| Post-submit | Processing that runs after a record is created or updated in the destination system. It is often used for ID writebacks and status updates. |
| ID writeback | The process of writing the destination record ID back to the source record after a successful sync. |
| Skip Export | A system-managed field used to prevent a Salesforce record from being exported again immediately. |
| Line-level matching | Use of line IDs to update existing transaction or fulfillment lines instead of creating duplicates. |
| Integration-managed field | A field installed or maintained by the integration app to support sync, matching, writeback, or troubleshooting. |
| Salesforce-originated order | A NetSuite Sales Order that was created from Salesforce. Some Salesforce fields may be protected from overwriting during writeback. |
| Pricebook Entry | A Salesforce record that links a Product to a Pricebook with a specific price. |
| Channel Tier | Optional functionality that supports multi-tier account relationships such as Distributor, Reseller, and End User. |