HubSpot Salesforce Permission Errors
Permission errors are the most common sync failure across every HubSpot-Salesforce integration. Here's exactly what's blocking your sync, why it happens, and how to resolve it.
Permission errors appear in nearly every HubSpot-Salesforce integration we audit. They're the most common sync failure type, and they're also the most frequently misdiagnosed — because Salesforce returns permission errors in ways that look like field errors, validation errors, or generic failures rather than access issues.
The core problem is always the same: HubSpot is ready to sync. Salesforce denied the request because the integration user doesn't have the access needed to complete the action. The fix is always in Salesforce's permission configuration, not in HubSpot's settings.
This guide covers every permission error type, how to identify which one you're dealing with, and exactly what to change in Salesforce to resolve it.
What a permission error means
When HubSpot attempts to create or update a record in Salesforce, it does so through a dedicated integration user — a Salesforce user account whose credentials the connector uses to authenticate every sync operation. If that integration user lacks the required access to perform the action HubSpot is requesting, Salesforce blocks the sync and returns an error.
The blocked actions can include: creating a record, editing a record, updating a specific mapped field, viewing a record, viewing a parent or related record, assigning an owner, writing to a restricted picklist, or creating associated objects like activities or opportunity contact roles.
The integration user's permission configuration in Salesforce determines what HubSpot can and cannot do. If the configuration is incomplete, every gap becomes a category of sync failures.
The 13 types of permission errors
1. Field-level security denied
The most common permission error. The integration user's profile or permission set doesn't grant read or write access to a specific field. HubSpot tries to sync a value to that field and Salesforce blocks it.
Common error messages: "INVALID_FIELD_FOR_INSERT_UPDATE", "INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY", "You cannot update this field."
This error appears for every field added to your Salesforce org after the integration was initially configured, unless someone explicitly updated the integration user's field-level security to include the new field. In most orgs, this never happens automatically, which means every new field is a potential future sync failure.
2. Object permission missing
The integration user's profile doesn't include Create, Read, Edit, or Delete access to the entire object HubSpot is trying to write to. This blocks every sync attempt on that object regardless of which specific field or record is involved.
Common objects where this appears: Opportunity, Account, Lead, Task, and custom objects added after the integration was set up.
3. Record-level access or visibility issues
Salesforce's sharing model determines which records a user can see and edit. If your Salesforce org uses a private sharing model — where records are only visible to the owner and those above them in the role hierarchy, the integration user may be blocked from editing records it can't see.
Causes: private org-wide defaults, a restricted role hierarchy that doesn't include the integration user, sharing rules that weren't set up to include the integration user, or a record owned by someone outside the integration user's visibility.
4. Missing access to parent record
HubSpot is trying to create or update a child record — a Contact associated to an Account, a Task associated to an Opportunity, but the integration user can't view or edit the parent record. Salesforce blocks the child record update because the parent is inaccessible.
5. Owner assignment permission errors
HubSpot tries to assign a record to a specific owner, but the integration user can't complete the assignment. Common causes: the target owner is inactive, the owner is a user the integration user can't "see" in the role hierarchy, or the assignment target is a queue the integration user doesn't have access to.
6. API access disabled or restricted
The integration user's profile doesn't have API access enabled. Without this, no sync operation can complete — the entire connector fails at authentication. Also applies when "Modify All Data" or "View All Data" permissions are required for specific operations but not granted.
7. Permission set not assigned to integration user
The integration user is missing a permission set that grants access to custom objects, managed package fields (CPQ, Conga, Gainsight, Pardot), or HubSpot's own Salesforce package fields. These are typically separate from the base profile and need to be explicitly assigned.
8. Validation rules requiring UI-only fields
A validation rule requires the integration user to populate a field it doesn't have access to. The validation rule fires when HubSpot updates a related field, demands a value in the inaccessible field, and blocks the entire record update. The error surfaces as a permission error rather than a validation error because the integration user can't even read the required field.
9. Owner-based sharing violations
The integration user tries to update a record owned by another user and Salesforce's sharing model prevents it. This is distinct from record-level visibility, the integration user can see the record but the sharing rules don't grant write access because of the owner's position in the org structure.
10. Record type access missing
The integration user's profile doesn't include access to the specific record type on the record HubSpot is trying to create or update. If HubSpot creates a Lead with a record type the integration user can't access, Salesforce blocks it.
11. Missing CRUD access via profile
The integration user's base profile lacks specific Create, Read, Update, or Delete permissions on standard objects. Examples: the integration user can read Contacts but can't create them, or can view Opportunities but can't edit them. CRUD permissions are set at the profile level and need to cover every object HubSpot touches.
12. Managed package dependencies
Packages like CPQ, Pardot, Gainsight, FinancialForce, and Conga add their own required fields, restricted objects, and locked record types. The integration user needs explicit permission to interact with these package components, and those permissions are often not included in a standard integration user setup.
13. Permission conflicts from Flows or Apex
Salesforce Flows configured to run in "User Context" — as opposed to "System Context" — execute with the permissions of the current user, which in an integration scenario is the integration user. If the Flow requires access to fields or objects the integration user can't reach, it fails and the error surfaces in HubSpot as a permission or sync error.
How to diagnose permission errors
Step 1: Read the exact error message. Go to HubSpot → Settings → Integrations → Salesforce → Sync Errors. Common messages: "Salesforce rejected the update", "Field not accessible", "Insufficient access rights", "INVALID_FIELD_FOR_INSERT_UPDATE", "INSUFFICIENT_ACCESS_OR_READONLY", "Cannot update record owner." The message will usually identify the record type, the field name, and the operation that was blocked.
Step 2: Identify the specific field, object, and operation that failed. From the error details, note: which Salesforce object the error occurred on, which field was involved if specified, and what operation HubSpot was attempting — create, update, owner assignment, association.
Step 3: Log in as the integration user and attempt the same action. In Salesforce, go to Setup → Users → find the integration user → Log In as User. Navigate to the same record type and attempt the same action HubSpot was trying to perform. If you can't update the field, view the record, or complete the operation while logged in as the integration user, you've confirmed the permission gap. This is the fastest and most reliable diagnostic step.
Step 4: Check all four permission layers. Salesforce permissions are enforced at multiple levels simultaneously — all of them need to be correct. Check: object permissions (Create, Read, Edit, Delete on the relevant object), field-level security (Visible and Editable for every mapped field), sharing rules (Read/Write access to relevant records), and record type access (available record types for the integration user).
Step 5: Check profile-level settings. Confirm the integration user's profile has: API Enabled, full CRUD access for all standard objects HubSpot touches, and appropriate system permissions. API Enabled is required for the connector to function at all — if it's missing, nothing syncs.
Step 6: Check owner and visibility rules. Verify the integration user can see the record's current owner in the role hierarchy, assign records to that owner, and edit records owned by users in other teams or roles.
Step 7: Check validation rules that reference inaccessible fields. Look for validation rules on the affected object that require fields the integration user can't write to. These create permission errors that look like validation failures but trace back to FLS restrictions.
Step 8: Check Flows and Apex for user context execution. Identify any Flows or Apex Triggers configured to run in User Context rather than System Context on the affected object. These inherit the integration user's permission restrictions and fail when those restrictions are hit.
How to fix permission errors
Assign a full-permission profile to the integration user. The integration user should have at minimum: API Enabled, full CRUD access for all standard objects HubSpot syncs to (Lead, Contact, Account, Opportunity, Task, Event), full CRUD for all custom objects in the sync, and View All Data. Modify All Data is optional but recommended for orgs with private sharing models.
Do not use a standard Salesforce user profile for the integration user. Create a dedicated Integration User profile or use Salesforce's System Administrator profile with appropriate restrictions. A profile built for a human user will always have gaps for integration purposes.
Add the correct permission sets. Beyond the base profile, assign permission sets that cover: custom fields added after the initial setup, HubSpot's Salesforce package fields, managed package objects and fields (CPQ, Pardot, Gainsight, FinancialForce, Conga), and any custom objects the integration needs to write to.
Fix field-level security for every mapped field. Go to Setup → Profiles → Integration User Profile → Field-Level Security. For every field that appears in your HubSpot-Salesforce field mappings, confirm it's set to both Visible and Editable. This needs to be checked every time a new field is added to the sync, it doesn't update automatically.
A faster approach: go to each field in Object Manager → Field Accessibility, and check the integration user's access there directly.
Add sharing rules to grant read/write access. If your org uses a private sharing model, create sharing rules that give the integration user read/write access to all records it needs to sync — Accounts, Contacts, Leads, Opportunities, and any custom objects. Without explicit sharing rules, a private org blocks the integration user from editing records owned by other users.
Fix validation rules to add integration user bypass conditions. For validation rules that block API writes, add a bypass condition that exempts the integration user:
$User.Username != 'integration@yourorg.com'
or
$Profile.Name != 'Integration User'
This allows the validation rule to continue enforcing data quality for human users while letting the integration write without hitting the constraint.
Fix owner assignment issues. Reactivate any inactive user the integration needs to assign records to. Grant the integration user visibility of all owners it needs to assign — this may require adjusting the role hierarchy so the integration user has a role with visibility across the org. For queue assignments, grant the integration user membership in or visibility of the relevant queues.
Enable required object permissions explicitly. Confirm these specific permissions are enabled on the integration user's profile: Edit Tasks, Create Events, Edit Opportunities, Create Leads, Edit Contacts, and any equivalent permissions for custom objects. These are often missing from profiles built for limited-access users.
Grant record type access. Go to the integration user's profile → Record Type Settings. Ensure the integration user has access to every record type that HubSpot creates or updates. A missing record type assignment causes every sync attempt on that record type to fail.
Update managed package access. For CPQ, FinancialForce, Gainsight, and Pardot, assign the relevant permission sets or package licenses to the integration user. Check the package documentation for recommended integration user configuration — most enterprise packages have specific guidance for API user access.
Reconfigure Flows and Apex to run in System Context. For Flows that currently run in User Context and are failing due to the integration user's permission restrictions, change the execution context to System Context (also called "Run as System" in Flow settings). This removes the dependency on the integration user's specific permissions for Flow execution. Apply the same logic to Apex Triggers where user-context execution is causing failures.
Common pitfalls
Integration user created with too few permissions from the start. The most common root cause. Integration users are often set up quickly with a minimal profile, and permission gaps accumulate over time as new fields, objects, and automations are added. A permission audit of the integration user is the single highest-leverage diagnostic step for any org with recurring sync errors.
Admins add new fields without updating FLS. Every new field added to Salesforce after the integration is configured needs to have its field-level security updated to include the integration user. This never happens automatically. In most orgs it rarely happens deliberately either, which is why field-level security gaps are the most common individual permission error.
Validation rules written for UI users block API updates. Rules built for human data entry don't account for the integration user. A rule that requires a field value "when Stage = Closed Lost" will block every HubSpot sync that updates Stage to Closed Lost unless the rule has an explicit API or integration user bypass.
Private sharing model blocks edits without obvious indication. In a private org, the integration user can only edit what it can see. Records owned by users outside the integration user's role hierarchy become invisible, HubSpot receives an access denied error with no indication that sharing rules are the cause.
Managed packages introduce hidden permission dependencies. CPQ, Pardot, and similar packages add trigger logic and field requirements that don't appear in standard Salesforce permission audits. Permission errors from managed packages often look like generic sync failures because the error originates in the package's logic rather than in standard Salesforce enforcement.
Because these errors are typically uncommon, opaque, and dependent on deep Salesforce logic, they require more investigation than the standard sync error types.
This is also the category that will continually grow over time as new edge cases appear across different clients and org configurations.




