SKILL.md
Analytics
Answer any sales performance question using Apollo's analytics data. The user asks a question via "$ARGUMENTS".
Examples
/apollo:analytics How many emails did I send last 30 days?/apollo:analytics Show me team call connect rate this quarter by rep/apollo:analytics What's our email reply rate week over week for this year?/apollo:analytics Break down pipeline and won amount by opportunity stage all time/apollo:analytics Which sequences have the highest reply rate in the last 6 months?/apollo:analytics Show me activity summary — emails, calls, meetings, tasks — for each rep this quarter/apollo:analytics How are calls trending by day of week over the last 3 months?/apollo:analytics Show me emails sent vs replied broken down by contact stage and email type
Step 1 — Interpret the Question
Parse "$ARGUMENTS" to determine the following parameters:
Metrics
Select 1–15 metrics that match what the user is asking about. Always include the rate/percent version alongside raw counts when the user asks about performance.
Email numemailssent, numemailsdelivered, numemailsopened, numemailsclicked, numemailsreplied, numemailsbounced, numemailsunsubscribed, percentemailsreplied, numcontactsemailed, numcontactsopened, numcontactsreplied
Calls numphonecalls, numphonecallscompleted, numphonecallsconnect, numphonecallsconnectpositive, numphonecallsconnectnegative, numphonecallsconnectneutral, percentphonecallsconnect, avgphonecallduration, numcontactscalled
Key distinctions:
numphonecalls_completed= all logged attemptsnumphonecalls_connect= recipient actually answerednumphonecallsconnectpositive/negative/neutral= connected calls by outcome sentiment
Meetings numallmeetingsscheduled, nummeetingsheld, numallmeetingsrescheduled, numcalendareventsscheduled, numcalendareventscancelled, numallmeetingsscheduledviaemail, numallmeetingsscheduledviacall
Key distinctions:
numallmeetings_scheduled= includes cancellednummeetingsheld= actually occurred
Tasks numtasks, numtaskscompleted, numtasksscheduled, numtaskscompletedontime, percenttaskscompleted, percenttaskscompletedontime, overduetasks, unfinishedoverduetasks, percentunfinishedoverdue_tasks
Key distinctions:
overdue_tasks= all overdue including completed lateunfinishedoverduetasks= still pending and overduepercentunfinishedoverduetasks= share of scheduled tasks that are overdue and unfinished (vsnumtasks_scheduled)
Contacts & Accounts numcontacts, numaccounts, numcontactstouched, numaccountstouched, numnetnewpeople, numnetnewcompanies, numcontactswithjobchange
Opportunities numopportunities, numwon, numclosed, dealamount, wonamount, pipelineamount, revenueamount, avgdealamount, avgwonamount, percentwinrate, avgsalescycle_days
Sequences numcontactsaddedtosequence, numcontactsremovefromsequence
Conversation Intelligence numconversationsrecorded, numconversationslistened, avgconversationduration, totalconversationduration, avgtalkratio, avgquestionrate, avglongestmonologue, speaker_switches
LinkedIn numlinkedintasksscheduled, numlinkedintaskscompleted, numlinkedintasksskipped, percentlinkedintaskscompleted
Date Range
Map the user's time reference to a preset modality (preferred) or a custom range:
Presets: today, yesterday, currentweek, currentmonth, currentquarter, currentyear, last7days, last2weeks, last30days, last3months, last6months, last12months, last4quarters, last2years, previousweek, previousmonth, previousquarter, previousyear, all_time
Custom: use rangestart + rangeend (YYYY-MM-DD) for specific date windows. Do not combine with a modality.
Default to last30days if no time reference is given.
Breakdown (group_by)
Does the user want data broken down by something? Set group_by to one of:
Time patterns (for trends and time series) smartdatetimehour, smartdatetimeday, smartdatetimeweek, smartdatetimemonth, smartdatetimeyear smartdatetimehourofday, smartdatetimedayofweek, smartdatetimemonthofyear
People & Teams smartuserid (by rep), smartsubteamid (by team)
Email dimensions emailercampaignid (by sequence), emailertemplateid (by template), emailermessagetype, emailerstepid, emailertouchid, sendfromemail, sendfromdomain, emailaccountid
Calls phonecalloutcomeid, phonecallpurposeid, phonecallsentiment
Contact attributes contactstageid, contactlabelids, contactownerid, persona, persontitleunanalyzed, personseniority, personlocationcountry, personlocationstate, personlocation_city
Account & company attributes accountid, accountstageid, accountlabelids, accountownerid, organizationindustries, organizationnumcurrentemployees, organizationhqlocationcountry, organizationhqlocationstate, organizationhqlocationcity, organizationlatestfundingstagecd, organizationcurrenttechnologies
Opportunities opportunitystageid, opportunityownerid, opportunitypipelineid, forecastcategory, leadsource, opportunitydealsource
Tasks tasktype, taskstatus
Conversations conversationstate, conversationtype, trackernamesunanalyzed, calendareventsetting_type
Omit group_by entirely for a flat summary (single row of totals).
Pivot (pivotgroupby)
If the user wants a cross-tab (e.g. "by rep AND by sequence", "broken down by stage vs email type"), set groupby to the primary dimension and pivotgroupby to the secondary. The tool returns one table per metric when a pivot is used. Prefer low-cardinality dimensions (e.g. emailermessagetype, contactstageid, phonecall_sentiment) as the pivot.
Filters
- "my data" / "for me" / "my performance" →
filters: { user_ids: ["current"] } - Specific user by Apollo user ID →
filters: { userids: ["<userid>"] }(can combine:["current", "userid1"]) - "team" / no user mention → omit filters entirely (returns team-wide data)
- Filter by team/subteam →
filters: { teamids: ["<subteamid>"] } - Filter by sequence name → first call
mcp__claudeaiApollo_MCP__apolloemailercampaignssearchto resolve the name to an ID, then passfilters: { emailercampaign_ids: ["<id>"] }
Sort
If the user asks "who has the most...", "ranked by...", or "top reps by...", set:
sort: { metric: "<metric_name>", asc: false }
Use asc: true for "lowest first" or "worst performing" queries.
Two constraints:
- Sort only applies when
group_byis set — it has no effect on flat queries - The sort metric must be included in the
metricsarray
Step 2 — Call the Analytics Tool
Use mcp__claudeaiApollo_MCP__apolloanalyticssync_report with the parameters determined above.
If the question spans multiple independent dimensions (e.g. "show me email metrics by rep AND separately by sequence"), make two sequential calls.
If the question is ambiguous, make a reasonable default call first, then offer to refine.
Step 3 — Present the Results
Flat response (no group_by): Present as a clean two-column summary table — metric name and value.
Grouped response (group_by only): Present as a table with the dimension as the first column and metrics as subsequent columns. Highlight notable outliers (top performer, lowest rate, biggest gap).
Pivot response (groupby + pivotgroup_by): Present each metric as a separate labeled table. Add a brief summary sentence per table.
Always:
- Convert decimals to readable percentages (e.g.
0.14→14%) - Format large numbers with commas
- If the response says "Showing first N of M rows", mention the total count and offer to refine
- Add 1–2 sentences of insight after the data (e.g. "Tuesday has the highest call volume at 355 calls", "Sarah Flores leads reply rate at 14%")
Step 4 — Offer Follow-up Actions
After presenting results, suggest 2–3 relevant next steps:
- Drill deeper — break down by another dimension (e.g. "want to see this by rep?")
- Change date range — compare with a different time period
- Add more metrics — "want to add meetings or tasks to this view?"
- Pivot view — "want to cross-tab this — e.g. by rep × sequence?"
- Export — format as CSV-style table for copy-paste