Skip to main content

Salesforce integrations

Send Simplesat surveys from Salesforce and sync feedback, case details and contacts between the two.

Send Simplesat surveys from Salesforce emails, Enhanced Chat, Marketing Cloud and flows, and bring the feedback back into Salesforce: on the case, on the contact, or as a record of its own. Survey code you paste into an email template or a Marketing Cloud email works without connecting Salesforce, and so does the Flow package. Everything on Simplesat's Salesforce page needs the connection.

What the Salesforce integrations do

With the Pro plan or above, you can switch on these integrations:

Integration

Listed under

What it does

Where it shows

Create contact from Simplesat feedback

Account-wide integrations

Creates a contact for the response's customer, and an account for their company, when Salesforce has none

Salesforce, on contacts and accounts

Sync contacts

Account-wide integrations

Creates or updates a Simplesat customer for each Salesforce contact, once a day

Simplesat, on Customers

Sync contacts from report

Account-wide integrations

Creates or updates a Simplesat customer for each row of a Salesforce report, once a day

Simplesat, on Customers

Sync data to custom feedback object

Survey integrations

Writes each response to a Simplesat Feedback record you set up in Salesforce

Salesforce, on the Simplesat Feedback object

Create follow-up case after receiving feedback

Survey integrations

Opens a new case from the response

Salesforce, as a new case

Update contact custom fields

Survey integrations

Writes response details to fields on the customer's contact

Salesforce, on the contact

Update case custom fields with feedback

Ticket integrations

Writes response details to fields on the case

Salesforce, on the case

Pull case details from Salesforce and sync to Simplesat

Ticket integrations

Brings the case, its contact, its account and its owner onto the response

Simplesat, on the response

Display feedback in an internal case comment

Ticket integrations

Adds the response to the case as a private comment

Salesforce, in the case's comments

Integrations under Ticket integrations run only on surveys connected to Salesforce. A survey is connected when it uses External email embed with Salesforce Cases, Salesforce Chat or Salesforce Classic (Opportunities). It's also connected when it's an Event-based or Web-embed survey with Connected service set to Salesforce. Salesforce Marketing Cloud doesn't connect a survey. These integrations find the case by the response's ticket ID, so that ID has to be a Salesforce case ID.

The survey settings and the Field mapping are covered in Writing feedback back, and mapping the fields.

Before you start

Check these before you connect:

  • In Simplesat, the Pro plan or above and the Manage integrations permission. Owner and Admin have it by default.

  • In Salesforce, an org with API access. Enterprise, Performance, Unlimited and Developer Edition include it, and Professional Edition has it only as a paid add-on. Without API access, Salesforce refuses the connection with "The REST API is not enabled for this Organization".

  • A Salesforce user with the API Enabled user permission to connect as.

  • The Approve Uninstalled Connected Apps permission for that user, or Use Any API Client if your org has API Access Control on, so they can allow Simplesat's connected app. They don't need it if a Salesforce admin has installed the app in your org.

The integrations act as that user, who needs these Salesforce permissions for each one:

Integration

What the connected Salesforce user needs

Sync contacts

Read contacts and accounts

Sync contacts from report

Run the report

Create contact from Simplesat feedback

Read, create and edit contacts, and read and create accounts

Sync data to custom feedback object

Read cases, contacts, accounts and users, create and edit Simplesat Feedback records, and edit each mapped field

Create follow-up case after receiving feedback

Create cases

Update contact custom fields

Read and edit contacts, and edit each mapped field

Update case custom fields with feedback

Edit cases and each mapped field

Pull case details from Salesforce and sync to Simplesat

Read cases, contacts, accounts and users, plus messaging sessions for Enhanced Chat

Display feedback in an internal case comment

Add comments to cases

Field-level security applies too. Salesforce refuses an update to a mapped field the user can't edit, and the pull stops on any case whose owner the user can't see. To limit what Simplesat can reach, connect as a user whose access covers only the objects your integrations need. Integration security, permissions and data flow covers what the connected Salesforce user can read and write.

If you'll use Sync data to custom feedback object, create the Simplesat Feedback object and its fields in Salesforce before you switch it on.

Connect Salesforce

  1. On the Integrations page, open Salesforce.

  2. Click Authenticate.

  3. In the Authenticate window, type true for a sandbox or false for a production org, then click Authenticate.

  4. Salesforce's sign-in page opens and asks for a username and password, even if you're already signed in. Sign in as the user the integrations should act as, and allow access.

  5. You're taken back to the Salesforce page, which shows Authenticated with Salesforce and Revoke access.

  6. Click Activate integration on each integration you want, then set it up in the settings and Field mapping that appear.

