Salesforce Skill
Manage Salesforce CRM records via CLI or REST API, including querying, creating, updating, deleting contacts, accounts, opportunities, leads, and cases.
Manage Salesforce CRM records via CLI or REST API, including querying, creating, updating, deleting contacts, accounts, opportunities, leads, and cases.
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Main skill definition with frontmatter, CLI reference, SOQL patterns
--- name: salesforce description: Manage Salesforce CRM - query records, create/update contacts, accounts, opportunities, leads, and cases. Use when the user asks about CRM data, sales pipeline, customer records, or Salesforce operations. metadata: {"moltbot":{"emoji":"☁️","requires":{"bins":["sf"],"env":["SALESFORCE_ACCESS_TOKEN"]},"primaryEnv":"SALESFORCE_ACCESS_TOKEN","install":[{"id":"npm","kind":"node","package":"@salesforce/cli","bins":["sf"],"label":"Install Salesforce CLI (npm)"},{"id":"brew","kind":"brew","formula":"salesforce-cli","bins":["sf"],"label":"Install Salesforce CLI (brew)"}]}} homepage: https://developer.salesforce.com/tools/salesforcecli ---
Interact with Salesforce CRM using the official Salesforce CLI (
sf) and REST API.
sf) installed via npm or Homebrewsf org login web (OAuth browser flow - recommended for interactive)sf org login jwt (JWT for headless/automated)SALESFORCE_ACCESS_TOKEN environment variable (direct token)# Login to org (opens browser) sf org login web --alias myorgLogin with JWT (headless)
sf org login jwt --client-id <consumer-key> --jwt-key-file <path-to-key> --username <user> --alias myorg
List connected orgs
sf org list
Set default org
sf config set target-org myorg
Display org info
sf org display --target-org myorg
# Query contacts sf data query --query "SELECT Id, Name, Email, Phone FROM Contact LIMIT 10" --target-org myorgQuery with WHERE clause
sf data query --query "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Prospecting'" --target-org myorg
Query accounts by name
sf data query --query "SELECT Id, Name, Industry, Website FROM Account WHERE Name LIKE '%Acme%'" --target-org myorg
Export to CSV
sf data query --query "SELECT Id, Name, Email FROM Contact" --result-format csv > contacts.csv
Export to JSON
sf data query --query "SELECT Id, Name FROM Account" --result-format json
# Create a Contact sf data create record --sobject Contact --values "FirstName='John' LastName='Doe' Email='john.doe@example.com'" --target-org myorgCreate an Account
sf data create record --sobject Account --values "Name='Acme Corp' Industry='Technology' Website='https://acme.com'" --target-org myorg
Create an Opportunity
sf data create record --sobject Opportunity --values "Name='Big Deal' AccountId='001XXXXXXXXXXXXXXX' StageName='Prospecting' CloseDate='2025-06-30' Amount=50000" --target-org myorg
Create a Lead
sf data create record --sobject Lead --values "FirstName='Jane' LastName='Smith' Company='NewCo' Email='jane@newco.com' Status='Open - Not Contacted'" --target-org myorg
Create a Case
sf data create record --sobject Case --values "Subject='Support Request' Description='Customer needs help' Status='New' Priority='Medium'" --target-org myorg
# Update a Contact sf data update record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --values "Phone='555-1234' Title='VP Sales'" --target-org myorgUpdate an Opportunity stage
sf data update record --sobject Opportunity --record-id 006XXXXXXXXXXXXXXX --values "StageName='Negotiation/Review' Amount=75000" --target-org myorg
Update Account
sf data update record --sobject Account --record-id 001XXXXXXXXXXXXXXX --values "Description='Key strategic account'" --target-org myorg
# Delete a record sf data delete record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --target-org myorgBulk delete via query (careful!)
sf data delete bulk --sobject Lead --file leads-to-delete.csv --target-org myorg
# Bulk insert from CSV sf data import bulk --sobject Contact --file contacts.csv --target-org myorgBulk update from CSV
sf data upsert bulk --sobject Account --file accounts.csv --external-id Id --target-org myorg
Check bulk job status
sf data bulk status --job-id <job-id> --target-org myorg
# Describe an object (get fields) sf sobject describe --sobject Account --target-org myorgList all objects
sf sobject list --target-org myorg
Get field details
sf sobject describe --sobject Opportunity --target-org myorg | jq '.fields[] | {name, type, label}'
SELECT StageName, COUNT(Id) NumDeals, SUM(Amount) TotalValue FROM Opportunity WHERE IsClosed = false GROUP BY StageName
SELECT Id, Subject, WhoId, WhatId, ActivityDate FROM Task WHERE OwnerId = '<user-id>' AND ActivityDate >= LAST_N_DAYS:7 ORDER BY ActivityDate DESC
SELECT Account.Name, Id, Name, Email, Title FROM Contact WHERE Account.Name = 'Acme Corp'
SELECT Id, CaseNumber, Subject, Status, Priority, CreatedDate FROM Case WHERE IsClosed = false ORDER BY Priority, CreatedDate
SELECT Status, COUNT(Id) Total FROM Lead WHERE IsConverted = false GROUP BY Status
For operations not covered by CLI, use curl with the REST API:
# Set variables INSTANCE_URL="https://yourorg.salesforce.com" ACCESS_TOKEN="$SALESFORCE_ACCESS_TOKEN"Query via REST
curl -s "$INSTANCE_URL/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Account+LIMIT+5"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"Create record via REST
curl -s "$INSTANCE_URL/services/data/v59.0/sobjects/Contact"
-H "Authorization: Bearer $ACCESS_TOKEN"
-H "Content-Type: application/json"
-d '{"FirstName":"Test","LastName":"User","Email":"test@example.com"}'
sf org login web--alias when logging in, then use --target-org alias--json flag for programmatic parsing--dry-run flag on bulk operations to previewFirstName), not labels (e.g., "First Name")YYYY-MM-DD for dates, YYYY-MM-DDThh:mm:ssZ for datetimesNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.