Salesforce Skill
Query and manage Salesforce CRM data via the Salesforce CLI (`sf`). Run SOQL/SOSL queries, inspect object schemas, create/update/delete records, bulk import/export, execute Apex, deploy metadata, and
Query and manage Salesforce CRM data via the Salesforce CLI (`sf`). Run SOQL/SOSL queries, inspect object schemas, create/update/delete records, bulk import/export, execute Apex, deploy metadata, and
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Use the Salesforce CLI (
sf) to interact with Salesforce orgs. The CLI must be authenticated before use. Always add --json for structured output.
If the
sf binary is not available, install it via npm (npm install -g @salesforce/cli) or download it from https://developer.salesforce.com/tools/salesforcecli. After installing, authenticate immediately with sf org login web to connect to a Salesforce org.
sf org login web --alias my-org
Other login methods:
# JWT-based login (CI/automation) sf org login jwt --client-id <consumer-key> --jwt-key-file server.key --username user@example.com --alias my-orgLogin with an existing access token
sf org login access-token --instance-url https://mycompany.my.salesforce.com
Login via SFDX auth URL (from a file)
sf org login sfdx-url --sfdx-url-file authUrl.txt --alias my-org
# List all authenticated orgs sf org list --jsonDisplay info about the default org (access token, instance URL, username)
sf org display --json
Display info about a specific org
sf org display --target-org my-org --json
Display with SFDX auth URL (sensitive - contains refresh token)
sf org display --target-org my-org --verbose --json
Open org in browser
sf org open sf org open --target-org my-org
Log out
sf org logout --target-org my-org
# Set default target org sf config set target-org my-orgList all config variables
sf config list
Get a specific config value
sf config get target-org
Set an alias
sf alias set prod=user@example.com
List aliases
sf alias list
Standard SOQL queries via the default API:
# Basic query sf data query --query "SELECT Id, Name, Email FROM Contact LIMIT 10" --jsonWHERE clause
sf data query --query "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Closed Won'" --json
Relationship queries (parent-to-child)
sf data query --query "SELECT Id, Name, (SELECT LastName, Email FROM Contacts) FROM Account LIMIT 5" --json
Relationship queries (child-to-parent)
sf data query --query "SELECT Id, Name, Account.Name FROM Contact" --json
LIKE for text search
sf data query --query "SELECT Id, Name FROM Account WHERE Name LIKE '%Acme%'" --json
Date filtering
sf data query --query "SELECT Id, Name, CreatedDate FROM Lead WHERE CreatedDate = TODAY" --json
ORDER BY + LIMIT
sf data query --query "SELECT Id, Name, Amount FROM Opportunity ORDER BY Amount DESC LIMIT 20" --json
Include deleted/archived records
sf data query --query "SELECT Id, Name FROM Account" --all-rows --json
Query from a file
sf data query --file query.soql --json
Tooling API queries (metadata objects like ApexClass, ApexTrigger)
sf data query --query "SELECT Id, Name, Status FROM ApexClass" --use-tooling-api --json
Output to CSV file
sf data query --query "SELECT Id, Name, Email FROM Contact" --result-format csv --output-file contacts.csv
Target a specific org
sf data query --query "SELECT Id, Name FROM Account" --target-org my-org --json
For queries returning more than 10,000 records, use Bulk API instead:
sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10 sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10
SOSL searches across multiple objects at once:
# Search for text across objects sf data search --query "FIND {John Smith} IN ALL FIELDS RETURNING Contact(Name, Email), Lead(Name, Email)" --jsonSearch in name fields only
sf data search --query "FIND {Acme} IN NAME FIELDS RETURNING Account(Name, Industry), Contact(Name)" --json
Search from a file
sf data search --file search.sosl --json
Output to CSV
sf data search --query "FIND {test} RETURNING Contact(Name)" --result-format csv
# By record ID sf data get record --sobject Contact --record-id 003XXXXXXXXXXXX --jsonBy field match (WHERE-like)
sf data get record --sobject Account --where "Name=Acme" --json
By multiple fields (values with spaces need single quotes)
sf data get record --sobject Account --where "Name='Universal Containers' Phone='(123) 456-7890'" --json
sf data create record --sobject Contact --values "FirstName='Jane' LastName='Doe' Email='jane@example.com'" --jsonsf data create record --sobject Account --values "Name='New Company' Website=www.example.com Industry='Technology'" --json
Tooling API object
sf data create record --sobject TraceFlag --use-tooling-api --values "DebugLevelId=7dl... LogType=CLASS_TRACING" --json
# By ID sf data update record --sobject Contact --record-id 003XXXXXXXXXXXX --values "Email='updated@example.com'" --jsonBy field match
sf data update record --sobject Account --where "Name='Old Acme'" --values "Name='New Acme'" --json
Multiple fields
sf data update record --sobject Account --record-id 001XXXXXXXXXXXX --values "Name='Acme III' Website=www.example.com" --json
# By ID sf data delete record --sobject Account --record-id 001XXXXXXXXXXXX --jsonBy field match
sf data delete record --sobject Account --where "Name=Acme" --json
For large datasets (thousands to millions of records):
# Export to CSV sf data export bulk --query "SELECT Id, Name, Email FROM Contact" --output-file contacts.csv --result-format csv --wait 10Export to JSON
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.json --result-format json --wait 10
Include soft-deleted records
sf data export bulk --query "SELECT Id, Name FROM Account" --output-file accounts.csv --result-format csv --all-rows --wait 10
Resume a timed-out export
sf data export resume --job-id 750XXXXXXXXXXXX --json
# Import from CSV sf data import bulk --file accounts.csv --sobject Account --wait 10Resume a timed-out import
sf data import resume --job-id 750XXXXXXXXXXXX --json
sf data upsert bulk --file contacts.csv --sobject Contact --external-id Email --wait 10
# Delete records listed in CSV (CSV must have an Id column) sf data delete bulk --file records-to-delete.csv --sobject Contact --wait 10
# Export with relationships into JSON tree format sf data export tree --query "SELECT Id, Name, (SELECT Name, Email FROM Contacts) FROM Account" --jsonExport with a plan file (for multiple objects)
sf data export tree --query "SELECT Id, Name FROM Account" --plan --output-dir export-data
Import from tree JSON files
sf data import tree --files Account.json,Contact.json
Import using a plan definition file
sf data import tree --plan Account-Contact-plan.json
# Describe an object (fields, relationships, picklist values) sf sobject describe --sobject Account --jsonDescribe a custom object
sf sobject describe --sobject MyCustomObject__c --json
Describe a Tooling API object
sf sobject describe --sobject ApexClass --use-tooling-api --json
List all objects
sf sobject list --json
List only custom objects
sf sobject list --sobject custom --json
List only standard objects
sf sobject list --sobject standard --json
# Execute Apex from a file sf apex run --file script.apex --jsonRun interactively (type code, press Ctrl+D to execute)
sf apex run
Run Apex tests
sf apex run test --test-names MyTestClass --json
Get test results
sf apex get test --test-run-id 707XXXXXXXXXXXX --json
View Apex logs
sf apex list log --json sf apex get log --log-id 07LXXXXXXXXXXXX
Make arbitrary authenticated REST API calls:
# GET request sf api request rest 'services/data/v62.0/limits' --jsonList API versions
sf api request rest '/services/data/' --json
Create a record via REST
sf api request rest '/services/data/v62.0/sobjects/Account' --method POST --body '{"Name":"REST Account","Industry":"Technology"}' --json
Update a record via REST (PATCH)
sf api request rest '/services/data/v62.0/sobjects/Account/001XXXXXXXXXXXX' --method PATCH --body '{"BillingCity":"San Francisco"}' --json
GraphQL query
sf api request graphql --body '{"query":"{ uiapi { query { Account { edges { node { Name { value } } } } } } }"}' --json
Custom headers
sf api request rest '/services/data/v62.0/limits' --header 'Accept: application/xml'
Save response to file
sf api request rest '/services/data/v62.0/limits' --stream-to-file limits.json
# Deploy metadata to an org sf project deploy start --source-dir force-app --jsonDeploy specific metadata components
sf project deploy start --metadata ApexClass:MyClass --json
Retrieve metadata from an org
sf project retrieve start --metadata ApexClass --json
Check deploy status
sf project deploy report --job-id 0AfXXXXXXXXXXXX --json
Generate a new Salesforce DX project
sf project generate --name my-project
List metadata components in the org
sf project list ignored --json
# Run CLI diagnostics sf doctorCheck CLI version
sf version
See what is new
sf whatsnew
-- Count records SELECT COUNT() FROM Contact WHERE AccountId = '001XXXXXXXXXXXX'-- Aggregate query SELECT StageName, COUNT(Id), SUM(Amount) FROM Opportunity GROUP BY StageName
-- Date literals SELECT Id, Name FROM Lead WHERE CreatedDate = LAST_N_DAYS:30
-- Subquery (semi-join) SELECT Id, Name FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE Email LIKE '%@acme.com')
-- Polymorphic lookup SELECT Id, Who.Name, Who.Type FROM Task WHERE Who.Type = 'Contact'
-- Multiple WHERE conditions SELECT Id, Name, Amount FROM Opportunity WHERE Amount > 10000 AND StageName != 'Closed Lost' AND CloseDate = THIS_QUARTER
--json for structured, parseable output.LIMIT on queries to avoid excessive data. Start with LIMIT 10 and increase if the user needs more.sf data export bulk instead of sf data query.WHERE ... LIKE '%term%'. When searching across multiple objects, use SOSL via sf data search.--target-org <alias> when the user has multiple orgs; ask which org if ambiguous.sf org login web.COUNT()). Use standard sf data query for those.sf sobject describe), the JSON output can be very large. Summarize the key fields, required fields, and relationships for the user rather than dumping the raw output.No 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.