1.  Last updated
    
    Mar 31, 2023
    
2.  [Save as PDF](https://developer.connectwise.com/@api/deki/pages/1259/pdf/PSA%2bCompany%2bSynchronization.pdf "Export page as a PDF")

## Overview

The single most resource-intensive part of a typical integration is company synchronization.  Many times integrations will cycle through company records that are irrelevant in terms of the integration itself.  This could be cycling through prospects, former clients, or even duplicate records.

## What are Companies?

Companies are the primary key for many data sets within the ConnectWise PSA system.  ConnectWise PSA is multi-tenant in that each company record inside of it is a representation of a client that they support or want to support.  What this means is that if you wanted to create a service ticket, you have to specify what company it would belong to.  You cannot have a service ticket without it being associated with a company.  Similarly, you cannot have an agreement, opportunity, invoice, configuration, or any major record type without specifying what company it belongs to.

### Business Case

There are many benefits to ensuring that your integration has an optimization company synchronization flow.  These range from a faster integration to a much easier-to-utilize integration as you won't be displaying irrelevant information.

-   Reduce the number of API Calls made
-   Speed up the process of mapping to PSA Companies
-   Add value to your integration that will impress partners

## Implementation

First you need to identify what the is the record in your system that would be tied to a company in ConnectWise PSA.  Once you know what record you are going to sync across you need to start with making a method for the partner to correspond the records together.  There are a number of ways that integrators have done this in the past.  Some of these are more advanced than others and in order to become a certified integrator, you cannot use any methods that require manual entry of data.  It must be transmitted by the API.  There are a number of recommended approaches that should be taken for each integration.

-   Add a field to your equivalent screen to select the ConnectWise PSA company
-   Add a new screen that is a mass association tool that lists each of your records with a field to set the ConnectWise PSA company
-   Add an option to import ConnectWise PSA companies
-   Add an option to export companies to ConnectWise PSA

After you know what areas you are going to add the synchronization to, you have to work on filtering the data you are looking for to be usable by your integration.  This is where many people make a mistake and they don't filter the data they are looking for and instead end up with many records that are unnecessary or irrelevant for the integration.  Many times this means that when someone goes to select a company to map, integrators may load all 50,000 companies in ConnectWise PSA to pick from, whereas the partner only has 1,500 that are actually active clients.  The rest of the results could be prospects, old clients, and duplicates.

To begin filtering records, you need to know how a company is categorized within ConnectWise PSA.  There are two fields in the UI that control this, which, are the Status and Type fields.  Each company can only have one status but many types.  The status is used primarily as an indicator of it being Active, Inactive, or even in Credit Hold.  The type is used to determine the specific type of customer, client, or prospect as well as many other options.

![clipboard_e42993a313a2fa1e7dca47f1ef7068924.png](https://developer.connectwise.com/@api/deki/files/472/clipboard_e42993a313a2fa1e7dca47f1ef7068924.png?revision=1)

_Fig.1 - The company status and type fields are found on the company finance screen within ConnectWise PSA._

> Statuses and Types are customizable.  You cannot compare them between environments or expect every environment to have the same values or ids.  Each integration should be using API calls to grab a listing of each per environment in order to dynamically filter data.