Connect Salesforce to Rig
Sync your Salesforce accounts, contacts, leads, opportunities, cases and users into Rig, so your AI tools can answer pipeline and revenue questions against live CRM data. Salesforce connects server-to-server using the OAuth 2.0 Client Credentials flow, so it keeps working without per-user logins or staff turnover breaking it.
Before you start
- You need Salesforce admin access to create the app.
- Ideally use a dedicated integration user, preferably one with the API Only User permission, with read access to the objects you want Rig to see. The integration runs as that user, so its permissions are exactly what Rig can read.
- By the end you'll have three values to paste into Rig: an Instance URL, a Consumer Key and a Consumer Secret.
Step 1: Create an app with the Client Credentials flow
Connected Apps vs External Client Apps
Salesforce restricted creating new Connected Apps in Spring '26. New orgs create an External Client App instead. The end result is identical: a Consumer Key and Secret you paste into Rig. Use whichever path your org offers.
External Client App (recommended)
- In Salesforce, go to
Setup, typeExternalin Quick Find, and openExternal Client App Manager. ClickNew External Client App. - Enter a name (e.g. "Rig"), an API name, and a contact email.
- Under
API (Enable OAuth Settings), selectEnable OAuth. - Callback URL: the Client Credentials flow never uses a redirect, but the field is required. Enter any valid HTTPS URL, e.g.
https://login.salesforce.com/services/oauth2/callback. - For OAuth Scopes, add
Manage user data via APIs (api). - Under Flow Enablement, enable the
Client Credentials Flowand accept the security warning. - Click
Create. - Back in
External Client App Manager, open the app's actions menu and chooseEdit Policies. Under Client Credentials Flow, set Run As to your integration user, then Save. The field wants the user's Salesforce username, not their email — they often differ. If you get "Enter a valid execution user", copy the exact value from the Username column inSetup→Users. - From the app's actions menu choose
Edit Settings, openOAuth Settings, and copy the Consumer Key and Consumer Secret.
Connected App (legacy / existing apps)
Setup→App Manager→New Connected App.- Enable OAuth settings, add the
Manage user data via APIs (api)scope, tickEnable Client Credentials Flow, and save. - On the app, click
Manage→Edit Policies, and under Client Credentials Flow set theRun Asuser. - Back on the app, open
Manage Consumer Detailsand copy the Consumer Key and Consumer Secret.
Step 2: Grant the integration user object access
The integration runs as the Run As user, so Rig can only read the objects and fields that user is allowed to see. This step is easy to miss and is the most common reason a connection authenticates but returns nothing.
⚠️ Integration users start with no object access
A user on a Salesforce Integration license (and most minimal profiles) has no access to standard objects by default. If the Run As user can't read an object, Rig shows "Object not accessible to the integration user" and Salesforce returns sObject type 'Account' is not supported (INVALID_TYPE). The fix is always to grant that object via a permission set below.
- In
Setup, typePermission Setsin Quick Find and open it. ClickNewto create one (e.g. "Rig Read Access"). The License dropdown matters and can't be changed after creation:- Run As user on a regular Salesforce license → leave it at
--None--. - Run As user on the free Salesforce Integration license (the usual choice for a dedicated integration user) → pick
Salesforce API Integration. Careful: the dropdown also contains Salesforce Integration — a different entry, one word apart. Only the one with API in the middle unlocks CRM objects.
- Run As user on a regular Salesforce license → leave it at
- If the integration user's profile doesn't already include API access (minimal profiles like
Minimum Access - Salesforcedon't), openSystem Permissionsin the permission set, clickEdit, and tick API Enabled. Without it, every call fails withAPI_CURRENTLY_DISABLED("API is disabled for this User") before object permissions are even checked. - Go to
Object Settings(or type the object name into theFind Settings...box at the top of the permission set), and for each object you want to sync — Account, Contact, Lead, Opportunity, Case, User — clickEditand enableRead(andView Allif you want every record, not just the user's own). Access is granted per object: any object you skip keeps failing withINVALID_TYPEeven while the others work. Two traps here: if Accounts, Contacts etc. don't appear in the list at all, the permission set was created with the wrong license — Salesforce hides objects the license can't grant; recreate it with the right one (previous step). And grant the plain standard objects, not similarly-named custom ones — an API name ending in__c(e.g. "Account Products" /Account_Product__c) is a custom object, not the Accounts Rig reads. - While you're in each object's settings, make sure the fields you care about have
Read Access— field-level security can hide individual columns even when the object is granted. A missing field fails the whole query withINVALID_FIELDand shows in Rig as "Field not accessible to the integration user" (on the User object,ProfileIdis a common culprit). - Go to
Manage Assignments→Add Assignment, tick your Run As integration user, keepNo expiration date, and clickAssign. The permission set does nothing until this step.
Permission changes take effect on the next token, so you can re-run Test in Rig immediately — no need to touch the app or rotate credentials.
Salesforce Integration license users: the two-part unlock
On the free Salesforce Integration license, CRM object access needs two things, and both must be in place before any grant takes effect: (1) the Salesforce API Integration permission set license assigned to the user (user's detail page → Permission Set License Assignments → Edit Assignments), and (2) the permission set itself created with License = Salesforce API Integration. A permission set on --None-- or the Salesforce Integration user license either refuses assignment ("user license doesn't match") or silently hides the CRM objects from Object Settings. Once both are right, grants apply on the next token — no app changes needed.
Step 3: Find your instance URL
In Setup, open My Domain and copy your My Domain URL, for example https://acme.my.salesforce.com. Sandboxes look like https://acme--sandbox.sandbox.my.salesforce.com.
Step 4: Connect it in Rig
- In Rig, open
Connectionsin the left sidebar and go to theSourcesstep. - Search for Salesforce (it's under CRM, marked
OAuth) and click its card. - Instance URL: paste your My Domain URL.
- Connected App Consumer Key: paste the Consumer Key.
- Connected App Consumer Secret: paste the Consumer Secret.
- Click
Continue, thenTestto pull a small sample, thenSyncto run the full pipeline.
What Rig pulls in
Salesforce lands in its own salesforce schema, with the standard fields for each object:
- Accounts, Contacts and Leads
- Opportunities: stage, amount, close date, forecast category
- Cases
- Users
Good to know
- Rig reads only what the Run As user can see. Give that user least-privilege, read-only access to the objects you want to sync.
- Anyone with the Consumer Key and Secret can mint access tokens. Rotate the secret periodically, and immediately if it leaks.
- Make sure you copy the production My Domain URL (or the matching sandbox URL) for the org whose data you want.
- You can disconnect Salesforce at any time from
Connections→Sources.