> For the complete documentation index, see [llms.txt](https://docs.getmesa.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.getmesa.com/connect/salesforce.md).

# Salesforce

## Connection

When you're setting up your first workflow with Salesforce, you will need to create a [Connection](https://docs.getmesa.com/going-further/credentials) in order to connect MESA with Salesforce.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-2a07da9647fdcc8797bd13b8e1a74b036d10707b%2Fimage%20(568).png?alt=media" alt="Screenshot of the MESA Salesforce step Connection menu where you create a new Connection to link MESA with Salesforce. Spotlight the Connection setup area."><figcaption></figcaption></figure>

{% stepper %}
{% step %}
Log in to Salesforce, then click the Setup button (gear icon in the top right). If a menu is displayed, then click Setu&#x70;**.**

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-35c259760d9e512762e51aeeea7b8269917e7af0%2FScreenshot%202025-02-28%20at%204.28.22%E2%80%AFPM.png?alt=media" alt="Screenshot of Salesforce after logging in, click the Setup button in the top right. Spotlight the Setup gear icon in the top right."><figcaption></figcaption></figure>
{% endstep %}

{% step %}
In the left-hand menu, navigate to Apps and App Manager.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-c9ed6dce9b014f3300527687018ce0417e290557%2FScreenshot%202025-02-28%20at%204.39.33%E2%80%AFPM.png?alt=media" alt="Screenshot of the Salesforce Setup left-hand menu, navigate to Apps then App Manager. Spotlight the App Manager menu item."><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Then click on New External Client App.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-da76028a7d57f7bb07f89d68b31b93a3ba8e1366%2Fimage%20(676).png?alt=media" alt="Screenshot of the Salesforce App Manager page. Spotlight the New External Client App button."><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Enter MESA for the External Client App Name. The API Name field will then auto-populate.
{% endstep %}

{% step %}
Enter a valid email for Contact Emai&#x6C;**.**

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-95ba3d15a63867324cde05d57ac66a3d3e201f42%2Fimage%20(75).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Ensure Enable OAuth Settings is checked in the API (Enable OAuth Settings) menu.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-b4f8a615bddd64c3e9a7340d00131821daf769f9%2Fimage%20(79).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Then for Callback URL, enter: <https://app.getmesa.com/apps/mesa/oauth/redirect-token>

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-863699b0c0efe740ae89840105e66c1516715a2b%2Fimage%20(87).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Then select all items under Available OAuth Scopes and hit the right arrow under Add to move all of them to Selected OAuth Scopes.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-75e269b244efcabc429c9c8dd5e38aa87f07e6e5%2Fimage%20(125).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-70ed8cd65d8442a2aa734604d9227812ecc355c8%2Fimage%20(130).png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
At the very least, Manage user data via APIs (api) and Perform requests at any time (refresh\_token, offline\_access) must be added as Selected OAuth Scopes.
{% endhint %}
{% endstep %}

{% step %}
By default, 3 settings will be selected automatically. Ensure that only the Require Secret for Web Server Flow and Introspect All Tokens checkboxes are selected from the list.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-ecf357f03046f40d1cf42a1de2005b8ec8b9133c%2Fimage%20(131).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Then hit the Create button at the bottom.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-e47b55f1873b368e6e1c128e081d997a6ad70c98%2Fimage%20(146).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Once you are redirected back to view the app's details, click on Policies under your app's name.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-f8d40bfa2b275898c2acf3a8d185294ecf97d328%2Fimage%20(184).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Under OAuth Policies, ensure that your Refresh Token Validity Period is set to 30 days.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-8768717afdc3d97ff3c05bd13534fb3abf5d5072%2Fimage%20(167).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-478a8debaa5d1f8a2ffc10fca6a9a46397908012%2Fimage%20(178).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Once you have checked your app policy settings, click Settings under your app name.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-7df02e9c847be7c285da4ff952df77ce6f848117%2Fimage%20(185).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
In the OAuth Settings menu, click on the App Settings Consumer Key and Secret button. You may get prompted to sign in again so please do so.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-884a173da10c9cc611b7d902c32e280b3aaf8e16%2Fimage%20(237).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
For this next step, you are going to copy and paste these values from the Salesforce screen into your MESA workflow. In a new tab on your browser, open your [Salesforce Trigger or Action](https://docs.getmesa.com/workflow-builder) to proceed.
{% endstep %}

{% step %}
In Salesforce, click on the Consumer Key button and paste the copied value into the Client ID field of your MESA Salesforce step's Connection menu.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-83a1be501744aeb9d58f13de106d7fe42e87f11b%2Fimage%20(238).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Do the same for Salesforce's Consumer Secret and paste it into the "Client Secret" field of your MESA Salesforce step's Connection menu.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-9b0362b561b07022b31f547289e0095e525c83c4%2Fimage%20(277).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-a8216bb071a0c52fa6dc83a93ed7e1c75ee00d20%2Fimage%20(287).png?alt=media" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
For MESA's Authorization URL field, enter: [**https://login.salesforce.com/services/oauth2/authorize**](https://login.salesforce.com/services/oauth2/authorize)
{% endstep %}

{% step %}
For MESA's Token URL field, enter: [**https://login.salesforce.com/services/oauth2/token**](https://login.salesforce.com/services/oauth2/token)

{% hint style="info" %}
If you are connecting to a Salesforce sandbox, you will need to:\
\- Replace the **Authorization URL** with: <https://test.salesforce.com/services/oauth2/authorize>\
\- Replace the **Token URL** with: <https://test.salesforce.com/services/oauth2/token>
{% endhint %}
{% endstep %}

{% step %}
Click Sign in with Salesforce. You may be asked to login to your Salesforce account. Once logged on, you will get a prompt asking for access. Click Allow.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-4371652fccef999122182a26f5a7c957165e751c%2FConnect_Mesa_with_Salesforce_Automation_Guide_-_Step_1.png?alt=media" alt="Screenshot of the MESA Salesforce Connection menu, clicking Sign in with Salesforce and then Allow access. Spotlight the Sign in with Salesforce button."><figcaption></figcaption></figure>
{% endstep %}

{% step %}
You will be taken back to MESA, with a new Salesforce connection created.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-ede82a1384f5105d22f75a780cf3d7f162f5d11d%2Fimage%20(290).png?alt=media" alt=""><figcaption></figcaption></figure>

You have now finished setting up your Salesforce connection. Click the Retrieve Fields button to import your fields.
{% endstep %}
{% endstepper %}

Salesforce plans that support API access are: Enterprise, Unlimited, Developer and Performance.

## Configure <a href="#configuring" id="configuring"></a>

### Retrieve Fields <a href="#synchronizing-salesforce-fields" id="synchronizing-salesforce-fields"></a>

Click the Retrieve Fields button to pull in the current fields associated with your Salesforce action.

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-ede82a1384f5105d22f75a780cf3d7f162f5d11d%2Fimage%20(290).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3425906282-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1H6u1HQc3Iew7ATmmiCi%2Fuploads%2Fgit-blob-0a2becf6b7acb99850700da8bcf649f9c74223ed%2Fimage%20(320).png?alt=media" alt=""><figcaption></figcaption></figure>

If you’ve made updates to your fields in Salesforce you will want to click the Retrieve Fields button to pull in the latest changes.

## Technical Notes

### Why can't I set the amount on an opportunity? <a href="#opportunity-amount" id="opportunity-amount"></a>

* If an opportunity includes products, the amount on the opportunity will be the total of its related products. For more information, please refer to [this Salesforce article](https://help.salesforce.com/s/articleView?language=en_US\&id=000335960\&mode=1\&type=1).

### Connection error codes <a href="#opportunity-amount" id="opportunity-amount"></a>

* If you experience any issues or see this error *`error=invalid_client_id&error_description=client%20identifier%20invalid`* when creating a Salesforce connection, please make sure that your Salesforce Client ID and Secret were copied over correctly and that your Salesforce App has the correct Callback URL.
* If you experience any issues or see this error *`error=redirect_url_mismatch&error_description=redirect_url&20must%20match%20configuration`* when creating a Salesforce connection, please make sure you have added the Callback URL in the External Client app while creating it in Salesforce.
* If you experience any issues or see this error *`error=unknown_error_description=retry_your_request`* when creating a Salesforce connection via Sandbox, the External Client App's Permitted Users OAuth policy is likely set to "Admin approved users are pre-authorized", and as the connecting user, you aren't assigned to the app.
  * Salesforce refuses at the consent step and redirects back to MESA's callback with error=OAUTH\_APP\_ACCESS\_DENIED and no authorization code.
    * To fix this, you should go to Setup in the sandbox → External Client App Manager → your app → Policies → Edit → OAuth Policies:
      * set Permitted Users to "All users may self-authorize", or
      * keep pre-approval and assign your user Profile (Connected App Access) or a Permission Set (Assigned Connected App) to the app.

### Specify the API User in the External Client App

* To specify the API User in an External Client App, you will need to configure your Salesforce connected app accordingly by following this Salesforce thread: <https://salesforce.stackexchange.com/a/431770>
  * You will also need to ensure the app has the `refresh_token` and `offline_access` enabled

{% hint style="info" %}
View Salesforce templates and tutorials [here](https://www.getmesa.com/apps/salesforce/integrate)!
{% endhint %}
