# Daily Prospecting Skill

## Purpose
Daily planner for reps. Surfaces what to work today based on the day of week, signals, and the prospecting plan. The rep then runs `/account-research-hub [ACCOUNT]` on whichever accounts they're working for the deep brief + outreach copy.

## Invocation
```
/prospect [REP_NAME]
```

## Team Roster

| Rep | Full Name | Notes |
|-----|-----------|-------|
| Andrew | Andrew Young | |
| Pat | Pat Oswald | |
| Sendu | Sendu Bhakthakumaran | |
| Mike | Mike Chen | |
| Kim | Kim Corran | If no rows match for Kim, load Anna Ayrapetyan rows (her accounts transferred to Kim) |
| Anna | Anna Ayrapetyan | |
| Aimee | Aimee Dowling | |
| Tyler | Tyler Brandt | |

Name matching: Accept first name, last name, or full name (case-insensitive).

### PTO/OOO Handling
If a rep is marked OOO (check SFDC `User.IsOutOfOffice` or ask the caller):
- Do NOT generate a daily plan for that rep
- Output: "[Rep] is OOO. Their signal surges will be held for their return. If coverage is needed, reassign to [backup rep]."
- Backup rep assignment: round-robin among remaining active reps
- On return day: include a "Welcome back" section summarizing signals that fired during OOO

---

## What This Skill Does

1. Identifies the rep
2. Reads the current day of week
3. Checks for signal surges (every day)
4. Picks the next Top 25 account to work
5. Runs the day-specific bonus motion (win-back, event, rotation)
6. Outputs a one-page daily plan
7. Tells the rep which accounts to run `/account-research-hub` on

This skill is the DISPATCHER. It does NOT generate outreach copy or deep account briefs. That's what `/account-research-hub` does.

---

## Daily Rhythm

| Day | Always | Bonus Motion |
|-----|--------|--------------|
| Monday | Signals + Top 25 | Signal focus day |
| Tuesday | Signals + Top 25 | Win-back targets (with UserEvidence proof points) |
| Wednesday | Signals + Top 25 | Event targets (next upcoming event) |
| Thursday | Signals + Top 25 | Clean day — follow up on Mon-Wed outreach |
| Friday | Signals + Top 25 | Rotation review — drop dead accounts, propose swaps (full team) |

---

## Step 0: Identify Rep + Day

1. Match input name to roster
2. Check PTO/OOO status — if OOO, stop and output OOO message (see PTO/OOO Handling above)
3. Get SFDC User ID:
```sql
SELECT Id, Name FROM User WHERE Name LIKE '%[REP_NAME]%' AND IsActive = true
```
4. Read current day of week and date

---

## Step 1: Signal Surge Check (Every Day)

Pull accounts in Consideration/Decision/Purchase with no open opportunity:

```sql
SELECT Id, Name, Industry, NumberOfEmployees, Website,
  accountIntentScore6sense__c, accountBuyingStage6sense__c
FROM Account
WHERE accountBuyingStage6sense__c IN ('Consideration', 'Decision', 'Purchase')
  AND NumberOfEmployees >= 500
  AND NumberOfEmployees <= 2500
  AND (OwnerId = '[REP_SFDC_ID]' OR OwnerId = null)
  AND Id NOT IN (SELECT AccountId FROM Opportunity WHERE StageName NOT IN ('Closed Won', 'Closed Lost'))
ORDER BY
  CASE accountBuyingStage6sense__c
    WHEN 'Purchase' THEN 1
    WHEN 'Decision' THEN 2
    WHEN 'Consideration' THEN 3
  END,
  accountIntentScore6sense__c DESC
LIMIT 10
```

**Additional signal enrichment with graph/Luci tools:**

For each surge account, also check:
1. **Customer voice signals** — `luci_search_customer_voice` with the account name to surface any recent mentions, sentiment shifts, or relevant discussions
2. **Account network** — `graph_account_network` to see if the account is connected to existing customers (warm intro path)
3. **Champion movers** — `graph_champion_movers` to check if any known champions recently joined the surge account

For each, check last activity date:
```sql
SELECT AccountId, Account.Name, ActivityDate, Subject
FROM Task
WHERE AccountId IN ([surge_account_ids])
  AND OwnerId = '[REP_SFDC_ID]'
  AND (NOT Subject LIKE '%Clearbit%')
ORDER BY ActivityDate DESC
LIMIT 5
```