Before you rely on an integration, test it with a real case. Testing an integration end to end walks you through it.

Send surveys from Salesforce

You paste a survey's code into Salesforce, and Salesforce sends it. The Flow package is the exception: a flow asks Simplesat to send the email. None of the integrations on the Salesforce page sends surveys. If you're still deciding how to send, Choosing a survey delivery method compares the options.

Salesforce Cases

Use Salesforce Cases for Lightning email templates sent from a case.

In Simplesat:

  1. Create or open the survey and choose External email embed.

  2. Under Choose where to add your survey, choose Salesforce Cases.

  3. On Publish, click Generate embed code.

  4. Choose HTML and click Copy survey.

In Salesforce:

  1. Open the App Launcher, search for Email, and open Email Templates. Click New Email Template.

  2. Enter a name and a subject, and set Related Entity Type to Case.

  3. Switch the body to source code with the source code icon, click where the survey should go, and paste the HTML.

  4. Click Save.

Tip: If Salesforce won't save the template, turn off the Grammarly browser extension, or create the template from an app that isn't a Console app. You can edit it from the Console app afterward.

To send the survey when a case closes, set the template as the Case Close Email Template in Setup → Support Settings. The Send Notification Email to Contact checkbox has to be on the Case Close page layout and checked when the case is closed.

When Salesforce sends the email, it fills in these merge fields in the survey links:

What the link carries

Salesforce merge field

Ticket ID

{{{Case.Id}}}

Ticket subject

{{{Case.Subject}}}

Customer email

{{{Recipient.Email}}}

Customer ID

{{{Recipient.Id}}}

Customer first name

{{{Recipient.FirstName}}}

Customer last name

{{{Recipient.LastName}}}

Company

{{{Recipient.Company}}}

Team member ID

{{{Sender.ContactId}}}

Team member email

{{{Sender.Email}}}

Team member first name

{{{Sender.FirstName}}}

Team member last name

{{{Sender.LastName}}}

For how merge fields in survey links work in general, see Placeholders and merge fields.

Salesforce Enhanced Chat

Show the survey in the chat window when a Messaging for In-App and Web conversation ends.

In Simplesat:

  1. Open a survey set to External email embed → Salesforce Cases. On Publish, click Generate embed code, choose Link and click Copy survey.

  2. Delete {{{Case.Id}}} and everything after it. What's left looks like https://api.simplesat.io/api/rating/<survey token>/.

In Salesforce:

  1. In Setup → Trusted URLs, add https://api.simplesat.io and https://survey.simplesat.io, each with the connect-src (scripts) and frame-src (iframe content) directives.

  2. In Setup → Messaging Components, create a component of type Auto Response. Enter a default message and a name, and click Done.

  3. Click Add Format, add a Web Page, and move it to the top.

  4. Under Constants, create a custom constant named survey_url, with the shortened link as its value.

  5. Under Component Formats → Text, set the formula template to {!$Constants.Title}{!$Constants.survey_url}{!$Parameters.MessagingSession.SessionKey}.

  6. Under Component Formats → Web Page, set Message Configuration to Constant with $Constants.Title, URL Configuration to Formula with $Constants.survey_url + SessionKey, and Display Configuration to Popup Message.

  7. Save the component and activate it.

  8. In Setup → Messaging Settings, open the channel. Under Automated Responses, choose the component at End Conversation.

On the website page with the chat, make the chat window at least 600px tall. For example:

iframe[id^="embeddedMessagingFrame"] { width: 400px !important; height: 600px !important; max-width: none !important; max-height: none !important; bottom: 20px !important; right: 20px !important; }

Then add embeddedservice_bootstrap.settings.omitSandbox = true; inside the initEmbeddedMessaging function.

Heads up: Switch on Pull case details from Salesforce and sync to Simplesat before you survey customers in Enhanced Chat. The survey link carries only the messaging session's key, so without the pull, responses have no customer, no team member and no case.

About 4.5 minutes after a response arrives, the pull replaces the session key with the case ID and adds the case's contact and owner to the response. The wait gives the customer time to finish, because swapping the ID mid-survey would split one chat into two responses. Until the pull swaps the ID, a second rating in the session updates the same response. Any rating after that makes a new response. The integrations that write to Salesforce wait five minutes, so they run after the pull and get the case ID.

Salesforce Chat (legacy)

The Salesforce Chat option is for Salesforce's legacy Chat, which Salesforce has retired and replaced with Messaging for In-App and Web. To survey chats now, put the Salesforce Cases link in an Enhanced Chat messaging component.

Salesforce Classic (Opportunities)

