Newsletter signal scanner

Subscribe to and scan industry newsletters for buying signals, competitor mentions, ICP pain-point language, and market shifts.

How to use it

  1. Hit Copy SKILL.md — or use the Claude Code line below to get every file.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/monitoring/composites/newsletter-signal-scanner#main ~/.claude/skills/newsletter-signal-scanner

For one project only, change the path to .claude/skills/newsletter-signal-scanner. This skill also uses newsletter-signals.json, run_skill.py — copying SKILL.md alone won't be enough. See the folder on GitHub.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text203 lines
newsletter-signal-scanner/SKILL.md203 lines6.3 KBpushed 96d agoRawView on GitHub

Newsletter Signal Scanner

Turn your newsletter subscriptions into a structured intelligence feed. Monitors an AgentMail inbox for incoming newsletters, extracts signal-relevant content by keyword campaign, and delivers a weekly digest of what matters — competitor mentions, ICP pain language, market shifts, and emerging topics.

When to Use

  • "Monitor industry newsletters for competitor mentions"
  • "Alert me when newsletters mention [topic] or [company]"
  • "What are newsletters writing about this week in our space?"
  • "Set up newsletter monitoring for [client]"

Phase 0: Intake

Newsletters to Monitor

  1. Which newsletters should be subscribed to and monitored? (List names or URLs)
    • If unknown, ask: "What 3-5 newsletters does your ICP read?" — then use sponsored-newsletter-finder to discover others.
  2. Which AgentMail inbox should receive them? (Or should we create a new one?)

Keyword Campaigns

  1. Competitor names to track (e.g., "Clay", "Apollo", "Outreach")
  2. ICP pain-language terms to track (e.g., "outbound struggling", "pipeline dried up", "SDR ramp")
  3. Market shift terms (e.g., "AI SDR", "agent-led growth", "GTM engineer")
  4. Your brand name (to catch mentions)

Output

  1. Digest delivery: Slack channel, email, or markdown file? (default: markdown file)
  2. Frequency: daily or weekly? (default: weekly)

Save campaign config to the current working directory as newsletter-signals.json (or user-specified path).

{
  "inbox_id": "<agentmail_inbox_id>",
  "keyword_campaigns": {
    "competitors": ["Clay", "Apollo", "Outreach", "Salesloft"],
    "pain_language": ["pipeline is down", "outbound isn't working", "SDR ramp"],
    "market_shifts": ["AI SDR", "GTM engineer", "agent-led"],
    "brand_mentions": ["YourCompany", "yourcompany.com"]
  },
  "newsletters": [
    {"name": "Exit Five", "from_domain": "exitfive.com"},
    {"name": "The GTM Newsletter", "from_domain": "gtmnewsletter.com"}
  ],
  "output": {
    "format": "markdown",
    "path": "newsletter-signals-[DATE].md"
  }
}

Phase 1: Scan Inbox

Use the AgentMail API (agentmail.dev) to fetch new emails from the monitored inbox:

Fetch emails from inbox <inbox_id> since <last_scan_date>
Filter to: known newsletter senders (match against newsletters config)

For each email:

  • Extract subject, sender, date, full body text
  • Strip HTML → plain text for analysis

Phase 2: Apply Keyword Campaigns

For each newsletter email, scan for keyword matches:

for email in emails:
    matches = {}
    for campaign, keywords in keyword_campaigns.items():
        found = []
        for keyword in keywords:
            if keyword.lower() in email.body.lower():
                # Extract context: 50 chars before + keyword + 50 chars after
                context = extract_context(email.body, keyword)
                found.append({"keyword": keyword, "context": context})
        if found:
            matches[campaign] = found
    email.signal_matches = matches

Only include emails with at least one keyword match in the digest.

Phase 3: Extract Signal Snippets

For each matched email, extract clean signal snippets:

Competitor mention example:

Newsletter: The GTM Newsletter | Date: 2026-03-05 Campaign: competitors Keyword: "Clay" Context: "...teams that use Clay for enrichment are seeing 3x better personalization rates compared to..."

Pain language example:

Newsletter: Exit Five | Date: 2026-03-04 Campaign: pain_language Keyword: "outbound isn't working" Context: "...a lot of founders telling me outbound isn't working the way it used to. The reply rates I'm seeing..."

Phase 4: Output Format

# Newsletter Signal Digest — Week of [DATE]

## Summary
- Newsletters scanned: [N]
- Emails with signals: [N]
- Top trending topic: [topic]

---

## Competitor Mentions

### Clay
- **[Newsletter Name]** — [Date]
  > "[Context snippet]"
  Source: [email subject] | [URL if available]

