This blog post is for people who want to migrate their CRM Data from NetSuite to Salesforce. While NetSuite’s Accounting and ERP products are considered best-of-breed by many, NetSuite’s CRM product doesn’t have that same reputation. We talk to companies who are using NetSuite for both CRM and Accounting and want to migrate their CRM over to Salesforce.
Here, we’ll be covering how you can migrate your CRM data from NetSuite to Salesforce, for free, and without too much trouble.
Understand the Differences
Not all objects will map cleanly from NetSuite to Salesforce.
- Businesses and Humans: Companies and Contacts vs. Accounts and Contacts – plus “Person Accounts”,
- Sales data: Opportunities, Quotes, Orders vs. Opportunities, Estimates, Sales Orders, Invoices
- Products and Prices: Price Books and Products vs. Price Levels
We’ll dive into more detail on each of these items now.
Businesses and Humans
NetSuite and Salesforce both have similar structures for people and businesses. NetSuite has Companies and Contacts, and Salesforce has Accounts and Contacts.
And both have what Salesforce calls “Person Accounts”, which are in NetSuite companies that have been flagged as “Is Person”. The object mapping is fairly straightforward, except that Salesforce also has Leads, whereas NetSuite doesn’t.
Salesforce has Opportunities, which might have Quotes associated with it, and/or might also have Orders associated with it.
NetSuite has Opportunities like Salesforce, which in turn can be used as the basis for an Estimates, which itself can become the basis of a Sales Order. (Which in turn can become an Invoice, but that’s more on the Accounting, not CRM side of NetSuite).
NetSuite is more linear, as each object forms the basis for the next sequential object. So for NetSuite, the flow is typically Opportunity > Estimate > Sales Order > Invoice.
Salesforce is more flexible, and also lacks the final Invoice object. So with Salesforce, you might create Quotes from your Opportunity, or you might use Salesforce CPQ, or you might generate a contract or quote using an AppExchange App. And, with Salesforce, many companies don’t use Orders at all.
So while it’s likely that you’ll migrate NetSuite Estimates to Salesforce Opportunities, as for the rest of the objects, you might not migrate anything else. And some companies (particularly those with shorter sales cycles) don’t bother migrating sales data and just ‘start fresh’ on Opportunities.
Products and Prices
Moving products might seem easy, and it is if all you need to migrate is products. But, what really takes time is the prices associated with those products. This is an area that is particularly tricky, as Salesforce structures its prices entirely differently than how NetSuite structures its prices.
Salesforce has Price Books and Products. A price book refers to a set of prices that apply to any/all products, like a hypothetical “Gold Partner Pricing”. If you are a gold partner, then you get the Gold Partner Price Book, which sets your price for all Products.
NetSuite is far more complicated. It has Price Levels, which are roughly comparable to Salesforce’s Price Books. But, each price level might have up to 50 different prices for a single product based on the quantity purchased. These quantity tiers effectively allow a structured discount for higher quantities.
This screenshot is from Breadwinner for NetSuite, rather than from Salesforce, but it gives you an idea of how complicated Pricing can be for a single Product.
Another complexity in NetSuite that’s not in Salesforce is the ability for a NetSuite Company to get a specific price on a specific product instead of their default Price Level for just that product(s). So a NetSuite Company might officially be on the hypothetical Gold Partner Pricing Level, but might get a different price level for specific products. And instead of a different price level, they might get a certain price that isn’t even a price level.
So, it’s possible for every company to have a unique price for every product in your entire catalog, with up to a maximum of different quantity tiers. The math for this is scary. Presume 1000 companies and 100 products. That’s a theoretical maximum of 1000x100x50, or 5 million prices.
This simply can’t be migrated to Salesforce. The best you can do is to migrate the NetSuite Price Levels to Salesforce Price Books, and drop the per-company and quantity tiered pricing.
If you can’t drop them, then you can consider a third party Salesforce App, like Salesforce CPQ. However, what a lot of companies do in this situation is to keep NetSuite as their system of record for pricing. You might be surprised at this, but many companies moving to Salesforce for CRM will keep NetSuite for accounting anyway, so there’s no software cost for using NetSuite for pricing in this situation.
Migrate your Data
For much of this migration, we use Breadwinner for NetSuite. Normally, Breadwinner is a paid product, however, you can migrate your entire data during the free trial period and uninstall after the migration is completed, having paid nothing.
The Breadwinner team is quite happy for you to use their app for this free migration. That’s because a number of companies doing the migration will want to keep NetSuite for their accounting system and possibly product/pricing system, and use Salesforce for CRM. And companies like that are a perfect fit for Breadwinner’s integration between Salesforce and NetSuite.
Breadwinner can’t do all the data migration, however, and for that we recommend you use your favorite data loader. Luckily, because of Breadwinner, you won’t have to extract data directly from NetSuite.
Installing Breadwinner and Initial Import
Since this blog post is about switching to Salesforce, then it’s likely that your Salesforce Org is empty, in which case you can safely install Breadwinner into Salesforce production. However, if you are already using Salesforce, then we recommend doing this first in a Partial Sandbox. Don’t try this in a regular Dev org—you’ll hit the 5 MB / 2,500 Record limit in minutes.
Install Breadwinner for NetSuite from the AppExchange. Once Breadwinner is installed, go to the Breadwinner for NetSuite tab, and follow the instructions to connect Breadwinner to your NetSuite org (you will need a NetSuite admin to enable this connection in NetSuite).
Once connected, you will be prompted to select which NetSuite Subsidiaries and which Objects you want to sync. You may also be asked if you want to create custom fields in Salesforce that replicate custom fields in NetSuite. From installation to this point takes about 30 minutes or so.
Once you confirm your choices, the data import from NetSuite to Salesforce will begin. For a very small data set, this might be quick. For a very large data set, this could take a day or more. There’s an Import Progress indicator in Breadwinner so you can keep an eye on the import. Presume it will be an overnight job at least, and plan to continue working the next day.
It’s important to note that this initial import will only bring your data into Salesforce using Breadwinner’s custom objects. So your NetSuite Companies will be on the object NetSuite Companies, and your NetSuite Contacts will be on the object NetSuite Contacts. These are the custom objects that will disappear if you later uninstall Breadwinner.
Given this, we next need to get this data from Breadwinner managed package objects on to standard Salesforce Objects.
Migrating from Breadwinner Objects to Standard Objects
This initial aspect of the migration is very straightforward. First, make sure the initial import is completed. The Import Progress should show that everything is completed (and all colors are green).
First, we’ll copy the data currently contained in Breadwinner’s NetSuite Companies to Salesforce’s standard object Accounts. Go to the Troubleshooting menu on the Breadwinner for NetSuite tab, and click the button to Mass Create Salesforce Accounts. This will copy the data from one object to another.
This is a migration internal to Salesforce, from one object to another, so it will be much quicker than the initial import from NetSuite. Presuming this is an empty org, you’ll know it’s done when the number of SF Account records is the same as the NetSuite Company records. I use the “Storage Usage” tool in Salesforce Setup to check this.
Once the Accounts are all created, you can create the Contacts by clicking on the next button.
And, once the Contacts are created, you can create Salesforce Products by clicking the relevant button. And, as well as creating Products, this process will also create Price Books from NetSuite Price Levels, and Price Book Entries from the NetSuite Item Prices.
That’s it! You have migrated NetSuite Companies, Contacts, Items, Price Levels, and Item prices to Salesforce and all under an hour.
You can also use Breadwinner to create additional custom objects in Salesforce, which replicate data from NetSuite Custom Objects. You may have even done this before starting the initial import from NetSuite. While these objects are created by Breadwinner, they were created after Breadwinner was installed, and thus they are considered ‘regular’ custom objects and not part of the Breadwinner Managed Package. So after you uninstall Breadwinner, these objects will remain in your Salesforce Org.
So once these objects are populated with NetSuite data, you can rename them as you wish.
Further Migrations to Standard Objects
At the time of writing, Breadwinner does not migrate NetSuite Opportunities to Salesforce Opportunities. So while NetSuite Opportunities are at least in Salesforce on the object NetSuite Opportunities, you’ll have to manually migrate them from that custom object to Salesforce’s standard Opportunity object.
The same applies to anything else you might want to move, like NetSuite Estimates to Salesforce Quotes.
The good news is that at least all the data is in Salesforce, which means you can use your favorite data loader tool.
Custom Fields and Metadata
Breadwinner will be able to replicate NetSuite standard and custom fields into the various NetSuite objects in Salesforce. But the custom fields in NetSuite might be picklists, and Breadwinner will save the respective data into text fields. So you might need to create a picklist in Salesforce and migrate the data from a text field into the picklist field.
If you plan to use NetSuite for accounting, then you might want to subscribe to Breadwinner. But, presuming you don’t, the next step is to uninstall Breadwinner.
Uninstalling will remove all of the Breadwinner Tabs and Breadwinner Objects and all of the data on those objects. But any data you’ve moved to your Salesforce Standard objects will remain, unaffected by the uninstallation.
Also, any custom objects that you added after installation (or were added by Breadwinner after installation) will remain. If you are unsure if a custom object is part of the Breadwinner managed package or not, check the Object Manager in Salesforce Setup. If the object API Name starts with “breadwinner_ns__” then it will be removed during uninstallation. If it does not start with that, then it will stay.
Presuming there are no errors with uninstallation, it shouldn’t take more than a few minutes. Just go to Installed Packages in Salesforce Setup and click Uninstall next to Breadwinner for NetSuite.