Use this option for Classic email templates sent from an opportunity.

  1. In Simplesat, create or open the survey and choose External email embed → Salesforce Classic (Opportunities).

  2. On Publish, click Generate embed code, choose HTML and click Copy survey.

  3. In Salesforce, paste the HTML into a Classic email template you send from an opportunity.

When Salesforce sends the email, the links carry:

What the link carries

Salesforce merge field

Ticket ID

{!Opportunity.Id}

Ticket subject

{!Opportunity.Name}

Company

{!Opportunity.Account}

Team member ID

{!Opportunity.OwnerId}

Team member email

{!Opportunity.OwnerEmail}

Team member first name

{!Opportunity.OwnerFirstName}

Team member last name

{!Opportunity.OwnerLastName}

The code has no customer in it, so responses arrive without one. The ticket ID is the opportunity's ID, so the case integrations find no case and write nothing. Use Let me choose to keep these surveys out of Update case custom fields with feedback.

Salesforce Marketing Cloud

  1. In Simplesat, choose External email embed → Salesforce Marketing Cloud.

  2. On Publish, click Generate embed code and copy the Visual, HTML or Link code.

  3. Paste it into a Marketing Cloud email.

When Marketing Cloud sends the email, it fills in the customer's email, %%emailaddr%%. The team member fields carry the email's reply name and reply address. The link has no ticket ID, so each click on a rating makes a new response. The case integrations don't run on these responses, but the other integrations do.

The Simplesat Flow package

The package, named Simplesat, adds Simplesat actions to Salesforce Flow, so a flow can ask Simplesat to email a survey. It doesn't need the Pro plan.

  1. Install the package from https://login.salesforce.com/packaging/installPackage.apexp?p0=04tVs000000FtozIAC for a production org, or from https://test.salesforce.com/packaging/installPackage.apexp?p0=04tVs000000FtozIAC for a sandbox.

  2. In Simplesat, create an API key under Admin → API keys. If you limit the key to chosen scopes, give it responses:write.

  3. In Salesforce Setup, search for Custom Settings. Click Manage next to Simplesat Settings, then New. Paste the key into API Key and click Save.

  4. Assign the Simplesat Integration User permission set to users, and Simplesat Integration Admin to admins. The admin set also lets them manage the API key.

  5. In Simplesat, create the survey with Direct email delivery → Event-based, and copy its Endpoint.

  6. In Salesforce, open or create a record-triggered flow and turn on its asynchronous path. Add an element there, search for Simplesat, and choose the Simplesat Send Survey Email action.

  7. Map the action's values in the right sidebar, then debug the asynchronous path to test it.

If you haven't made an API key or an Event-based survey before, Direct email surveys covers both.

The Send Survey Email action requires:

  • Survey Token or URL: an Event-based survey's Endpoint or token. Other survey types don't work here.

  • Customer Email

It returns:

  • detail: "Survey is scheduled to be sent", or an explanation that Suppression stopped the email from being sent

  • errorMessage: returned when the request fails

For the case integrations to run on these responses, set Connected service to Salesforce on the survey's Delivery subtab, and pass the case's ID in Ticket ID.

When a flow runs for many records at once, such as cases closed together from a list view, each action handles only the first record. The rest get no survey.

Simplesat applies the survey's Delay and Suppression, and each email shows on its Email activity. If an email doesn't arrive, When a survey does not send lists what to check.

Exclusions and one survey per case

To leave cases out, add conditions where Salesforce sends the survey, such as in the flow that sends the email. With an email template, a chat or Marketing Cloud, Salesforce decides who gets the survey and when.

Simplesat keeps one response per case for each survey, so a second rating with the same case ID updates the first one.

Heads up: Update case custom fields with feedback updates the case. If the record-triggered flow that sends your survey runs Every time a record is updated and meets the condition requirements, that update triggers it again and the survey goes out again. Set the flow to Only when a record is updated to meet the condition requirements.

The Flow package doesn't check whether a case was already surveyed, so the survey's Suppression, set in days per customer, is what holds back repeat emails.

Feedback in Salesforce

These integrations save feedback on the case, on the contact, or as Simplesat Feedback records.

If a field you want is missing from the Field mapping, either it doesn't exist in Salesforce yet or field-level security hides it from the connected Salesforce user. The mapping reads your fields each time the page loads, so create the field or give that user access to it, then reload the page.

Sync data to custom feedback object

Get one Salesforce record per response, kept up to date as the response changes. The records belong to a Simplesat Feedback object, and each record is matched to its response by Response ID.

Give the object the label Simplesat Feedback and the object name Simplesat_Feedback, then add these fields. Salesforce adds __c to every name, so the object becomes Simplesat_Feedback__c and Response_ID becomes Response_ID__c.

Field label

Field name