**Decision/Purchase = work TODAY.** Flag these at the top of the output.
**Consideration = queue for the week.** List below.

---

## Step 2: Pick Today's Top 25 Account

Read the rep's accounts from:
```
./data/reports/mid-market/all_reps_top_25_accounts.csv
```

**Fallback:** If the CSV file is not found, query SFDC for the rep's owned accounts ranked by intent score:
```sql
SELECT Id, Name, Industry, NumberOfEmployees, Website,
  accountIntentScore6sense__c, accountBuyingStage6sense__c
FROM Account
WHERE OwnerId = '[REP_SFDC_ID]'
  AND NumberOfEmployees >= 500
  AND NumberOfEmployees <= 2500
  AND Type != 'Customer'
  AND Id NOT IN (SELECT AccountId FROM Opportunity WHERE StageName NOT IN ('Closed Won', 'Closed Lost'))
ORDER BY accountIntentScore6sense__c DESC
LIMIT 25
```

**Kim Corran note:** If no rows match for Kim, load Anna Ayrapetyan rows (her accounts transferred to Kim).

**Clari forecast context:** Before picking the account, pull pipeline coverage to inform priority:
```
clari_export_forecast(
  fiscalQuarter: "[CURRENT_QUARTER]",
  userId: "[REP_SFDC_ID]"
)
```
If the rep is under pipeline coverage target (3x), bias toward higher-value accounts. If over target, bias toward accounts most likely to convert (higher intent score).

Check last activity on each:
```sql
SELECT AccountId, Account.Name, ActivityDate, Subject
FROM Task
WHERE AccountId IN ([top_25_account_ids])
  AND OwnerId = '[REP_SFDC_ID]'
  AND (NOT Subject LIKE '%Clearbit%')
ORDER BY ActivityDate DESC
```

**Pick the account with the oldest last touch** (or never touched). Skip accounts touched in the last 2 business days. If all recently touched, pick the highest-scored account that's 3+ days stale.

---

## Step 3: Day-Specific Bonus Motions

### TUESDAY: Win-Back Targets

Pull Closed-Lost re-engagement targets:

```sql
SELECT
  o.Id, o.Name, o.AccountId, o.Account.Name, o.Amount, o.CloseDate,
  o.StageName, o.Loss_Reason__c, o.Account.NumberOfEmployees, o.Account.Industry,
  o.Account.accountBuyingStage6sense__c, o.Account.accountIntentScore6sense__c
FROM Opportunity o
WHERE o.Type = 'New Business'
  AND o.IsClosed = true
  AND o.IsWon = false
  AND o.Amount >= 10000
  AND o.Account.NumberOfEmployees >= 500
  AND o.Account.NumberOfEmployees <= 2500
  AND o.CloseDate >= LAST_N_MONTHS:9
  AND o.CloseDate <= LAST_N_MONTHS:6
ORDER BY o.Account.accountBuyingStage6sense__c DESC, o.Amount DESC
LIMIT 10
```

Prioritize:
1. Signal-hot: 6sense Consideration+ right now
2. Champion-moved: `graph_champion_movers` signals
3. Competitive displacement: lost to ChiliPiper/Traction Complete/RevenueHero/Default.io
4. Time-based: enough time passed

**UserEvidence proof points:** For each win-back target, pull relevant customer evidence:
```
userevidence_search_assets(
  query: "[loss_reason] OR [industry] OR [competitor_name]",
  limit: 3
)
```
Include the top matching asset in the win-back output so the rep has a proof point ready when they run `/account-research-hub`.

Output the ranked list with loss reason segment, proof point, and SVF value anchor. Rep runs `/account-research-hub [ACCOUNT]` on the ones they want to work.

---

### WEDNESDAY: Event Targets

**Dynamic event lookup (3-tier fallback):**

1. **Check for event calendar CSV:**
   ```
   ./data/reports/events/upcoming_events.csv
   ```
   If found, parse for events with dates after today.

