Skip to main content
Salesforce

Salesforce

Discover Salesforce CRM data including accounts, contacts, opportunities, leads, and cases.

  • Entities: Accounts, Contacts, Opportunities, Leads, Cases
  • Relationships: Links CRM data across entities and to external systems
  • Discovery: Automated polling-based discovery via OAuth
  • MCP Support: Query Salesforce data via Model Context Protocol

Organizations and companies in your CRM.

Spec fields:

  • id: Account ID (18-character Salesforce ID)
  • name: Account name
  • type: Account type (Customer, Prospect, Partner, etc.)
  • industry: Industry vertical
  • annual_revenue: Annual revenue
  • website: Company website
  • billing_city: Billing city
  • billing_country: Billing country
  • created_date: Account creation date

Labels:

  • name: Account name
  • type: Account type
  • industry: Industry

People associated with accounts.

Spec fields:

  • id: Contact ID
  • first_name: First name
  • last_name: Last name
  • email: Email address
  • phone: Phone number
  • title: Job title
  • account_id: Associated account
  • created_date: Contact creation date

Labels:

  • name: Full name
  • email: Email address
  • title: Job title

Sales opportunities in your pipeline.

Spec fields:

  • id: Opportunity ID
  • name: Opportunity name
  • amount: Deal value
  • stage_name: Current stage
  • close_date: Expected close date
  • account_id: Associated account
  • probability: Win probability (0-100)
  • type: Opportunity type
  • created_date: Opportunity creation date

Labels:

  • name: Opportunity name
  • stage: Current stage
  • amount: Deal value

Unqualified sales prospects.

Spec fields:

  • id: Lead ID
  • first_name: First name
  • last_name: Last name
  • email: Email address
  • company: Company name
  • status: Lead status (Open, Contacted, Qualified, etc.)
  • lead_source: Lead source
  • industry: Industry
  • created_date: Lead creation date

Labels:

  • name: Full name
  • status: Lead status
  • company: Company name

Customer support cases.

Spec fields:

  • id: Case ID
  • case_number: Case number
  • subject: Case subject
  • status: Case status (New, Working, Escalated, Closed)
  • priority: Priority (Low, Medium, High, Critical)
  • origin: Case origin (Web, Email, Phone, Chat)
  • account_id: Associated account
  • contact_id: Associated contact
  • created_date: Case creation date

Labels:

  • status: Case status
  • priority: Priority
  • origin: Origin
SourceRelationTargetDescription
SalesforceContactWORKS_ATSalesforceAccountContact's account
SalesforceOpportunityFOR_ACCOUNTSalesforceAccountOpportunity's account
SalesforceCaseABOUT_ACCOUNTSalesforceAccountCase's account
SalesforceCaseFROM_CONTACTSalesforceContactCase requester
SourceRelationTargetDescription
SalesforceAccountLINKED_TOHubSpotCompanyCross-CRM sync
SalesforceAccountUSES_SERVICEK8sServiceCustomer product usage
SalesforceOpportunityAFFECTED_BYPagerDutyIncidentDeal impact
SalesforceCaseREPORTS_ERRORSentryErrorError tracking
SalesforceAccountLINKED_TOZendeskOrganizationSupport integration
discovery:
enabled: true
settings:
client_id: "YOUR_CONNECTED_APP_CLIENT_ID"
client_secret: "YOUR_CONNECTED_APP_CLIENT_SECRET"
username: "[email protected]"
password: "YOUR_PASSWORD"
security_token: "YOUR_SECURITY_TOKEN" # Optional for trusted IPs
instance_url: "https://login.salesforce.com" # Use test.salesforce.com for sandbox

# Optional settings
include_accounts: true
include_contacts: true
include_opportunities: true
include_leads: true
include_cases: true

max_accounts: 1000 # 0 = unlimited
max_contacts: 1000 # 0 = unlimited
mcp:
enabled: true
settings:
client_id: "YOUR_CONNECTED_APP_CLIENT_ID"
client_secret: "YOUR_CONNECTED_APP_CLIENT_SECRET"
username: "[email protected]"
password: "YOUR_PASSWORD"
security_token: "YOUR_SECURITY_TOKEN"
instance_url: "https://login.salesforce.com"
  1. Go to Setup → Apps → App Manager

  2. Click "New Connected App"

  3. Name it "SixDegree Integration"

  4. Enable OAuth Settings

  5. Set Callback URL to https://login.salesforce.com/services/oauth2/callback

  6. Selected OAuth Scopes:

    • Full access (full)
    • Perform requests on your behalf at any time (refresh_token, offline_access)
  7. Save and copy Consumer Key (Client ID) and Consumer Secret (Client Secret)

  8. Go to Settings → Reset My Security Token

  9. Check your email for the security token

  10. Append it to your password when authenticating (or omit if using trusted IP ranges)

The user account needs:

  • Read access to Accounts, Contacts, Opportunities, Leads, Cases
  • API Enabled permission
degree discovery run [email protected] --config salesforce-config.yaml

Query: "Show me the full journey from lead to customer with support history"

