Skip to Content
HelpIntegrationsConnectWise Manage

ConnectWise Manage Integration

ScopeStack integrates with ConnectWise Manage to pull opportunities into the platform for project creation, automatically sync forecast revenue back to ConnectWise as your deal progresses, and push approved projects into ConnectWise as PSA projects with work plan tickets and tasks.

Prerequisites

  • A ConnectWise Manage API Member user with the permissions listed below
  • ScopeStack Connected Apps permission at the Manage level

Setting Up in ConnectWise

ConnectWise requires a dedicated API Member user. API Members do not consume a user license.

  1. In ConnectWise, go to System > Members and open the API Members tab.
  2. Create a new API Member and generate API Keys for the user.
  3. Copy the Public Key and Private Key — you will need them when configuring ScopeStack.
  4. Assign the following permissions to the API Member:

Sales > Opportunity — Inquire/Add/Edit: All

Project > Project Headers — Inquire/Add/Edit: All

Project > Project Tickets — Inquire/Add/Edit: All

Project > Project Ticket Tasks — Inquire/Add/Edit: All

Project > Project Phase — Inquire: All

Companies > Company Maintenance — Inquire: All

Companies > Contacts — Inquire: All

System > Member Maintenance — Inquire: All

System > Table Setup — Inquire: All; Customize: allow at minimum Service Board and Project Status tables; also allow Service Priority and Service Status

Procurement > Product Catalog — Inquire: All

Finance > Agreements — Inquire: All

Note: Giving full admin permissions to the API Member avoids complications with permissions.

On-Premises ConnectWise

If your ConnectWise instance is hosted on-premises, add the following ScopeStack IP addresses to your firewall allow list. Cloud-hosted instances do not require this step.

  • 54.85.50.129
  • 18.211.94.157
  • 3.231.126.207

Configuring in ScopeStack

Navigate to Settings > Connected Apps > ConnectWise and enter your credentials:

  1. Open the ConnectWise tile on the Connected Apps page.
  2. Enter your ConnectWise Host (the URL of your ConnectWise instance).
  3. Enter your Company ID (your ConnectWise company identifier).
  4. Enter the Public Key generated for your API Member.
  5. Enter the Private Key generated for your API Member.
  6. Click Save to store the credentials.
  7. Click the Enable toggle to activate the integration.

Configuration Options

Opportunity Status Filter

A comma-separated list of status names for opportunities available to scope. Leave blank to see all opportunities. Use this to limit the integration to only the statuses that indicate an opportunity is active and ready to scope.

Opportunity Stage Filter

A comma-separated list of stage names for opportunities available to scope. Leave blank to see all opportunities. Use this to restrict which pipeline stages appear in ScopeStack.

Skip Revenue Sync

Check this box if you do not want ScopeStack to automatically update opportunity revenue in ConnectWise when your project is submitted for approval. By default, ScopeStack pushes the scoped revenue back to the ConnectWise opportunity at submission time.

Include Product in Revenue Sync

Check this box to include any product selected from ConnectWise when ScopeStack calculates and updates the opportunity revenue. Leave unchecked to sync only service revenue.

Verifying the Connection

A “Connected” status on the ConnectWise tile means your stored credentials are valid. It does not mean data is flowing. The credential check runs separately from the hourly opportunity sync and from the push to PSA, so a connection can read “Connected” while either of those is failing.

To see whether data is actually moving, open Settings > Connected Apps and click into the ConnectWise connection. The connection row shows:

  • Status — green for Connected, red for Connection Error.
  • Last Sync — when the opportunity sync last completed. If this is hours or days stale on an enabled connection, the sync is failing.
  • Additional Information — a running count in the form “198 opportunities imported, 4 projects pushed to PSA”. The second number goes up by one each time a push creates a project in ConnectWise, so it is a quick way to confirm a push got as far as creating the project.

For anything more detailed than these three fields, see Reading the integration activity log.

Creating a ConnectWise Project from ScopeStack

