Salesforce

Query Salesforce data and manage sales pipelines using the `sf` CLI. Use for SOQL queries (simple to complex), opportunity pipeline analysis, forecast reporting, data exports, schema exploration, and CRM data operations. Also use for executive workflows like looking up deals by name, finding contact info to email prospects, preparing pipeline reviews, and cross-referencing CRM data with other tools. Triggers on Salesforce, SOQL, pipeline, opportunity, forecast, CRM data, deal lookup, prospect email, account info, or sf CLI questions.

MIT-0 · Free to use, modify, and redistribute. No attribution required.
1 · 1.8k · 1 current installs · 1 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
The skill's name, description, SKILL.md and script all focus on using the Salesforce 'sf' CLI to run SOQL queries, manage pipelines, and export schema/data — that matches the stated purpose. Minor inconsistency: the skill metadata lists no required binaries, but the instructions and included script assume 'sf' is installed and also use common Unix tools (jq, grep, jq in the script). Declaring 'sf' and 'jq' as required binaries would be expected.
Instruction Scope
SKILL.md explicitly instructs the agent to run 'sf' commands, to authenticate via 'sf org login web' if necessary, and to export results to CSV/JSON/markdown. The instructions do not ask the agent to read unrelated files or environment variables or to transmit data to unexpected external endpoints. They do direct creation of local export files (CSV/JSON/markdown) and rely on parsing tools (jq/grep).
Install Mechanism
There is no install spec (instruction-only) and only a small helper script is included. No downloads, package installs, or external installers are invoked by the skill itself — this is low-risk from an installation perspective.
Credentials
The skill declares no environment variables or credentials, which is consistent with using the local 'sf' CLI for auth. However, it implicitly requires authenticated Salesforce org access (OAuth tokens stored by 'sf') and read/write access to the org via the CLI. There is no justification for additional unrelated secrets. Users should be aware that the skill will operate with whatever org permissions the authenticated CLI user has (so least privilege / sandbox usage is recommended).
Persistence & Privilege
The skill does not request always:true, does not modify other skills, and does not install persistent services. It will create/export local files when run (CSV/JSON/markdown), which is expected behavior for a data-export helper.
Assessment
This skill appears to be a normal helper for the Salesforce 'sf' CLI, but before installing or using it: 1) Ensure you have the 'sf' CLI installed and authenticated to the correct Salesforce org (and prefer a sandbox/test org for evaluation). 2) Install the small dependencies used in the examples/scripts (jq, grep) or expect the commands to fail if missing. 3) Recognize that the skill runs CLI queries under your existing 'sf' credentials — it can read and export org data to local files (CSV/JSON/markdown), so only grant it access to an account with appropriate (least) privilege. 4) If you will allow autonomous agent invocation, consider the risk of automatic exports of sensitive CRM data; restrict scope or test manually first. The main actionable fix for the publisher would be to declare required binaries ('sf', 'jq') in the metadata to remove the small metadata inconsistency.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.0
Download zip
latestvk97e4wwga2rsehr3scn7mbdqv5800axvsalesforcevk97e4wwga2rsehr3scn7mbdqv5800axvsfdcvk97e4wwga2rsehr3scn7mbdqv5800axv

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

Salesforce DX — Data & Pipeline

Query data and manage pipelines with the sf CLI.

Prerequisites

# Verify CLI and auth
sf --version
sf org list

If no orgs listed, authenticate:

sf org login web --alias my-org --set-default

Schema Discovery

Before querying, explore available objects and fields:

# List all objects
sf sobject list --target-org my-org

# Describe object fields
sf sobject describe --sobject Opportunity --target-org my-org

# Quick field list (names only)
sf sobject describe --sobject Opportunity --target-org my-org | grep -E "^name:|^type:" 

SOQL Queries

Basic Patterns

# Simple query
sf data query -q "SELECT Id, Name, Amount FROM Opportunity LIMIT 10"

# With WHERE clause
sf data query -q "SELECT Id, Name FROM Opportunity WHERE StageName = 'Closed Won'"

# Date filtering
sf data query -q "SELECT Id, Name FROM Opportunity WHERE CloseDate = THIS_QUARTER"

