Summary
Ensure you have set up the Salesforce integration correctly - e.g. the sync direction is what you would like for each model/object and field, and picklist values match etc.
Familiarise yourself with what data is synced and what isn't via the Salesforce integration - e.g. records aren't deleted
Check that your configuration in Salesforce is correct - e.g. the Salesforce user you connect the integration with needs to have a minimum set of Profile permissions
For more information, check out this article!
Who is this article for?
Planhat builders (e.g. CS Ops) configuring the Salesforce integration in Planhat
Series
We have a series of articles on the Salesforce integration:
Salesforce troubleshooting guide ⬅️ You are here
Article contents
Introduction
In our main article on the Salesforce integration, we talk through how you can easily sync your Salesforce CRM data into Planhat, and sync data back to Salesforce if you wish.
While generally, the setup will go very smoothly, occasionally you may have questions about why you're not seeing something you expected.
In this article, we take you through quick troubleshooting steps. The majority of the time, these will resolve any questions or issues you may have, but if you do need further assistance, please reach out to our amazing Support team via the in-app chat, or speak to your CSM or TAM.
🚀 Tip
We have a separate support article about Salesforce error messages, which are surfaced for you in Planhat, and you can even receive automated notifications about!
Data not syncing - specific data configuration
If data isn't syncing, firstly check these points. It's likely that everything's working as designed, or there's a quick fix.
Sync direction
Ensure that the sync direction is set correctly, on both the object/model level and the field level. By "correctly" we simply mean that you have selected "Receive from Salesforce", "Send to Salesforce", or "Both Directions", depending on which direction(s) you would like the sync to occur.
The default when setting up the integration is that objects/models are "Not Syncing", so ensure you change this for objects/models you would like to sync.
📌 Important to note
For Account/Company only, the field sync direction can supersede the object sync direction
This means you can set the object to "Receive from Salesforce", if you don't want Planhat to sync Companies into Salesforce as new Accounts, but you can set individual fields to "Send to Salesforce", which can be particularly useful for sharing Planhat Company information (such as metrics) with colleagues working in Salesforce
For all other models/objects, the sync direction on the object level is the limiting factor, so you'd need to enable the model to sync to Salesforce if you want one of its fields to sync to Salesforce. It's still possible to have different sync options, as long as the field isn't syncing in a way the object can't (e.g. set the field to "Receive from Salesforce" and the object/model to "Both Directions")
List/multipicklist values
If you've set the integration to sync a list or multipicklist field, but the values are not being populated (either when syncing to Planhat or to Salesforce), ensure that the values are the same in Planhat and Salesforce.
So, for example, if you're syncing in an "Industry" picklist field from Salesforce to Planhat, with values "IT", "Education", "Science", and so on, you should map that to a corresponding custom field in Planhat with the correct list values. The integration can't generate new list values in Planhat; it can only assign ones that already exist in Planhat. Similarly, when syncing to Salesforce, the picklist values sent from Planhat need to match available options in Salesforce.
It is important to note that the list/multipicklist values in Planhat match the "API name" of the values in Salesforce, rather than the "values" or "label" you see in the UI (if they are different).
Account Owner
As discussed in the main Salesforce integration article, there are a few different ways you can set up a sync between the Salesforce Account Owner and the Planhat Company Owner.
The most common method is to map the Salesforce "Owner ID" field with the Planhat "Owner" field, with the "User" field type synced.
If you've done this but you're finding that the Account Owner isn't syncing, ensure that the User exists in both platforms (Planhat and Salesforce) with the same email address.
Also, ensure you have clicked "Fetch SF Users" in the "Team" section of the Salesforce integration, so the Salesforce User information is synced into Planhat, and the integration can map from Users' Salesforce IDs to email addresses and so to Users in Planhat. This is necessary if you have changed the email of a User in Salesforce.
New field mapping
If you add new field mapping - pair(s) of fields - at a later date, manually resync the model/object (fetch data from Salesforce) so the new custom match field is enabled.
End Users / Contacts
If End Users are not syncing to Salesforce Contacts, and you've checked other factors above such as the sync direction, there are a couple of other things to check.
Firstly, Salesforce requires the Contact to have a last name, so if an End User in Planhat doesn't have a last name, then it won't sync to Salesforce.
Also, check whether email addresses of End Users you're trying to sync to Planhat exist on other Accounts or as Leads.
Notes / Conversations / logged activities
The Notes section of the Salesforce integration only syncs in particular circumstances.
For Notes created in Salesforce, created and updated Notes will be synced into Planhat (as Conversations with type "note"), as usual. Remember that you have to select to sync in either Salesforce "Legacy Notes" or "Note Taking Tool" ("ContentNotes"); you can't sync both.
If a new Conversation (e.g. of type "note" or a custom Conversation Type such as "QBR") is manually created in Planhat, these will be synced into Salesforce as new Notes, but after this, there will be no updates synced in either direction.
Conversations created in Planhat automatically by the Salesforce integration (in response to a completed Task being synced in) are not included in the sync (with either Task or Note).
You can read more about Notes and Tasks in the Salesforce integration here.
Deleted records
As stated in the main Salesforce article, the Salesforce integration does not delete records in either system; it only creates or updates them.
So, for example, if you delete "Company X" or End User "Dave Smith" in Planhat, they will not be deleted in Salesforce by the integration.
Field updated by the "system" in Planhat
If a Planhat field is updated by the "system" rather than a specific User - for example, it's a formula field or a Company Health Score that's recalculated - the update will not trigger Planhat to send data to Salesforce.
These updated field values will be sent to Salesforce if another field on the record, configured to sync to Salesforce, is updated by a User in Planhat - then that record will be synced to Planhat.
For Company and End User models, there is a daily automatic sync job to Salesforce to incorporate changes made by the system.
To read more about this topic, see our separate support article.
Data not syncing - configuration in Salesforce
Validation rules
If a field has validation rules in Salesforce - for example, "field X can only be updated if field Y has a value", and the data sent from Planhat to Salesforce does not meet the rule requirements, this will block the sync to Salesforce. Therefore, make sure the data in Planhat meets any Salesforce rules.
User permissions
The integration user (i.e. the user who authenticated the Planhat Salesforce integration), needs to have correct permissions to enable fields to be updated in Planhat. If the integration user does not have sufficient permissions, this will block data from being sent to Salesforce. For further details, check out the separate support article here.
Some models/objects synced, and some not
The sync job to fetch data from Salesforce goes through model/object pairs in the following order:
Team (Users)
Companies / Accounts
End Users / Contacts
Notes
Tasks
Licenses
Assets
Projects
Other mapped sections
Tickets / Cases
If an error occurs at any point during this process, then it will stop the sync at that point, meaning previous models in the list will have synced, but subsequent models in the list will not have synced.
Where the integration states "last synced at [date]", that refers to the last time the full sync successfully completed, so syncs that stopped part-way due to an error may have happened since but will not update the date.
For further details on the automatic and manual syncs in the Salesforce integration, see here.
For more information on Salesforce error messages/notifications, see this article.
Other syncing scenarios
"Send to Salesforce" or "Both Directions" option isn't available to select
When you're configuring sync sections and custom field mapping in the Salesforce integration, you select your chosen sync direction from a dropdown.
If you'd like to select "Send to Salesforce" or "Both Directions", but only "Receive from Salesforce" or "Not Syncing" are available options, then this is why.
For the Salesforce Case object to Planhat tickets (Conversation model) part of the integration, this is only one-way - you can't send Planhat tickets to Salesforce Cases.
For custom field mapping for other model/object sections, check the permissions related to the field in Salesforce. The integration detects when a Salesforce field cannot be changed, and displays the appropriate sync directions. To be able to sync to Salesforce, update the custom field permissions in Salesforce (for the Profile of the User who has connected the Salesforce integration). For more information on Salesforce integration User permissions, see here.
Error when trying to filter records via number fields
When setting up sync sections, if you're filtering records synced from Salesforce, this only works via strings - number fields are not supported.
If you do specify a number field, you may see the error message "The filter for number fields should contain a number in the filter".
License updates made in Planhat overwritten by subsequent sync from Salesforce
If you update a License in Planhat, changing the "Fixed Term" toggle switch (checkbox field) to "Yes", and adding an end date, those updates will be removed if the corresponding License in Salesforce does not have an end date and the sync direction is set to "Receive from Salesforce" (not "Both Directions").
Rarer cases, where the integration is not fetching any mapped fields
Before investigating the more complex possible causes described below, please ensure you have correctly followed the Salesforce integration setup article, reviewed the scenarios/solutions described earlier in this article, and checked the Salesforce errors article.
Too much data being fetched
If nothing seems to happen when you manually initiate a fetch on a sync section, it may be due to a query timeout.
If you are mapping a Planhat model to a Salesforce object with a very large quantity of data (hundreds of thousands or even more than a million Salesforce records), and your filter for the object in the integration means you would be fetching more than 10% of the records, you may need to set up more selective filtering (to fetch fewer records) to avoid the timeout.
You can also check whether there is indexing on the Salesforce field used in your filtering, and if not, you can contact Salesforce Support in order for them to set up indexing on that field.
This Salesforce article explains selective queries further.
Lots of "old" data being fetched
Another possible reason for a query timeout is if you are attempting to fetch tens of thousands of records that have not been updated in Salesforce for a long time.
Salesforce moves less "active" records into slower servers, because they are less likely to be accessed. When attempting to fetch a large number of records from slower storage, the Salesforce query often times out.
However, if you press fetch 6+ times, with 20+ seconds in between, Salesforce is "primed" and will move the records into faster storage.
Too many fields mapped in one section
If you are mapping a lot of fields in a single mapping section (Planhat model / Salesforce object), this can result in the query sent to Salesforce having a header that is too long. Salesforce's limit is 16,000 characters, and generally this is hit when mapping around 200 fields (although it could be fewer).
The way to solve this is to split your mapped fields into 2 or more identical mapping sections, so that each request to Salesforce won't exceed the character limit.
What next?
If you can see any Salesforce errors on the left-hand side of the Salesforce integration (highlighted in yellow), or have received a notification about Salesforce errors, you should investigate to fix them - for more information, see our article on Salesforce error notifications.
If you still need further help, please contact our Support team via the in-app live chat, or reach out to your TAM or CSM, who will be happy to help.