ID522 - CW Manage PSA Sync with e-automate - Project Invoices

This process will sync invoiced project tickets from ConnectWise to e-automate. 


Jump to: Overview | Sample | SetupVariables | TestingAlert Functionality | Best Practices & Tips |  Related Alerts


Click to Subscribe



This process will sync invoiced project tickets from ConnectWise to e-automate as ok to invoice service calls. As project tickets are invoiced they will sync across to e-automate, you can bill projects when complete, by phase, or as work is completed on the tickets. This process does not sync down payment invoices applied against the project, only the project invoices generated from tickets.

The information on the invoice flows from ConnectWise into e-automate and is a one-time pull of information.


Once the ticket data is populated in the CEOJuice background tables, no updates made in ConnectWise will sync across for that invoice. Additional time entries billed on the ticket will sync across as new calls in e-automate.

Project tickets that can't be inserted into e-automate will be detailed in an error email that you will receive. Once a ticket has reported an error on the error email, all work to make the ticket sync has to be done in e-automate, as no changes that you make in ConnectWise will affect the information that the sync is using to insert the call.

The sync will push in the call header information (contract, contact, call type, description) and the time entries from the ticket in ConnectWise. Each time entry on the ticket syncs as a separate labor entry on the service call. Billing amounts for each labor entry on the service call will be calculated by the bill code used on the service call.

You can have the billing amounts from ConnectWise override the bill code in e-automate and bill based on the hours and rates from the time entry in ConnectWise. In this mode, labor hours and rates will match between the two systems, regardless of bill code calculation. If you are billing fixed fee projects, you must use this mode to properly sync the invoice amounts to e-automate. You must request this option be turned on and can ONLY invoice these calls with an e-agent task, as opening the service call to invoice may cause e-automate to recalculate the billing amount based on the bill code.

**If you are running both the ID965 ticket sync and the ID522 project ticket sync, both processes have to run in the same bill code mode (either e-automate bill codes or override bill code mode) and e-automate ticket mode (standard e-automate call number or combination of ConnectWise ticket number and ConnectWise invoice number.)


Run Schedule: Every 30 minutes, Monday through Friday

Type of Output: Data push/Email


*  *  *



Jump to: Call Header | Call Labor | Call Notes | Error Emails

Call Header

Call Header

Service Ticket Header in e-automate:


ConnectWise Project Ticket:


1. Call number - There are two options for the call number, EA mode which uses the next call number from e-automate, and CW mode which uses a combination of the ConnectWise ticket number and ConnectWise invoice number. More details on that are here.

2. Item number - All calls will be created with the CW-Service item.

3. Contract matching is based on the following hierarchy:

     A. If the agreement used on the Connectwise project ticket is synced to a contract in e-automate via ID964, this is the contract that will be used. 

     B. If the customer has a single active contract of a type set in Variable Z, that contract will be used.

   C. If none of the above apply, the contract will be blank. 

4. Description - The description will show the ConnectWise ticket number, project name and ID, and the summary of the ticket.

5. Caller - The caller's name from the ConnectWise ticket.

6. Call Type - The sync will attempt to match the ticket type from ConnectWise to a call type in e-automate. If a match is found, that call type will be used. If no match is found, the default call type will be used.

7. Priority - Priority is pulled from the call type on the service call.

8. Technician - If there is a ticket owner assigned in ConnectWise, that member will be the technician on the service call. If there's no ticket owner, the technician will be the member from the final time entry on the ticket.

9. PO number - If there is a customer PO on the ticket in ConnectWise, that will populate in the PO number field on the call.

10. Bill code - If there is a contract on the service call, the contract bill code will be used. If there is no contract, the default bill code will be used. **Default bill code is set in variable 5**

Call Labor

Call Labor

Labor Entry in e-automate:


Time Entry in ConnectWise:


1. Technician - Will match to the member on the time entry in ConnectWise.

2. Activity Code - Will match the work type on the ticket, if there's no match, the default activity code is used from the call type assigned to the call.

3. Arrival Time - Matches the start time of the time entry.

4. Departure Time - Matches the end time of the time entry.

Call Notes

Call Notes

The notes from the last resolution note, or last note if none are marked as a resolution, are added to the call remarks in e-automate:

e-automate Remarks:


ConnectWise Notes:


e-automate Call Notes:

A note is added to the e-automate call with a summary of the time entries from ConnectWise. The note type will match the note type you've specified in Variable 7. 


Error Emails

Error Emails

You'll receive two error emails, one indicating issues at the call header level and one indicating issues at the labor level.

Call Header

Call Header


1. Error(s): Listed in this column are the specific errors stopping the ticket from inserting. For more details on these errors, see here.

2. CW Company RecID: This is the company RecID from ConnectWise for the company on the ticket. If you have an error for "Customer Not Mapped" you will need to enter this number into the custom property on the customer in e-automate.