# Export to CSV
sf data query -q "SELECT Id, Name, Amount FROM Opportunity" --result-format csv > opps.csv

Relationships

# Parent lookup (Account from Opportunity)
sf data query -q "SELECT Id, Name, Account.Name, Account.Industry FROM Opportunity"

# Child subquery (Opportunities from Account)
sf data query -q "SELECT Id, Name, (SELECT Id, Name, Amount FROM Opportunities) FROM Account LIMIT 5"

Aggregations

# COUNT
sf data query -q "SELECT COUNT(Id) total FROM Opportunity WHERE IsClosed = false"

# SUM and GROUP BY
sf data query -q "SELECT StageName, SUM(Amount) total FROM Opportunity GROUP BY StageName"

# Multiple aggregates
sf data query -q "SELECT StageName, COUNT(Id) cnt, SUM(Amount) total, AVG(Amount) avg FROM Opportunity GROUP BY StageName"

Bulk Queries (Large Datasets)

# Use --bulk for >2000 records
sf data query -q "SELECT Id, Name, Amount FROM Opportunity" --bulk --wait 10

Pipeline Management

Pipeline Snapshot

# Open pipeline by stage
sf data query -q "SELECT StageName, COUNT(Id) cnt, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY StageName ORDER BY StageName"

# Pipeline by owner
sf data query -q "SELECT Owner.Name, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY Owner.Name ORDER BY SUM(Amount) DESC"

# Pipeline by close month
sf data query -q "SELECT CALENDAR_MONTH(CloseDate) month, SUM(Amount) total FROM Opportunity WHERE IsClosed = false AND CloseDate = THIS_YEAR GROUP BY CALENDAR_MONTH(CloseDate) ORDER BY CALENDAR_MONTH(CloseDate)"

Win/Loss Analysis

# Win rate by stage
sf data query -q "SELECT StageName, COUNT(Id) FROM Opportunity WHERE IsClosed = true GROUP BY StageName"

# Closed won this quarter
sf data query -q "SELECT Id, Name, Amount, CloseDate FROM Opportunity WHERE StageName = 'Closed Won' AND CloseDate = THIS_QUARTER ORDER BY Amount DESC"

# Lost deals with reasons
sf data query -q "SELECT Id, Name, Amount, StageName, Loss_Reason__c FROM Opportunity WHERE StageName = 'Closed Lost' AND CloseDate = THIS_QUARTER"

Forecast Queries

# Weighted pipeline (assumes Probability field)
sf data query -q "SELECT StageName, SUM(Amount) gross, SUM(ExpectedRevenue) weighted FROM Opportunity WHERE IsClosed = false GROUP BY StageName"

# Deals closing this month
sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE CloseDate = THIS_MONTH AND IsClosed = false ORDER BY Amount DESC"

# Stale deals (no activity in 30 days)
sf data query -q "SELECT Id, Name, Amount, LastActivityDate FROM Opportunity WHERE IsClosed = false AND LastActivityDate < LAST_N_DAYS:30"

Data Operations

Create Records

sf data create record -s Opportunity -v "Name='New Deal' StageName='Prospecting' CloseDate=2024-12-31 Amount=50000"

Update Records

# By ID
sf data update record -s Opportunity -i 006xx000001234 -v "StageName='Negotiation'"

# Bulk update via CSV
sf data upsert bulk -s Opportunity -f updates.csv -i Id --wait 10

Export/Import

# Export with relationships
sf data export tree -q "SELECT Id, Name, (SELECT Id, Subject FROM Tasks) FROM Account WHERE Industry = 'Technology'" -d ./export

# Import
sf data import tree -f ./export/Account.json

JSON Output for Scripting

Add --json for structured output:

sf data query -q "SELECT Id, Name, Amount FROM Opportunity WHERE IsClosed = false" --json

Parse with jq:

sf data query -q "SELECT Id, Name FROM Opportunity LIMIT 5" --json | jq '.result.records[].Name'

Common Date Literals

LiteralMeaning
TODAYCurrent day
THIS_WEEKCurrent week
THIS_MONTHCurrent month
THIS_QUARTERCurrent quarter
THIS_YEARCurrent year
LAST_N_DAYS:nPast n days
NEXT_N_DAYS:nNext n days
LAST_QUARTERPrevious quarter

