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

# Salesforce

How to connect Salesforce as an attribute source, including the permissions needed, setup steps, and the values to enter in Userlane.

Connecting Salesforce lets Userlane pull employee information from your Salesforce org automatically. Once the connection is in place, Salesforce appears as an attribute source and user data syncs daily without anyone maintaining it.

{% hint style="warning" %}
**Prerequisites.** You need a Salesforce administrator to create the Connected App, and an account with **API Enabled** and **View All Users** permissions to authorize the connection. On the Userlane side, you need an **Admin**, **Portfolio Owner**, or **Deployment Manager** role. Before starting, ask your Userlane contact for the callback address for Salesforce.
{% endhint %}

## What Userlane reads from Salesforce

Userlane matches Salesforce against its standard set of attributes, the same set used for every source. See [Connect an attribute source](/administration/attributes/connect-an-attribute-source.md) for the full list and how matching works.

In practice this means:

* Custom fields and anything outside that standard set are dropped rather than stored.
* Standard attributes that Salesforce does not hold or leaves empty stay blank in Userlane.
* Only people who already exist in Userlane receive attributes. A Salesforce user who has never opened Userlane is skipped, not created.

Userlane never writes to Salesforce or changes anything in it.

{% hint style="info" %}
**Set expectations on coverage.** Salesforce usually holds records for commercial staff rather than the whole organization. It is a good source for sales teams and invisible to everyone without a Salesforce license. Connecting a human resources (HR) system or identity provider alongside it gives broader coverage.
{% endhint %}

## Who you need

**To create the application:** a Salesforce administrator. Creating a Connected App[^1] is an administrator task.

**To authorize the connection:** an account with **API Enabled** and **View All Users**.

You do not need to give anyone administrator rights for the authorization step. Salesforce lets an administrator grant both permissions through a permission set[^2] assigned to an ordinary account, which is usually a much easier conversation than asking for administrator access.

**Why View All Users matters.** Salesforce runs application programming interface (API) requests with the permissions of the account that authorized them. Without **View All Users**, Salesforce returns only the user records that account can already see, so Userlane receives a partial list. Nothing reports an error. The connection looks healthy in both systems and simply covers fewer people than expected.

## Create the application in Salesforce

{% stepper %}
{% step %}

#### Open Setup in Salesforce

In Salesforce, open **Setup**.
{% endstep %}

{% step %}

#### Create a Connected App

Create a new **Connected App**, or an **External Client App** if that is what your version offers. Newer Salesforce releases use the second name for the same thing. Give it a name you will recognize later, for example "Userlane attribute sync."
{% endstep %}

{% step %}

#### Enable OAuth and add the callback address

Enable OAuth settings and add the callback address your Userlane contact gave you.
{% endstep %}

{% step %}

#### Select the required OAuth scopes

Select the OAuth scopes needed to read user records.
{% endstep %}

{% step %}

#### Save and wait

Save. Salesforce may take a few minutes before the application is usable.
{% endstep %}
{% endstepper %}

## Find the values Userlane asks for

<table><thead><tr><th width="197.8916015625">Userlane asks for</th><th>In Salesforce this is</th></tr></thead><tbody><tr><td><strong>Client ID</strong></td><td><strong>Consumer Key</strong>, on the application you created</td></tr><tr><td><strong>Client secret</strong></td><td><strong>Consumer Secret</strong>, on the same screen (you may need to reveal it)</td></tr><tr><td><strong>Instance URL</strong></td><td>Your Salesforce domain, for example <code>yourcompany.my.salesforce.com</code></td></tr></tbody></table>

Treat the Consumer Secret like a password. Send it through whatever secure channel your organization normally uses, not email or chat. Where possible, have the person who created the app enter the values into Userlane themselves.

## Connect in Userlane

{% stepper %}
{% step %}

#### Open Attribute sources

In the portal, go to **Attribute sources** under company settings.
{% endstep %}

{% step %}

#### Select Salesforce and enter the values

Select **Salesforce**, then enter the Consumer Key, Consumer Secret, and instance URL.
{% endstep %}

{% step %}

#### Authorize with the right account

Sign in to Salesforce when prompted, **using the account that holds API Enabled and View All Users**. This is the step that decides how many people Userlane can see.
{% endstep %}
{% endstepper %}

Once connected, Salesforce appears under connected sources. The first update usually arrives within about fifteen minutes, and Userlane then refreshes overnight once a day. For troubleshooting, see [Connect an attribute source](/administration/attributes/connect-an-attribute-source.md).

## Using a sandbox

If you want to test before connecting your production org, you can use a Salesforce sandbox. The steps are the same and the login URL differs.

## Relevant articles

{% content-ref url="/pages/5RV9H7dUyIbkTHBrF8Av" %}
[Connect an attribute source](/administration/attributes/connect-an-attribute-source.md)
{% endcontent-ref %}

{% content-ref url="/pages/heUmxS6HxlGKqCQSjqbs" %}
[Attribute sources](/administration/attributes/attribute-sources.md)
{% endcontent-ref %}

{% content-ref url="/pages/Nlq8AtCgmbXQstjU6XiP" %}
[Jira](/administration/attributes/connect-an-attribute-source/jira.md)
{% endcontent-ref %}

{% content-ref url="/pages/ekEvKo622H3LyNoeLH8g" %}
[Google Workspace](/administration/attributes/connect-an-attribute-source/google-workspace.md)
{% endcontent-ref %}

## FAQ

<details>

<summary>Do I need a Salesforce administrator to authorize the connection?</summary>

No. The authorization step needs **API Enabled** and **View All Users**, both of which can be granted to a normal account through a permission set. An administrator creates the Connected App and assigns the permissions, but a non-administrator can authorize.

</details>

<details>

<summary>Why is Userlane only seeing some of my Salesforce users?</summary>

The account that authorized the connection probably does not have **View All Users**. Without it, Salesforce returns only the records that account can see. Ask a Salesforce administrator to grant the permission, then reconnect.

</details>

<details>

<summary>Does Userlane write anything back to Salesforce?</summary>

No. The connection is read-only. Userlane never creates, updates, or deletes anything in Salesforce.

</details>

[^1]: A Connected App is the record in Salesforce that registers Userlane as an external application allowed to request access to your org.

[^2]: A permission set is a bundle of Salesforce permissions that an administrator can assign to individual accounts without changing their profile.


---

# 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.userlane.com/administration/attributes/connect-an-attribute-source/salesforce.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.