Data type

What the integration writes

Simplesat Feedback

Name

Text (255)

<Sentiment> feedback from <customer name>

Response ID

Response_ID

Number, marked External ID

The response's ID

Feedback ID

Feedback_ID

Number

The response's ID

Survey ID

Survey_ID

Number

Survey Name

Survey_Name

Text (255)

Answer Choice

Answer_Choice

Number

The metric rating

Answer Choice Label

Answer_Choice_Label

Text (255)

Answer Sentiment

Answer_Sentiment

Text (255)

CSAT Rating

CSAT_Rating

Number

NPS Rating

NPS_Rating

Number

CES Rating

CES_Rating

Number

Followup Answer

Followup_Answer

Text Area (Long) (1000)

Metric

Metric

Text (255)

Question Text

Question_Text

Text (255)

The question your metric rating comes from

Ticket ID

Ticket_ID

Text (255)

Ticket Subject

Ticket_Subject

Text (255)

Team Member ID

Team_Member_ID

Text (255)

Team Member Name

Team_Member_Name

Text (255)

Team Member Email

Team_Member_Email

Text (255)

Team Member Role

Team_Member_Role

Text (255)

Customer ID

Customer_ID

Text (255)

Customer Name

Customer_Name

Text (255)

Customer Email

Customer_Email

Text (255)

Customer Company

Customer_Company

Text (255)

Case

Case

Lookup Relationship to Case

The response's ticket ID

Contact

Contact

Lookup Relationship to Contact

The customer's ID

Case Owner

Case_Owner

Lookup Relationship to User

The case's owner, read from the case

There's no field for 5-star ratings. If your object and fields carry a namespace prefix, enter it in the namespace row of the Field mapping. It's added to the object and to every field except Name.

Every field goes to Salesforce in a single request, so one refused field fails the whole record. Salesforce refuses a field that doesn't exist, a field the connected Salesforce user can't edit, or a lookup that points at the wrong kind of record. Here's what each lookup needs:

  • Case: a Salesforce case ID as the ticket ID. Responses from Zendesk, Marketing Cloud and Salesforce Classic (Opportunities) surveys have a different ID, or none. A web-embed response has a case ID only when its embed code passes one.

  • Contact: a Salesforce contact ID as the customer's ID. You get one from Sync contacts, from Pull case details from Salesforce and sync to Simplesat, or from {{{Recipient.Id}}} on an email to a contact.

  • Case Owner: a user. If a queue owns the case, the record fails.

The integration runs on responses from every survey unless you narrow it. To narrow it, choose Let me choose under When should this integration run? and switch on only the surveys you send from Salesforce cases. One Field mapping covers every survey the integration runs for. If you keep other surveys in, set the Case, Contact and Case Owner rows to Ignore, or make those fields text fields in Salesforce.

Update case custom fields with feedback

Put feedback straight onto the case, in the case fields you choose. The Field mapping lists your case fields, including Description. It starts with nothing mapped, so nothing is written until you map a field.

Heads up: Each update can give the case a new owner. The integration doesn't tell Salesforce to skip assignment rules, so your active case assignment rules run on every update, even on closed cases. That can move a case to your default case owner.

Update contact custom fields

Keep feedback on the customer's Salesforce contact, in the contact fields you map. The integration finds the contact by the response's customer email, so a response without one gets nothing written. The Field mapping lists your contact fields and starts with nothing mapped.

Display feedback in an internal case comment

Agents see the feedback inside the case, as a comment that isn't published to the customer.

The plain-text comment starts with the customer, the sentiment and the survey. Each question and follow-up question follows on its own # <question> line with its answer, and CSAT, NPS and CES ratings get an emoji in front.

Every run adds a new comment. A changed rating, or a comment added after the rating, adds another one.

Create contact from Simplesat feedback

When someone who isn't in Salesforce yet answers a survey, this integration creates a contact for them and an account for their company. Responses without a customer email are skipped. For the rest, the integration looks for a Salesforce contact with the same email:

  • If the contact has an account, nothing changes.

  • If the contact has no account, it links the account whose name exactly matches the response's company. If there's no such account and the company isn't empty, it creates one.

  • If there's no contact but there's an account with the company's name, it creates the contact on that account.

  • If there's neither, it creates both, or only the contact when the response has no company.

The customer's name is split at the first space into a first and last name, and a one-word name becomes the last name. With no name at all, the last name is LNU, because Salesforce requires one.

Reports in Salesforce

Your Salesforce reports can use Simplesat Feedback records and the case and contact fields the integrations write. The Simplesat Feedback object has no lookup of its own to the account, so to report by account, go through the Case lookup.

Case, contact and owner details in Simplesat