ScopeStack maps project elements to ConnectWise as follows:

  • ScopeStack Project Name > ConnectWise Project Name
  • ScopeStack Phase > ConnectWise Work Plan Phase
  • ScopeStack Services > ConnectWise Work Plan Ticket
  • ScopeStack Sub-Services (if selected) > Task under a Work Plan Ticket
  • ScopeStack Governance Items (if selected and assigned to a phase) > ConnectWise Ticket

Note: Creating a ConnectWise project does not send any financial data (estimated revenue, cost, or billing amounts) to the ConnectWise project. Only the elements above are pushed: name, dates, board, company, template, and the selected services, sub-services, and governance items. Any dollar values on the ConnectWise project’s Finance tab come from ConnectWise’s own project, company, or board defaults, not from ScopeStack. To sync revenue, link a ConnectWise opportunity to the project and use Opportunity Forecast Sync (below), which updates the linked opportunity’s forecast.

Requirements

  • The project must be approved in ScopeStack
  • ConnectWise Connected App must be configured

Step-by-Step

Once your project is approved in ScopeStack, you will have the option to Create PSA Project. This button appears in the project’s action toolbar next to the approval buttons.

Note: Whether the API triggers a push depends on the API version you call.

  • v1 — creating a psa_project persists the record but does not trigger the push. Nothing is created in your PSA. Push with the Create PSA Project button on an approved project.
  • v2POST or PATCH to /v2/projects/:id/psa-project does trigger the push automatically, in the background. Do not also click the in-app button while that push is still running: until it finishes ScopeStack has no PSA project ID yet, and a second run creates a second project in your PSA.

On this screen: The approved project’s action area shows a Create PSA Project button. Clicking it opens the ConnectWise project setup form.

On this screen: The ConnectWise project setup form includes fields for How would you like to integrate this project with ConnectWise? (new or existing project), Estimated Start Date, Estimated End Date, ConnectWise Project Board, ConnectWise Company, Initial Ticket Status, and an optional Use Project Template? toggle, and a How should Tickets/Tasks be created? dropdown. At the bottom is a checkbox for Create ConnectWise Tickets for ScopeStack Governance Items?

To complete the setup, define:

  • Estimated Start and End Date for your project.

  • Project Board in ConnectWise Manage to create the project in.

  • ConnectWise Client for your project. This list syncs once per day from ConnectWise.

  • Whether to include governance items as tickets. The platform can only create these if you have assigned your governance items to your project’s phases.

  • How should Tickets/Tasks be created? — a dropdown that controls how Services and Sub-Services map to ConnectWise. The four options are:

    • Create a Ticket for each ScopeStack Service — one Work Plan Ticket per service; sub-services are not pushed.
    • Create a Ticket for each ScopeStack Service and create a task for each ScopeStack subservice — a ticket per service with each sub-service as a task under it. If a sub-service has a Service Description, that becomes the task name; otherwise the sub-service name is used.
    • Create a Ticket for each ScopeStack Service and Subservice with revenue greater than 0 — a ticket per service, plus a ticket for each sub-service that carries revenue.
    • Create a Ticket for each ScopeStack Subservice — one ticket per sub-service.

    In the two “ticket per Subservice” modes, sub-services push as their own phase-level tickets with no parent-service link.

Governance Item Behavior

  • If governance is set to Prorate, each item not assigned to a phase gets a ticket in every phase that includes effort. The effort is distributed across those individual-phased tickets.
  • If a governance item is aligned to a specific phase, the ticket is created in that phase with all effort allocated to it.
  • If the item is set to a Project Management phase, the ticket is created in a phase called “Project governance” with all effort allocated to it.

After you press Submit, it may take a few minutes for the project to be created. ConnectWise creates it using the API Member you configured.

If a board or existing project you expect is missing from the setup form, contact ScopeStack support with the board or project name. On accounts with a large number of ConnectWise boards, a board can occasionally be missing from the ConnectWise Project Board list.

Updating a Project

After creating the ConnectWise project, resubmitting from the PSA Integration section will add any new services to the PSA project, but will not update existing services.

CRM Features