### [Other Competitor]
...

---

## ICP Pain Language

Signals suggesting your ICP is feeling pain your product solves:

- **[Newsletter Name]** — [Date]
  > "[Context snippet]"
  — Relevance: [why this matters]

---

## Market Shift Signals

Emerging topics gaining newsletter coverage:

- **"[Topic]"** — mentioned in [N] newsletters this week
  > "[Context snippet]"

---

## Your Brand Mentions
[Any mentions of your company or product]

---

## Recommended Actions
1. [Specific action based on signals — e.g., "Exit Five is covering AI SDR fatigue — good moment to publish our take"]
2. [Competitive response if needed]

Save to the current working directory as newsletter-signals-[YYYY-MM-DD].md (or user-specified path).

Phase 5: Setup — Subscribe to Newsletters

For first-time setup, subscribe the AgentMail address to target newsletters:

  1. Get the AgentMail inbox address (via AgentMail API at agentmail.dev)
  2. For each newsletter, visit subscription page and submit the AgentMail address
  3. Confirm subscriptions (check inbox for confirmation emails)
  4. Allow 1-2 weeks of accumulation before first full digest

Scheduling

Run weekly (Monday morning recommended):

# Every Monday at 7am — before the team's standup
0 7 * * 1 python3 run_skill.py newsletter-signal-scanner --client <client-name>

Cost

Component Cost
AgentMail inbox Depends on AgentMail pricing
Email parsing + keyword matching Free (local logic)
Total Near-zero ongoing cost

Tools Required

  • AgentMail API (agentmail.dev) — for inbox access. Requires AGENTMAIL_API_KEY environment variable and the agentmail pip package (pip3 install agentmail).

Trigger Phrases

  • "Scan newsletters for this week's signals"
  • "What are industry newsletters saying about [topic]?"
  • "Run newsletter signal scanner for [client]"
  • "Set up newsletter monitoring"
