> For the complete documentation index, see [llms.txt](https://integrations.drivetrain.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://integrations.drivetrain.ai/integration-guide/readme/crm/integrating-with-salesforce.md).

# Integrating with Salesforce

You can connect your Salesforce account to Drivetrain in just a few steps. This guide is designed for Salesforce admins, including those new to Drivetrain. In most cases, no provisioning or setup support is required—you can complete the setup on your own.

### Prerequisites

To connect Salesforce to Drivetrain, you need:

* An **active Salesforce Enterprise level** **plan** or higher
* **Admin-level access** in both **Salesforce** and **Drivetrain**, or equivalent permission sets that allow **API usage** and **data visibility**

Drivetrain requires read access to the following **Salesforce objects at minimum**:

* **Opportunity**
* **Opportunity History**
* **Opportunity Field History**
* **Users**
* **Account**
* **Lead**

Additional objects may be required depending on your reporting needs.

{% hint style="warning" %}
Salesforce API limits are shared across all integrations connected to your org (commonly 15,000–145,000 calls/day depending on edition). If other tools are heavy API consumers, Drivetrain's sync can stall or fail with a message like *"Salesforce daily API request limit has been exhausted."* Review which integrations are consuming the bulk of your daily quota, and increase your org's daily API call limit from the Salesforce side if needed.
{% endhint %}

#### Check and Enable API Permissions in Salesforce

To ensure your Salesforce integration with Drivetrain works correctly, confirm that **API access is enabled** and that the **relevant standard objects** are **readable** by the integration user.

{% hint style="info" %}
**Access to REST API services** is automatically included when **API Enabled** is checked. There is no separate checkbox for it.
{% endhint %}

#### Verify API Access

Check whether the profile assigned to your integration user has API access enabled:

1. In Salesforce, click the **Settings** icon in the top right and select **Setup**
2. In the **Quick Find** box, search for and select **Profiles**
3. Click the **read-only profile** assigned to your integration user
4. Scroll to the **Administrative Permissions** section
5. Look for **API Enabled** and ensure that it's **selected**
6. If it's not selected, click **Edit** at the top of the page, check **API Enabled**, and click **Save**

<figure><img src="/files/HcmxdpNgSonVTvquUBgj" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
If **API Enabled** is unchecked, the user will not be able to make **API calls**—including those required by Drivetrain.
{% endhint %}

#### Grant Read Access to Required Standard Objects

Drivetrain requires read access to several standard objects in Salesforce. To configure this:

1. In the same **profile** (or **permission set**, if applicable), scroll to **Standard** **Object Settings**
2. For each of the following objects, click the name, then click **Edit**, and ensure **Read** access is enabled:
   * **Opportunities**
   * **Accounts**
   * **Leads**
3. To grant access to the **User** object:
   * Scroll to the **Administrative Permissions** section in the same profile
   * Enable **View All Users**

{% hint style="info" %}
You may not see **Opportunity History** or **Opportunity Field History** listed as separate objects. These are tracked via **Field History Tracking**, which must be enabled under: **Setup > Object Manager > Opportunity > Fields & Relationships > Set History Tracking**
{% endhint %}

{% hint style="warning" %}
Ensure the **Salesforce user** you plan to use for integration has this **profile or permission set assigned**.
{% endhint %}

#### Grant Field-Level Read Access (Field-Level Security)

Object-level **Read** access alone is not always enough—if fields are hidden by field-level security, those columns sync **blank** even though the object connects. For each object above:

1. Open the **profile** (or **permission set**) and go to **Field-Level Security** for the object (**Object Settings > \[Object] > Field Permissions**)
2. Ensure **Read Access** is enabled for the fields you need synced

#### Grant Record Visibility (so records aren't empty)

A newly created, dedicated integration user **owns no records**, so with default private sharing settings its objects can sync as **empty tables**. Give the integration user visibility into the records:

* In the profile's **Administrative Permissions**, enable **View All Data** (recommended for a read-only integration user), **or**
* Adjust **org-wide sharing defaults / role hierarchy** so the integration user can see the records you want synced

{% hint style="warning" %}
If tables sync but come in **blank** (for example, only the **User** table has data), this record-visibility setting is almost always the cause.
{% endhint %}

#### Grant the "Run Reports" Permission (for Reports-based sync)

If you plan to sync **Salesforce Reports** (see Step 3), the integration user needs to be able to run and see those reports:

1. In the profile's **System Permissions**, enable **Run Reports**
2. Ensure the **specific reports** you want to sync are **shared with the integration user** (via the report folder's sharing settings)

{% hint style="warning" %}
Without **Run Reports** and report-folder access, report syncs fail with a permission error even when object access is configured correctly.
{% endhint %}

### Step 1: Start a New Connection in Drivetrain

1. Go to the **Data page** in Drivetrain
2. Click **+** in the top-left corner to **connect a data source**
3. Select **Salesforce** from the list of integrations
4. Click **Login to connect →**

<figure><img src="/files/6jsh6fWkcFwYvvhBjAfS" alt=""><figcaption></figcaption></figure>

### Step 2: Log In to Salesforce

A new pop-up window will open.

1. Log in using your **Salesforce admin credentials**
2. If prompted, complete **Multi-Factor Authentication (MFA)**

<figure><img src="/files/I1uDTDahJWL745Pq2GVn" alt=""><figcaption></figcaption></figure>

#### Allow Installation of the Drivetrain Application

1. The system admin has to connect the Drivetrain app and install the app.
2. Once the system admin or any other user attempts to connect via the linking flow from Drivetrain, the system can admin can do this by:
   1. Going to **Setup > Apps > Connected Apps > Connected Apps OAuth Usage**
   2. Select **Install** against the Drivetrain app
3. Then any user from the organisation can connect via this app and create the salesforce connector on Drivetrain.

Alternatively,

1. The system admin has to give access to user profile to connect to uninstalled app.
2. Go to **Setup > Administration > Users > Profile** and check the **Approve Uninstalled Connected Apps** box

{% hint style="info" %}
This is only available for **standard user license**.<br>
{% endhint %}

### Step 3: Choose What to Sync

Once connected, you’ll be **redirected back to Drivetrain.** You can bring in data using either **Salesforce Reports** or **Salesforce Objects**, depending on your needs.

<figure><img src="/files/qQ0KnPzcYdUOr8t5KcpI" alt=""><figcaption></figcaption></figure>

### Salesforce Reports

**Salesforce Reports** are user-defined views of your data based on filters, groupings, and custom logic. This is the best option when you’ve already created reports in Salesforce and want to reuse those filtered datasets directly in Drivetrain.

#### **To sync a report**

1. In Salesforce, **open the report** you want to sync
2. Copy the **report URL**
3. In Drivetrain, **paste the URL** in the **Reports section**
4. Click **Add**

<figure><img src="/files/n9pGKNCVehNZAaBvySgr" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Salesforce limits report syncs to **2,000 rows**. If your report exceeds this limit, only the first 2,000 records will be synced.
{% endhint %}

{% hint style="info" %}
**Salesforce doesn't expose formula fields to the Reports API.** If a synced report comes back empty for formula columns, pull the underlying value from the source **Object** instead (e.g. the Opportunity or Account object), or recreate the report without the formula columns.
{% endhint %}

#### **Overcoming the 2,000 Row Limit**

To bring in **larger datasets:**

* Use **Salesforce Objects** instead of Reports
* Or, break your report into **multiple smaller reports** using filters (e.g., by region or time period)

**If a report stays capped at 2,000 rows even with a unique ID column selected**, compare it against a report that syncs fully:

1. **Filter count**—Salesforce caps a report at \~20 filters, and Drivetrain adds one more for syncing. Too many filters can block pagination.
2. **Row Limit or cross filters**—a standard date filter, Row Limit, or cross filter can also block API pagination.
3. **Report format**—confirm it's **Tabular**, not **Summary** or **Matrix**.
4. **Unique ID column**—confirm a real Contact/Lead/Opportunity ID column is present and filled on every row.

### Salesforce Objects

**Salesforce Objects** provide raw, unfiltered access to your data tables—such as Opportunities, Accounts, Leads, and custom objects.

{% hint style="info" %}
Use this method when you need to sync full datasets or handle more than 2,000 rows.
{% endhint %}

#### **To sync objects**

1. In the **import window in Drivetrain**, search and **select the tables** you want to **import**
2. Click **Add**
3. The **selected objects** will appear in your **Salesforce table** list once syncing is complete

<figure><img src="/files/uP1fD7exrRN2uciV3ERh" alt=""><figcaption></figcaption></figure>

### Troubleshooting

If you’re **unable to connect**:

* Confirm you're using a **Salesforce user** with **API access**
* **Complete MFA**, if it's enabled for your account
* Confirm you’re on the **Salesforce Enterprise (or higher) plan**
* Try an **incognito window** to rule out browser extensions or cookies

<details>

<summary>Why does Salesforce limit report exports to 2,000 records?</summary>

Salesforce limits report exports to 2,000 records to ensure system performance and stability, as reports are designed for quick insights rather than large-scale data extraction. To work around this limitation, we recommend pulling data directly from Salesforce objects, which allow access to complete datasets without restrictions. For detailed information on these limitations, please refer to Salesforce’s official [documentation](https://help.salesforce.com/s/articleView?id=analytics.rd_reports_dashboards_limits.htm\&type=5).

</details>

**If tables sync but come in blank (e.g., only the User table has data):**

* The integration user's profile is missing **Read** access on those objects, or **field-level Read** on their fields—see *Grant Read Access* and *Grant Field-Level Read Access* above
* Or the integration user lacks **record visibility**—enable **View All Data** or adjust sharing settings (see *Grant Record Visibility*)

**If a report fails with a permission error:**

* Enable the **Run Reports** system permission and share the report folder with the integration user (see *Grant the "Run Reports" Permission*)

**If you see `403 API_DISABLED_FOR_ORG`:**

* API access is not enabled for the org or the profile. Enable **API Enabled** on the profile (and confirm your Salesforce edition includes API access), then re-authenticate.

{% hint style="info" %}
Enterprise, Unlimited, and Developer editions have the API enabled by default. Professional edition customers can purchase this feature.
{% endhint %}

**If sync fails to start with a message about the daily API request limit being exhausted:**

* Your org's shared API quota (e.g. 15,000/day, higher on some editions) has been used up, often by another connected integration. Ask your Salesforce admin to review which integrations are consuming the bulk of the quota and, if needed, raise the org's daily API call limit from the Salesforce side. Drivetrain's sync will resume automatically once quota is available.

**If you see `Drivetrain could not authenticate with your Salesforce account. The password may have been changed or the authorization has been revoked.`:**

* Credentials were changed or authorization was revoked on the Salesforce side. Re-authenticate:
  1. Go to the **Data page** in Drivetrain
  2. Click the **three dots** next to the Salesforce connector
  3. Select **Edit credentials**
  4. Log in again using a valid **Admin-level access** Salesforce account

**Still stuck?** Check the profile again: **Setup > Administration Setup > Manage Users > Profiles**, select the profile, and under **Administrative Permissions** verify **API Enabled** and **View Setup and Configuration** are checked. If you’re still unable to connect after completing the steps above, reach out to your Drivetrain onboarding partner. Include a screenshot or brief description of the error message.

### Need to Grant Temporary Access?

In rare cases—such as data inconsistencies or bug investigations—your Drivetrain team may request temporary access to your Salesforce account.

View: [Grant temporary access to Salesforce](/integration-guide/readme/crm/integrating-with-salesforce/grant-temporary-access-to-salesforce.md)

This is not required for setup or general connection issues.


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://integrations.drivetrain.ai/integration-guide/readme/crm/integrating-with-salesforce.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