SalesforceLead → [converted] → SalesforceContact → WORKS_AT → SalesforceAccount ← FOR_ACCOUNT ← SalesforceOpportunity

ABOUT_ACCOUNT

SalesforceCase

Query: "What's the revenue impact of this production incident?"

PagerDutyIncident → SalesforceAccount (affected) → SalesforceOpportunity (at risk) → SUM(amount)

Query: "Which opportunities are in negotiation stage with no open support cases?" (healthy deals)

SalesforceOpportunity[stage_name="Negotiation"] → FOR_ACCOUNT → SalesforceAccount - (no SalesforceCase[status="Open"])

Query: "High-value accounts with increasing case volume" (churn risk)

SalesforceAccount[annual_revenue>1000000] ← ABOUT_ACCOUNT ← SalesforceCase (count increasing)

Query: "Which lead sources convert to closed-won opportunities?"

SalesforceLead[lead_source=X] → [converted] → SalesforceOpportunity[stage_name="Closed Won"]

Query: "Open opportunities with critical support cases"

SalesforceOpportunity[stage_name != "Closed Won"] → FOR_ACCOUNT → SalesforceAccount ← ABOUT_ACCOUNT ← SalesforceCase[priority="Critical", status="Open"]

Salesforce API rate limits (by edition):

  • Enterprise: 1,000 API calls per user per 24 hours
  • Unlimited: 5,000 API calls per user per 24 hours
  • Performance: 10,000 API calls per user per 24 hours

The molecule implements:

  • Efficient SOQL queries to minimize API calls
  • Automatic pagination handling
  • Bulk query optimization
MATCH (a:SalesforceAccount {type: "Customer"})
RETURN a
MATCH (o:SalesforceOpportunity)
RETURN o.stage_name, COUNT(o) AS count, SUM(toFloat(o.amount)) AS total_value
ORDER BY total_value DESC
MATCH (c:SalesforceContact)-[:WORKS_AT]->(a:SalesforceAccount)
MATCH (a)<-[:FOR_ACCOUNT]-(o:SalesforceOpportunity)
WHERE c.email = "[email protected]"
RETURN c, a, o
MATCH (o:SalesforceOpportunity)
WHERE toFloat(o.amount) > 100000 AND o.stage_name = "Negotiation"
MATCH (o)-[:FOR_ACCOUNT]->(a:SalesforceAccount)
MATCH (a)<-[:ABOUT_ACCOUNT]-(c:SalesforceCase {status: "Open"})
RETURN o, a, COUNT(c) AS open_cases
ORDER BY open_cases DESC

Match by domain:

MATCH (sf:SalesforceAccount)
MATCH (zd:ZendeskOrganization)
WHERE sf.website CONTAINS zd.domain
CREATE (sf)-[:LINKED_TO]->(zd)

Match by company name:

MATCH (sf:SalesforceAccount)
MATCH (hs:HubSpotCompany)
WHERE toLower(sf.name) = toLower(hs.name)
CREATE (sf)-[:SYNCS_WITH]->(hs)
  • Verify Connected App credentials are correct

  • Check username and password are valid

  • Ensure security token is appended to password (if required)

  • For sandbox, use test.salesforce.com as instance URL

  • Check include_* settings are enabled

  • Verify user has read permissions for object types

  • Ensure objects exist in your Salesforce org

  • Reduce discovery frequency

  • Use max_accounts and max_contacts limits

  • Consider incremental sync for large datasets

  • Upgrade Salesforce edition for higher API limits

  • Ensure custom fields are accessible

  • Check field-level security settings

  • Verify object permissions

┌──────────────────┐
│ Salesforce API │
│ (REST + SOAP) │
└────────┬─────────┘

│ HTTPS
│ OAuth 2.0

┌────────▼─────────┐
│ Salesforce │
│ Molecule │
│ - SOQL Queries │
│ - Bulk API │
│ - Relationships │
└────────┬─────────┘

│ gRPC

┌────────▼─────────┐
│ SixDegree │
│ Knowledge Graph │
└──────────────────┘
  1. Link to HubSpot: Sync CRM data across platforms
  2. Connect to Zendesk: Unified customer support view
  3. Integrate with PagerDuty: Revenue impact of incidents
  4. Link to K8s: Track customer product usage
  5. Add Custom Objects: Extend with Salesforce custom objects

If you have 100K+ records:

  • Set max_accounts and max_contacts to reasonable limits

  • Use SOQL filters to fetch only recent or active records

  • Run discovery during off-peak hours

  • Consider Salesforce Bulk API for very large datasets

  • Disable entity types you don't need

  • Use incremental sync for recurring discoveries

  • Optimize SOQL queries with indexes

  • hubspot: Alternative/complementary CRM

  • zendesk: Support ticket tracking

  • kubernetes: Product usage tracking

  • pagerduty: Incident impact on deals

  • sentry: Error tracking linked to cases

  • Salesforce REST API

  • SOQL and SOSL Reference

  • Connected Apps

  • SixDegree Molecule SDK