Salesforce
What it indexes
The Salesforce connector creates one searchable document for each configured parent record. The document starts with that record’s queryable fields and can include direct child records as additional linked sections.
Record fields are converted to searchable key-value text. The parent Name, or its Id when no name exists, becomes the semantic identifier. Record and child links point to the authenticated Salesforce instance.
Prerequisites
- Create a dedicated Salesforce integration user that can log in through the API and read every parent object, field, and direct child relationship in scope.
- Allow REST describe/query access and Bulk API 2.0 query/export access.
- Obtain the integration user’s username, password, and security token.
- Decide whether the credential targets production or a Salesforce sandbox.
- For Advanced mode, confirm the exact case-sensitive API names of parent objects, fields, child object types, and relationships.
- If using Auto Sync Permissions, make sure search users’ OpenCore email addresses match an active Salesforce
UsernameorEmail, and allow queries toUserandUserRecordAccess.
Credentials
The current Admin credential does not accept a Salesforce OAuth client ID, client secret, refresh token, or instance URL. Do not substitute those values for the username-password-security-token fields.
Configure in OpenCore
- In the Admin panel, open Connectors, select Salesforce, and create the production or sandbox credential.
- Choose Simple or Advanced under Configuration Type.
- For Simple, enter zero or more singular Salesforce object API names. Leave the list empty only when
Accountis the intended parent type. - For Advanced, enter a JSON object whose top-level keys are parent object types. Use
fieldsfor parent fields andassociationsto map direct child object types to their fields. This is configuration JSON, not an arbitrary SOQL query. - Choose the document-access mode. Enable Auto Sync Permissions only after validating its query-time behavior with representative users and records.
- Set refresh and cleanup options, create the connector, and run the first indexing attempt.
The standard Admin flow creates a polling connector, and the runner selects poll_source before any load path. As a result, the first and later indexing attempts use delta polling; even an effective poll start at Unix epoch 0 does not invoke Salesforce’s separate full-load implementation. Without Indexing Start, the first effective poll start is epoch 0. With Indexing Start, that date restricts the first window after the shared scheduler applies its current 30-minute overlap. Treat the effective poll start, rather than a full-export assumption, as the historical coverage boundary.
Permissions
The ingestion credential determines which Salesforce records and fields OpenCore can retrieve. Without Auto Sync Permissions, Salesforce record access is not synchronized; search access is controlled only by the connector’s OpenCore Private groups or Public mode.
When Auto Sync Permissions is selected and the permission feature is available, OpenCore performs query-time censoring instead of storing a static record ACL. It resolves the searcher’s email first against an active Salesforce Username, then against Email, and queries UserRecordAccess.HasReadAccess for record IDs represented by each result’s source links. Content sections whose Salesforce record is not readable are removed; an unmapped user or a permission-check failure returns no Salesforce chunks from that check.
This behavior has additional current scope constraints. If any Salesforce connector for a tenant enables Auto Sync, all Salesforce result chunks for that tenant are sent through censoring, including chunks from another Salesforce connector that did not select Auto Sync. The permission client is cached per tenant from one associated connector credential and does not propagate the ingestion credential’s sandbox-domain setting. Each record-access query evaluates at most the first 200 record IDs; omitted IDs fail closed. Deployments with sandboxes, multiple Salesforce orgs, or multiple credentials must verify every combination explicitly.
Verify
- Validate the connector and confirm the global Salesforce describe request succeeds.
- Run the first sync and search for a configured parent record and one expected direct child value. If Indexing Start is set, also check one record inside the effective window and one well before the configured date and its 30-minute overlap; without it, check an older expected record.
- Confirm an unrequested parent type is absent. In Advanced mode, also confirm an omitted field and association are absent.
- Check a parent with more than ten direct children on both the first run and a later refresh. Expect no more than ten child rows from each direct relationship in either document version.
- Open parent and child citations using a Salesforce-authorized browser session.
- If using Auto Sync Permissions, test a mapped active user, a user without record read access, an email with no active Salesforce match, every Salesforce org/credential, and a connector that did not itself enable Auto Sync.