2. **Fallback: SFDC Campaign query:**
   ```sql
   SELECT Id, Name, StartDate, EndDate, City__c, State__c, Type
   FROM Campaign
   WHERE Type = 'Event'
     AND StartDate >= TODAY
     AND StartDate <= NEXT_N_DAYS:60
     AND IsActive = true
   ORDER BY StartDate ASC
   LIMIT 10
   ```

3. **Fallback: Hardcoded table (STALENESS WARNING):**
   If neither CSV nor SFDC Campaign returns results, use the table below BUT prefix output with:
   > **WARNING: Using hardcoded event table last updated 2026-03-19. Events may be outdated. Verify dates before outreach.**

   | Event | Dates | Location | Metro Filter |
   |-------|-------|----------|-------------|
   | B2B Marketing Exchange | Mar 9-11 | Carlsbad, CA | San Diego, Carlsbad, Encinitas, Oceanside, Del Mar, Escondido |
   | Saleslove Palo Alto | Mar 10 | Palo Alto, CA | Palo Alto, San Jose, Mountain View, Sunnyvale, San Francisco |
   | Saleslove Denver | Mar 12 | Denver, CO | Denver, Boulder, Aurora, Lakewood, Littleton |
   | Funnel to Fork + Demandbase | Mar 26 | New York, NY | New York, Brooklyn, Manhattan, Jersey City, Hoboken |
   | Adobe Summit | Apr 19-22 | Las Vegas, NV | Las Vegas, Henderson |
   | Forrester B2B Summit | Apr 26-29 | Phoenix, AZ | Phoenix, Scottsdale, Tempe, Mesa, Chandler |
   | Gartner CSO & Sales Leader | May 19-21 | Las Vegas, NV | Las Vegas, Henderson |

Auto-select the nearest future event from whichever source returned results.

**Step 1: SFDC metro-area sweep**
```sql
SELECT c.AccountId, c.Account.Name, c.Name, c.Title, c.MailingCity, c.MailingState,
  c.Account.NumberOfEmployees, c.Account.accountBuyingStage6sense__c
FROM Contact c
WHERE c.Account.NumberOfEmployees >= 500
  AND c.Account.NumberOfEmployees <= 2500
  AND c.Account.Type != 'Customer'
  AND c.MailingCity IN ([METRO_CITIES])
  AND (c.Title LIKE '%Rev%Ops%' OR c.Title LIKE '%VP%Sales%' OR c.Title LIKE '%Marketing%Ops%'
       OR c.Title LIKE '%Director%' OR c.Title LIKE '%CRO%')
ORDER BY c.Account.accountBuyingStage6sense__c DESC
LIMIT 20
```

**Step 2: Past attendee check**
```sql
SELECT WhoId, WhatId, Subject, Description, ActivityDate
FROM Task
WHERE (Subject LIKE '%[EVENT_NAME]%' OR Description LIKE '%[EVENT_NAME]%')
  AND ActivityDate >= LAST_N_YEARS:2
LIMIT 20
```

**Step 2b: ZoomInfo metro search (FREE — 0 credits)**
```
zoominfo_search_contacts(
  managementLevel: "VP,Director,C-Level",
  department: "Sales,Marketing,Operations,Revenue Operations",
  city: "[EVENT_CITY]",
  state: "[EVENT_STATE]",
  hasEmail: true,
  pageSize: 15
)
```
Filter: 500-2500 employees, not a customer, not already in SFDC.
Only enrich the top 10 the rep plans to reach out to (10 credits):
```
zoominfo_enrich_contacts(
  contactIds: [top 10 IDs],
  requiredFields: ["email"],
  outputFields: ["firstName", "lastName", "jobTitle", "email", "directPhoneNumber", "company", "city", "state"]
)
```

Output the target list grouped by tier. Rep runs `/account-research-hub [ACCOUNT]` on their top picks.

---

### FRIDAY: Rotation Review

**Load full team accounts:** On Friday, load the Top 25 CSV for ALL roster reps (not just the requesting rep). If CSV not found, query SFDC for all roster reps' owned accounts:
```sql
SELECT Id, Name, OwnerId, Owner.Name, Industry, NumberOfEmployees,
  accountIntentScore6sense__c, accountBuyingStage6sense__c
FROM Account
WHERE OwnerId IN ([ALL_REP_SFDC_IDS])
  AND NumberOfEmployees >= 500
  AND NumberOfEmployees <= 2500
  AND Type != 'Customer'
ORDER BY Owner.Name, accountIntentScore6sense__c DESC
```