Each response starts with the case, customer and team member details its survey link carried. Pull case details from Salesforce and sync to Simplesat then replaces them with what's on the case. For how Simplesat ties a response to a customer, a ticket and a team member, see Attribution: linking feedback to tickets, customers and agents.

Pull case details from Salesforce and sync to Simplesat

When the ticket ID is a Salesforce record ID, the pull reads the case by that ID right away. When it's an Enhanced Chat messaging session key, the pull first finds the session's case.

It writes to the response:

  • Customer: the case's contact, with name, email and contact ID

  • Company: the case's account name

  • Team member: the case's owner, with name, email and user ID, in the role Owner when the response carried the case ID

  • Ticket: the case's subject, priority and type, and the owner's ID

If the case's contact has no email address, the response gets no customer. If the ticket ID is another Salesforce record's ID, such as an opportunity's, the pull brings in nothing. If the connected Salesforce user can't read the case or see its owner, the run stops and the response keeps what the link brought.

To open the case from a response, go to the survey's Configure page, under Open tickets directly in your helpdesk. Set the Ticket URL to your case address with {{ ticket_id }} in place of the case ID. For Lightning, that's https://<your domain>.lightning.force.com/lightning/r/Case/{{ ticket_id }}/view.

Sync contacts

Your Salesforce contacts become Simplesat customers, updated once a day at the time of day you switched the sync on. The first run brings in every contact. After that, each run brings in the contacts changed in the previous 24 hours.

Each customer gets the contact's name and email, the contact ID as the customer ID, and the account name as the company. Titles, tags and other contact fields don't come across, and the sync writes nothing to Salesforce.

To bring every contact in again, click Reset integration, then Activate integration.

Warning: Reset integration returns the integration to its default settings. It deletes its Field mapping and any changes our team made to it for your workspace. Don't use it to reconnect Salesforce.

For what all contact syncs have in common, see Contact sync from a connected tool.

Sync contacts from report

Use a Salesforce report to decide which contacts come into Simplesat. Once a day, the integration reads the report and creates or updates a customer for each row. To pick the report, enter its ID in the integration's Field mapping and click Save.

The report needs columns for the contact's ID, first name, last name and email, the account name, and the contact's last modified date. Rows without an email are skipped.

After the first run, each run brings in the rows changed since the last successful run. Salesforce returns only a report's first 2,000 rows, newest change first, so each run sees the 2,000 most recently changed contacts.

Follow-up cases in Salesforce

Open a Salesforce case from feedback so someone follows up. Create follow-up case after receiving feedback opens a case when a response arrives, and another one whenever the response changes. A later answer, an edited rating or a re-run each opens a new case.

The case's subject is New <sentiment> feedback from <customer name> on <survey name>, and its status is New. The description includes every answer, in the same format as the internal case comment. It starts with <customer name or email> left <sentiment> feedback for survey <survey name>, or with "Someone left" when the response has no customer name or email.

By default, the case has no contact, account, parent case, owner, priority or origin. Set the subject, status, description, account, contact and priority in the Field mapping. Your case assignment rules apply to the new case.

The integration opens a case for every survey and every rating, positive ones included. To narrow it, use Let me choose, where you can switch off positive ratings.

Creating a follow-up ticket from feedback covers follow-ups for every tool.

Change the Salesforce user or move Salesforce

Change the connected Salesforce user

Before you click Revoke access, check that the new user can allow Simplesat's connected app. They need Approve Uninstalled Connected Apps, or Use Any API Client if the org has API Access Control on, unless a Salesforce admin has installed the app in the org.

To connect a different Salesforce user or org:

  1. Click Revoke access.

  2. Click Authenticate, type true for a sandbox or false for a production org, and sign in as the new user.

  3. Click Activate integration on each integration you use.

Revoke access stops every Salesforce integration, including Sync contacts and Sync contacts from report. Their settings and Field mapping are kept. They stay off until you activate them, and responses that arrive in the meantime aren't sent to an integration when you switch it back on.

From then on, the new user's permissions decide what the integrations can read and write. Survey code in your email templates and messaging component keeps working, so there's nothing to paste again. The Flow package keeps working too, because it uses a Simplesat API key.

Move from a Salesforce sandbox to production

The Salesforce page connects one Salesforce org at a time. To move to production, you reconnect and rebuild your setup:

  1. Write down which integrations are on and how each one is set.

  2. Click Revoke access, then Authenticate, type false and sign in to the production org.

  3. In production, create the Simplesat Feedback object and its fields with the same names. Add any case and contact fields your mappings use.

  4. While each integration is still off, open it and pick again any Field mapping value you chose from the sandbox, such as one picked with Lookup. Lookup works only while the integration is off. Click Save.

  5. On each integration, click Deactivate integration, then Activate integration. Saving marks a stopped integration Active, but it sends nothing until you do this.

  6. Rebuild your email templates, messaging component and flows in production. Install the Flow package there from the production link, and enter the API key in its Simplesat Settings.

