Connect to Salesforce to manage accounts, contacts, leads, opportunities, campaigns, tasks, reports, and SObject records. Query data with SOQL, create and update records, manage files and attachments, and work with Salesforce objects via the REST API.
This skill uses ClawLink for hosted connection flows and credentials so you do not need to configure Salesforce OAuth access yourself.
Step 1: InstallStep 2: Pair AccountStep 3: Connect Salesforce
_App-specific connection GIF coming soon_Run the install command in OpenClawSign in and approve the deviceOpen the dashboard and connect Salesforce
text
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ OpenClaw │────▶│ ClawLink │────▶│ Salesforce API │
│ (User Chat) │ │ (OAuth) │ │ (SObjects, │
│ │ │ │ │ Reports, SOQL) │
└─────────────────┘ └──────────────┘ └──────────────────┘
│ │ │
│ 1. Install Plugin │ │
│ 2. Pair Device │ │
│ 3. Connect Salesforce │ │
│ │ 4. OAuth Proxy │
│ │ 5. Request Forward │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SKILL │ │ Dashboard│ │ Salesforce│
│ File │ │ Auth │ │ Cloud │
└──────────┘ └──────────┘ └──────────┘
Install the verified ClawLink plugin from ClawHub. After the user confirms, complete the full setup so ClawLink tools are visible in the next OpenClaw chat.
bash
openclaw plugins install clawhub:clawlink-plugin
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
Then tell the user: "OpenClaw has been restarted. Send /new as a standalone message to start a fresh chat, then ask for Salesforce again."
bash
# Get account details
clawlink_call_tool --tool "salesforce_get_account" --params '{"account_id": "YOUR_ACCOUNT_ID"}'
# Search across objects with SOSL
clawlink_call_tool --tool "salesforce_execute_sosl_search" --params '{"query": "FIND {Alice*} RETURNING Contact"}'
# Create a new lead
clawlink_call_tool --tool "salesforce_create_lead" --params '{"last_name": "Smith", "company": "Acme Corp", "email": "alice@acme.com"}'
All Salesforce tool calls are authenticated automatically by ClawLink using the user's connected Salesforce account via OAuth.
No OAuth setup is required in chat. ClawLink manages the OAuth flow and token refresh automatically.
clawlink_begin_pairing if it is not configured yet.clawlink_list_integrations to verify the connection is active.bash
clawlink_list_integrations
Response: Returns all connected integrations. Look for salesforce in the list.
bash
clawlink_list_tools --integration salesforce
Response: Returns the live tool catalog for Salesforce.
If Salesforce tools are missing or the connection shows an error:
clawlink_list_integrations to verifyclawlink_list_tools --integration salesforceToolDescriptionModesalesforce_get_accountRetrieve a specific account by ID with all available fieldsReadsalesforce_create_accountCreate a new account in Salesforce (returns ID at data.response_data.id)Writesalesforce_delete_accountPermanently delete an account from SalesforceWritesalesforce_associate_contact_to_accountAssociate a contact with an account by updating its AccountId fieldWrite
ToolDescriptionModesalesforce_get_contactRetrieve a specific contact by ID with all available fieldsReadsalesforce_get_leadRetrieve a specific lead by ID with all available fieldsReadsalesforce_create_contactCreate a new contact in SalesforceWritesalesforce_create_leadCreate a new lead ( LastName and Company required; org validation may require additional fields)Writesalesforce_delete_contactPermanently delete a contact from SalesforceWritesalesforce_delete_leadPermanently delete a lead from SalesforceWritesalesforce_add_contact_to_campaignAdd a contact to a campaign by creating a CampaignMember recordWritesalesforce_add_lead_to_campaignAdd a lead to a campaign (both IDs must reference active, existing records)Writesalesforce_apply_lead_assignment_rulesApply configured lead assignment rules to route a lead to the appropriate ownerWrite
ToolDescriptionModesalesforce_get_opportunityRetrieve a specific opportunity by ID with all available fieldsReadsalesforce_create_opportunityCreate a new opportunity in SalesforceWritesalesforce_delete_opportunityPermanently delete an opportunity from SalesforceWritesalesforce_clone_opportunity_with_productsClone an opportunity and optionally its line itemsWritesalesforce_add_opportunity_line_itemAdd a product (line item) to an opportunityWrite
ToolDescriptionModesalesforce_get_campaignRetrieve a specific campaign by ID with all available fieldsReadsalesforce_create_campaignCreate a new campaign ( name required; type, status, start_date, end_date often required by org validation)Writesalesforce_delete_campaignPermanently delete a campaign from SalesforceWrite
ToolDescriptionModesalesforce_create_taskCreate a new task to track activities related to contacts, leads, or other recordsWritesalesforce_complete_taskMark a task as completed with optional completion notesWrite
ToolDescriptionModesalesforce_get_noteRetrieve a specific note by ID (private notes require sufficient permissions)Readsalesforce_create_noteCreate a new note attached to a Salesforce record (no deduplication — identical calls create duplicates)Writesalesforce_delete_notePermanently delete a note from SalesforceWrite
ToolDescriptionModesalesforce_get_file_informationRetrieve comprehensive metadata for a file (ownership, sharing, download URLs, rendition status)Readsalesforce_get_file_contentReturn binary content of a Salesforce file for download or retrievalReadsalesforce_get_file_sharesGet information about objects with which a file has been sharedReadsalesforce_delete_filePermanently delete a file from SalesforceWritesalesforce_get_chatter_resourcesAccess Chatter resources directory (feeds, groups, users, emojis, streams)Read
ToolDescriptionModesalesforce_execute_sosl_searchExecute a SOSL search to search across multiple Salesforce objects simultaneouslyReadsalesforce_get_query_job_resultsRetrieve results for a completed Bulk API v2 query job in CSV formatReadsalesforce_get_sobject_by_external_idRetrieve a Salesforce record by matching an external ID field valueRead
ToolDescriptionModesalesforce_get_s_object_recordRetrieve a single Salesforce record by ID from any sObject typeReadsalesforce_get_a_batch_of_recordsRetrieve multiple Salesforce records in a single request (up to 200 records)Readsalesforce_create_s_object_recordCreate a new record of any standard or custom Salesforce object typeWritesalesforce_delete_sobjectDelete a single Salesforce record by its ID (idempotent — deleting same record multiple times returns success)Writesalesforce_delete_sobject_collectionsDelete up to 200 records in one request with optional rollbackWritesalesforce_clone_recordClone an existing Salesforce record (optionally apply field updates to the clone)Writesalesforce_create_sobject_treeCreate nested parent-child record hierarchies in a single atomic operation (up to 200 records, 5 levels deep)Writesalesforce_execute_sobject_quick_actionExecute a specific quick action on an sObject to create records with pre-configured defaultsWrite
ToolDescriptionModesalesforce_get_job_failed_record_resultsGet records that failed during a Bulk API 2.0 ingest operationReadsalesforce_get_job_successful_record_resultsGet records successfully processed during a bulk operationReadsalesforce_get_job_unprocessed_record_resultsGet records not processed during a bulk operation (job aborted or interrupted)Readsalesforce_close_or_abort_jobClose (state: UploadComplete) or abort (state: Aborted) a Bulk API v2 ingest jobWrite
ToolDescriptionModesalesforce_get_all_custom_objectsRetrieve all Salesforce objects (standard and custom) with metadataReadsalesforce_get_all_fields_for_objectRetrieve all fields (standard and custom) for a Salesforce objectReadsalesforce_get_apiDiscover available REST API resources for a specified Salesforce API versionReadsalesforce_get_org_limitsRetrieve organization limits with max and remaining allocationsReadsalesforce_get_record_countsGet total record counts for specified Salesforce objectsReadsalesforce_get_object_list_viewsDiscover available filtered views of records for an objectReadsalesforce_get_compact_layoutsRetrieve compact layout information for multiple Salesforce objectsRead
ToolDescriptionModesalesforce_get_list_view_resultsRetrieve results of a list view for a specified sObject (2,000 record limit)Readsalesforce_get_list_view_records_by_idReturn record data for a list view by its IDReadsalesforce_get_list_view_records_by_nameRetrieve paginated records matching a list view's filters and sortingReadsalesforce_get_mru_list_view_recordsGet records from the most recently used (MRU) list view for an objectReadsalesforce_get_child_recordsGet child records for a parent record and child relationship nameReadsalesforce_get_related_list_records_contactsRetrieve related list records with filtering and pagination parametersRead
ToolDescriptionModesalesforce_get_dashboardGet detailed metadata for a specific dashboard (components, layout, filters)Read
ToolDescriptionModesalesforce_create_custom_fieldCreate a custom field on a Salesforce object using the Tooling APIWritesalesforce_create_custom_objectCreate a custom object in Salesforce using the Metadata APIWrite
bash
clawlink_call_tool --tool "salesforce_get_account" \
--params '{"account_id": "YOUR_ACCOUNT_ID"}'
bash
clawlink_call_tool --tool "salesforce_create_lead" \
--params '{
"last_name": "Smith",
"company": "Acme Corp",
"email": "alice@acme.com",
"lead_source": "Web"
}'
bash
clawlink_call_tool --tool "salesforce_create_task" \
--params '{
"subject": "Follow up with Alice",
"status": "Not Started",
"priority": "High",
"who_id": "CONTACT_ID",
"what_id": "ACCOUNT_ID"
}'
bash
clawlink_call_tool --tool "salesforce_execute_sosl_search" \
--params '{"query": "FIND {Alice*} RETURNING Contact(Id, Name, Email)"}'
bash
clawlink_call_tool --tool "salesforce_clone_record" \
--params '{"record_id": "YOUR_RECORD_ID"}'
clawlink_list_integrations to confirm Salesforce is connected.clawlink_list_tools --integration salesforce to see the live catalog.clawlink_search_tools with a short query and integration salesforce.text
┌─────────────────────────────────────────────────────────────┐
│ READ OPERATIONS (Safe) │
│ list → get → search → describe → call │
│ │
│ Example: Get account → List contacts → Show results │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ WRITE OPERATIONS (Require Confirmation) │
│ describe → preview → confirm → call │
│ │
│ Example: Describe tool → Preview changes → User approves │
│ → Execute create │
└─────────────────────────────────────────────────────────────┘
clawlink_describe_tool first.whenToUse, askBefore, safeDefaults, examples, and followups to shape the call.clawlink_preview_tool first.clawlink_call_tool. Pass confirmation only after the preview matches the user's intent.salesforce_query) return JSON results; SOSL searches ( salesforce_execute_sosl_search) return search result objects.state: UploadComplete) or aborting ( state: Aborted) ingest jobs for processing to begin.LAST_N_DAYS:n, NEXT_N_DAYS:n, THIS_WEEK, THIS_MONTH, THIS_QUARTER, THIS_YEAR.sObject names in tool parameters use the API name (e.g., Account, Contact, Lead, Opportunity).Status / ErrorMeaningTool not foundThe tool name does not exist in the current catalog. Verify with clawlink_list_tools --integration salesforce.Missing connectionSalesforce is not connected. Direct the user to https://claw-link.dev/dashboard?add=salesforce.INVALID_FIELDThe specified field does not exist on the sObject. Use salesforce_get_all_fields_for_object to discover valid fields.INVALID_IDThe provided record ID does not exist or is not accessible.REQUIRED_FIELD_MISSINGA required field is missing from the request. Check the tool schema with clawlink_describe_tool.ENTITY_IS_DELETEDThe target record has been deleted and cannot be modified.WRITE_REJECTEDUser did not confirm a write action. Always confirm before executing writes.
Check that the ClawLink plugin is installed: bash
openclaw plugins list
If the plugin is installed but tools are missing, tell the user to send /new as a standalone message to reload the catalog.
If a fresh chat does not help, run: bash
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
After restart, tell the user to send /new again and retry.
salesforce.clawlink_describe_tool to verify parameter names and types before calling.clawlink_preview_tool first.Powered by ClawLink — an integration hub for OpenClaw