3. CreateDate: This is the date the call was created in our background tables. Calls will only show on this email for three days from the creation date and then drop off. (If you have the task running more frequently than daily, we'll adjust the calls to fall off after three emails.)

4. Warnings: Lists the informational warnings that do not stop the call from importing. 

Call Labor

Call Labor


1. Error: The issue stopping the ticket from importing. The error Call header exists but not imported means that the issue is at the header level and NOT at the labor level. See details here on all the possible errors.

2. CreateDate: This is the date that the ticket was created in our background tables. Starting with version 20230220, calls will only show on this email for three days from the creation date and then drop off.

*  *  *

Set Up

Set Up

Jump to: EA-CW Mapping | EA Setting | CW Settings | Subscribe to Alerts | Testing Setup

EA-CW Mapping

EA-CW Mapping

1. Map the technicians in e-automate to the members that will have time entries in ConnectWise. Details on how to do that are here.

2. Map customers and locations between the two systems, details on how to map customers here and locations here.

3. Ticket types in ConnectWise map to call types in e-automate. See details on how to match those between the systems here.

4. Work types in ConnectWise map to activity codes in e-automate. See details on how to match those between the systems here.

5. Review how you are billing tickets in ConnectWise and e-automate, can you mimic your billing in ConnectWise using a bill code in e-automate? Are you using work roles to change the rate charged on a ticket, different billing methods such as fixed fee or routinely changing the billable field on time entries to Do Not Bill? If you can't create a bill code that will mimic the ConnectWise billing, or are using any special billing methods, you'll need to use the override bill code mode. Details on this mode are here.

EA Settings

EA Settings

1. A default bill code must be set, this bill code will be used on service calls that are not linked to a contract. The value is set in Variable 5, see details on bill codes here

2. A default call type is also needed, this call type will be used on all calls where the ticket type from ConnectWise does not have a matching call type in e-automate. This code is set in variable W, you can also set variable X to Yes to always use this call type and not match to ConnectWise. More details on call types are here.

3. If you have agreements in ConnectWise that are not linked to contracts in e-automate via the ID964 agreement sync, you do have the option to match tickets to a contract in e-automate via a contract type. This contract type is set in Variable Z. See more details here on how the contract is set on calls created by the sync.

4. There is the option to use the same technician at the header level of all imported tickets, if you'd like to use this option, enter the employee number from e-automate to use in variable 3 and set variable 2 to Yes.

5. The sync will add a note to the service call in e-automate showing the start time, end time, total hours, and rate from the time entries in ConnectWise. You can create a new note type for this, or use an existing note type. Add the note type to variable 7. Details on note types here.

6. We recommend that you enable the setting in e-automate to enable aggregate billing. More details on this option are here, additionally, you'll want to be sure that the option to allow serviceable items is checked. Details on serviceable item settings here.

CW Settings 

CW Settings

1. Project tickets will only sync once invoiced. You do have the option to add an invoice status so that only project invoices in that set status will only be synced. Details on where to create invoice statuses in ConnectWise are here.

2. There is the option to change the invoice status in ConnectWise once it has been synced to e-automate, this is helpful so that users in ConnectWise know not to make changes to the invoice. If you would like to use this option, you'll add it to variable 6. 

3. If there are any project boards in ConnectWise that should not sync tickets, enter the name of the boards into variable 1. 

Subscribe to Alerts

Subscribe to Alerts

1. Once you have the settings in ConnectWise and e-automate determined, subscribe to ID522 on our website. If you don't have a login to our subscription site, you can email to have us set you up with a login. 

2. If you are not already subscribed to ID747, you'll need to subscribe to that alert as well. See this link if you have questions on the variables for ID747.

3. ID964 is not required but is recommended as it makes linking agreements from ConnectWise to contracts in e-automate much easier. See this link if you have questions on the variables for ID964.


*  *  *




Variable W: Default Call type - Call type to use when the ticket type in Connectwise does not match the call type in e-automate. **Required for sync to work correctly**

Variable X: Always default call type - Yes/No, the default value is No. Setting this to yes will cause the sync to always use the call type specified in Variable W when importing calls. **Required for sync to work correctly**

Variable 2: Always Default Technician - Always use the default technician on all calls imported. The default value is no, switch to yes to always use the default technician and not the owner on the ticket. **The default technician only applies to the header technician, each labor entry on the call will map to the appropriate technician that completed the work in ConnectWise**

Variable 3: Default Technician - If you have set variable 2 to Yes, enter the technician to use on the calls. Enter the number from the e-automate employee record.


Variable 5: Default Bill Code - Enter the bill code to use if the service call is not attached to a contract. If left blank, calls not attached to a contract will import with no bill code and have to have the bill code added manually before the call can be invoiced. **Required if you are running the sync in override bill code mode as you can't manually add a bill code prior to invoicing**

Variable Z: Contract Types - Contract types normally associated with Managed IT contracts. If the sync doesn't find a matching contract based on the ID964 synced agreements AND the customer has one active contract of one of these types, that contract will be used on the service call.

Variable 7: Note Type - NoteType in e-automate for note which will be written against each Call created, showing the raw data from Connectwise for HourlyRate and HoursBilled - required if someone touches the call in e-automate and forces an unintentional reconciliation against the BillCode. 


Variable 8: Move Project when Status - Enter the ticket status from ConnectWise that indicates the project ticket should be synced from ConnectWise to e-automate. Separate multiple statuses with commas. Enter (!) to sync all ticket statuses.

Variable 10: Invoice Statuses -Specify what invoice statuses should trigger the sync. Leave blank for all invoice statuses.

Variable 6: Post Sync Status - If you would like to have the invoice in ConnectWise updated to a certain status after the invoice has been synced to e-automate, enter that status here. Must be a valid status in ConnectWise. If the variable is left blank, no update to the status in ConnectWise will be made. 


Variable 1: Ignore Board - Enter the board name from Connectwise of any project boards you do not want to sync calls from. Separate multiple boards with a comma. Leaving blank will import all tickets from all boards. 

Variable 11: ConnectWise Credentials - If you have more than one set of API credentials entered on the CEOJuice website, specify which credential set to use. 

522 new variables.jpg

Variable Y: Default OnHoldCode - Calls created for fixed fee tickets, calls causing potential negative balances on deposit contracts or calls with parts from a template will be placed on hold with this code. *Required for the sync to work

Variable 12: FixedFee across Call Materials - Enter an item number if you would like the fixed fee amount on a ticket to be added as an item.

*  *  *



There are two steps to testing the project sync, setting up the testing environment and then syncing test project invoices and verifying that all invoices are syncing correctly.

Jump to: Testing Setup | Testing Checklist

Testing Setup

Testing Setup

1. API Keys in ConnectWise – These may already be in place if you are using other portions of the ConnectWise sync. New keys do not need to be created for the project invoice sync. Details on creating API keys here.

2. ConnectWise test Database – If using a test ConnectWise database, you’ll need to create a set of API keys for that database. Details on creating API keys here.

3. e-automate test Database – A test database is required to sync calls initially for review. See this link for notes on creating a test e-automate database.

4. CEOJuice test database – If you have previously tested other parts of the ConnectWise integration, you may already have this in place. If not, see this link for notes on creating a test CEOJuice database.

Once these setup steps have been completed, please let us know and we will install the process for testing.

Testing Checklist

Testing Checklist

For testing, please verify these things:

  • Import tickets for every technician that will be working in ConnectWise, and verify the labor records are coming across correctly. See how to map technicians here.
  • Close several tickets of different billing rates to verify that the bill codes in e-automate bill as expected and match to ConnectWise. You may need to set up advanced bill codes to have the correct billing rates applied, see details on that here.
  • If you use the billing options of Fixed Fee, Override Rate, or Not to Exceed, you'll need to request that the sync run in Override Bill Code mode. Then in testing, import at minimum one ticket of each billing method to verify the amounts come across correctly. More on the different billing methods here.
  • Verify that the labor entries have the correct activity code that matches the work type in ConnectWise. Do you need to add activity codes in e-automate or rename them to align with the work types in ConnectWise? Details on matching activity codes to work types are here.
  • Close at minimum one call of every ticket type and check that the call has the correct type set in e-automate. Details on call types are here.
  • If you are going to use the e-agent task to invoice calls, run the task on the test database to verify it's invoicing correctly. Details on how to run the task in test are here.
  • Review error emails to ensure understanding of the different error codes listed. Details on these errors are here.

Once all testing has been completed, please let us know and we can schedule moving the project invoice sync to point at your production database.

*  *  *


Alert Functionality

Alert Functionality

As project tickets are invoiced in ConnectWise, either by phase or as the tickets are completed, the sync will transfer the tickets to e-automate as Ok to Invoice service calls.

Jump to: Customers | Locations | Branch | Technicians | Call Number | CW Service Item | Contracts | Multiple Agreements | Call Types | Call Dates | Response/Repair Time | Bill Codes | Billing Methods | Override Bill Code | Activity Codes | Notes | Remarks | Invoice Status | Call Errors | On Hold Code | Fixed Fee Tickets | Parts



The project invoice sync uses custom properties to map companies from ConnectWise to e-automate.

The company RecID from ConnectWise is populated in the custom property ZCJ_CW_CompanyID in e-automate. This value must be populated for the sync to find the customer match and create the service call.

The company RecID is found in ConnectWise in the company list view:


If you do not see this column in the list view, click on the gear icon in the upper right corner and move the Company_RecID from the hidden columns to the visible columns.

This value is entered into the custom property ZCJ_CW_CompanyID  in e-automate:


If the customer mapping is not in place, the sync will be unable to insert the service call and you will see the error "No Customer Assigned" on the call header error email. You will need to complete this mapping and the next time that the sync runs, the call will be inserted. 

For details on how to automate linking the customers between the two systems, click here for an overview of the customer sync (ID747).



The location on the service ticket will always match the customer on the ticket. 



Starting in version 20231106, there is an option to specify the branch setting to be used on all service calls. If you would like to use this setting, you will need to send an email to with the branch number to be used, as this is not a variable setting. **This setting will also apply to ID965 Service Ticket Invoices if using that sync**

When set, the branch on the service call here will be set to the branch specified:




Technicians are assigned at both the "header" level and the labor entry level on the service call in e-automate. For the mapping to work properly the employee in e-automate must be marked as a technician (1), active (2), and have the CW Member RecID added in the custom property (3):


Setting the employee record as a technician also requires the fields of Territory, Delivery method, Warehouse and Bin to be filled out.

The header level technician is assigned per this hierarchy:

1. Is Variable 2 set to no? 

     Set header technician to the ticket owner on the ticket in ConnectWise. 

     If no ticket owner, the header technician is set to the member from the last time entry.

2. Variable 2 is set to yes, the header technician is set to the technician specified in variable 3. 

At the labor level, the member on the time entry maps to the technician on the labor entry.

For both options when variable 2 is set to no, the technicians need to be mapped between Connectwise and e-automate.

Unmapped Labor

Unmapped Labor

If the specified technician is not mapped, the call will not import and you'll see the error "Unmapped Labor Entries" on the error email. THIS ERROR MUST BE FIXED IN E-AUTOMATE, MAKING CHANGES TO THE TIME ENTRY IN CONNECTWISE WILL NOT CORRECT THE ISSUE.

This is done by entering the Member RecID from ConnectWise into a custom property in e-automate.

The Member RecID is found in ConnectWise in the Member list view:


The Member RecID goes in the custom property ZCJ_CW_EmpRecordID:


Call Number

Call Number

There are two options in the project sync for how the call number is generated in e-automate:

1. EA Mode: The next e-automate call number is used, as project invoices are synced, the next e-automate call number will be used for the service call. The next call number can be seen in Options - Service Calls - Next service call number:



2. CW Mode: The call number in e-automate will be a combination of the ConnectWise ticket number and the ConnectWise invoice number. This mode allows for tickets invoiced together in ConnectWise to be linked on the same work order in e-automate so that they can also be invoiced on one invoice:


In the above example, the ticket number from ConnectWise is 13903 and the invoice number is 1219, for a combined call number of CW13903 CW1219.

**Whichever mode ID522 is running in will also be the mode used for ID965!!

CW Service Item

CW Service Item

All calls created by the sync will have the serviceable item CW-Service added as the item on the call. This item is used in place of an equipment record:


Contracts created by the ID964 sync will automatically have this item added to the contract:


If you are linking tickets from ConnectWise to contracts in e-automate that were not created by ID964 you will need to manually add the item CW-Service to the contracts. When this item is not present on the contract, you will get an error when invoicing the call.



Contracts assigned to the calls created by the sync are determined by this hierarchy:

1. Is the ticket applied against an agreement in ConnectWise (1)? If yes, the sync checks for that contract in the ID964 background table (2). If a match is found in the background tables for ID964, that contract will be used on the call (3).



2. If the ticket does not have an agreement, or there was no match in step 1, the sync can check for one active contract matching a type that is set in Variable Z. If one contract is found for the customer that matches the type set, that contract will be used on the service call. If there are no contract types listed in variable Z, this step will be skipped.

3. If a contract can't be found in either step 1 or 2, no contract will be assigned to the call. When no contract is assigned to the service call, the default bill code from variable 5 is used on the service call.

**There is an option to not insert tickets that have an agreement attached in ConnectWise, but no matching contract is found in e-automate. If you choose to turn this option on, you'll see these calls on the error report and they will not push until a linked contract is created in e-automate. You must ask to have this option turned on, as it is not a variable option. If you choose to turn on this option, it will apply to all service tickets created by ID965 as well.

Multiple Agreements

Multiple Agreements

ConnectWise allows tickets to have an agreement assigned to the ticket and different agreements used on the individual time entries. Each time entry could have no agreement attached or be a different agreement than the one used at the "header" level.



When the sync encounters a conflict between the agreement at the ticket header (1) and the time entry (2) the call created in e-automate will use the agreement at the time entry level as the contract to apply to the service call.

If there are multiple agreements used on the ticket, the sync will create individual calls in e-automate for each contract. This is the only way to account for multiple agreements used on one ticket, as e-automate does not support this functionality.

For example, if a ticket has two time entries, one associated with an agreement and one with no agreement, the sync will create two calls in e-automate. 

Call Types

Call Types

Call types must match precisely between e-automate and Connectwise, otherwise, the default call type will be used from Variable W. **If you do not want the response time on ConnectWise calls to affect your service call metrics (First call fix rate, average response time, etc), set the call types used to NOT be Corrective Maintenance category call types.

To see the types in Connectwise, go to Setup Tables > Project Board List and choose the correct board. Then click on the Types tab to see the list of types for that board:


The sync is pulling the information from the Type column, for example, Implementation.

The call types in eAutomate are found by going to Tools > Lists and Codes and then choosing Call Types from the drop-down menu:


The sync is pulling the information from the Call Type column, for example, AV Issue.

Each field must be an exact match for the call type to populate correctly. If no match is found, the default call type is used. **There is a 15-character limit to call types in e-automate, ConnectWise allows for much longer call types. The sync will match call types based on the first 15 characters of the ticket type in ConnectWise.**

Call types also drive the priority used on the call:


Additionally, if there is no match between the work type set on the entry in ConnectWise and an activity code in e-automate, the sync will set the activity code on the labor record to the default set on the call type:


Call Dates

Call Dates

There are a few differences between what ConnectWise allows regarding call dates and times and what e-automate allows:

1. Time entries in ConnectWise can be entered with dates prior to the entered date of the ticket. In e-automate, the call received at time must be prior to any labor records added to the call. 

The sync sets the call received at time in e-automate to match the entered date of the ticket in ConnectWise:



If a time entry on the ticket predates the entered time, the sync will roll the call received at time back to prior to the first time entry. The sync will report this as a warning: CallDate inferred from MinTime Entry.

2. ConnectWise also allows time entries to overlap for the same technician, which is a practice that we DO NOT RECOMMEND, especially for billable time. Settings in e-automate drive whether these types of labor conflicts are allowed on service calls:


To allow for overlapping labor entries, the Labor conflicts needs to be set to Allow. If this setting is set to Warn or Prevent, you will not be able to invoice these calls via the e-agent task.

Response/Repair Time

Response/Repair Time

Response and repair time on service calls created by the sync follow the same rules as other calls created in e-automate, the sync does not override how e-automate calculates these two fields.

Response Time - The time between the Call received at time (1) and the arrival time of the first labor entry (2):



In the above example, the call was received on 2/15 at 9:34 AM and the first labor entry has an arrival time of 2/17 1:45 PM. The response time is calculated as the time the company is open, between these two times:

2/15 9:34 AM to 5:00 PM - 7.43 hours

2/16 8:00 AM to 5:00 PM - 9 hours

2/17 8:00 AM to 1:45 PM - 5.75 hours

Response time = 7.43 + 9 + 5.75 = 22.18 hours

Repair time - The sum of the actual times on the labor entries:


1. Actual hours on the first labor entry: 2.47

2. Actual hours on the second labor entry: 1.32

Total repair hours = 2.47 + 1.32 = 3.79

**We have seen a bug in e-automate that occasionally occurs when there is more than one labor record on the ticket, where the repair time is shown as the total time from the start of the first labor entry to the ending time of the last labor entry**

Bill Codes

Bill Codes

Your bill code set up in e-automate is critical to ensuring that calls are billed correctly in e-automate!! If you are not already using the advanced bill codes in e-automate, you may need to set these up depending on your billing structure in ConnectWise. See details on setting up advanced bill codes here.

You'll want to review the bill codes you are currently using on your IT contracts...are you using an all-inclusive bill code? Are there certain types of work that are not covered by the agreement? How are you billing for increments of time? Do different work types have different billing rates?

**If you have a large variance in the rates used to bill calls, depend on the work role in ConnectWise to change the rate on the calls, or use different billing methods like Fixed Fee, you will need to run the sync in override bill code mode. See further details on this here.**

Bill codes are assigned to the service call based on this hierarchy:

The sync was able to match a contract in e-automate to the service call:

1. Contract Equipment/Item Level:


2. If there is no bill code set at the equipment/item level, e-automate looks to the Contract Level:


3. If there is no contract attached to the service call, the default bill code set in variable 5 will be used.

**By default the CW-Service item is added to the contract with the contract bill code and so all service calls will use the bill code set on the contract. If for any reason you need the service calls on the contract to bill differently than the contract bill code is set at, you will need to manually add the correct bill code to the CW-Service item. If you are linking calls to contracts that were not created by the ID964 sync, you'll need to manually add the item CW-Service to those contracts.

Billing Methods

Billing Methods

ConnectWise has several billing methods that can't be recreated in an e-automate bill code. If you are using any of these billing methods on time entries you'll need to use the override bill code mode on the service sync. The billing methods are:

Fixed Fee - regardless of the time entries, tickets with this billing method bill the amount specified


*Fixed fee tickets must be billed separately from any other tickets for the customer.

Override Rate - This method allows you to specify the hourly rate to be used on the call and override any rates set at the work role or member level.


Not to Exceed - This billing method sets a cap on the amount that can be billed on the ticket.


* Not to Exceed tickets must be billed separately from other tickets for the customer.

For tickets of any of these three billing types, when the sync creates the call in e-automate the total labor amount at the ticket header level is forced to match the amount to bill from ConnectWise. In e-automate, to verify the amount that will bill you must use only the column Labor Amount in the Service Calls (Open) e-view:


When invoiced via the e-agent task, the call will bill the amount shown in this column. The labor entries and total showing to bill on the service call will NOT necessarily be accurate and should NOT be used to verify these billing methods. Manually invoicing this call in e-automate WILL cause the call to bill per the bill code and NOT the amount from ConnectWise.

Billing Options - if you are changing the billing option on the time entries you will need to use the override bill code mode to properly charge the matching amounts in e-automate.

Do Not Bill - Time entry will not bill and also does not show on the invoice in ConnectWise:



No Charge - The time entry in ConnectWise won't bill but will show as a zero-dollar charge on the invoice in ConnectWise. 


**The e-automate invoice WILL show these time entries as e-automate does not have a matching option to select which labor entries show on the detailed service invoice.

Override Bill Code Mode

Override Bill Code Mode

While we recommend that you set up bill codes in e-automate to match how you are billing in ConnectWise, we understand that sometimes there are reasons why this is not feasible. If you use the work role to override the rate, use different billing methods (Fixed Fee, Override Rate or Not to Exceed) or use the billable drop down on the time entry to change how the ticket bills (Do Not Bill, No Charge) the override bill code mode will need to be used. Using the override bill code mode on ID522 will mean that the override bill code mode will also be used on ID965.

All calls will need to be billed via an e-agent task, to avoid e-automate recalculating the billing amounts based on the bill codes. See here for details on possible e-agent errors that you may run into.

When running in this mode, you are required to have a default bill code set on the sync to be used. Be aware that the sync is only overriding the labor hours and rates, if you have a default travel rate set or minimum hours to bill those will still be used by e-automate.

In this mode, the labor entry in e-automate is set to match what has been billed on the time entry in ConnectWise:

Labor Hours = Total hours (2) minus hours covered by the agreement (3).  

Labor Rate = Hourly rate (1) on the time entry.



In the example below, the top section lists the labor entries in e-automate, and the bottom section shows the invoiced time entries in ConnectWise. For each entry, the labor hours in e-automate equals the WIP hrs from ConnectWise and the Labor rate from e-automate equals the Rate from ConnectWise:


To turn on this option, you must send an email to to request the feature be turned on, there is not a variable setting to control this.

Please be aware that you may have issues with e-automate recalculating the billing amount if you open the imported call and make any changes to the call. To view the labor hours and rate used on the calls, use the e-view Service Calls (Open) Labors instead of opening the call in e-automate. Details on those e-views are here.

If you notice a discrepancy in e-automate in either the labor rate or labor hours, you can change those on the service call prior to invoicing, being very careful to make no other changes that may cause e-automate to recalculate the billing amount on the service invoice. Do not make any changes to the Activity code on the labor entry as this will cause the entry to recalculate based on the bill code.


The sync will add a note to the service call with the hours and billing rate from ConnectWise so you have that information if needed. 


Activity Codes

Activity Codes

Activity codes in e-automate correlate to work types in ConnectWise. Work types in ConnectWise can alter the billing rates on agreements. 

Work Types in ConnectWise are set in: Setup Tables > Work Types:


Activity codes in e-automate are used to define the kinds of activities that technicians can perform on service calls, record on time cards, and record as unavailable time on the employee record. 

The activity code category is where you set the settings that will be used for all activity codes of that type. You create activity code categories in Tools - Lists and Codes - Activity Code Categories


Once the category is created, you assign the category to the activity code and set how that activity code will be taxed. Activity Codes are in Tools - Lists and Codes - Activity Codes:



To ensure proper billing in e-automate you should have the work types in ConnectWise correlated to Activity Codes in e-automate so that work that is billed in ConnectWise is also billed in e-automate. E-automate only allows for 15 characters in the activity code, while ConnectWise allows for more than 15. The sync will match work type to activity code based on the first 15 characters of the work type in ConnectWise.

A work type is set on each time entry on a call in ConnectWise:


When the call is pushed into e-automate by the sync, the matching activity code will be used on the labor entry:


If an exact match is not found between the work type and the activity code, the sync will set the activity code to the default from the call type.

Activity codes in e-automate can be used to override the standard labor rate used on the service call. For more details on how to set that up, see this post on advanced bill codes.


Call Notes

There are two call notes added by the sync when the call is created in e-automate, an Event type for the call creation and a note with the summary of the time entries from ConnectWise. The note type for this note is set in Variable 7. To create a new note type, go to Tools - Lists and Codes - Note Types:


In general, you'll see two call notes for each imported call that are added by the sync, one for when the call was created and one for the billing information from ConnectWise. Call notes are viewed by right-clicking on the service call and choosing the Call Notes option:


Double click on the note to open and see the details. 

Note Type EVENT:


Note Type CW Data:




**Beginning with version 20231219 notes that are marked as internal in ConnectWise will not sync to the call in e-automate.**

Notes from ConnectWise will sync for all time entries, additionally, resolution notes will be added to the remarks field of the service call. If there are multiple notes marked as a resolution, the sync will add the last note as the remarks on the call. Individual notes for each labor entry will print on the service invoice when the Show details checkbox is selected.

Notes from ConnectWise that are marked as a resolution will be added to the remarks section of the service call:

Discussion note from ConnectWise is marked as Resolution:


These notes will all be added to the remarks section of the service call:


Invoice Remarks

All notes from time entries in ConnectWise will sync to e-automate and will show on the service invoice when the option to Show Details is chosen.



Invoice Status

Invoice Status

You have the option to specify a status the invoice should be in to sync to e-automate (Variable 10), and also the option to change the invoice status after the invoice has synced to e-automate (Variable 6). Both of these variables can be left blank to sync all invoices upon creation and not update the status post sync.

Billing statuses are found in the setup tables in ConnectWise, go to Setup Tables - Billing Status List:


Call Errors

Call Errors

Each time that the sync runs, you will receive two emails listing any tickets that didn't import, along with the error as to why the ticket didn't import. One for errors at the call header level and another for errors at the labor entry level. This error email is in the same format as the email that you will see for the ID965 errors.

Call Header Errors
Call Header Errors - Email Subject: ConnectWise Service Module Integration

Errors that will stop the call from importing: 

  • No Customer Assigned - The customer from ConnectWise was not linked to e-automate company record and the call was not inserted. If you update the customer mapping (see here) the call should import on the next sync push.
  • No Labor Entries on Call - For a call in e-automate to be set to OK to Invoice, there must be at least one labor entry on the call. If there are no labor entries on the call in ConnectWise the ticket will not import into e-automate.
  • Unmapped Labor Entries on Call - One or more time entries from ConnectWise have a member that is not linked to an active service technician in e-automate. Check the labor level email for the specific tech that needs to be mapped, the error on the labor email will be "Cannot find technician". See details here on how to map the technicians.
  • Invalid Labor Entries on Call - Indicates that one of the time entries on the ticket is missing either the start time or the end time. Check the labor error email for more details.
  • Conflicting customer and site mapping - The customer record in e-automate has both the ZCJ_CW_CompanyID and ZCJ_CW_SiteAddressRecID custom properties populated. Parent customers only have ZCJ_CW_CompanyID and child locations only have ZCJ_CW_SiteAddressRecID. Correcting the mapping in e-automate will allow the call to insert.
  • Other calls in invoiced set not valid - When running in invoice-only mode, all tickets attached to the invoice have to be error-free. This error indicates that one of the other tickets on the ConnectWise invoice has an error and can't insert. Once the error has been cleared, all tickets on the invoice will sync.

Warnings - Informational only - the call will still import. 

  • CallType Defaulted - The ticket type from ConnectWise did not have an exact match to a call type in e-automate, default call type was used. 
  • Contract inferred from Imported Contract Billings - The contract on the call was linked in CEOJuice background table from ID964 sync. 
  • Contract inferred from ContractType - The contract associated on the call was inferred from the contract type set in variable Z. 
  • CallDate modified per time entries - The call date either doesn't exist on the time entry or it's newer than the earliest time entry on the ticket. EA won't allow for this, the call date has to predate the first labor entry so we modify the call date. 
  • Invalid Technician on header - There is no ticket owner on the call in ConnectWise.  This will not stop the call from importing, the technician from the last time entry will be used.
  • No Contract Assigned - Contract could not be determined from either the CEOJuice background tables or from a contract type used in variable Z. The service call should have been imported with no contract associated. You do have the option to make this warning an error that will stop the call from importing, you will need to request that this option be turned on.

Call Labor Errors

Call Labor Errors - Email Subject: CW Labor Issues

  • No Associated Call Header - Call header was not created, so labor records can't be added. 
  • Call Header exists but not imported - The call header information was available but a call was not created, so labor records can't be added. Check the Call header email for the specific error on the ticket that needs to be corrected.
  • Cannot find Technician - Technician is not mapped from ConnectWise to e-automate, see here for how to fix. Updating the mapping should allow the call to import.
  • Invalid Time Date - The time entry from ConnectWise lacks a Start or End timestamp and therefore cannot be imported. This error is one that we will have to correct for you, please send an email to with the proper start or end time of the time entry if you see this on the error email.

On Hold Code

On Hold Code

Beginning with the 20231106 version, an on-hold code is required for the sync to work properly. You can use an existing on-hold code, or create a new one specifically for the sync. On-hold codes are found in Tools - Lists and Codes:

On hold code sample.jpg

The on-hold code that you want to use is entered into variable Y.

A service call will be placed on hold in one of the following situations:

  • The billing method from ConnectWise is fixed fee.
  • The contract the ticket is applied to is a deposit-based contract and the option to not allow deposit-based contracts to go negative is checked. 
  • A product was added to the ticket in ConnectWise and the sync was unable to add the matching item to the call in e-automate.

Fixed Fee Tickets

Fixed Fee Tickets

If you are using the fixed fee billing method in ConnectWise, you will need to be using the service sync in the override bill code mode. All tickets that have the fixed fee billing method will be placed on hold once created in e-automate, these tickets will need to be reviewed prior to invoicing to ensure that the billing amounts are posted as desired.

There is an option to add the fixed fee amount to the call as a part on the service call. To utilize this option, you will need to create an item record in e-automate and enter the item number in variable 12. 

updated fixed fee part.jpg

The item will need an expense code and a service code so that it can be added to the service call.

When the fixed fee call is created in e-automate, it will be placed on hold:

fixed fee on hold.jpg

Included in the note added to the call will be the fixed fee amount to be billed:

Fixed fee note.jpg

If you have chosen to have the fixed fee added as a part, you will see that item on the Materials tab:

Fixed fee on call.jpg

The item will show as a quantity of 1, with the price being the fixed fee amount. The item description will contain the ConnectWise ticket number and the summary of the ticket from ConnectWise.

If you do not choose to add the fixed fee amount as a part, you will need to edit the call to add the fixed fee billing amount.

The labor rate and labor hours for all labor entries will show as $0.00. 



Beginning with version 20231106, the service sync has limited support for syncing products on tickets in ConnectWise to the service call in e-automate. 

  • Tickets that are billed in ConnectWise with only a part added and no time entries will not sync.
  • Tickets created by ID912 that have a part added in ConnectWise will not sync the part back to e-automate.
  • If there are multiple agreements used on the ticket in ConnectWise, at least one time entry must be assigned to the same agreement that the product is assigned to. If the product is assigned to an agreement that has no time entries on the ticket, it will not sync.

The product ID from ConnectWise must match exactly to the item number in e-automate to properly add the item to the call. If the product ID does not match an item number, the item template that matches the product type from ConnectWise will be added to the call. If there is not an item template that matches the product type, the call will not insert and there will be an error for "No Part Template" on the call header error email.

When the part is added to the call it will show as used from the Warehouse/Bin assigned to the technician assigned to the call here:

header tech for parts.jpg

This technician matches the ticket owner on the ticket in ConnectWise. If the ticket in ConnectWise does not have a ticket owner, then the sync assigns the header level technician to be the technician from the last time entry on the ticket. 

*  *  *

Best Practices & Tips

Best Practices & Tips

Jump to: Aggregate Billing | Burden Rate | e-agent task | e-agent errors | e-view | Opportunities in CW | Down Payment Invoices | Custom Properties

Aggregate Billing

Aggregate Billing

In the Tools \ Options menu,  you'll need to check the option to Enable aggregate incremental billing on service calls:


Checking this option will allow you to group labor records by the rate, or the rate and activity code, before applying billing increments. In other words, by checking this box you can set the service calls to group all of the labor records billing the same rate (or rate and activity code) to sum the labor time for billing.

Once you've checked this option, you'll see this additional option on the billing labor codes:


You can choose to group the labor records by rate or by rate and activity code. Under the incremental billing section, select either Bill combined regular and overtime hours in increments or bill regular and overtime hours in separate increments. Then the check box next to Aggregate labor records before applying billing increments to enable the drop-down to group the labor records.

For example, a ticket in ConnectWise has three time entries, one for 14 minutes, one for 20 minutes, and one for 16 minutes. The bill code in e-automate is set with a one-hour minimum. Aggregating the labor entries will sum all three entries together for a total of 50 minutes of labor, and bill the customer the one-hour minimum. Not aggregating the labor entries will bill the customer for three hours, as each labor entry will qualify for the one-hour minimum.

Burden Rate

Burden Rate

To accurately calculate your labor costs, you need to have a burden rate loaded for each technician in e-automate. See this link for more information on the burden rate. The comparable field in ConnectWise is the hourly cost field on the member record.


The cost figure from ConnectWise does not sync across into e-automate, the labor amounts in e-automate are calculated based on the e-automate burden rate.


**If you are running the sync in Override Bill Code Mode, the cost amounts that post in e-automate will be based on the e-automate burden rate. This mode ONLY overrides the billing amount to the customer, not the internal burden rate for costing.**

e-agent Task

e-agent Task

We recommend that you set up an e-agent task to invoice the calls automatically, once you are comfortable with how they are coming in. If you are running the sync in override bill code mode you must use the e-agent task to invoice calls to avoid any recalculation by e-automate based on the bill code. You can filter the task to invoice calls by bill code, call type or customer to only pick up the ConnectWise calls. To create the task, open e-agent by going to the Tools menu and clicking on E-agent. Create a new task of the type Auto Invoice Service Calls.


1. Do not invoice if warnings exist - When this box is checked, the task will not invoice any calls where errors exist. You can see the full list of possible errors in the e-automate documentation.

2. Invoice zero dollar service calls - When this box is checked, the task will invoice all zero dollar service calls. Checking the box to send to the document queue will send the invoices there to be sent out to your customers.

3. Invoice non zero dollar service calls - When this box is checked, the task will invoice chargeable service calls. Checking the box to send to the document queue will send the invoices there to be sent out to your customers.

4. There are three different filters you can use to limit the calls that the task will invoice: bill code, call type or customer. Clicking on the Include all link will take you to the screen to set the filters:


e-agent tasks do not run on schedule in the test database, you must manually trigger the task to run it. **While in test, it's important to run the e-agent task at least once to verify the calls invoice properly!!

e-agent errors

e-agent Errors

Below are some of the errors that you may see when using e-agent to invoice the service calls from ConnectWise

Charge account is required - Customers that have the charge method set to Credit Card/ACH can not have service calls billed via e-agent. These calls will need to be manually invoiced. 


Labor conflicts exist - ConnectWise allows technicians to overlap their time on tickets, if you see this error you will have to update your e-automate settings under Labor conflicts to Allow. (required by e-agent to invoice the tickets, if this is set to Warn you will need to manually invoice these calls.) You may not want to allow most e-automate service calls to have conflicting labor, you can change the labor conflict setting to Allow, process the e-agent task for the ConnectWise calls and then flip the setting back to the original setting.

Change these settings in e-automate here:


Labor hours are less than the minimum hours for the selected bill code - This error indicates that the bill code on the service call has a minimum number of hours set and the labor hours on the call are below that number. The call will need to be manually invoiced.

The minimum billing period is set on advanced bill codes here:


and on standard bill codes here:





An e-view is the best way to review the data on the imported calls, you can use the Service Calls (Open) System view to see the list of calls that were entered by the sync. Filter the view by Entered by contains "965". You can use the system view Service Calls (Open) Labors to see all the labor records for the imported calls. Filter the view by Entered by contains "522".




Opportunities in ConnectWise

After opportunities are marked as “Won” in ConnectWise, they can be converted to the department in which the work will be completed. For this workflow, we recommend that you convert any products that need to be ordered to sales orders and any labor items to a project.

The sales orders will sync to e-automate via the ID634/ID966 sales order sync. Invoiced project tickets will sync via this process into e-automate as ok to invoice service calls. Each project ticket will link to one service call in e-automate. All project tickets invoiced together in ConnectWise will be linked in e-automate with the same work order number so that they can all be invoiced together.

Down Payment Invoices

Down Payment Invoices

Projects in ConnectWise have the option of generating a down payment invoice at the start of the project. These down payment invoices DO NOT SYNC as part of the project invoice sync. As a manual work around, we suggest this best practice:

1. Create the down payment invoice in ConnectWise and send to your customer for payment.

2. When the invoice is paid, create a customer payment in e-automate that is not applied to any invoice:

customer payment.jpg

In the description, note the payment is a down payment on a project, along with either the project name or ID number.

3. Once the project has been invoiced and synced to e-automate, apply the customer payment to the service invoice(s). The project invoices will sync at the full amount billed on the project.

Custom Property Set Up

Custom Property Set Up

To create the custom property in e-automate for the Member RecID:

Go to Tools - Lists and Codes - Attributes and then click on new:

Attribute name: ZCJ_CW_EmpRecordID

Description: ConnectWise Sync Member ID

Data type: Numeric


The value to be entered in the custom property is the Member RecID from ConnectWise:




*  *  *

Related Alerts

Related Alerts

ID747- ConnectWise Manage Customer Sync

ID964 - ConnectWise Manage Agreement Sync

ID965 - ConnectWise Manage Service Call Sync

ID966 - ConnectWise Manage Sales Order Sync

Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request


Please sign in to leave a comment.
Powered by Zendesk