Check activity on all Top 25 accounts in last 14 days:
```sql
SELECT AccountId, Account.Name, ActivityDate, Subject
FROM Task
WHERE AccountId IN ([top_25_ids])
  AND OwnerId = '[REP_SFDC_ID]'
  AND (NOT Subject LIKE '%Clearbit%')
  AND ActivityDate >= LAST_N_DAYS:14
ORDER BY AccountId, ActivityDate DESC
```

**Rotate OUT:** 0 activities in 14 days, or activities but zero engagement back (no replies, no meetings).

**Rotate IN candidates** (signal-hot accounts not in anyone's Top 25):
```sql
SELECT Id, Name, Industry, NumberOfEmployees,
  accountIntentScore6sense__c, accountBuyingStage6sense__c
FROM Account
WHERE accountBuyingStage6sense__c IN ('Consideration', 'Decision', 'Purchase')
  AND NumberOfEmployees >= 500
  AND NumberOfEmployees <= 2500
  AND Id NOT IN ([all_team_top_25_ids])
  AND Id NOT IN (SELECT AccountId FROM Opportunity WHERE StageName NOT IN ('Closed Won', 'Closed Lost'))
ORDER BY accountIntentScore6sense__c DESC
LIMIT 10
```

Output: "Drop [X], add [Y] because [reason]."

---

## Output Format

```
# [REP NAME] — [DAY], [FULL DATE]

## Signal Surges

[Purchase stage — WORK TODAY]
1. [Account] — Purchase, Intent [X], [employees] emp, [industry]. Last touched [date].
   Network: [graph_account_network result — connected to X customers / warm intro via Y]
   Champion: [graph_champion_movers result — if any]
   Run: /account-research-hub [Account]

[Decision stage — work this week]
2. [Account] — Decision, Intent [X], [employees] emp. Last touched [date].
3. [Account] — Decision, Intent [X], [employees] emp. Never touched.

[Or: "No surges today."]

## Top 25 Account of the Day: [ACCOUNT NAME]
Rank #[X], Score [X], [vertical], [employees] emp. Last touched [date or "never"].
Key signal: [from CSV]
Pipeline coverage: [from Clari — X.Xx vs 3.0x target]
SVF value anchor: [Solution] solves [pain]. [Value driver]: [X]% improvement.
Run: /account-research-hub [Account]

## [DAY-SPECIFIC SECTION — only if Tuesday/Wednesday/Friday]

[Tuesday: Win-Back Targets — includes loss reason segment, UserEvidence proof point, SVF anchor]
[Wednesday: Event Targets for [EVENT] ([DATES], [CITY])]
[Friday: Rotation Review — full team view]

[Ranked list of accounts with key data points]
[For top picks: "Run: /account-research-hub [Account]"]

## Reminders
- [Upcoming event callouts if within 2 weeks]
- [Product webinar or campaign from marketing if relevant this week]

Run /prospect [name] again tomorrow.
```

---

## Guardrails

1. If an account has an active open opportunity, flag it: "Active opp — coordinate with opp owner, don't cold outreach."
2. Do NOT generate outreach copy. That's `/account-research-hub`.
3. Do NOT generate deep account briefs. That's `/account-research-hub`.
4. Keep the output to one screen. This is a 2-minute read, not a 20-minute report.
5. Save output to: `./outputs/skill-runs/prospect/[YYYY-MM-DD]-[rep]-[day].md`

## When to Suggest Other Skills

| Situation | Suggest |
|-----------|---------|
| Any account the rep wants to work today | `/account-research-hub [Account]` |
| Active opportunity needs inspection | `/deal-review [Opp]` |
| Stalled deals need coaching | `/stage-zero` |
| Lost to a known competitor | `/competitive-intel [Account]` |
| Win-back list needs full generation with outreach copy | `/win-back` |
| Need customer proof points for outreach | `userevidence_search_assets` via `/account-research-hub` |
| Pipeline coverage concern | `/forecast-review [Rep]` |
| Account network / warm intro paths | `graph_account_network` via `/account-research-hub` |
