How to Compare Two Profiles in Salesforce
Compare two Salesforce profiles field by field: the native Setup route, the permission types worth diffing, and how to keep the result auditable.
Updated 2026-09-09
Two users, same job title, different outcomes: one can edit the record and the other cannot. Answering why means diffing two profiles across object permissions, field-level security, system permissions, and everything the profile inherits from permission sets.
Salesforce has no built-in side-by-side profile diff, which is why this is one of the most-searched admin questions and one of the most tedious to answer by hand.
The native route in Setup
This works, and it is exactly as slow as it sounds. On an org with a hundred objects, a full manual diff of two profiles is an afternoon.
- Setup → Users → Profiles, open profile A, and note object and field permissions.
- Repeat for profile B in a second browser tab.
- Check assigned permission sets for both users - a permission set can grant what the profile denies.
- Check the user records themselves for role, licence type, and Sharing settings that change effective access.
What to compare, in priority order
- Object permissions: Read, Create, Edit, Delete, View All, Modify All.
- Field-level security - the usual culprit when a field is invisible for one user only.
- System permissions such as View All Data, Modify All Data, and API Enabled.
- Tab visibility, app assignment, and record type access.
- Assigned permission sets and permission set groups, since profile alone no longer tells the whole story.
Do it in one screen with TurboKit
TurboKit's profile comparison shows two profiles side by side with the differences highlighted, so a diff that took an afternoon in Setup takes a couple of minutes.
The same panel reads field-level security for the current object, which is normally three clicks deep in Setup per field.
Keep the result auditable
- Export the diff before you change anything - it is your rollback reference.
- Change one permission at a time and re-test with Login As.
- Record the ticket or change request ID alongside the diff so the next admin knows why the permission moved.
Frequently asked questions
- Does Salesforce have a built-in profile comparison tool?
- Not a side-by-side diff. Setup shows one profile at a time, and permission set groups have a Muting view, but comparing two profiles across every object and field is a manual exercise without a third-party tool.
- Should I compare profiles or permission sets?
- Both. Salesforce's guidance is to keep profiles minimal and grant access through permission sets, so effective access is the union of the profile and every assigned permission set.
- Can I compare profiles across two orgs?
- Not directly in the UI. Retrieve both profiles as metadata and diff the XML, or compare them in each org and reconcile the two exports.
More from the Admin How-To
- How to Check Field-Level Security in Salesforce FastCheck field-level security in Salesforce without clicking through Setup: where FLS lives, how it interacts with profiles and permission sets, and faster ways to read it.
- How to Log In as Another User in SalesforceLog in as another Salesforce user to reproduce a permission issue - the Setup route, the permissions required, and how to switch orgs without losing your place.
- How to Retrieve Salesforce Metadata Without the CLIRetrieve Salesforce metadata - objects, fields, layouts, profiles - using the Metadata API, the CLI, or an in-browser viewer, and when each is worth the setup.
- Change Sets vs Metadata API Deployments: Which to UseChange sets and Metadata API / CLI deployments solve the same problem differently. Here is when each one is the right choice, and what a change set genuinely cannot do.
- How to Check Salesforce Org LimitsCheck Salesforce org limits - API calls, data storage, file storage, and daily email - from Setup, the limits API, and the browser, before you hit them.
- How to Create and Deploy a Salesforce Change SetStep by step: create an outbound change set, upload it, and deploy it as an inbound change set - plus the deployment connection you need between orgs before any of it works.
Related reading
- SOQL LibrarySOQL Query for Accounts Modified TodaySOQL for accounts changed today, including LastModifiedBy, audit-field filters, and how to spot integration-driven updates.
- SOQL LibrarySOQL Query for Campaigns Modified TodaySOQL for campaigns changed today, including LastModifiedBy, audit-field filters, and how to spot integration-driven updates.
- SOQL LibrarySOQL Query for Cases Modified TodaySOQL for cases changed today, including LastModifiedBy, audit-field filters, and how to spot integration-driven updates.
- SOQL LibrarySOQL Query for Contacts Modified TodaySOQL for contacts changed today, including LastModifiedBy, audit-field filters, and how to spot integration-driven updates.