Opportunity Forecast Sync

  1. Associate a ConnectWise opportunity to your ScopeStack project using the Opportunity dropdown.

    On this screen: The project detail view shows an Opportunity dropdown in the CRM section. Select the matching ConnectWise Manage opportunity from the list to link it to this project.

  2. As your deal moves through ScopeStack stages — Building, Pending Approval, Approved, Won, and Lost — the forecast on the linked ConnectWise opportunity updates automatically. The forecast is updated by adding a line for each Product, Professional Service, and Managed Service Total.

  3. To sync revenue manually on an approved project, click the Update CRM button in the gear menu next to the project name.

On this screen: The project header shows the project name with a gear icon. Clicking the gear icon opens a context menu containing actions including Update CRM, which triggers a manual sync of revenue data back to the linked ConnectWise Manage opportunity.

Convert to Sales Order

Once a project is approved, you can convert it to a ConnectWise Sales Order.

On this screen: An approved project’s action toolbar includes a Create Sales Order button. Clicking it creates a sales order in ConnectWise Manage from the linked opportunity.

Reading the integration activity log

Every time ScopeStack writes to ConnectWise, it records what it did in an integration activity entry on the connection. When a push to PSA does not produce what you expected, this log is what separates a ConnectWise rejection from a ScopeStack failure, and it shows how far the push got before it stopped. Read this section before working through the troubleshooting entries below, because most of them are distinguished by what the log does and does not contain.

Getting to the log

Open the connection under Settings > Connected Apps and select the Integration Activity tab. You need Manage on the Connected Apps permission to see it, which the Admin role has by default. If you hold only View on that permission, the tab does not appear.

Two other ways to get at it:

  • Ask ScopeStack support. Give them the ScopeStack project number and roughly when you pushed. Both are in the log, so a project number is enough to find the right entry.

  • Read it through the API. The same records are available to any user on your account with API credentials. First list your connections to find the ConnectWise connection ID:

    GET https://api.scopestack.io/{account-slug}/v1/account-connections

    Then request that connection’s entries, which come back newest first:

    GET https://api.scopestack.io/{account-slug}/v1/account-connections/{connection-id}/integration-logs

    Each entry has a content field holding the full text of one operation and a created-at timestamp marking when that operation started. See API Quickstart for how to authenticate.

What one push looks like

A push to PSA writes its progress into a single entry, one line per stage, always in this order:

Upserting PSA project for ScopeStack project 120781 Adding phases (if required) Adding missing services and subservices Adding governance (if required) [ServiceActual] preparing create: source=ProjectService#734428 ...

What each stage is doing:

  1. Upserting PSA project — creating the project in ConnectWise, or attaching to the existing project you selected. The number is the ScopeStack project, which is the one to quote to support.
  2. Adding phases — your ScopeStack phases are created as ConnectWise Work Plan phases.
  3. Adding missing services and subservices — this is the stage that creates the Work Plan tickets and tasks. It is normally the longest, and it is the one that matters if your Work Plan came out empty.
  4. Adding governance — governance items are added as tickets, if you chose that option on the setup form.
  5. [ServiceActual] lines — a pair of lines for each service and sub-service that was pushed. Reaching these means the push ran to the end.

A push also writes a second, much larger entry timestamped a second or two after the first. That one records each individual call ScopeStack made to ConnectWise along with ConnectWise’s response, and it is where the detail lives when something was refused. So a single push normally produces two adjacent entries, not one.

Where the log stops tells you what failed

  • It stops after “Adding phases” with no error line. The push died partway through rather than being refused. This is the case where your phases exist in ConnectWise but the Work Plan is empty or partial. Push again from the PSA Integration section; a resubmit attaches to the project that already exists rather than creating a second one, and it adds whatever is missing.
  • It reaches the [ServiceActual] lines. The push completed. If something still looks wrong in ConnectWise, the cause is in the mapping choices rather than the push: check the board, the template, and the “How should Tickets/Tasks be created?” option you selected.
  • It contains an error block. ConnectWise refused the call. See below.

What a ConnectWise rejection looks like

When ConnectWise refuses something, the entry carries a block in this shape:

***** Connectwise API Error (400): Path: https://na.myconnectwise.net/v4_6_release/apis/3.0/sales/opportunities/198/forecast Payload: {...} Error: forecast object is invalid. The field forecastDescription must be a string with a maximum length of 50. *****

