Salesforce Integration User: License, Setup and Best Practices (2026)

In this article
- A Salesforce integration user is a dedicated user that only an external system logs in as, through the API. Salesforce recommends one integration user per integration, with only the access that integration needs.
- The Salesforce Integration user license is built for this. It comes with the Minimum Access - API Only Integrations profile (API-only, can’t be switched off) and the Salesforce API Integration permission set license, which unlocks the object and user permissions you then grant with permission sets.
- Enterprise, Unlimited, Performance and Developer editions get a limited number of these licenses by default; you buy more through your Salesforce account executive. Check how many you have under Company Information in Setup.
- Authenticate with an External Client App and a server-to-server OAuth flow such as client credentials with the integration user as run-as user. API logins don’t need multi-factor authentication (MFA), so lock the user down with login IP ranges, narrow scopes and monitoring instead.
Jump to
- What a Salesforce integration user is, and why it matters
- The Salesforce Integration user license, explained
- License options compared
- How the pieces fit together
- How to set up a Salesforce integration user, step by step
- Permission mapping: which integration gets what
- Authentication: External Client Apps, OAuth flows and MFA
- Monitoring integration users
- Pitfalls and how to fix them
- When the integration itself needs building
- Integration user checklist
- Where Gilzor fits
What a Salesforce integration user is, and why it matters
A Salesforce integration user is a user record that no person logs in as. An external system (an ERP, a marketing platform, a data warehouse, a phone system) authenticates as that user and calls the Salesforce API. Every record it reads or writes is checked against that user’s permissions and stamped with its name.
That makes the integration user your main control point. Salesforce Help puts the recommendation plainly: following the principle of least privilege, create and configure one Salesforce user for every integration. Its reasons:
- Scope. Each user sees only the subset of data and functions its integration needs.
- Traceability. Created By, Last Modified By, login history and API logs point to one system, not “Admin.”
- Blast radius. If one vendor is breached or one secret leaks, you shut off one user and one app, not all of them.
The common anti-pattern is the opposite: one admin’s login (or one shared “integration@” user with System Administrator) used by five tools. It works until that person leaves, a password expires, or a single compromised token exposes the whole org.
The Salesforce Integration user license, explained
Salesforce sells a user license made for this job, called Salesforce Integration. According to Salesforce Help, as of October 2026 it works like this:
- Editions: available in Enterprise, Unlimited, Performance and Developer editions.
- Included licenses: orgs in supported editions are granted a limited number of Salesforce Integration user licenses by default. For more, Salesforce says to contact your account executive about add-on licenses.
- API only: users with this license are not authorized to access Salesforce data or features through any user interface. They connect through the REST, SOAP or Bulk APIs.
- What it unlocks: the Minimum Access - API Only Integrations profile and the Salesforce API Integration permission set license.
To see what you have, open Setup, then Company Information. Salesforce Integration appears under User Licenses (total and used), and Salesforce API Integration under Permission Set Licenses.
The Minimum Access - API Only Integrations profile
This profile enables API access and restricts the user to API access. You can’t turn off those two settings, including on clones of the profile, but you can change its other permissions, settings and data access. Salesforce’s developer blog describes it as based on the Minimum Access - Salesforce profile, with only the bare minimum.
It replaced the older Salesforce API Only System Integrations profile in Spring ’24, after a known issue where the old one granted access to custom objects it shouldn’t have. New orgs only get the new profile. If your org is older and integration users still sit on the old profile, Salesforce recommends moving them.
One detail is easy to miss: Salesforce Help notes that users with this profile can also access objects that are accessible to all users. Review the profile in your own org before you assume it grants nothing.
The Salesforce API Integration permission set license
On its own, the profile gives the user almost nothing to work with. The Salesforce API Integration permission set license extends the Integration license with many of the user and object permissions available on the standard System Administrator profile.
The key word is available. The permission set license only makes permissions grantable; it doesn’t grant them. You still create a permission set tied to this license, switch on exactly the object, field and system permissions the integration needs, and assign it.
Some integrations need other permission set licenses too (for example for an industry cloud or a managed package), and Salesforce notes that not every one can be assigned to an Integration-licensed user.
Not every connector works with it. Salesforce’s admin blog warns that not all integrations work with this license, and you may not be able to assign a managed package’s permission set to an integration user. Docusign is one example: its documentation says its Salesforce integration user can’t use this license type and recommends a Salesforce Standard User license instead. Ask the vendor before you build around it, and test in a sandbox.
License options compared
The Integration license is the default choice, but not the only one. Here are the realistic options for the user an integration logs in as:
| Salesforce Integration license | Full user license with API Only User | Shared admin or personal login | |
|---|---|---|---|
| What it is | API-only license with the Minimum Access - API Only Integrations profile and the API Integration permission set license | A regular license (for example a Sales Cloud or Platform seat) on a custom profile with the API Only User permission | An existing person’s account, or one System Administrator user reused by several tools |
| UI access | None, and it can’t be switched on | None if API Only User is set; it is your setting to keep | Full |
| What it can access | What your permission sets grant, within the API Integration permission set license | What that license type allows, granted by profile and permission sets | Usually everything |
| Cost | A limited number included in Enterprise, Unlimited, Performance and Developer; add-on licenses through your account executive | Price of a full seat of that license type | No new license, paid for in risk |
| Best for | Most server-to-server integrations | Connectors that don’t support the Integration license, or need permissions it can’t hold | Nothing in production |
| Watch out for | Some managed package permission sets and permission set licenses can’t be assigned | Easy to over-grant; costs a full seat per integration | Breaks when the person leaves; no traceability; one leaked token exposes the org |
Salesforce doesn’t publish a public list price for add-on Integration licenses, so get a quote from your account executive. Compare it with what each extra integration would cost you as a full seat, and with the cost of an incident on a shared admin user.
How the pieces fit together
An integration user is never set up alone. The external system authenticates through an OAuth app, the token acts as the integration user, and the user’s license, profile and permission sets decide what each API call may touch.
How to set up a Salesforce integration user, step by step
Start in a sandbox: Salesforce’s own admin guidance recommends configuring the API-only profile there before production. The steps run from inventory to monitoring, because the user is only as safe as the access you can account for. Salesforce Help has the current clicks, since menu labels move between releases.
- List your integrationsEvery system that calls Salesforce today, which user it logs in as, and what it reads and writes. Shared admin logins and “integration@” users with System Administrator are the first to replace.
- Check your licensesSetup, Company Information: count available Salesforce Integration user licenses and Salesforce API Integration permission set licenses. If you have more integrations than licenses, decide which get one first, and ask your account executive about add-ons.
- Get the vendor’s requirementsAsk each vendor which objects, fields and permissions their connector needs, whether it supports the Integration license, which OAuth flow it uses, and its published IP ranges. Many document this in their setup guide.
- Clone the profile per integrationMake a copy of Minimum Access - API Only Integrations for each external application, check it carries no extra permissions, and set its Login IP Ranges to the vendor’s ranges. Salesforce’s admin blog recommends exactly this, so even a stolen token can’t be used from elsewhere.
- Create the userSetup, Users, New User. Pick the Salesforce Integration user license and your cloned profile. Name it after the system (“ERP Integration”), and use a team mailbox you control as the email, because the account still has to be verified. After verification, Salesforce shows that access is restricted for API-only users, which is what you want.
- Create a permission set for that integrationChoose Salesforce API Integration as its license, then grant only the object, field and system permissions from step 3. Assign it to the user. Use a permission set group if several integrations share a base and differ in a few permissions.
- Create the OAuth appCreate an External Client App with OAuth enabled, the narrowest scopes that work, and the flow the integration uses. For client credentials, enable the flow and set your integration user as the run-as user; Salesforce notes that Permitted Users policies don’t apply to this execution user, so its own permissions are the real limit. For flows such as JWT bearer, set Permitted Users to admin-approved and pre-authorize only the integration user’s profile or permission set. Store the secret in a secrets manager.
- Test with the minimumRun every real scenario: create, update, delete if allowed, bulk loads, error cases. When something fails with an access error, add that one permission, not a whole bundle. Expect a little trial and error.
- Deploy and re-checkMove the profile, permission sets and app to production, then compare the production profile against what you tested; Salesforce’s admin blog warns that permissions can sneak back in during deployment. Keep the old access model for a month or two before deleting it, in case you need to roll back.
- Switch on monitoringNote the user in your runbook with its owner, vendor contact and secret rotation date, and set up the checks in the monitoring section below.
Permission mapping: which integration gets what
Least privilege only works if you write the permissions down per integration. Use this as a starting template, then cut it to what your vendor documents. The rows are typical examples, not vendor requirements.
| Integration | Objects and access | System permissions | Leave out |
|---|---|---|---|
| ERP or accounting (orders, invoices) | Account read and edit; Order, Order Product create, read, edit; Product and Price Book read | API Enabled (from the profile) | Opportunity edit unless the ERP owns it; Lead; Case |
| Marketing automation | Lead and Contact create, read, edit; Campaign and Campaign Member create, read, edit | Usually none beyond API access | Opportunity amounts, financial fields, Case |
| Support desk or ticketing | Account and Contact read; Case create, read, edit on its own record type | None | Lead, Opportunity, Contract |
| Phone system or meeting tool | Task and Event create, read; Lead, Contact, Account read | None | Edit on Lead, Contact or Account |
| E-signature or document tool | Opportunity and Quote read; Files create | None | Delete anywhere |
| Data warehouse or BI (one-way out) | Read on the objects it extracts; field-level read only on fields it needs | View All on those objects only, if sharing would hide records | Any create, edit or delete; View All Data |
| Data migration or bulk loader (temporary) | Create and edit on target objects for the load window | Bulk API usage as needed | Keep it active after the migration |
Three permissions deserve a second look in any integration permission set: View All Data, Modify All Data and Customize Application. A vendor that asks for them usually means “we didn’t test with less.” Push back, test with object-level access, and grant the broad permission only if the connector truly fails without it.
Remember field-level security too: an integration that only needs an email and a status shouldn’t read salary or credit-limit fields.
Record access matters as much as object access. The integration user is still subject to sharing rules and organization-wide defaults. If an ERP must update every account, give it View All or Modify All on Account only, rather than a role at the top of the hierarchy or org-wide View All Data.
Built by Gilzor
Results we’ve shipped




