CapsuleCRM is a relatively small company that provides a simple crm solution. It allows customization at a field level, but no new entities. The entities that can have custom fields are:

  • contacts
  • cases
  • sales opportunities.


Capsule has a RESTful API dealing with the main entities that define their service.


Salesfoce is a big company with a great amount of customer using their solutions. It comes with a set of entities and workflows and infinite options (event two different webinterfaces). It has its own programming language APEX. It is heavilily monetized. We experienced a few outages.


Back then the REST API was starting to take form. Most of my previous experiences used SOAP and all its complications. There is a limit on the number of requests that can be done.

The migration

With this project most of the migration was about abstracting the communication with the CRM, establishing what the source of truth was and then the implementation. Salesforce uses the terms Lead and Opportunity, capsule uses the terms Case, Party and Opportunity. Our system didn’t have the concept of Lead, but in Salesforce Opportunities need an originating Lead.

The main challenge we had was to change the workflow effectively. The original CapsuleCRM was being dumped into our own database and there was almost no interaction with our database. When we upgraded to salesforce, our database had more duties and part of the interaction was independently stored there.

We considered doing most of the logic on salesforce. Salesforce allow to serve web pages that are directly backed by their systems. However the amount of cost and knowledge required made it an impractical solution.

Another challenge was on how to convert the Parties into Leads. In the CapsuleCRM world there wasn’t that much of a structure so most people and interactions didn’t have a proper Case.