1---
2name: newsletter-signal-scanner
3description: >
4 Subscribe to and scan industry newsletters for buying signals, competitor mentions,
5 ICP pain-point language, and market shifts. Parses incoming newsletter emails via
6 AgentMail, matches against keyword campaigns, and delivers a weekly digest of
7 actionable signals. Use when a marketing team wants to turn newsletter subscriptions
8 into an ongoing intelligence feed without manual reading.
9tags: [monitoring]
10---
11 
12# Newsletter Signal Scanner
13 
14Turn your newsletter subscriptions into a structured intelligence feed. Monitors an AgentMail inbox for incoming newsletters, extracts signal-relevant content by keyword campaign, and delivers a weekly digest of what matters — competitor mentions, ICP pain language, market shifts, and emerging topics.
15 
16## When to Use
17 
18- "Monitor industry newsletters for competitor mentions"
19- "Alert me when newsletters mention [topic] or [company]"
20- "What are newsletters writing about this week in our space?"
21- "Set up newsletter monitoring for [client]"
22 
23## Phase 0: Intake
24 
25### Newsletters to Monitor
261. Which newsletters should be subscribed to and monitored? (List names or URLs)
27 - If unknown, ask: "What 3-5 newsletters does your ICP read?" — then use `sponsored-newsletter-finder` to discover others.
282. Which AgentMail inbox should receive them? (Or should we create a new one?)
29 
30### Keyword Campaigns
313. Competitor names to track (e.g., "Clay", "Apollo", "Outreach")
324. ICP pain-language terms to track (e.g., "outbound struggling", "pipeline dried up", "SDR ramp")
335. Market shift terms (e.g., "AI SDR", "agent-led growth", "GTM engineer")
346. Your brand name (to catch mentions)
35 
36### Output
377. Digest delivery: Slack channel, email, or markdown file? (default: markdown file)
388. Frequency: daily or weekly? (default: weekly)
39 
40Save campaign config to the current working directory as `newsletter-signals.json` (or user-specified path).
41 
42```json
43{
44 "inbox_id": "<agentmail_inbox_id>",
45 "keyword_campaigns": {
46 "competitors": ["Clay", "Apollo", "Outreach", "Salesloft"],
47 "pain_language": ["pipeline is down", "outbound isn't working", "SDR ramp"],
48 "market_shifts": ["AI SDR", "GTM engineer", "agent-led"],
49 "brand_mentions": ["YourCompany", "yourcompany.com"]
50 },
51 "newsletters": [
52 {"name": "Exit Five", "from_domain": "exitfive.com"},
53 {"name": "The GTM Newsletter", "from_domain": "gtmnewsletter.com"}
54 ],
55 "output": {
56 "format": "markdown",
57 "path": "newsletter-signals-[DATE].md"
58 }
59}
60```
61 
62## Phase 1: Scan Inbox
63 
64Use the AgentMail API (agentmail.dev) to fetch new emails from the monitored inbox:
65 
66```
67Fetch emails from inbox <inbox_id> since <last_scan_date>
68Filter to: known newsletter senders (match against newsletters config)
69```
70 
71For each email:
72- Extract subject, sender, date, full body text
73- Strip HTML → plain text for analysis
74 
75## Phase 2: Apply Keyword Campaigns
76 
77For each newsletter email, scan for keyword matches:
78 
79```python
80for email in emails:
81 matches = {}
82 for campaign, keywords in keyword_campaigns.items():
83 found = []
84 for keyword in keywords:
85 if keyword.lower() in email.body.lower():
86 # Extract context: 50 chars before + keyword + 50 chars after
87 context = extract_context(email.body, keyword)
88 found.append({"keyword": keyword, "context": context})
89 if found:
90 matches[campaign] = found
91 email.signal_matches = matches
92```
93 
94Only include emails with at least one keyword match in the digest.
95 
96## Phase 3: Extract Signal Snippets
97 
98For each matched email, extract clean signal snippets:
99 
100**Competitor mention example:**
101> Newsletter: The GTM Newsletter | Date: 2026-03-05
102> Campaign: competitors
103> Keyword: "Clay"
104> Context: "...teams that use **Clay** for enrichment are seeing 3x better personalization rates compared to..."
105 
106**Pain language example:**
107> Newsletter: Exit Five | Date: 2026-03-04
108> Campaign: pain_language
109> Keyword: "outbound isn't working"
110> Context: "...a lot of founders telling me **outbound isn't working** the way it used to. The reply rates I'm seeing..."
111 
112## Phase 4: Output Format
113 
114```markdown
115# Newsletter Signal Digest — Week of [DATE]
116 
117## Summary
118- Newsletters scanned: [N]
119- Emails with signals: [N]
120- Top trending topic: [topic]
121 
122---
123 
124## Competitor Mentions
125 
126### Clay
127- **[Newsletter Name]** — [Date]
128 > "[Context snippet]"
129 Source: [email subject] | [URL if available]
130 
131### [Other Competitor]
132...
133 
134---
135 
136## ICP Pain Language
137 
138Signals suggesting your ICP is feeling pain your product solves:
139 
140- **[Newsletter Name]** — [Date]
141 > "[Context snippet]"
142 — Relevance: [why this matters]
143 
144---
145 
146## Market Shift Signals
147 
148Emerging topics gaining newsletter coverage:
149 
150- **"[Topic]"** — mentioned in [N] newsletters this week
151 > "[Context snippet]"
152 
153---
154 
155## Your Brand Mentions
156[Any mentions of your company or product]
157 
158---
159 
160## Recommended Actions
1611. [Specific action based on signals — e.g., "Exit Five is covering AI SDR fatigue — good moment to publish our take"]
1622. [Competitive response if needed]
163```
164 
165Save to the current working directory as `newsletter-signals-[YYYY-MM-DD].md` (or user-specified path).
166 
167## Phase 5: Setup — Subscribe to Newsletters
168 
169For first-time setup, subscribe the AgentMail address to target newsletters:
170 
1711. Get the AgentMail inbox address (via AgentMail API at agentmail.dev)
1722. For each newsletter, visit subscription page and submit the AgentMail address
1733. Confirm subscriptions (check inbox for confirmation emails)
1744. Allow 1-2 weeks of accumulation before first full digest
175 
176## Scheduling
177 
178Run weekly (Monday morning recommended):
179 
180```bash
181# Every Monday at 7am — before the team's standup
1820 7 * * 1 python3 run_skill.py newsletter-signal-scanner --client <client-name>
183```
184 
185## Cost
186 
187| Component | Cost |
188|-----------|------|
189| AgentMail inbox | Depends on AgentMail pricing |
190| Email parsing + keyword matching | Free (local logic) |
191| **Total** | **Near-zero ongoing cost** |
192 
193## Tools Required
194 
195- **AgentMail API** (agentmail.dev) — for inbox access. Requires `AGENTMAIL_API_KEY` environment variable and the `agentmail` pip package (`pip3 install agentmail`).
196 
197## Trigger Phrases
198 
199- "Scan newsletters for this week's signals"
200- "What are industry newsletters saying about [topic]?"
201- "Run newsletter signal scanner for [client]"
202- "Set up newsletter monitoring"
203 

Discussion

Alternatives

Also in Email sequences