The Error line is ConnectWise’s own message, and it usually names the exact field it objected to. In the example above, a product name longer than 50 characters was blocking the revenue sync, which is fixable in ScopeStack without involving support. Read that line first, before anything else in the entry.

The number in the header is the HTTP status ConnectWise returned. A 403 means the API Member was refused rather than the data being wrong, which points at the API Member’s security role or, on an on-premises instance, at a firewall rule. A 400 means ConnectWise understood the request and rejected the contents.

Two things the log will not tell you

Failed reads leave no trace at all. ScopeStack only records the calls that write to ConnectWise. The calls that read from it write nothing to the log, whether they succeed or fail. That covers fetching your project boards, project templates, priorities, members, and the list of existing projects. So if a dropdown on the Push to PSA form comes back empty, there will be no error line, and often no entry at all. An empty log is not evidence that the reads are working; it says nothing about them either way. Check this before you conclude from a clean log that the connection is healthy, and see the empty-dropdowns entry below for what to do instead.

A generic ScopeStack error page is not a ConnectWise error. If the screen goes to a page reading “Be right back. We need to check some things out.”, that is ScopeStack’s own error page, not something ConnectWise sent. The request failed before it reached ConnectWise, so the integration log will have nothing to show for it. Send support the time it happened and what you clicked.

Troubleshooting

403 Forbidden errors on opportunity sync

The most common cause is the ConnectWise API Member losing permissions. After a ConnectWise Manage update or security policy change, API Member permissions can be reset. Check that your API Member still has the permissions listed in the Prerequisites section above. Specifically verify:

  • Sales > Opportunity: Inquire/Add/Edit = All
  • Companies > Company Maintenance: Inquire = All

Note that the connection will still show “Connected” while this is happening, because the credential check and the sync are separate.

If your ConnectWise instance is hosted on-premises and the permissions are correct, treat a 403 as a network problem rather than a permissions one, especially if the errors started abruptly on a particular date. Confirm the three ScopeStack IP addresses in the Prerequisites section are still on your firewall allow list; ConnectWise updates and firewall migrations can drop allow-list entries without anyone noticing.

If neither applies, contact ScopeStack support with the error details from the integration activity log.

The board, template, or priority dropdowns on the Push to PSA form are empty

If the ConnectWise Project Board, Use Project Template, or Initial Ticket Status lists come back empty while your opportunities are still syncing normally, the cause is almost always the security role on the API Member, not the connection.

Opportunities come from ConnectWise’s Sales area. Boards, templates, priorities, and members come from the Service, Project, and System areas. A role that has Sales access but has lost the others produces exactly this split: the sync keeps working and every dropdown goes blank. Nothing is written to the integration activity log when this happens, because these are reads.

The mistake worth avoiding: making your own ConnectWise login an Admin does not change anything, because ScopeStack does not use your login. It uses the API Member whose keys are stored on the connection. In ConnectWise, go to System > Members > API Members, find the member whose API Keys tab shows the Public Key you entered in ScopeStack, and check that member’s security role covers the Service, Project, and System areas listed in the Prerequisites section, not just Sales.

The push finished but the Work Plan is empty

If phases appear in ConnectWise and the Work Plan has no tickets, and no error was shown anywhere, the push stopped partway rather than being rejected. Phases are created before tickets, so this pattern means it stopped between those two stages. Resubmit from the PSA Integration section; the resubmit attaches to the ConnectWise project that already exists and adds what is missing, so you will not get a duplicate project. If it stops in the same place twice, send ScopeStack support the ScopeStack project number and the approximate time of the push.

You recreated the ConnectWise API Member and now nothing works

Deleting and recreating an API Member issues new keys, and the keys stored in ScopeStack are still the old ones. Go to Settings > Connected Apps > ConnectWise and re-enter the Public Key and Private Key from the new member, then Save.

Those two, plus the Company ID, are the whole credential. There is no Client ID or Client Secret to update on this screen; the ConnectWise integration identifier ScopeStack sends is set at the platform level, not per API Member, so recreating a member never affects it.

New to ScopeStack?

ScopeStack automates scoping, pricing, and SOW generation for IT services teams. See how it fits your process.

Book a demoBrowse the docs
Last updated on