Supported CRMs
ScopeStack supports syncing opportunities from common CRM tools to provide an easy way to get high-level customer information into the platform.
Once you have enabled CRM Opportunity Syncing on your account, you can find your opportunities under the drop-down menu on either a new project or the Project Overview page of an existing project.
On this screen: The Project Overview form includes a CRM Opportunity dropdown at the top of the project details section. Typing in the field searches your synced opportunities by name. Selecting one fills in the Project Name, Client, Sales Executive and Service Location fields for you. The Service Location works a little differently from the others: see How the Service Location is filled in below.
Once an opportunity is linked to a project, the CRM Opportunity field becomes read-only. Reloading the page does not re-pull anything from the CRM. To pick a different opportunity, use the remove control next to the field to unlink the current one, which makes the dropdown selectable again.
We support syncing opportunities from the following CRMs
- Connectwise Manage
- Salesforce
- Hubspot
- Microsoft Dynamics 365
- Autotask by Datto
We offer a couple of additional enhancements for Connectwise Manage. You’ll be able to learn about those here.
You can find individual articles about setting up each connection: ConnectWise Manage, Salesforce, HubSpot, Microsoft Dynamics 365, and Autotask.
Fields a CRM Opportunity Updates in ScopeStack
When you select an opportunity from your CRM in ScopeStack, the following fields are updated:
Note: The Service Location row in each table below behaves differently from the others. It is filled in by your browser at the moment you pick the opportunity, and only saved if certain conditions are met. The ongoing background sync never writes an address onto a project. See How the Service Location is filled in.
How the Service Location is filled in
The Project Name, Client and Sales Executive come across as part of the opportunity link itself. The Service Location does not.
When you select an opportunity, ScopeStack copies the address from that opportunity into the Service Location fields on the screen in front of you. It is saved as a service location on the project only when you save, and only when:
- the site name is filled in, and
- either Remote location is checked, or the street, city and postal code are all filled in.
If the opportunity in your CRM has no address, or is missing one of those pieces, the fields stay blank and no service location is created. Nothing is lost in this case; the address simply was never added to the project. You can type it in on Project Overview and save, and it will stay.
The periodic background sync that keeps opportunities up to date never creates or updates a service location. If you change an address in your CRM after a project is already linked, that change will not appear on the project.
Note: For Dynamics 365 and Salesforce, the address is taken from the CRM account record, not the opportunity, so every opportunity under the same account brings across the same address. If your project is for a specific site, you will usually want to edit the Service Location on the project or add the site through Manage Service Locations. HubSpot likewise takes the address from the deal’s associated Company record. ConnectWise and Autotask pull a company or site address that can differ from one opportunity to the next.
Connectwise Manage Opportunities
Opportunity Sync
Connectwise Manage Fields becomes the following ScopeStack Field
- Opportunity Summary: Project Name
- Company: Client Name
- Company Site on the Opportunity: Service Location
- Sales Rep: Sales Executive
Revenue Sync
Scopestack creates a “forecast” with separate entries for Professional Services, Managed Services, and Product Revenue.
Dynamics 365 Opportunities
Opportunity Sync
Dynamics 365 Fields become the following ScopeStack Field
- Topic: Project Name
- Account: Client Name
- Account’s Address: Service Location
- Opportunity Owner: Sales Executive
Revenue Sync
ScopeStack will create a ‘quote’ if none exists, and then create a ‘quotedetail’ record on that quote with the following details:
Scopestack Fields becomes the following Dynamics 365 Fields
Total Contract Revenue: priceperunit
Total Contract Cost: msdyn_costamount
Total Contract Cost: msdyn_estimatedcost
Inclusion or Exclusions of Expenses: msdyn_includeexpens
Inclusion or Exclusions of Products: msdyn_includematerial
Fixed Fee or T&M Payment Term Selection: msdyn_billingmethod
Salesforce Opportunities
Opportunity Sync
Salesforce Fields become the following ScopeStack Fields
Opportunity: Project Name
Account Name: Client Name
Account’s Address: Service Location
Opportunity Owner: Sales Executive
Revenue Sync
The opportunity amount is updated with the Total Contract Revenue.
Autotask Opportunities
Opportunity Sync
Autotask Fields become the following ScopeStack Fields
Opportunity Title: Project Name
Opportunity Contact Name: Sales Executive
Opportunity Company Name: Client Name
Company Address: Service Location
Revenue Sync
ScopeStack Fields become the following Autotask Fields
Project.contract_revenue: Opportunity.amount
Project.contract_cost: Opportunity.cost
Project.mrr_terms: Opportunity.totalAmountMonths
Project.ps_revenue*: Opportunity.oneTimeRevenue
Project.ps_cost*: Opportunity.oneTimeCost
Project.ms_revenue**: Opportunity.xxxRevenue
Project.ms_cost**: Opportunity.xxxCost
* only for costs that are not amortized over the length of the MS contract
** xxxRevenue/xxxCost is monthlyRevenue/quarterlyRevenue/yearlyRevenue as dictated by the Project.payment_frequency value
Hubspot Opportunities
Opportunity Sync
Hubspot Fields become the following ScopeStack Fields
deal.name: Project Name
owner.name: Sales Executive
deal.company.name: Client Name
company address info: Service Location
Deals without an associated Company
Both the client name and the service location come from the deal’s associated Company record. If a deal has no Company, ScopeStack falls back to using the deal’s own name as the client name, and no address is carried across.
That fallback is quiet, and it compounds. Clients are matched by name, so a deal named “Q3 Firewall Refresh” creates a client called “Q3 Firewall Refresh” rather than attaching to the real customer. A second deal for that same customer, under a different deal name, creates a second client. Over time you get a client list full of one-off entries that look like deals, and revenue that should roll up under one customer is spread across several.
This is a different issue from the concurrent-sync duplication fixed in April 2026 — that one was a timing bug, this one is the missing-Company fallback and is still current behavior.
Associate a Company with the deal before syncing it. If you already have clients that were created this way, they have to be corrected in ScopeStack — re-syncing the deal after adding a Company does not merge the old client record away.
Revenue Sync
The opportunity amount is updated with the Total Contract Revenue.
Revenue Information Syncing from ScopeStack back to your CRM
On this screen: On an approved project, the gear icon menu next to the project name includes an Update CRM option. Clicking it sends the current revenue totals back to the linked CRM opportunity.
We support syncing back the projected revenue to the opportunity in your CRM. To complete this update, press the Update CRM button next to the project name on an approved project.
We also automatically update the revenue when a project is submitted for approval in ScopeStack. In most CRMs, you have the option to skip this automated update if you would like. You can check this option in the Connected App settings area for your CRM.
Syncing Frequency
We sync CRM opportunities every hour, on the hour:
- Open opportunities: synced at half past the hour (e.g., 10:30 am, 11:30 am).
- Closed opportunities: synced at the top of the hour (e.g., 11:00 am, 12:00 pm).
Recently Changed Opportunities
To optimize performance, we do not reprocess all opportunities every cycle. Instead, each sync picks up where the last successful one finished.
- Normal operation: we fetch opportunities created or updated since the last successful sync, minus a one-hour overlap so nothing falls through the gap between runs.
- First sync, or after a connection is reset: there is no previous sync to resume from, so we fall back to the last 3 days.
- There is no fixed rolling window. If a sync is interrupted for a long stretch, the next successful run resumes from where it left off rather than from a fixed number of days back.
Opportunity State
How we determine whether an opportunity is “open” or “closed” depends on your CRM configuration:
- Default behavior: we rely on the CRM’s native “closed” status field.
- Custom configuration: you can define which statuses or stages should be considered “open.” In this case, any opportunity not in one of the configured statuses is treated as “closed.”
Closed Flag in ScopeStack
Each synced opportunity in ScopeStack carries a closed flag:
- If the closed flag = false → the opportunity appears in the CRM Opportunity dropdown when creating or updating a project.
- If the closed flag = true → the opportunity will not appear in the dropdown.
Once a project has been linked to a CRM opportunity, the linked opportunity will continue to display in the project even if it later becomes “closed.”
Switching CRM providers
You can move from one CRM to another (for example Salesforce to HubSpot) yourself:
- Add the new CRM connection under Settings > Connected Apps (see that provider’s configuration guide). HubSpot connects with a Private App token and activates once the token validates.
- Once the new connection is syncing, Disable the old CRM connection so it stops importing. Disabling does not delete anything, so your existing opportunities and the projects linked to them stay in place.
Existing projects are not automatically remapped. Switching the connection does not move the opportunity links on projects you have already scoped, so those projects stay linked to their opportunities from the old CRM. Remapping existing projects onto the new CRM’s deals is a data migration rather than a self-serve step, and it should not be attempted through the API. If you need existing projects carried over, reach out and our team will help you plan it.
Note that HubSpot’s sync imports open deals, so closed HubSpot deals (including the counterparts of opportunities that were already closed in your previous CRM) are not imported automatically.
New to ScopeStack?
ScopeStack automates scoping, pricing, and SOW generation for IT services teams. See how it fits your process.