From salesloft-pack
Track SalesLoft email and call activities, log dispositions, and build engagement dashboards via the REST API v2.
How this skill is triggered — by the user, by Claude, or both
Slash command
/salesloft-pack:salesloft-core-workflow-bThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Track and analyze sales activities: emails sent/opened/clicked/replied, calls logged, and engagement metrics. Uses REST API v2 endpoints: `/activities/emails.json`, `/activities/calls.json`, `/action_details/sent_emails.json`.
Track and analyze sales activities: emails sent/opened/clicked/replied, calls logged, and engagement metrics. Uses REST API v2 endpoints: /activities/emails.json, /activities/calls.json, /action_details/sent_emails.json.
salesloft-core-workflow-aimport axios from 'axios';
const api = axios.create({
baseURL: 'https://api.salesloft.com/v2',
headers: { Authorization: `Bearer ${process.env.SALESLOFT_API_KEY}` },
});
// Get email activities for a specific person
const { data: emails } = await api.get('/activities/emails.json', {
params: {
person_id: 1234,
per_page: 50,
sort_by: 'updated_at',
sort_direction: 'DESC',
},
});
emails.data.forEach((email: any) => {
console.log(`${email.subject} | Status: ${email.status}`);
console.log(` Opens: ${email.counts.opens}, Clicks: ${email.counts.clicks}`);
console.log(` Replied: ${email.counts.replies > 0 ? 'Yes' : 'No'}`);
});
// List calls with disposition data
const { data: calls } = await api.get('/activities/calls.json', {
params: { per_page: 50, sort_by: 'created_at', sort_direction: 'DESC' },
});
calls.data.forEach((call: any) => {
console.log(`${call.to} | Duration: ${call.duration}s`);
console.log(` Disposition: ${call.disposition}`);
console.log(` Sentiment: ${call.sentiment}`);
console.log(` Notes: ${call.notes || '(none)'}`);
});
// Aggregate email engagement metrics across a cadence
async function cadenceEngagement(cadenceId: number) {
let page = 1;
const stats = { sent: 0, opened: 0, clicked: 0, replied: 0 };
while (true) {
const { data } = await api.get('/activities/emails.json', {
params: { cadence_id: cadenceId, per_page: 100, page },
});
for (const email of data.data) {
stats.sent++;
if (email.counts.opens > 0) stats.opened++;
if (email.counts.clicks > 0) stats.clicked++;
if (email.counts.replies > 0) stats.replied++;
}
if (page >= data.metadata.paging.total_pages) break;
page++;
}
return {
...stats,
openRate: ((stats.opened / stats.sent) * 100).toFixed(1) + '%',
clickRate: ((stats.clicked / stats.sent) * 100).toFixed(1) + '%',
replyRate: ((stats.replied / stats.sent) * 100).toFixed(1) + '%',
};
}
const metrics = await cadenceEngagement(500);
// { sent: 247, opened: 148, clicked: 32, replied: 19,
// openRate: '59.9%', clickRate: '13.0%', replyRate: '7.7%' }
// Get steps for a cadence to see per-step analytics
const { data: steps } = await api.get('/steps.json', {
params: { cadence_id: 500 },
});
steps.data.forEach((step: any) => {
console.log(`Step ${step.day}: ${step.step_type} (${step.name})`);
// step_type: 'email', 'phone', 'other', 'integration'
});
Q1 Outbound Intro | Status: sent
Opens: 3, Clicks: 1
Replied: No
Cadence 500 Engagement:
Sent: 247, Open: 59.9%, Click: 13.0%, Reply: 7.7%
| Error | Cause | Solution |
|---|---|---|
Empty activities/emails | No emails sent yet | Verify cadence is active with enrolled people |
422 filter error | Invalid filter param | Check supported filter params in API docs |
| Slow pagination | Large activity history | Narrow date range with updated_at[gt] |
For common errors, see salesloft-common-errors.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin salesloft-pack2plugins reuse this skill
First indexed Jul 18, 2026
Manages SalesLoft people, cadences, and enrollments via REST API v2. For prospect management, cadence building, and outbound sales sequence automation.
Builds and optimizes Salesloft cadences including Rhythm, Conversations, multi-channel orchestration, and analytics.
Queries Apollo sales data to generate formatted tables answering performance questions on emails, calls, meetings, tasks, opportunities, sequences, and conversation intelligence.