> For the complete documentation index, see [llms.txt](https://docs.getint.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.getint.io/guides/integration-synchronization/non-jira-connectors/salesforce-servicenow-integration.md).

# Salesforce ServiceNow integration

## Integrating Salesforce and ServiceNow <a href="#integrating-salesforce-and-servicenow" id="integrating-salesforce-and-servicenow"></a>

Connecting Salesforce with ServiceNow links customer records with IT service management records, keeping sales, support, and service desk teams aligned. Cases raised by customers reach the right incident queue without manual re-entry, and the resolution work carried out by service teams flows back to the people who own the customer relationship. Follow this guide to set up bidirectional synchronization between your Salesforce org and your ServiceNow instance.

### Salesforce ServiceNow Licensing Model <a href="#salesforce-servicenow-licensing-model" id="salesforce-servicenow-licensing-model"></a>

The Getint licensing model for Salesforce and ServiceNow covers different integration needs. Here is an overview:

#### Standard Licensing <a href="#standard-licensing" id="standard-licensing"></a>

* For non-Jira connectors, we offer a simple license tied to a fixed fee depending on the apps you are syncing.
* This license covers the integration between 1 instance A (Salesforce) and 1 instance B (ServiceNow).
* No hidden costs. You can sync an unlimited number of records and work items between these instances.

You can find more information about our pricing structure here: [Getint Pricing](https://www.getint.io/pricing).

#### Network License <a href="#network-license" id="network-license"></a>

* For managed services companies or organizations integrating three or more instances (whether the tools are the same or different), Getint offers a **Network License**. This custom license covers a specific number of connections (for example, up to 10 instances) and imposes no restrictions on the tools involved. You can also swap the integrated tools while the license remains active.

For more details on licensing, visit our [Licensing Page](https://docs.getint.io/licensing).

### Salesforce API Requirements <a href="#salesforce-api-requirements" id="salesforce-api-requirements"></a>

Salesforce requires API access for integration. API access is enabled by default in the following editions:

* Enterprise Edition
* Unlimited Edition
* Performance Edition
* Developer Edition

API access is **NOT enabled** by default in:

* Group Edition
* Essentials Edition
* Professional Edition

If you are using a Salesforce edition without API access enabled, contact Salesforce support or refer to the Salesforce Help & Training Community.

&#x20;

### Requirements to Build Your Integration <a href="#requirements-to-build-your-integration" id="requirements-to-build-your-integration"></a>

* **Deployment Options**: Getint provides two ways to host your integration, a managed [SaaS platform](https://app.live.getint.io/) or a self-hosted On-premise version. More information about Getint On-premise [here](https://docs.getint.io/getting-started-with-the-platform/deployment-options/on-premise-deployment).
* **Authentication**: Salesforce requires OAuth credentials (`client_id` and `client_secret`), and ServiceNow requires a dedicated user with the instance URL, username, and password. You can find the steps to generate credentials for both connectors here: [Connection Guide](https://docs.getint.io/guides/quickstart/connection#salesforce).
* **Service Accounts**: Comments are attributed to the user who created the connection on both platforms, so we recommend using dedicated **Service Accounts** on both sides to keep automated updates distinct from individual user activity.

***

### Setting Up Your Salesforce ServiceNow Integration <a href="#setting-up-your-salesforce-servicenow-integration" id="setting-up-your-salesforce-servicenow-integration"></a>

#### 1. Access the Getint App <a href="#id-1.-access-the-getint-app" id="id-1.-access-the-getint-app"></a>

* Log in at [app.live.getint.io](http://app.live.getint.io/). If you do not have an account, click **Sign up** to create one.
* Enter your details, select the apps you want to connect, and click **Create new workspace**.
* After you create the workspace, go to it to launch Getint.

#### 2. Create an Integration <a href="#id-2.-create-an-integration" id="id-2.-create-an-integration"></a>

* Go to **Workflows** (lightning bolt icon) and click **Create Integration**. From this menu, select **Continuous Sync** or **Data Migration**.

#### 3. Generate Salesforce Credentials <a href="#id-3.-generate-salesforce-credentials" id="id-3.-generate-salesforce-credentials"></a>

Salesforce uses OAuth authentication. You grant permissions to Getint through an External Client App, and the resulting credentials are stored in a dedicated Getint database for use by that user only.

* Sign in to Salesforce, click the **Cog** icon in the upper-right corner, and select **Setup**.
* Go to **Platform Tools** > **Apps** > **External Client Apps**, then open the **External Client App Manager**.
* Select **New External Client App** and enter a unique name, your email address, and the API name.
* Enable **OAuth**:
  * Scroll down and turn on OAuth.
  * Enter the Callback URL: `https://login.salesforce.com/services/oauth2/callback`.
  * Select the OAuth scope **Manage user data via APIs (API)**.
* In the **Flow Enablement** section, activate **Client Credentials Flow**, then turn off all other options in the **Security** section.
* Click **Create** at the bottom of the page. Once the app exists, go back into its settings to continue.
* Select **Edit**, open **OAuth Policies**, enable **Client Credentials Flow**, and enter the username shown under **Personal Information** in your profile. Click **Save**.
* Open the **Settings** tab, select **Consumer Key and Secret**, complete the verification screen, and copy the **Consumer Key** (`client_id`) and **Consumer Secret** (`client_secret`).

{% hint style="info" %}
Salesforce requires HTTPS for the Callback URL.
{% endhint %}

{% embed url="<https://www.loom.com/share/95ee027dd94b413f9046b1f1217cc55f>" %}

&#x20;

#### 4. Creating a ServiceNow User for Getint <a href="#id-4.-creating-a-servicenow-user-for-getint" id="id-4.-creating-a-servicenow-user-for-getint"></a>

Rather than using Admin credentials, the recommended approach is to create a dedicated ServiceNow user with specific, scoped permissions. Follow these steps:

* **Create the user**: In ServiceNow, go to **All** > **User Administration** > **Users**, click **New**, fill in the user details, and click **Submit**. Make sure to uncheck **Password needs reset**, or Getint will block the connection with a misleading permissions error. Then click **Set Password** to generate credentials.
* **Create a custom role**: Go to **System Security** > **Users and Groups** > **Roles**, click **New**, name your role (for example, `getint`), and click **Submit**.
* **Elevate to Security Admin**: Click your profile image, select **Elevate Role**, choose **security\_admin**, and click Update. This is required to modify ACL settings.
* **Create 6 ACL records**: Go to **System Security** > **Access Control (ACL)** and create the following permission records, adding your custom role to the **Requires Role** section of each:

| Record | Table                               | Field        | Operation |
| ------ | ----------------------------------- | ------------ | --------- |
| 1      | `Dictionary Entry (sys_dictionary)` | \*(Asterisk) | Read      |
| 2      | `Dictionary Entry (sys_dictionary)` | None         | Read      |
| 3      | `Field Class (sys_glide_object)`    | \*(Asterisk) | Read      |
| 4      | `Choice (sys_choice)`               | \*(Asterisk) | Read      |
| 5      | `Field Class (sys_glide_object)`    | None         | Read      |
| 6      | `Journal Entry (sys_journal_field)` | None         | Read      |

* **Assign roles to the user**: Go back to **User Administration** > **Users**, find your user, open the **Roles** tab, click **Edit**, and add both the itil permission and your custom role. Click **Save**, then **Update**.

The user is now ready to establish the ServiceNow connection.

{% hint style="info" %}
For full details and screenshots, see the complete guide: [Creating a ServiceNow User for Getint Integration](https://docs.getint.io/guides/integration-synchronization/jira-servicenow-integration/creating-a-servicenow-user-for-getint-integration).
{% endhint %}

#### 5. Connect to Salesforce <a href="#id-5.-connect-to-salesforce" id="id-5.-connect-to-salesforce"></a>

* In Getint, click **Connect App** and choose Salesforce. Enter your Salesforce instance URL in the **URL** field and click **Next**.
* Assign a name to the connection and enter the **client\_id** and **client\_secret** credentials.
* **Add** the connection and select it.

{% hint style="info" %}
Use the correct URL format to connect to your instance:

* `https://YOUR_INSTANCE_NAME.develop.lightning.force.com`
* `https://YOUR_INSTANCE_NAME.develop.my.salesforce.com`
  {% endhint %}

&#x20;

#### 6. Connect to ServiceNow <a href="#id-6.-connect-to-servicenow" id="id-6.-connect-to-servicenow"></a>

* Click **Connect App** and choose ServiceNow. Enter the URL of your ServiceNow instance and click **Next**.
* On the next screen, provide a name for the connection, along with the username and password of the ServiceNow account you created in step 4.
* Click **Add** to create the connection, and then select it.

{% hint style="warning" %}
You will get an **insufficient permissions** or **user cannot be authenticated** error if the ServiceNow user has not been created with the roles and ACL records listed above.
{% endhint %}

&#x20;

&#x20;

#### 7. Configure Type Mapping <a href="#id-7.-configure-type-mapping" id="id-7.-configure-type-mapping"></a>

* **Quick Build**: Automatically map fields and types between applications with this feature.
* **Manual Mapping**: Use this option for full control over the integration. Click **+ Add Type Mapping** to define how your types map between systems. This could include:
  * Salesforce *Case* to ServiceNow *Incident*.
  * Salesforce *Account* to ServiceNow *Task*.

#### 8. Field Mapping <a href="#id-8.-field-mapping" id="id-8.-field-mapping"></a>

* Review or manually map fields within mapped types. Common pairings include Salesforce **Subject** to ServiceNow **Short description**, Salesforce **Description** to ServiceNow **Description**, and **Priority** on both sides.
* Define the synchronization flow for each field, using the arrows in the middle and selecting **Apply**.
* Custom fields are supported on both connectors. Salesforce covers Date/Time, Email, Number, Phone, Picklist, and Text fields, while ServiceNow covers Date, Dropdown, Text, Reference, and URL fields.

{% hint style="warning" %}
**Inline images** are not supported for the **Description** field.
{% endhint %}

&#x20;

&#x20;

#### 9. Assignee Mapping <a href="#id-9.-assignee-mapping" id="id-9.-assignee-mapping"></a>

Use the **Assignee mapping** option to match Salesforce users with the ServiceNow **Assigned to** field. This step means that when a case or incident syncs between the two systems, it is assigned to the right person in each tool.

This mapping matters most when usernames or email formats differ between platforms. By defining these relationships once, you prevent mismatches and avoid manual reassignment later.

{% hint style="info" %}
For more details, visit our doc: [Assignees (users) mapping](https://docs.getint.io/getintio-platform/workflows/assignees-users-mapping).
{% endhint %}

#### 10. Status Mapping <a href="#id-10.-status-mapping" id="id-10.-status-mapping"></a>

Use the **Status** tab to align workflow states between Salesforce and ServiceNow. Each platform uses its own terminology for record progress, so mapping keeps updates consistent when items sync in either direction.

For example, you might map:

* **New** in Salesforce to **New** in ServiceNow
* **Working** in Salesforce to **In Progress** in ServiceNow
* **Escalated** in Salesforce to **On Hold** in ServiceNow
* **Closed** in Salesforce to **Closed** in ServiceNow

You can also configure the status direction to support unidirectional transitions instead of bidirectional updates.

&#x20;

#### 11. How to Manage Comments & Attachments: <a href="#id-11.-how-to-manage-comments-and-attachments" id="id-11.-how-to-manage-comments-and-attachments"></a>

Check the **Comments & Attachments** tab. These settings are active by default, but you can modify them to fit your specific requirements.

**Synchronization Directions**

The platform supports three distinct logic flows for these items:

* **Bidirectional**: Updates to comments or attachments in either Salesforce or ServiceNow reflect in the other platform.
* **Unidirectional to Salesforce**: Data flows exclusively from ServiceNow to Salesforce. Changes made in Salesforce do not sync back to ServiceNow.
* **Unidirectional to ServiceNow**: Data flows exclusively from Salesforce to ServiceNow. Changes made in ServiceNow do not sync back to Salesforce.

**Disabling Sync**

If your organization has strict data privacy policies, or if these items are not relevant to a specific integration, you can **disable** comments and attachments entirely. This prevents any data transfer for these items while keeping other mapped fields active.

Use the **Customize comments creation** setting to manage how comments are processed. You can set comments to Public or Private, or choose to skip them entirely.

To sync files between both systems, turn on the **Synchronize attachments** option. Once enabled, you can choose the sync direction for attachments, deciding whether they flow from ServiceNow to Salesforce, from Salesforce to ServiceNow, or both ways.

{% hint style="warning" %}
Comments created by Getint appear under the account used to build the connection on both platforms. The original author is shown in the comment footer. For a full overview of filtering logic, AND/OR conditions, and date-based filtering, refer to the [Comments Filtering documentation](https://docs.getint.io/getintio-platform/workflows/filtering-items-for-integration-in-getint/how-to-filter-comments).
{% endhint %}

&#x20;

&#x20;

#### 12. Advanced Tab <a href="#id-12.-advanced-tab" id="id-12.-advanced-tab"></a>

* Enable **Customize create/update actions** to manage item synchronization. This allows for specific rules, such as one-way creation for the left application combined with bidirectional updates.

&#x20;

#### 13. Filtering: <a href="#id-13.-filtering" id="id-13.-filtering"></a>

It is possible to filter the synchronization to customize it for your needs and requirements. Please see the doc [Items Filtering](https://docs.getint.io/getintio-platform/workflows/filtering-items-for-integration-in-getint) for more details.

**UI Filtering Option:**

* Click on the filtering icon near the app icon in your integration. This will apply to that side of the integration.
* Select whether the filtering applies to *All*, *New*, and *Synced* items.
* Note that if the option **New items** is selected, the filtering will apply only to the new items, and the already synced items will continue to sync and update. If the option **Synced items** is selected, only the already synced items will be updated based on that filter.
* Choose the options and add the value for the filter. It is possible to filter more than one option for each field.
* Select **Apply** after creating the filters and **Save** the integration.

{% hint style="warning" %}
The Salesforce `matches` operator evaluates values as regular expressions. If your filter value contains parentheses, escape them with a backslash, for example `\(FOP/TA\)`, or the filter fails to compile. The escaping applies to the filter only and does not affect the value copied to ServiceNow.
{% endhint %}

&#x20;

&#x20;

#### 14. Test the Integration <a href="#id-14.-test-the-integration" id="id-14.-test-the-integration"></a>

* Create test cases in Salesforce and test incidents in ServiceNow, then observe how they synchronize.
* Confirm that mapped fields, statuses, comments, and attachments are correctly synced in both directions.
* Monitor the integration status and the logs in Getint to verify that everything functions as expected.

Getint cannot integrate the history of changes in either Salesforce or ServiceNow. Only the current values of mapped fields are synchronized.

&#x20;

### Conclusion <a href="#conclusion" id="conclusion"></a>

Following this guide lets you set up the Salesforce-ServiceNow integration with Getint. This configuration synchronizes cases, incidents, comments, and status changes across your CRM and your service management platform, so customer-facing teams and service desk teams work from the same information.

For further assistance, please contact us at the [Support Center](https://getint.io/help-center) or [Schedule a Demo](https://calendly.com/d/cpws-jb2-8xx/demo-call-all-team).

<figure><img src="https://4106311246-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MR6Z9V8zLATPQPOGSDf%2Fuploads%2F9OSEDBl869gRue9mQAwv%2FGetint%20Yellow%20Banner.png?alt=media&amp;token=9cc42142-6e48-4931-8fd5-cbf7dcf4cdc1" alt=""><figcaption><p><a href="https://calendly.com/d/cpws-jb2-8xx/demo-call-all-team
">Start your integration journey. Schedule a free consultation with our Getint Integration Expert today!</a></p></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.getint.io/guides/integration-synchronization/non-jira-connectors/salesforce-servicenow-integration.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
