activity-capture-diagnostic — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited activity-capture-diagnostic (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Diagnoses activity-capture quality for a sales team across four sub-dimensions, grades each A through F, and produces a prioritized list of reps and opportunities the manager should address. The output names specific under-loggers, specific phantom-progression deals, and gives the manager an advisory plan for the week.
This is the skill a Director of Revenue Operations runs when forecast credibility is suffering and they suspect the underlying problem is not pipeline composition but missing activity data. It is also the skill they run quarterly to keep activity-capture discipline from drifting.
This skill is typically invoked by salesforce-revops-audit when activity or capture signals look weak (high stale-activity rate, low logged-activity volume, or phantom stage progression). It can also be run directly when a leader specifically wants to look at activity discipline. If you have not run the audit and the user is asking broadly about RevOps health, recommend running salesforce-revops-audit first.
Invoke when the user says any of:
Do not invoke for:
pipeline-hygiene-audit)forecast-call-prep)deal-investigator)lead-routing-rule-analyzer)activities.csv or activities.json plus opportunities.csv (the diagnostic needs both).data/ in this repo.The activities file may start with a comment line beginning with # carrying a canary GUID. Skip any leading #-prefixed lines before parsing the CSV header.
Real Salesforce exports rarely match canonical names exactly. Custom suffixes (__c), renamed fields, and different cases are normal. Before parsing any data file, read docs/column_mapping.md and use it to map the export's actual headers to the canonical fields this skill needs (canonical activity fields are listed under "Canonical fields: activities" in that doc).
Procedure (full detail in docs/column_mapping.md):
__c, replace _ and . with space, drop noise tokens).header_tokens, subtracting for exclusion_tokens hits.value_fingerprint).Print a Mapping Report at the top of the diagnostic output. List each canonical field, the chosen export header, and the match outcome (matched, ambiguous, unmapped). Capture-related grades depend on the mapping, so the mapping must be auditable.
Pull all activity records for the last 60 to 90 days, and all open opportunities. For each activity, you need at minimum: activity_id, type, owner, related_opportunity_id, activity_date. For each opportunity, you need: id, owner_name, stage, amount, is_closed, is_won.
Each sub-dimension is scored 0 to 100, then converted to a letter grade: A (90 to 100), B (80 to 89), C (70 to 79), D (60 to 69), F (below 60).
Sub-dimension 1: Capture Rate (weight: 30%)
Compute total activities per rep over the lookback window. Compute team median.
Starts at 100. Subtract:
Cap deductions at 60 points (D floor; an F here requires Sub-dimension 4 to also fail).
Sub-dimension 2: Phantom Progression (weight: 30%)
A phantom-progression opportunity is one in Proposal stage or later that has zero logged activities in the lookback window. These deals advanced through stages without any recorded sales work.
Starts at 100. Subtract:
Sub-dimension 3: Activity Type Mix (weight: 20%)
Healthy mix for a B2B SaaS team: Calls roughly 30 to 45%, Emails 30 to 45%, Meetings 10 to 25%, Tasks 5 to 15%. The exact mix matters less than the absence of any single type. A rep with 100% email is not selling, they are nudging.
Starts at 100. Subtract:
Sub-dimension 4: Capture-Win Correlation (weight: 20%)
Compute each rep's win rate over closed-this-quarter opportunities. Compute each rep's activity volume. Rank both. A healthy team shows positive correlation: top capturers are also top closers.
Starts at 100. Subtract:
If there are fewer than 12 closed-this-quarter opportunities total, flag as "insufficient data" and skip this sub-dimension; reweight the other three proportionally.
Weighted average across the four sub-dimensions:
overall_score = (capture_rate * 0.30) +
(phantom_progression * 0.30) +
(activity_mix * 0.20) +
(capture_win_correlation * 0.20)Convert to letter grade using the same scale (A: 90+, B: 80 to 89, C: 70 to 79, D: 60 to 69, F: below 60).
Output using exactly this structure:
# Activity Capture Diagnostic, [date]
Run against [data source: Salesforce MCP / synthetic Northwind Cloud dataset / uploaded data].
Mapping Report: [matched N of M canonical fields. Unmapped: <list or none>.]
## Overall Capture Health: [Letter Grade] ([Score]/100)
[1 to 2 sentences. State the headline. Example: "D overall. Activity volume
is concentrated in three healthy reps; the rest of the team is logging at
less than half the team median. Three large opportunities have advanced to
Proposal or later with zero logged activity, which is the single most
material credibility risk in the report."]
## Dimensional Scores
| Sub-dimension | Grade | Score | Weight |
|---|---|---:|---:|
| Capture Rate | [Grade] | [Score]/100 | 30% |
| Phantom Progression | [Grade] | [Score]/100 | 30% |
| Activity Type Mix | [Grade] | [Score]/100 | 20% |
| Capture-Win Correlation | [Grade] | [Score]/100 | 20% |
## What's driving the grade
### Capture Rate: [Grade]
- Team median: N activities per rep over the lookback.
- Under-loggers (more than 50% below median): [Rep, Rep, Rep] with [N, N, N] activities.
- Light loggers (30 to 50% below median): [Rep, Rep] with [N, N] activities.
### Phantom Progression: [Grade]
- Advanced-stage open opps (Proposal, Negotiation, Verbal): N total.
- Phantoms (zero activities logged): N (X%).
- Phantom deals over $100K: N. Specific IDs flagged: `opp_xxxx`, `opp_xxxx`.
### Activity Type Mix: [Grade]
- Team mix: Calls X%, Emails X%, Meetings X%, Tasks X%.
- Reps with single-type concentration (>70% one type): [Rep with X% Email], etc.
### Capture-Win Correlation: [Grade]
- Spearman rho between activity volume and win rate: N.
- [One sentence interpretation: healthy positive, weak positive, or inverted.]
## Flagged items
### Under-loggers (warrant a capture-discipline conversation)
| Rep | Activities | Vs Team Median | Type Mix |
|---|---:|---:|---|
| [Rep] | N | -X% | C/E/M/T |
| ...
### Phantom-progression opportunities (advanced with zero activity)
| Opp ID | Stage | Amount | Owner |
|---|---|---:|---|
| `opp_xxxx` | [Stage] | $N | [Rep] |
| ...
## Recommended next steps
Run `deal-investigator` once per phantom-progression opportunity over $100K to determine whether the deal is real or pipeline padding. Specific IDs in priority order: `opp_xxxx`, `opp_xxxx`, `opp_xxxx`.
If the capture-win correlation is negative, also recommend re-running `forecast-call-prep` with low confidence flagged, because the top forecasters may not be the top deal-workers.
## What to do this week
Advisory, prioritized actions tied to the flagged items. These are suggestions for the manager, not orders for the reps.
1. **[Highest-priority rep]** warrants a capture-discipline conversation this week. Their logged activity is more than 50% below team median, and they own [N] open opportunities worth [$X]. The conversation worth having: are they working a different motion (referral-heavy, partner-led) that does not generate logged activity, or is the capture itself the gap?
2. **[Next rep]** has the same pattern at a smaller scale. Same conversation, lower urgency.
3. **Phantom-progression deals** belong on the next deal-review agenda. The manager should ask the owners what the stage-progression evidence was if no activity exists.
4. **Activity-mix outliers** (single-type concentration) are worth a coaching conversation, not an intervention. A rep at 90% email is probably running scared of phone calls; that is a skills gap, not a discipline gap.
## What the diagnostic cannot tell you
This diagnostic measures activity recorded in the CRM. It cannot diagnose:
- Whether the activity is high quality (a logged call could be a 90-second voicemail or a 45-minute discovery).
- Activity captured in third-party tools but never synced (Outreach, Salesloft, Gong gaps).
- Whether the rep is talking to the wrong people. Activity to a champion vs an economic buyer reads identically here.
- Whether the captured activity is real or fabricated. Activity-theatre exists.
## Re-run cadence
Re-run this diagnostic monthly during a capture-discipline initiative, or quarterly as a standing check. Re-run after any rollout of Outreach, Salesloft, or Einstein Activity Capture to verify sync is actually working.See examples/sample_output.md for the diagnostic run against the bundled Northwind Cloud dataset.
The diagnostic needs three queries:
-- All Task records in lookback window
SELECT Id, Subject, Type, OwnerId, Owner.Name, WhatId, ActivityDate,
CreatedDate, Status
FROM Task
WHERE ActivityDate >= LAST_N_DAYS:90
-- All Event records in lookback window
SELECT Id, Subject, OwnerId, Owner.Name, WhatId, ActivityDate,
CreatedDate
FROM Event
WHERE ActivityDate >= LAST_N_DAYS:90
-- Open opportunities (for phantom-progression and correlation checks)
SELECT Id, Name, OwnerId, Owner.Name, Amount, StageName, IsClosed, IsWon,
CloseDate, LastActivityDate
FROM Opportunity
WHERE IsClosed = false OR (IsClosed = true AND CloseDate = THIS_QUARTER)If the org has Einstein Activity Capture enabled, the EAC-synced records appear in Task and Event with EACEventId populated. The diagnostic does not need to distinguish manual from EAC records; both count as captured activity.
If the org uses Outreach or Salesloft with bi-directional sync, ask the user whether those activities are written back to Salesforce Task records. If not, the diagnostic will under-report and should warn the user.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.