Salesforce IDs are different in each org. Existing responses, customers and Simplesat Feedback records keep the sandbox's case, contact and user IDs, and those don't match anything in production.

Troubleshooting

My response didn't create a record in the Simplesat Feedback object

Check these:

  • The object exists with the expected field names, and Response ID (Response_ID__c) is marked External ID.

  • Every mapped field exists, and the connected Salesforce user can edit it. One refused field fails the whole record.

  • Each lookup gets the right kind of ID. Case needs a case ID as the ticket ID. Responses from Zendesk, Marketing Cloud and Salesforce Classic (Opportunities) surveys don't have one, and web-embed responses have one only when the embed code passes it. Contact needs a Salesforce contact ID as the customer's ID. Case Owner fails when a queue owns the case. Limit the integration to your Salesforce case surveys with Let me choose, or set those rows to Ignore.

  • Five minutes have passed since the response arrived.

  • The connection hasn't expired. It can stop working while the page still reads Authenticated with Salesforce.

Salesforce's refusals don't show as errors in Simplesat. Send us the response's link and support can read the integration's runs from the last 30 days.

My feedback isn't showing on the Salesforce case

Check these:

  • Update case custom fields with feedback has fields mapped. It starts with nothing mapped and writes only the fields you map.

  • The survey is connected to Salesforce, and the response's ticket ID is a case ID. Salesforce Classic (Opportunities) surveys carry an opportunity ID. Enhanced Chat responses get a case ID only from Pull case details from Salesforce and sync to Simplesat.

  • Five minutes have passed since the response arrived.

  • The connected Salesforce user can edit every mapped field.

  • You activated each integration again after you last clicked Revoke access and Authenticate.

  • The connection hasn't expired. It can stop working while the page still reads Authenticated with Salesforce.

Salesforce's refusals don't show as errors in Simplesat. Send us the response's link and support can read the log.

My cases are reassigned when feedback is written to them

Update case custom fields with feedback doesn't tell Salesforce to skip assignment rules, so your active case assignment rules run every time it updates a case. Closed cases can move to whichever owner the rules pick, such as your default case owner. Cases that Create follow-up case after receiving feedback opens go through assignment rules too.

My Salesforce responses show as anonymous

The customer comes from the survey link, or from Pull case details from Salesforce and sync to Simplesat. Check whether one of these applies:

  • The survey uses Salesforce Classic (Opportunities) code, which carries no customer.

  • The response came from Enhanced Chat. Its link carries no customer, so only the pull can bring one in.

  • The case's contact has no email address.

  • The code came from Generic Embed, which has no Salesforce merge fields.

  • The connection expired, so the pull failed. Reconnect, and support can rerun the failed responses from the last 30 days.

Attribution: linking feedback to tickets, customers and agents explains how anonymous responses are handled.

My Marketing Cloud responses come back as anonymous

Use the code from the Salesforce Marketing Cloud option. Its link carries %%emailaddr%%, which Marketing Cloud fills in when it sends. Code from other options uses merge fields that Marketing Cloud doesn't fill in, such as {{{Recipient.Email}}}.

The team member on my responses is whoever sent the email

With Salesforce Cases code, the team member is the user who sends the email, taken from {{{Sender.Email}}} and the sender's name. So if an email goes out from a shared address, that address becomes the team member. Switch on Pull case details from Salesforce and sync to Simplesat to replace it with the case's owner. Attribution: linking feedback to tickets, customers and agents covers changing the team member on a response.

The case ID in the link wasn't filled in. Salesforce fills {{{Case.Id}}} only when the email is sent from a case, so set the template's Related Entity Type to Case and send it from the case. An editor that changes the braces, for example into %7D, also stops Salesforce from filling it in. Paste the HTML in source code view.

I get "400: Bad Request undefined" when I connect Salesforce

Salesforce refused the connection, so the page stays unconnected. Check that:

  • The org has API access. Professional Edition has it only as a paid add-on. Without API access, Salesforce's message is "The REST API is not enabled for this Organization".

  • The user you signed in as has the API Enabled permission.

I get "We can't authorize you because of an OAuth error" when I connect Salesforce

The full message is "We can't authorize you because of an OAuth error. For more information, contact your Salesforce administrator." with OAUTH_APPROVAL_ERROR_GENERIC. You see it when the user you signed in as can't allow Simplesat's connected app. Since September 2025, Salesforce blocks most users from allowing a connected app that isn't installed in the org.

