NetSuite/Copper CRM Integration


Recently, we were approached by one of our clients to build a bi-directional integration with a CRM solution called Copper.  This client chose Copper due to the fact that their company makes extensive use Google workspace (formerly G Suite) applications. The Copper CRM solution was built to look and feel exactly like Google Workspace applications. This fact alone greatly reduced the organizational change management challenges that typically occur when introducing a new technology solution.

Let’s Get Techie!

From a technical standpoint, the Copper platform provides a robust set of tools for developers including a comprehensive set of RESTful APIs.  To build the real-time, bi-directional integration  between the Copper CRM and the NetSuite platform that our client required, our development team leveraged Copper Webhooks. In addition to the Webhooks methodology that was used to achieve the real-time integration, our development team also incorporated Map-Reduce scripts to help sync records in an asynchronous fashion when necessary.

Keeping things connected

To facilitate the bi-directional integration between these two systems, a unique record identifier was added to the records requiring synchronization between both systems. So, for the Contact record that exists in NetSuite, we added a Copper record ID…

For the People record in Copper, we added a NetSuite record ID.

This same record-linking methodology was used on all records that required the bi-directional integration capabilities: 

Company (Copper) <-> Customer (NetSuite)

People (Copper) <-> Contact (NetSuite)

Opportunity (Copper) <-> Opportunity (NetSuite)

For each of these data entity pairs, we created a NetSuite workflow along with a workflow action script to update the necessary fields on these record pairs and keep these records in-sync.

Unlike the other record sync processes, the requirement for synchronizing Copper Users with NetSuite Employees (sales reps) did not need to be bi-directional, nor did it need to be done in real-time. So, for this sync process we built a map-reduce script to execute on a scheduled basis. 

Other Special Considerations

When using NetSuite’s native copy operation, NetSuite typically copies the custom field values in addition to native ones. This posed a potential problem for our integration since the NetSuite copy function might incorrectly link an already integrated Copper record.

To prevent that situation from occurring, we created additional workflows to clear the Copper record IDs on the synchronized NetSuite records when they are copied (i.e Customers, Contacts, Opportunities and Employees).

Monitoring and Administration

Integration logs can be very useful for debugging and reviewing the integration success or failure. On any record that is synchronized between the two systems, we presented the integration logs under the Copper subtab within NetSuite. Of course, a log level value of ERROR would denote an error.

Our Copper-to-NetSuite integration relies on an eXtendTech service which captures the webhook notifications and sends it back to NetSuite. Therefore, it must be configured with an access token generated from a valid NetSuite user. To enable proper administration of this integration token, we added a custom setup option specifically for this purpose.


As a team of NetSuite solution experts, our mindset is always  ‘NetSuite-first’ when it comes to architecting a solution in an effort to keep users working within a singular technology platform. Nevertheless, we are often asked by out clients on how we can integrate one of their preferred third-party applications or custom platforms with NetSuite.  Of course, we’re always up for a good challenge when it comes to seeing what we can do with the NetSuite platform!

If you organization is looking for a custom NetSuite integration, let’s have a conversation to see if our common integration practices or methods would work for you.

Share on facebook
Share on twitter
Share on linkedin
Share on pinterest