Track outreach pitches and draft contextual follow-up emails. Monitors a pitch tracker (Google Sheet or local markdown), checks Gmail for replies, flags stal...
Monitor outreach pitches, detect non-replies, and draft contextual, tiered follow-up emails.
gog CLI (required) — for Gmail access bash
which gog
Google account configured with gog ( gog gmail --account <email>)
Pitch tracker — one of:
Ask the user (or detect from context):
ParameterRequiredDescriptiongmail_accountyesEmail account to check (e.g., you@company.com)tracker_typeyes"sheet" or "markdown"tracker_idif sheetGoogle Sheet IDtracker_pathif markdownPath to local .md filesender_nameyesName to use in follow-upssender_roleoptionalRole/title for email signature contextfollow_up_styleoptional"warm" (default), "direct", or "casual"
From Google Sheet:
bash
gog sheets get <SHEET_ID> "<TAB_NAME>!A1:Z500" --json --account <gmail_account>
Expected columns (flexible — adapt to whatever columns exist):
From Markdown file: Read the file. Expected format (flexible):
markdown
## [Brand Name]
- **Contact:** Name <email>
- **Sent:** YYYY-MM-DD
- **Subject:** [pitch subject]
- **Summary:** [what was pitched]
- **Status:** Sent / Replied / Closed
Adapt to whatever format the user actually uses. Extract: contact email, brand, date sent, pitch content/subject, current status.
Before flagging ANY pitch as "needs follow-up," you MUST complete ALL of these checks. Do not skim. Do not skip. A false positive wastes the user's time and erodes trust.
Check 1: Search for direct replies
bash
gog gmail search "from:<contact_email>" --max 10 --account <gmail_account>
Look for any reply from the contact after the pitch send date, even in a different thread.
Check 2: Search by domain (catches new threads)
bash
gog gmail search "from:@<contact_domain>" --max 10 --account <gmail_account>
Brands often respond from a different person at the same company. Check for ANY email from that domain since the pitch date.
Check 3: Search sent folder for user follow-ups
bash
gog gmail search "to:<contact_email> OR to:@<contact_domain>" --max 10 --account <gmail_account>
Check if the user already sent a response, follow-up, or forwarded the thread.
Check 4: Search drafts for unsent responses
bash
gog gmail search "in:drafts <contact_name> OR <brand_name>" --max 5 --account <gmail_account>
A draft response means the user is working on it. Do NOT flag as needing follow-up.
Check 5: Check if forwarded
bash
gog gmail search "subject:Fwd: <original_subject>" --max 5 --account <gmail_account>
If the original email was forwarded to a colleague, talent, or team member, it may be in progress.
Check 6: Read full email threads For any matching threads, read the FULL thread content — not just the latest message. Context changes mid-thread.
bash
gog gmail get <message_id> --account <gmail_account>
Check 7: Check recent memory/context If available, check conversation history, daily memory files, or any tracker for recent context about this deal. The user may have mentioned handling it verbally or via another channel (text, WhatsApp, call).
Classification (only after ALL checks):
For pitches needing follow-up, determine tier based on days since last outreach:
Days Since Last ContactTierTone3-6 daysDay 3: Gentle NudgeLight, brief, bumping to top of inbox7-13 daysDay 7: Add ValueShare something useful — article, idea, new angle14+ daysDay 14: Final Check-InDirect, low-pressure, leave door open
If user already sent one follow-up, advance to next tier.
Each draft MUST reference the original pitch content. No generic "just checking in" emails.
Day 3 — Gentle Nudge:
text
Subject: Re: [Original Subject]
Hi [Name],
Wanted to bump this to the top of your inbox — [one sentence referencing the specific pitch content, e.g., "the proposal for a summer campaign series featuring outdoor content"].
Happy to jump on a quick call or send more details if helpful.
[Sender Name]
Day 7 — Add Value:
text
Subject: Re: [Original Subject]
Hi [Name],
Following up on my note about [specific pitch reference]. Since I sent that over, [add relevant value: a new idea, a relevant trend, a recent success story, a new content example].
Would love to explore how this could work for [Brand]. Open to a quick chat this week?
[Sender Name]
For the "add value" component, search the web for a recent relevant tidbit:
text
web_search "[brand name] [niche] news 2026"
Incorporate a genuine, relevant insight — not filler.
Day 14 — Final Check-In:
text
Subject: Re: [Original Subject]
Hi [Name],
Circling back one last time on [specific pitch reference]. Totally understand if the timing isn't right — just wanted to make sure this didn't get buried.
If [Brand] is exploring [relevant type of partnership] down the line, I'd love to be on your radar. Always happy to connect.
[Sender Name]
Adjust tone based on follow_up_style:
markdown
# Outreach Follow-Up Report
**Date:** [today]
**Account:** [gmail_account]
**Pitches Reviewed:** [total count]
## ✅ Replies Received ([count])
| Brand | Contact | Replied On | Action Needed |
|-------|---------|------------|---------------|
| [Brand] | [Name] | [date] | [Review reply / Schedule call / Send deck] |
## 🔥 Needs Follow-Up ([count])
### Day 3 — Gentle Nudge
**[Brand Name]** → [Contact Name] <[email]>
- Original pitch: [summary]
- Sent: [date] ([X] days ago)
- Draft:
> [Full draft email]
### Day 7 — Add Value
**[Brand Name]** → [Contact Name] <[email]>
- Original pitch: [summary]
- Sent: [date] ([X] days ago)
- Draft:
> [Full draft email]
### Day 14 — Final Check-In
**[Brand Name]** → [Contact Name] <[email]>
- Original pitch: [summary]
- Sent: [date] ([X] days ago)
- Draft:
> [Full draft email]
## ⏳ Too Fresh to Follow Up ([count])
| Brand | Contact | Sent | Follow-Up Date |
|-------|---------|------|----------------|
| [Brand] | [Name] | [date] | [date when Day 3 hits] |
## 📊 Pipeline Summary
- Total active pitches: [X]
- Awaiting reply: [X]
- Replied: [X]
- Follow-ups needed today: [X]
If the user approves the follow-up drafts:
bash
gog gmail draft create --to "<email>" --subject "Re: [subject]" --body "<draft body>" --account <gmail_account>
Always ask before creating drafts. Never send emails without explicit approval.
IssueActiongog not installedStop and instruct: npm i -g gog or equivalentGmail auth expiredPrompt: gog gmail auth --account <email>Sheet not accessibleVerify Sheet ID and sharing permissionsNo pitches found in trackerReport empty tracker, suggest formatContact email missingFlag the pitch, skip Gmail check for itRate limited on GmailSpace queries with 1-2s delays, process in batchesMarkdown format unexpectedAdapt parsing to whatever structure exists, ask user if ambiguous