Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
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.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Interact with Salesforce CRM using the official Salesforce CLI (sf) and REST API.
Salesforce CLI (sf) installed via npm or Homebrew Authentication configured via one of: sf 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 myorg # Login 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 myorg # Query 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 myorg # Create 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 myorg # Update 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 myorg # Bulk 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 myorg # Bulk 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 myorg # List 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"}'
INVALID_SESSION_ID: Token expired. Re-authenticate with sf org login web MALFORMED_QUERY: Check SOQL syntax. Use single quotes for strings. ENTITY_IS_DELETED: Record was deleted. Query to verify before updating. REQUIRED_FIELD_MISSING: Check object schema for required fields.
Use aliases: Set --alias when logging in, then use --target-org alias JSON output: Add --json flag for programmatic parsing Dry run: Use --dry-run flag on bulk operations to preview Field names: Use API names (e.g., FirstName), not labels (e.g., "First Name") Date format: Use YYYY-MM-DD for dates, YYYY-MM-DDThh:mm:ssZ for datetimes
Bulk operations have daily API limits (varies by Salesforce edition) Some objects (e.g., ContentDocument) have special handling requirements Complex queries may hit governor limits
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.