PSA Sync Issues
Autotask, ConnectWise, and HaloPSA synchronization errors and resolution steps.
Written By Victor Raessen
Last updated 8 days ago
PSA Sync Issues
Troubleshooting data synchronization problems between Salesbuildr and your PSA (Autotask, ConnectWise Manage, HaloPSA).
Checking sync status
The primary place to monitor and resolve sync issues is Settings > Tools > Issues. Each failed sync creates an issue with:
The entity that failed (quote, company, contact, opportunity)
An error message explaining what went wrong
Options to Retry, Dismiss, or investigate further
Successful syncs automatically clear their corresponding issues.
Autotask: BillingCode errors
The most common Autotask error. Appears when a product category in Salesbuildr is not mapped to a valid Autotask billing code.
Symptom: "BillingCode does not exist or is invalid"
Cause: The category's billing code mapping is missing or points to a deleted/inactive billing code in Autotask
Fix: Go to Settings > Integrations > Autotask > Category Billing Codes and verify each category has a valid billing code assigned
Autotask: Entity not found
Autotask: Authentication errors
"Autotask authentication error: please verify your credentials" — The Autotask API credentials have expired or been changed. Re-enter them at Settings > Integrations > Autotask.
Connection reset errors — Temporary network issues. Salesbuildr automatically retries up to 2 times. If persistent, check Autotask service status.
Autotask: Opportunity status/stage not syncing from Autotask to Salesbuildr
Salesbuildr does not sync Autotask opportunity changes in real time. Changes made in Autotask appear after the next scheduled pull, subject to the fetch window below.
How often Salesbuildr checks Autotask
A background job runs every 10 minutes and queries Autotask for opportunities whose lastActivity or createDate falls in an incremental time window — not every opportunity in the PSA. There is no real-time webhook for Autotask opportunities.
After each run, expect up to ~15 minutes before a qualifying change appears in Salesbuildr: the 10-minute schedule plus a built-in 5-minute buffer at the end of each fetch window (so Salesbuildr does not immediately re-read a record it just pushed to Autotask).
What gets pulled automatically
The recurring import has no status filter — it returns opportunities of any Autotask status (Active, Not Ready to Buy, Lost, Closed, Implemented) when their timestamps fall in the window:
There is no filter by company, pipeline stage, or category in the Autotask query. Each matched row is imported only if its linked company, contact (if any), and owner already exist in Salesbuildr.
On-demand import: Opportunities → Import from Autotask remains available to pull a specific row immediately, outside the scheduled window.
Salesbuildr → Autotask pushes still happen immediately when the user edits in Salesbuildr.
Why not real time?
Autotask does not support opportunity webhooks. The 10-minute poll with a watermark window keeps API usage within Autotask's 10,000 calls/hour limit while still covering active pipeline work incrementally.
Services Showing No Name After Autotask Sync
If your services appear in Salesbuildr without a name — even though they have names in Autotask — this is likely caused by how Salesbuildr handles the Manufacturer Part Number (MPN) field during synchronization. This article explains why it happens and how to fix it.
Why Does This Happen?
When services sync from Autotask to Salesbuildr, if the service's MPN is identical to its name, Salesbuildr automatically strips out the name. This is intentional default behaviour — it prevents quote recipients from seeing the MPN and using it to search for the product elsewhere (commonly known as "price shopping").
The side effect is that if your Autotask services use the MPN as the display name, those services will appear in Salesbuildr with a blank name field. Any name you manually add in Salesbuildr will also be overwritten the next time a sync runs, which is why the name keeps disappearing.
How to Fix It
You can resolve this by enabling a setting in Salesbuildr that allows the MPN to be used as the service name.
In Salesbuildr, go to Settings.
Select Integrations from the left-hand menu.
Click on Autotask.
Locate the flag labelled Allow MPN as name (or similar) and enable it.
Save your changes.
Once this setting is enabled, services that sync from Autotask will retain their name even when it matches the MPN.
Things to Keep in Mind
Note: Manually adding a name directly to a service in Salesbuildr is not a permanent fix. Because the sync runs on a recurring schedule, any manually entered name will be overwritten the next time the sync runs — unless the setting above is enabled.
Tip: Before enabling this setting, consider whether you want customers to see MPN values on quotes. If price shopping is a concern for your business, you may want to rename services in Autotask to use a customer-friendly description rather than the MPN, so that the name that syncs across is one you're comfortable sharing.
Still Having Issues?
If services are still showing without a name after enabling the setting and waiting for the next sync cycle, check the following:
Confirm the setting was saved successfully by navigating back to Settings > Integrations > Autotask.
Allow enough time for the next scheduled sync to complete.
If the issue persists, contact Salesbuildr support with the name of the affected service and your Autotask account details.
ConnectWise: Rate limit errors
"ConnectWise API rate limit exceeded" — Salesbuildr hit the ConnectWise API rate limit. The system retries automatically with exponential backoff (5s, 10s, 20s, up to 60s). If the error persists after 4 retries, wait a few minutes and retry manually.
General sync failures
"Already synchronizing" — The entity is currently being synced. Wait a few minutes and check the status again.
Some line items not synchronized — The quote synced but individual items failed. This is a warning, not a critical error. Check which items failed and verify their product mappings.
"Payment term/type is deleted" — A referenced payment term or type was deleted in the PSA. Select a different payment term in the quote settings.
For PSA-specific configuration, see Autotask Configuration, ConnectWise Configuration, or HaloPSA Configuration.
ConnectWise Sync Error: "catalogItem object is invalid" — Inactive Category Mapping
When syncing a quote to ConnectWise, you may encounter an error message that reads:
Category 80 in ConnectWise is disabled. Re-map this product's category in Settings → Integrations → ConnectWise → Categories.
Older errors show the raw message from ConnectWise instead:
catalogItem object is invalid. [ID] is an inactive
Both mean the same thing, and neither is caused by a problem with the product itself: a Salesbuildr product category is mapped to a category that has been disabled or deleted inside ConnectWise. This guide explains why it happens and how to resolve it.
Why this happens
When a ConnectWise product category is deactivated, ConnectWise stops returning it via its API. Salesbuildr can no longer read the category's details — but the mapping you previously created is still saved. Every sync that references that category keeps failing until the mapping is corrected.
Salesbuildr detects these mappings and shows them directly on the category mapping page, so you can fix them yourself.
How to resolve it
Step 1: Open the ConnectWise category mapping page
Go to Settings → Integrations → ConnectWise → Categories and select the Map categories tab.
Step 2: Find the highlighted mappings
Mappings pointing at a disabled or deleted ConnectWise category are highlighted at the top of the mapping table and labelled Inactive or deleted. If the category was deleted from ConnectWise outright, the row reads Unknown ConnectWise category (ID 80), because the name is no longer available to look up.
A panel above the table repeats the steps below.
Step 3: Re-map the affected Salesbuildr category first
In the mapping table underneath the highlighted rows, select an active ConnectWise category for each affected Salesbuildr category. Do this before removing anything — removing the old mapping on its own does not restore sync.
Step 4: Remove the inactive mapping
Click the trash icon on the highlighted row. The row disappears from the list, but the change is not stored yet.
Step 5: Click Save
The removals and the new mappings are applied together.
Step 6: Retry the sync
Attempt to sync your quote again. The error should no longer appear.
Preventing this in the future
Set a Default category on the Defaults tab of the same page. When a mapped category turns out to be disabled, Salesbuildr syncs the product into the default category rather than failing. The mapping still needs correcting, but your sync keeps working in the meantime.
Tip: Any time you disable or delete a product category inside ConnectWise, audit your category mappings in Salesbuildr straight away. Go to Settings → Integrations → ConnectWise → Categories and update any mappings that referenced that category before your next sync attempt.
Still seeing the error?
If the error persists after re-mapping, the affected product may belong to a subcategory or a second category with an inactive mapping. Check all category assignments on the product and repeat the steps above, and check the Map Root Category tab as well — root category mappings can point at disabled categories too. If it still fails, reach out to Salesbuildr support for assistance.
See also
Troubleshooting Overview — general troubleshooting steps
Billing & Procurement — billing code and charge issues