Have a Salesforce admin give that user the Approve Uninstalled Connected Apps permission, or Use Any API Client if your org has API Access Control on. The admin can instead install Simplesat's connected app in your org. Then click Authenticate again.

I get "Please authenticate connector(s) before starting the Cycle" when I activate an integration

The full message is "400: Bad Request - Please authenticate connector(s) before starting the Cycle". It appears when you click Activate integration even though the page reads Authenticated with Salesforce. Authenticating again won't clear it, because we have to fix it on our side. Contact us with the integration's name.

My Salesforce integrations stopped working, but the page still says Authenticated with Salesforce

Simplesat doesn't check the connection after you connect, so the page can keep reading Authenticated with Salesforce after the connection has stopped working. The connection stops when no Salesforce integration makes a call for 30 days. It also stops if the connected Salesforce user is deactivated or its access is revoked in Salesforce.

Deactivate integration and Activate integration won't fix it. Click Revoke access, then Authenticate, then Activate integration on each integration. Support can rerun responses that failed in the meantime, from the last 30 days.

Integration error messages and what they mean covers the messages the page does show.

Records keep reaching the Simplesat Feedback object after I switched the integration off

Only Deactivate integration on the Salesforce page, or Revoke access, switches an integration off. For some workspaces, our team built a modified version of a Salesforce integration. If records still arrive, send us one of them and the workspace it came from.

Some of my Salesforce contacts didn't come in as customers

Sync contacts skips contacts without an email address, and doesn't read leads or users. After its first run, it brings in only contacts changed in the previous 24 hours. If a run failed, for example while the connection was expired, a contact changed that day comes in only when it changes again. Reset integration and then Activate integration start a new first run that brings in everyone. Resetting also deletes the integration's Field mapping and returns it to its default settings.

Sync contacts from report sees only the report's 2,000 most recently changed rows, and skips rows without an email.

FAQ

Do I need the Pro plan to use Salesforce with Simplesat?

For the integrations on the Salesforce page, yes. Below Pro, Authenticate can't be clicked. Survey code pasted into a Salesforce email template or a Marketing Cloud email works without connecting Salesforce, and so does the Flow package. Enhanced Chat surveys need Pull case details from Salesforce and sync to Simplesat for their case, customer and agent, so they need the connection and Pro.

Which Salesforce option do I choose when I publish a survey?

Under External email embed, Choose where to add your survey offers Salesforce Cases, Salesforce Chat, Salesforce Classic (Opportunities) and Salesforce Marketing Cloud. For a Lightning email template, choose Salesforce Cases.

You send the survey from

Choose

A Lightning email template sent from a case

Salesforce Cases

The end of an Enhanced Chat conversation

Salesforce Cases

A Classic email template sent from an opportunity

Salesforce Classic (Opportunities)

A Marketing Cloud email

Salesforce Marketing Cloud

Legacy Chat, which Salesforce retired

Salesforce Chat

A flow, with the Flow package

Direct email delivery → Event-based

Code from Generic Embed has no Salesforce merge fields, and its responses don't reach the case integrations.

How often do the Salesforce integrations run?

  • Sync data to custom feedback object, Update case custom fields with feedback, Update contact custom fields, Display feedback in an internal case comment and Create follow-up case after receiving feedback run five minutes after a response arrives, and again each time it changes.

  • Create contact from Simplesat feedback and Pull case details from Salesforce and sync to Simplesat run as soon as a response arrives or changes. For an Enhanced Chat response, the pull waits about 4.5 minutes.

  • Sync contacts and Sync contacts from report run once a day, at the time of day you switched them on.

Most runs finish within a minute of starting.

Can you re-run the integration to push existing responses into Salesforce?

Switching an integration on, or saving a Field mapping change, applies to responses that arrive from then on, so it doesn't send the ones you already have. If a run failed, for example because of a mapping or a permission, support can rerun it once you've fixed the cause, as long as the run is from the last 30 days. Send us the responses' links. A rerun of Display feedback in an internal case comment adds another comment, and a rerun of Create follow-up case after receiving feedback opens another case.

Can I see an error log for the Salesforce integrations?

Not in Simplesat. Support can read each integration's runs from the last 30 days, so send us the response's link. Integration error messages and what they mean covers the messages Simplesat does show.

Which fields does the Simplesat Feedback object need?

It needs Response ID (Response_ID__c), marked External ID, because the integration finds each record by it. Every other field the Field mapping sends has to exist in Simplesat_Feedback__c under its field name, such as Survey_Name__c. Set the row of any field you don't create to Ignore.

