Salesforce-to-NetSuite sync errors: invalid subsidiary references and missing price books
Fix the two most common Salesforce-to-NetSuite item sync errors: 'invalid item reference for subsidiary' and a missing price book lookup.
Part of the finance integrations guide.

The two most common Salesforce-to-NetSuite sync errors have specific, fixable causes. "Invalid item reference key … for subsidiary …" means the Salesforce account and the product on the opportunity belong to different NetSuite subsidiaries; fix it by putting them in the same subsidiary. "ORCL-BA-NS2SFDC_INVITEM_CREATE_ERROR : Missing Pricebook lookup or lookup is not configured for all defined levels" means a NetSuite price level has no Salesforce price book mapped; fix it in Connector Platform → Settings → Manage Lookups.
Both errors come from Oracle's Salesforce Connector, and both are documented on Oracle's troubleshooting page. This guide gives each exact error its own section, with the cause, the fix, how to confirm it worked, and two related errors that travel with them.
Key takeaways
• "Invalid item reference key for subsidiary" is a subsidiary mismatch. Oracle's documented cause: the subsidiary on the account differs from the subsidiary on the attached product.
• The missing price book error is a lookup gap. Every NetSuite price level needs a Salesforce price book mapped in the NetSuite Price Levels lookup.
• Mapping one price book to several price levels causes a different failure: "Record rolled back because not all records were valid and the request was using AllOrNone header."
• Currency lookups fail the same way. "Currency ISO Code: invalid currency code: -1" means the currency codes lookup is incomplete.
• All four are master-data errors, so the lasting fix is a check before the data reaches the sync, not a faster retry after it fails.
• Loopfour, the deterministic finance workflow automation platform, validates subsidiary, item, price, and currency before a record is sent, and routes anything that fails to an owner in Slack.
Quick reference: the errors and their fixes
Each error below maps to one cause and one fix. The table is drawn from Oracle's "Troubleshooting Salesforce Connector Data Sync Issues" page.
| Error text | Sync | Cause | Fix |
|---|---|---|---|
| SalesOrder Create Failed in NetSuite. Details : Invalid item reference key … for subsidiary … (ORCL-BRT-OPPORTUNITY2SALESORDER_FAULT) | Opportunity → sales order | Account subsidiary differs from product subsidiary | Put product and account in the same subsidiary |
| ORCL-BA-NS2SFDC_INVITEM_CREATE_ERROR : Missing Pricebook lookup or lookup is not configured for all defined levels | Item → product | Price book lookup not configured | Configure the NetSuite Price Levels lookup |
| Record rolled back because not all records were valid and the request was using AllOrNone header | Item → product | Same Salesforce price book mapped to all NetSuite price levels except Base Price | Map a different price book to each price level |
| Currency ISO Code: invalid currency code: -1 | Any | Currency table not configured in lookup | Update the Currency Codes lookup and retry |
If you're still deciding how to connect the two systems, start with our NetSuite Salesforce integration guide for finance teams.
"Invalid item reference key … for subsidiary …"
This error means NetSuite can't add the item to a sales order for the customer's subsidiary, because the item isn't available in that subsidiary. Oracle's troubleshooting page gives the full text as "Opportunity Sync from Salesforce to NetSuite failed. Error: SalesOrder Create Failed in NetSuite. Details : Invalid item reference key number for subsidiary number," with the code ORCL-BRT-OPPORTUNITY2SALESORDER_FAULT.
What causes it
Oracle's documented root cause is that the subsidiary on the Salesforce account is different from the subsidiary on the attached product. In NetSuite OneWorld, every customer belongs to a subsidiary and every item is available only in the subsidiaries it's assigned to. When a closed-won opportunity tries to create a sales order for a customer in one subsidiary using an item assigned to another, NetSuite rejects the line.
| Record | Subsidiary |
|---|---|
| Salesforce account "Acme GmbH" → NetSuite customer | Germany (subsidiary 4) |
| Product "Platform – Annual" → NetSuite item | US (subsidiary 1) only |
| Result | Invalid item reference key [item ID] for subsidiary 4 |
The two numbers in the error are your clues: they identify the item reference and the subsidiary the sync was working in. Look both up in NetSuite to see exactly which record to fix.
How to fix it
• Identify the item and subsidiary from the IDs in the error.
• Decide which record is wrong. If the customer really belongs to the Germany subsidiary, the item needs to be available there. If the account was assigned to Germany by mistake, correct the account.
• To extend the item, open the item in NetSuite and add the subsidiary to its subsidiary assignment. If your subsidiaries are nested, the item's Include Children option makes it available to child subsidiaries.
• To correct the account, fix the subsidiary on the Salesforce account (or NetSuite customer, depending on your source of truth) and let the account sync update.
• Re-trigger the opportunity sync and confirm the sales order is created and linked to the opportunity.
This is a finance decision, not a sync setting. Extending an item to a new subsidiary affects tax, revenue accounts, and intercompany treatment. Your controller should approve it.
How to prevent it
Validate subsidiary alignment before the opportunity can close. Every product on the opportunity should be available in the account's subsidiary. That check is simple to express as a rule and expensive to discover after the deal closes. For the full troubleshooting flow when an order never appears, see why your closed-won opportunity doesn't become a sales order in NetSuite.
"ORCL-BA-NS2SFDC_INVITEM_CREATE_ERROR : Missing Pricebook lookup or lookup is not configured for all defined levels"
This error means an item synced from NetSuite can't be created as a Salesforce product because at least one NetSuite price level has no Salesforce price book mapped. Oracle lists it under the item sync as "Item created in NetSuite with price details but failed to sync to Salesforce."
What causes it
Oracle's documented root cause is simply that the price book lookup is not configured. The Salesforce Connector uses a NetSuite Price Levels lookup to decide which Salesforce price book receives each NetSuite price. If the item carries a price for a price level that isn't in the lookup, the product can't be created.
Oracle's lookup documentation adds two rules that matter here. First, you should keep a one-to-one mapping between NetSuite price levels and Salesforce price books. Second, NetSuite is the authoritative source for prices. Oracle also notes that if you don't maintain price levels in NetSuite, Salesforce prices still sync as a custom price on sales orders, and as null on NetSuite items.
How to fix it
• List your NetSuite price levels. Oracle's lookup documentation points to Setup → Accounting → Setup Tasks → Accounting Lists.
• Make sure each price level has a matching Salesforce price book. Create any price books that don't exist yet.
• Configure the lookup in Connector Platform → Settings → Manage Lookups → NetSuite Price Levels, mapping each level to its own price book.
• Retry the failed item sync and confirm the product and its price book entries appear in Salesforce.
The related error: "Record rolled back because not all records were valid and the request was using AllOrNone header"
This error appears when the same Salesforce price book is mapped to every NetSuite price level except Base Price. Oracle's fix is to configure a different Salesforce price book for each NetSuite price level in the NetSuite Price Levels lookup. The AllOrNone header means Salesforce rejected the whole batch because one record in it was invalid.
If you fix the missing lookup by pointing every level at one price book, you trade the first error for this one. One level, one book.
How to prevent it
Add price-level mapping to your pricing change checklist. Every new price level in NetSuite needs a Salesforce price book and a lookup entry before any item carries a price at that level. Treat the lookup as part of the price list, owned by whoever owns pricing.
Book a workflow review to see how these checks run before a record reaches the connector.
Other errors that travel with these two
Subsidiary and price book errors usually appear alongside a small set of related setup errors. Oracle's troubleshooting page lists them with their fixes.
"Currency ISO Code: invalid currency code: -1"
This error means the currency on the record isn't in the connector's Currency Codes lookup. Oracle's fix is to update the Currency Codes lookup table, then retry the failed sync. It typically appears the first time you sell in a new currency.
Product creation failed in Salesforce
Oracle lists two causes: the tax schedule isn't configured in the connector's preferences, or no product type was selected. Set the Default Tax Schedule in Connector Platform → Settings → Preferences, and make sure every product has a product type.
Inventory item creation failed in Salesforce
The cause is missing default asset and COGS accounts in NetSuite. Oracle's fix is Setup → Accounting → Accounting Preferences, then configure COGS and asset accounts on the Items/Transactions tab.
Item created in NetSuite but not synced to Salesforce
Either the item sync isn't enabled on the data syncs page, or the item's User Event script isn't active. Enable the sync, then check Customization → Scripting → Scripts and Script Deployments for the inventory item.
Why these errors keep coming back
Every error above is a gap between two sets of master data: subsidiaries, items, price levels, and currencies. They don't fail when someone creates the gap. They fail later, when a record crosses the sync.
| Where the gap starts | Error it produces later | Owner who should catch it |
|---|---|---|
| Account created with the wrong subsidiary | Invalid item reference key for subsidiary | Sales ops, with finance approval |
| Item not extended to a new subsidiary | Invalid item reference key for subsidiary | Finance (item master) |
| New price level without a price book | Missing Pricebook lookup | Pricing owner |
| One price book mapped to many levels | AllOrNone rollback | Connector admin |
| New currency without a lookup | Invalid currency code: -1 | Connector admin |
The fix that lasts is a validation step at the point of change, plus an owner for every error type. A connector's daily error report tells you what broke; it doesn't stop the next one. When records have no shared identifier at all, mapping fields between finance systems becomes the upstream problem.
How to choose where the checks live
Put the checks where the data is created, and keep a governed backstop where the data crosses systems. You have three places to do it.
Inside the connector, Oracle's lookups and preferences are the first line. They're native and documented, and they catch configuration gaps once they're set. Inside an iPaaS flow, you can add pre-validation steps before each create call; teams with admin or partner capacity do this well, and they own the logic from then on.
Inside a governed finance workflow, the checks run as rules finance approved. A sync sends the record and reports the failure. Loopfour checks subsidiary, item availability, price level, and currency before the record is sent, holds anything that fails for a named owner in Slack, and records the decision in the execution tree. We build and maintain the workflow on your existing Salesforce and NetSuite. For the comparison of iPaaS options, read Celigo vs Boomi vs Workato for NetSuite-Salesforce finance sync.
Frequently asked questions
What does "Invalid item reference key for subsidiary" mean in NetSuite? It means the item on the order isn't available in the customer's subsidiary. Oracle's documented cause for the Salesforce Connector is that the account's subsidiary differs from the product's subsidiary; the fix is to put them in the same subsidiary, usually by extending the item to the customer's subsidiary.
How do I fix ORCL-BA-NS2SFDC_INVITEM_CREATE_ERROR? Configure the NetSuite Price Levels lookup in Connector Platform → Settings → Manage Lookups so that every NetSuite price level maps to a Salesforce price book. Then retry the item sync.
Can I map one Salesforce price book to all NetSuite price levels? No. Oracle lists "Record rolled back because not all records were valid and the request was using AllOrNone header" as the result when the same price book is mapped to all price levels except Base Price. Map a different price book to each price level.
Which system should own prices, NetSuite or Salesforce? Oracle's lookup documentation states NetSuite is considered the authoritative source for price levels. Keep prices and price levels in NetSuite and sync them to Salesforce price books one-to-one.
What does "invalid currency code: -1" mean? The record's currency isn't mapped in the connector's Currency Codes lookup. Update the lookup, then retry the failed sync.
How do I stop Salesforce-to-NetSuite sync errors from recurring? Validate subsidiary, item availability, price level, and currency at the point where each is created, and give every error type a named owner. Loopfour runs those checks as a deterministic workflow before records reach NetSuite and routes failures to Slack for approval.
Conclusion
The two errors that stop most Salesforce-to-NetSuite item and order syncs are a subsidiary mismatch and a missing price book lookup. Match the account and item subsidiaries, map one price book to each price level, and keep NetSuite as the price authority. Then move those checks to the point where the data is created, so the sync stops being where you find out.
Tell us the one workflow your team dreads. We will show it running — deterministic, permissioned, and auditable.
Book a demo.
Sources
• Oracle NetSuite Help: Troubleshooting Salesforce Connector Data Sync Issues
• Oracle NetSuite Help: Manage Lookups
Related reading
• How to integrate NetSuite with Salesforce for finance teams
• Why your closed-won opportunity doesn't become a sales order in NetSuite
• How to map fields between finance systems that don't share an identifier
• What integration approach works for multi-entity and multi-subsidiary finance
• Celigo vs Boomi vs Workato for NetSuite-Salesforce finance sync
Sources
- Oracle NetSuite, Troubleshooting Salesforce Connector Data Sync Issues (opens in a new tab).
- Oracle NetSuite, Manage Lookups (opens in a new tab).
