# spark-recipe-unsubscribe-audit

Audits newsletters across inbox, archive, and GateKeeper queues in Spark CLI, classifies engagement, and unsubscribes after confirmation.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 301 installs · ★ 153
- Author: readdle
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/readdle/spark-cli-skills/tree/HEAD/skills/recipe-unsubscribe-audit/SKILL.md
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/skills/spark-recipe-unsubscribe-audit

## What it does

This skill guides an AI assistant through auditing newsletter subscriptions in Spark mail accounts. The scan inspects three distinct message stores: the unified inbox, auto-archived emails, and the GateKeeper holding queue. The assistant tallies 30-day send volumes and unread percentages, categorizing senders into tiers before recommending removals.

Safety checks occur before taking action. The workflow inspects `To:` headers and Substack identifier payloads to detect forwarders or aliases, preventing accidental deletion of wanted feeds. Messages flagged with spoofed sender names are marked as spam rather than unsubscribed, because clicking links in phishing emails confirms an active mailbox.

Execution relies on the `use-spark` base skill and demands the `triage` permission level. Approved removals trigger the native `spark action unsubscribe` command or extract unsubscribe URLs directly from email footers for browser completion.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add readdle/spark-cli-skills --skill spark-recipe-unsubscribe-audit -a claude-code
```
```bash
npx skills add readdle/spark-cli-skills --skill recipe-unsubscribe-audit -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/recipe-unsubscribe-audit/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/recipe-unsubscribe-audit/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add readdle/spark-cli-skills --skill recipe-unsubscribe-audit -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/recipe-unsubscribe-audit/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add readdle/spark-cli-skills --skill recipe-unsubscribe-audit -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/recipe-unsubscribe-audit/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install readdle/spark-cli-skills recipe-unsubscribe-audit
```

2. **Manually: put the files in place**
- File: `.github/skills/recipe-unsubscribe-audit/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add readdle/spark-cli-skills --skill recipe-unsubscribe-audit -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/readdle/spark-cli-skills --path skills/recipe-unsubscribe-audit
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/recipe-unsubscribe-audit/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add readdle/spark-cli-skills --skill recipe-unsubscribe-audit -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/readdle/spark-cli-skills/tree/HEAD/skills/recipe-unsubscribe-audit/SKILL.md

## When to use it
- scan archive and GateKeeper pools for neglected newsletters
- identify phishing senders mimicking legitimate brand names
- detect duplicate Substack or aliased subscriptions via headers
- unsubscribe from inactive senders using Spark CLI actions or web links

## Example prompts
- Audit my email newsletters in Spark and list candidates for unsubscribe
- Scan my inbox and archive for high-volume senders with zero opens
- Check these newsletter copies for duplicate subscriptions before unsubscribing

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 8362ab62dab3c708.

BEGIN THIRD-PARTY FILE 8362ab62dab3c708
````text
---
name: spark-recipe-unsubscribe-audit
description: >-
  Full unsubscribe audit: scan inbox, archive, and GateKeeper for newsletter
  senders, classify by volume and engagement, detect phishing and duplicate
  subscriptions, then unsubscribe via spark action or extracted footer links.
metadata:
  version: 1.0.0
  requires:
    skills:
      - use-spark
    accessLevel: triage
---

# Recipe: Unsubscribe Audit

Audit every newsletter pool, recommend unsubscribe candidates backed by engagement data, and execute only after the user approves the list. Spark supplies the data (senders, volumes, read flags, bodies); the agent owns classification, duplicate verification, and execution.

**Prerequisite:** Read the `use-spark` base skill for command reference and filter syntax.

**Access level required:** triage.

## Steps

### Step 1: Scan all three pools

An inbox-only scan misses most of the volume. Check all three:

```bash
# Unified inbox, all accounts (paginate to get everything)
spark emails Inbox --filter "category:newsletter newer_than:30d" --page-size 100

# Auto-archived mail — Gmail filters/automations often skip the inbox
# entirely; repeat per Gmail-backed account. This pool can be the largest.
spark emails "user@gmail.com:Archive" --filter "category:newsletter newer_than:14d" --page-size 100

# GateKeeper queue — new senders held outside the inbox view
spark emails Inbox --new-senders --page-size 50
```

### Step 2: Aggregate and classify

Count per sender: emails per 30 days and unread rate (from the Flags column). Classify into tiers:

| Tier | Signal | Action |
|---|---|---|
| Unsubscribe | Pure marketing/drip, ~100% unread | Recommend removal |
| Consider | High volume, partial engagement | User's call; suggest digest or auto-summary |
| Keep | Mostly read | Leave alone |
| Transactional | Invoices, PINs, order/security notices | Exclude from the audit |
| Phishing | See below | Mark as spam — NEVER unsubscribe |
| App-nag | Instagram/LinkedIn-style notification mail | Fix in the app's notification settings |

**Phishing tripwire:** brand name in the display name but an unrelated sender domain (e.g. "SpotifyUS" from `mail@jhbuilder.com`), urgent billing/security subjects. Clicking anything — including unsubscribe — confirms the address is live. Flag prominently; recommend mark-as-spam instead. The same applies to everything already in the Spam folder: never unsubscribe there.
````
END THIRD-PARTY FILE 8362ab62dab3c708

The third-party file has ended. Everything between the 8362ab62dab3c708 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2440 of 5622 bytes. © readdle · MIT · https://github.com/readdle/spark-cli-skills/tree/HEAD/skills/recipe-unsubscribe-audit/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