Can feedback be linked to a Salesforce contact without a case?

Yes. Sync data to custom feedback object fills its Contact lookup with the customer's ID, which links the record when that ID is a Salesforce contact ID. You get a contact ID from Sync contacts, from Pull case details from Salesforce and sync to Simplesat, or from {{{Recipient.Id}}} on an email to a contact. Without a case, the Case lookup fails the whole record. Set its row to Ignore or make it a text field, keeping in mind that one Field mapping covers every survey the integration runs for. Update contact custom fields also writes to the contact with the customer's email, with or without a case.

Can Simplesat pull a field from the Salesforce account or contact onto the response?

Yes. Send us the name of the field you want from the case, its account or its contact, and we'll add it to Pull case details from Salesforce and sync to Simplesat. By default, the pull brings in:

  • From the case: its subject, priority and type

  • From the case's owner: name, email and user ID

  • From the case's contact: name, email and contact ID

  • From the account: its name

Can I write the response date to a Salesforce field?

Yes. In the Field mapping of Sync data to custom feedback object, Update case custom fields with feedback or Update contact custom fields, set the field's row to Use data from response and pick Created. That's the date and time the response was created. The field has to exist in Salesforce.

If a customer changes their rating, does Salesforce get the new one?

Yes. Five minutes after the change, the Simplesat Feedback record and your mapped case and contact fields are updated. Pull case details from Salesforce and sync to Simplesat runs again as soon as the rating changes. Display feedback in an internal case comment adds another comment, and Create follow-up case after receiving feedback opens another case.

Can I use the Salesforce case number as the ticket ID?

Not with the case integrations. They find the case by its ID, which is {{{Case.Id}}} in a Lightning template, and a case number isn't a case ID. To open the case from a response, set the survey's Ticket URL, as described above under Pull case details from Salesforce and sync to Simplesat.

Can Simplesat send the survey when a case is closed?

Yes, in any of these ways:

  • Set an email template that has the Salesforce Cases code as the Case Close Email Template in Support Settings, and check Send Notification Email to Contact when the case closes.

  • Build a flow that sends that email template when a case closes.

  • Build a flow that calls the Simplesat Send Survey Email action from the Flow package when a case closes, and Simplesat sends the email.

Can I send a survey when an opportunity closes?

Yes, with a flow that runs when the opportunity closes. The flow can send a Classic email template with the Salesforce Classic (Opportunities) code, or call the Simplesat Send Survey Email action with the customer's email. If you use the template, or pass the opportunity's ID as Ticket ID in the action, the ticket is the opportunity. That means the case integrations don't apply.

Can we survey customers at the end of a Salesforce Enhanced Chat?

Yes. A Salesforce messaging component shows the survey in the chat window when the conversation ends. You need Messaging for In-App and Web and a chat window at least 600px tall. Switch on Pull case details from Salesforce and sync to Simplesat to bring in the case, the customer and the agent.

Can we connect a Salesforce sandbox, or more than one Salesforce org?

Yes to both. You can connect a sandbox or a production org on the Salesforce page, one org at a time. For a second org, such as a sandbox next to production, use a second workspace, or contact us to add a second Salesforce connection to your workspace. Our team sets that connection up and manages it, because it doesn't show on the Salesforce page. To move from a sandbox to production, revoke access, authenticate to production, and rebuild your Salesforce setup there.

Can we connect Salesforce with an integration user or an API-only user?

The integrations act as the Salesforce user who connects, with that user's permissions. That user needs the API Enabled permission and access to the objects each integration reads or writes. Limiting the user to those objects limits what Simplesat can reach.

Authenticate has you sign in on Salesforce's sign-in page, so connect as a user who can sign in there. Salesforce pairs its API-only integration users, who have the Salesforce Integration user license and the Minimum Access – API Only Integrations profile, with a server-to-server sign-in where nobody signs in. This connection doesn't use that sign-in.

Which IP addresses do the Salesforce integrations use?

They use the addresses listed in IP addresses and domains. If your Salesforce org accepts calls only from listed IP addresses, add all of them.

Do we need to install a Simplesat package in Salesforce?

Not for the integrations on the Salesforce page. Authenticate has you sign in to Salesforce and allow Simplesat's connected app. The Flow package is only for flows.

Since September 2025, Salesforce blocks most users from allowing a connected app that isn't installed in the org. The user who connects can still allow Simplesat's with the Approve Uninstalled Connected Apps permission, or Use Any API Client if your org has API Access Control on. Without either, a Salesforce admin has to give them one, or install Simplesat's connected app in your org first. Admins install connected apps from Setup → Connected Apps OAuth Usage, which lists the connected apps in use in your org.

Did this answer your question?