Salesforce
Execute a read-only SOQL query against Salesforce via the REST API
Salesforce is where your revenue data lives. Delphi connects via OAuth2, queries your org through SOQL and the REST API, and turns pipeline, accounts, and forecast data into answers your team can act on. Read-only by default, with every query audit-logged and scoped to the dashboards each user is permitted to see.
What you can ask Delphi
- “Which accounts have opportunities stalled in Negotiation for more than 30 days?”
- “Show me the top 20 closed-won deals this quarter with their owners and amounts”
- “Compare pipeline coverage for the EMEA region versus last quarter”
- “Which reps have the highest average deal size in the last 90 days?”
Use cases
Pipeline health monitoring
Delphi watches your Salesforce pipeline and surfaces stalled deals, coverage gaps, and forecast risks in natural language — no more hand-built dashboards.
Territory performance analysis
Ask Delphi to compare territories, rep performance, or product lines across any time window. It joins Salesforce data with the rest of your business context automatically.
Technical details
Authentication ▾
- api
- refresh_token
Ingestion ▾
Tools exposed (2) ▾
Execute a read-only SOQL query against Salesforce via the REST API. Returns CRM records: Opportunities, Accounts, Contacts, Leads, Forecasts, etc. Automatically handles OAuth2 authentication and pagination. Use for sales pipeline analysis, customer data, account health, and CRM reporting.
Create or update a recurring Salesforce data connector that polls for changed records using SystemModstamp filtering. Streams changed CRM records (Opportunities, Accounts, Contacts, etc.) into Kafka via OAuth2 client credentials auth. Use this to keep Delphi dashboards in sync with live Salesforce data.
Inputs ▾
enterprise/query_salesforce
| Name | Type | Required | Description |
|---|---|---|---|
| dashboardId | string | no | Target dashboard/initiative ID. Omit to use the current dashboard. |
| soqlQuery | string | yes | SOQL SELECT query to execute. Read-only: no UPDATE, DELETE, INSERT, UPSERT, or MERGE. Examples: "SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE StageName = 'Closed Won' AND CloseDate = THIS_QUARTER" "SELECT Id, Name, Industry, AnnualRevenue FROM Account WHERE AnnualRevenue > 1000000" "SELECT Id, Name, Email, AccountId FROM Contact LIMIT 200" |
| objectType | string | no | Primary Salesforce object being queried — helps the agent understand the data context. Examples: "Opportunity" for pipeline data, "Account" for customer data, "Contact" for people. Opportunity Account Contact Lead Forecast Campaign Task Event Custom |
| maxRecords | number | no | Max records to return across paginated results. Default: 200. |
upsert_bento_stream_salesforce
| Name | Type | Required | Description |
|---|---|---|---|
| dashboardId | string | no | Target dashboard/initiative ID. Omit to use the current dashboard. |
| soqlQuery | string | yes | SOQL SELECT query to poll for changed records. The pipeline will inject a SystemModstamp filter automatically — include all desired fields and any static WHERE clauses. Example: "SELECT Id, Name, Amount, StageName, CloseDate, OwnerId FROM Opportunity WHERE IsClosed = false" |
| objectType | string | no | Primary Salesforce object being polled. Opportunity Account Contact Lead Forecast Campaign Task Event Custom |
| pollingInterval | string | no | How often to poll Salesforce for changes. Default: "5m". Use ISO 8601 durations or Bento interval format: "1m", "5m", "15m", "1h". |
| connectorId | string | no | If provided, updates the existing connector instead of creating a new one. |
| description | string | no | Human-readable description of what this connector monitors. Shown to analysts in future sessions. |
| idExpression | string | no | Bloblang expression for the Firestore document ID. Default: "this.Id" (Salesforce record ID). Use "this.Id" to deduplicate records by Salesforce ID. |