--- id: opp-followup-campaign title: Opportunity follow-up campaign enabled: true owner: goal:sales-weapon-ae-copilot mode: task schedule: kind: weekly timezone: America/New_York time: 09:00:00 dow: [Mon, Wed, Fri] delivery: - chat_id: ed71ac27-f2e4-4dc7-a4f7-45d96439bf9b metadata: originating_chat_context_json: '{"chat_id":"d2262570-9e80-4954-824e-cbddf1cc3835","origin_provider":"main","chat_kind":"direct","event_kind":"message","require_mention":false,"device_id":"11d6f508-35e2-48ec-9e92-39b4972d1a29"}' presentation_locale: en-US --- Opportunity follow-up campaign for Sean Mattsson (Mon/Wed/Fri 9:00am ET). Timed, contextual follow-up touches on the VERIFIED OPPORTUNITY CALL LIST to advance accounts toward meetings and closes. This is a cadenced campaign designed to get results. AUTO-SEND (Sean's standing order 2026-10-06): follow-up emails SEND directly — no drafts awaiting review. Drafts-only is dead for campaigns. FOLLOW-UP PHILOSOPHY (Sean's standing order 2026-10-06, his words: "1 email is not the end its the process that counts sometimes it take 17 emails spread out to get through to someone"): follow-up is the campaign, not an afterthought. Touches NEVER end for non-response — they pivot. Every touch must bring a FRESH angle (new intel via Tavily, new seasonal hook, new value prop, new contact, new channel). Never repeat the same message. Never send a "breakup" or terminal touch. Never mark closed-lost for non-response. The sequence only pauses when they reply or buy. Track which angles have been used per account in touches[] so nothing repeats. TARGET: ~/workspace/goals/sales-weapon-ae-copilot/hidden_files/campaign-opportunity-list.json (68 accounts loaded 2026-10-05 from Stratix_Verified_Opportunity_Call_List.xlsx). Work through Priority A first (emailable), then Priority B, then Priority C. TARGET RULES (hard): - ONLY accounts with emailable=true in campaign-opportunity-list.json for email touches. - NEVER email accounts flagged ambiguous/unverified (Washington Township, St John's Lutheran Church, and the 19 in the Needs Verification sheet) until Sean confirms them. - Call-only accounts (no email) go on Sean's call list, never emailed. - NEVER email Jaindl Farms (DO NOT CONTACT). PERSONALIZATION (Tavily, 2026-10-05+): - Before sending for an account, run the personalization module: `~/workspace/goals/sales-weapon-ae-copilot/hidden_files/personalize.py "" --vertical --location "" --mode news` (Vertical and location come from the campaign JSON entry; default vertical=business, location="".) - Results are cached 7 days — repeat accounts cost nothing extra. - Weave ONE fresh intel point into the email opener where it fits naturally: a recent expansion, leadership change, funding award, or tech initiative. NEVER invent intel — use only what Tavily returned with a source URL. If Tavily returns nothing useful, fall back to the CRM-based opener without forcing it. - The intel point replaces the generic opener, not the CTA or seasonal angle. - CITATION (Sean's standing order 2026-10-06, refined same day): cite the AI model in EVERY chat report to Sean where a model sourced the work — e.g. "angle via Tavily". One parenthetical per line. Chat responses ONLY: never in customer-facing copy (emails, proposals, attachments), never in saved documents/files — record the source fact there without the model tag. QUALITY GATES (check before every send — hold and flag instead of sending if any fail): - Verified recipient address; no template tokens; no placeholders; correct signature and title Account Relationship Manager; zero em-dashes/en-dashes; no pricing/margins/costs without Sean's per-deal approval; never to Jaindl/ambiguous/unverified/bounced addresses. STANDING EMAIL RULES (see MEMORY.md): from sean@seanmattsson.com only; full Stratix signature; title Account Relationship Manager; zero em-dashes/en-dashes; warm and formal, under 120 words; thread with +reply --message-id. - PRE MEETING FORM (Sean's standing rule 2026-10-05): whenever an email asks a contact to complete the form, call it exactly "Pre Meeting Form" (never "Stratix Pre Meeting IT Form" or variants) AND always attach the PDF at ~/workspace/goals/sales-weapon-ae-copilot/hidden_files/pre-meeting-form.pdf. - PRICING (hard): customers never see pricing, margins, costs, or internal/sensitive info without Sean's explicit per-deal approval. SEASONAL OPTIMIZATION (Q4 2026 — update as seasons change): - Budget-flush angle (Oct-Dec): many orgs have "use it or lose it" budgets. Work "before year-end budget closes" into follow-ups where natural. - Section 179 (through Dec 31): equipment purchased and placed in service by Dec 31 can be fully written off. Mention alongside relevant opps; always add "worth a conversation with your accountant" and NEVER give tax advice. - Holiday blackouts: NO outreach Nov 25-29 (Thanksgiving week) or Dec 24-Jan 1 (Christmas/New Year). On runs falling in those windows, stay silent. - Early December urgency: first two weeks of December are the last real selling window — prioritize closing language and meeting locks. - Winter vigilance: protect Q4 closes (Bethany Wesleyan $25K and East Allen Township $12.5K, both Dec 23) — they get priority every run through year-end. EACH RUN: 1. Read campaign-opportunity-list.json. For each emailable account, determine follow-up status: - Check Gmail for replies since the last outbound touch. - A touch is DUE if: 3+ days since last touch AND no reply received. There is no maximum touch count — the sequence continues indefinitely with fresh angles per the FOLLOW-UP PHILOSOPHY above. Check touches[] for which angles were already used and pick a new one. - First-touch accounts with no touches yet are due immediately (work Priority A first, max 5 new first-touches per run to avoid flooding). - SKIP if: a reply is awaiting Sean's action, or another cron already has a touch scheduled within 2 days (check the To Do List to avoid duplication). - SKIP the run entirely (stay silent) if today falls in a holiday blackout window above. 2. Per-run target: 18 sends (19 on Friday) under the Meeting Production Business Plan (55/week across Mon/Wed/Fri). Work Priority A first. For each account where a touch is due: run personalize.py (news mode), then SEND one contextual follow-up directly with a FRESH angle (never repeat a prior touch's angle — check touches[]): - Open with the Tavily intel point where one exists; otherwise reference the specific CRM opportunity, stage, and last interaction. - Weave in the seasonal angle where it fits (budget flush, Section 179, year-end). - One clear call to action. - Thread it as a reply where a thread exists. - Send with: hatch_gws_cli gmail --account d48c9e2643f643aeb3c4dacf347245b8 +send --to --subject --body --html (or +reply --message-id for threads) 3. REPORTING (urgent-only, Sean's order 2026-10-05): stay SILENT on routine runs where emails were sent normally. Post in the Work chat ONLY when: (a) a reply needs Sean's action, (b) a send failed or bounced, (c) a high-value opp ($10K+) needs his decision, or (d) zero touches were due AND pipeline needs his attention. When reporting, cite the model per the CITATION rule above. 4. Log every sent touch in the account's touches[] in campaign-opportunity-list.json with date, type "sent", and the angle used (so future runs pivot, never repeat). 5. Append a one-line note to ~/memory/YYYY-MM-DD.md (ET date): how many sent, for which accounts. RESULTS FOCUS: every touch must move the account forward — confirm a meeting, unstick a stalled reply, or advance the stage. Never "just checking in" without a specific ask. The process is the campaign: keep showing up with something new until they reply or buy.