Troubleshooting

"Malformed query" — Check field API names (not labels). Use sf sobject describe to verify.

"QUERY_TIMEOUT" — Add filters, use --bulk, or add LIMIT.

"INVALID_FIELD" — Field may not exist on that object or your profile lacks access.

Large result sets — Use --bulk flag for queries returning >2000 records.

Executive Workflows

Quick Deal Lookup

Find a deal by name or account:

# By opportunity name (fuzzy)
sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate, Owner.Name, Account.Name FROM Opportunity WHERE Name LIKE '%Acme%' ORDER BY Amount DESC"

# By account name
sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE Account.Name LIKE '%Microsoft%' AND IsClosed = false"

# Recent deals I own
sf data query -q "SELECT Id, Name, Amount, StageName, CloseDate, Account.Name FROM Opportunity WHERE OwnerId = '<my-user-id>' AND IsClosed = false ORDER BY CloseDate"

Get Contact Info for Outreach

Find someone to email at a company:

# Contacts at an account
sf data query -q "SELECT Id, Name, Email, Phone, Title FROM Contact WHERE Account.Name LIKE '%Acme%'"

# Decision makers (by title)
sf data query -q "SELECT Name, Email, Title, Account.Name FROM Contact WHERE Title LIKE '%CEO%' OR Title LIKE '%VP%' OR Title LIKE '%Director%'"

# Contacts on a specific deal
sf data query -q "SELECT Contact.Name, Contact.Email, Contact.Title, Role FROM OpportunityContactRole WHERE Opportunity.Name LIKE '%Acme%'"

Prep for Pipeline Review

Get a quick executive summary:

# Top 10 deals closing this quarter
sf data query -q "SELECT Name, Account.Name, Amount, StageName, CloseDate, Owner.Name FROM Opportunity WHERE CloseDate = THIS_QUARTER AND IsClosed = false ORDER BY Amount DESC LIMIT 10"

# Deals by rep (for 1:1s)
sf data query -q "SELECT Owner.Name, COUNT(Id) deals, SUM(Amount) total FROM Opportunity WHERE IsClosed = false GROUP BY Owner.Name ORDER BY SUM(Amount) DESC"

# Deals needing attention (stale)
sf data query -q "SELECT Name, Amount, StageName, LastActivityDate, Owner.Name FROM Opportunity WHERE IsClosed = false AND LastActivityDate < LAST_N_DAYS:14 ORDER BY Amount DESC LIMIT 10"

Account Intelligence

Before a call or meeting:

# Account overview
sf data query -q "SELECT Id, Name, Industry, BillingCity, Website, OwnerId FROM Account WHERE Name LIKE '%Acme%'"

# All open deals with account
sf data query -q "SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE Account.Name LIKE '%Acme%' AND IsClosed = false"

# Recent activities
sf data query -q "SELECT Subject, Status, ActivityDate FROM Task WHERE Account.Name LIKE '%Acme%' ORDER BY ActivityDate DESC LIMIT 5"

Cross-Tool Workflows

Salesforce + Email (via gog/gmail):

  1. Find contact email: sf data query -q "SELECT Email FROM Contact WHERE Account.Name LIKE '%Acme%'"
  2. Draft email using that address with your email tool

Salesforce + Calendar:

  1. Find deals closing soon: sf data query -q "SELECT Name, Account.Name, CloseDate FROM Opportunity WHERE CloseDate = THIS_WEEK"
  2. Cross-reference with calendar to ensure follow-ups scheduled

Quick CRM Update After Call:

# Log a task
sf data create record -s Task -v "Subject='Call with John' WhatId='<opportunity-id>' Status='Completed' ActivityDate=$(date +%Y-%m-%d)"

# Update opportunity stage
sf data update record -s Opportunity -i <opp-id> -v "StageName='Negotiation' NextStep='Send proposal'"

Finding Your User ID

Needed for "deals I own" queries:

sf data query -q "SELECT Id, Name FROM User WHERE Email = 'your.email@company.com'"

Store this in your local config for quick reference.

References

Files

4 total
Select a file
Select a file to preview.

Comments

Loading comments…