Talk to the people who build it. Tell us about your project and get a free estimate of scope, timeline and cost.
Authentication: External Client Apps, OAuth flows and MFA
Salesforce Help says integrations on a REST-based API should authenticate through an external client app and an OAuth 2.0 flow. SOAP-based integrations, including Bulk API, use the SOAP login() call. Two 2026 changes shape that choice:
- New connected apps are restricted. According to Salesforce’s developer documentation, connected app creation is restricted as of Spring ’26. Existing connected apps keep working, but Salesforce recommends External Client Apps for new integrations, and re-enabling connected app creation requires a request to Salesforce Support.
- Legacy password logins are being phased out. Salesforce’s Spring ’26 architect guidance says External Client Apps support only modern OAuth flows (no username-password flow). It also says SOAP login() is disabled by default in new orgs, and the call in API versions 31.0 through 64.0 is no longer supported from Summer ’27. Plan any SOAP-login integration’s move to OAuth now.
Which flow fits the integration user depends on who runs the integration:
- How it works: the system posts the app’s client ID and secret to the token endpoint and gets a token that acts as the run-as user you set on the app. No refresh token; it simply asks again.
- Good fit: your own middleware or a server that always runs as the same integration user and can keep a secret safe.
- Lock it down: one app per integration, the integration user as the only run-as user, secret in a vault, rotation on a schedule.
- How it works: the system signs a short JWT with its private key; Salesforce checks it against the certificate uploaded to the app and issues a token for the named, pre-authorized user.
- Good fit: CI pipelines and services where you prefer a certificate to a shared secret.
- Lock it down: keep the private key in a vault, pre-authorize only the integration user, track certificate expiry.
- How it works: a SaaS vendor’s app (often a managed package or AppExchange (now AgentExchange) listing) sends you through an OAuth login and stores the token on its side.
- Good fit: off-the-shelf connectors. Check the vendor supports an API-only user; some require the connecting user to log in to the UI once.
- Lock it down: restrict the app to admin-approved users, set login IP ranges to the vendor’s published ranges, and review its refresh token policy.
MFA rules for API logins
Salesforce requires MFA for direct UI logins by internal users, but Salesforce Help says it doesn’t require MFA for integration login types via the API. You can add a second challenge with the Multi-Factor Authentication for API Logins permission, but most server-to-server flows can’t answer one, so it rarely fits a true integration user.
Two consequences. First, the API-only license is what keeps an integration user out of the MFA problem: it never logs in to the UI, so it never meets the UI MFA prompt. Second, because there is no second factor, your controls are the OAuth app, login IP ranges, short-lived tokens and monitoring.
Note also that the old Waive Multi-Factor Authentication for Exempt Users permission no longer exempts users automatically once MFA is enforced in your org; restoring that exemption for valid cases goes through Salesforce Customer Support.
Monitoring integration users
A dedicated user per integration makes monitoring easy, because every log line already says which system it was.
- Login History. In Setup, Login History shows up to 20,000 logins from the past six months, with download for more. Filter or build a list view on your integration users and watch for logins from unexpected IPs, failed attempts and sudden changes in volume.
- API Total Usage event logs. The API Total Usage event type records REST, SOAP and Bulk API requests with the user, the connected app and whether the call counted against your API limit. According to Salesforce, every org gets the past 24 hours of it at no extra cost; if you license Event Monitoring (on its own or as part of Shield), you get 30 days, extendable up to a year. It is the quickest way to see which integration is eating your daily API allocation; without Event Monitoring, download it daily if you want history.
- Setup Audit Trail. Watch for changes to integration profiles, permission sets and OAuth apps. A permission added “just to test” is how least privilege erodes.
- Data checks. Report on records created or modified by each integration user per day. A spike usually means a loop or a bad batch, not real growth.
Review every integration user at least twice a year: is the integration still in use, does its owner still work here, are its permissions still the minimum, and when was its secret last rotated. Deactivate users of retired tools; they are standing access nobody watches.
Pitfalls and how to fix them
| Problem | What happens | Fix |
|---|---|---|
| One user for every integration | Each tool gets the union of all permissions, and logs can’t tell them apart | One user, one permission set and one OAuth app per integration |
| Vendor asks for System Administrator | The connector works, and so would an attacker holding its token | Test with object-level permissions in a sandbox; most connectors work without admin rights |
| Permission set won’t assign | An error says the user lacks the required license | Create the permission set with the Salesforce API Integration license, or check whether the package supports Integration-licensed users |
| Integration still on a person’s login | It stops when they leave, reset a password or lose admin rights | Move it to a dedicated integration user and re-authorize the connector |
| Profile permissions creep in | Production ends up with access the sandbox never had | Compare the profile after every deployment; grant access only through permission sets |
| Old SOAP login() or password flow | The integration breaks when legacy logins are switched off | Move to an External Client App with client credentials or JWT bearer |
| No IP restriction | A leaked token works from anywhere | Set login IP ranges on the cloned profile to the vendor’s or your servers’ ranges |
| Sync loops | Two systems keep updating the same record back and forth | Skip changes made by the integration user in triggers, flows and change events |
The last row is a bonus of dedicated users: because each integration has its own user, flows and triggers can tell “changed by the ERP” from “changed by a person” and skip echo updates. The Salesforce integration patterns guide covers loop-safe designs in more depth.
When the integration itself needs building
Setting up the user is an afternoon. The integration behind it is the bigger job, and that is where most of the cost sits.
Building your own connection on the REST, Bulk or Pub/Sub APIs? Our Salesforce API integration guide walks through API choice, limits, error handling and the server-to-server setup. If several systems need to feed Salesforce, the Salesforce integration guide compares native connectors, iPaaS (integration platform as a service) tools and custom builds, and teams on MuleSoft can read the Salesforce MuleSoft integration guide.
Add-on Integration user licenses are a separate, usually small line on top of these figures: get the quote from your Salesforce account executive. The build ranges themselves, and what moves a project within them, are in our API integration cost guide.
Integration user checklist
Go through it once per integration user, not once for the whole org: a single shared admin login can hide behind an otherwise good score.
Salesforce integration user readiness
FAQ
What is a Salesforce integration user?
Is the Salesforce Integration user license free?
What is the Minimum Access - API Only Integrations profile?
Can a Salesforce integration user log in to the UI?
Do Salesforce integration users need MFA?
How many integration users should I have?
Where Gilzor fits
Cleaning up integration users often turns up integrations that need rebuilding, not just new credentials. Gilzor, a software development company with engineers in Poland and Cyprus and not a Salesforce reseller, can audit what connects to your org, move each system to a least-privilege integration user and External Client App, and build or rebuild the integrations behind them with support after launch. How that work is scoped is on our Salesforce integration services page.
No sales pitch
Get a straight answer for your project
Tell us what you’re building. We’ll reply with options, a rough cost and timeline. If we’re not the right fit, we’ll say so.

CTO of Gilzor. Responsible for architecture and the engineering standards our teams work by.
LinkedIn →Gilzor · Web Development partner
Need a team for your web product?
Services
Web DevelopmentCustom websites and web apps — front-end, back-end, launch and support.→By company type
Selected projects






The team behind them





