skills/playbooks/client-package-notion/SKILL.md
Package all work done for a client into a shareable Notion page with subpages and Google Sheets. Reads the client's folder (strategies, campaigns, content, leads, notes) and builds a structured Notion workspace the client can browse. Lead list CSVs are uploaded to Google Sheets and linked from the Notion pages. Use when you want to deliver work to a client in a polished, navigable format.
npx skillsauth add athina-ai/goose-skills client-package-notionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Package all GTM work for a client into a structured, shareable Notion page with subpages and Google Sheets. Reads the client's workspace folder and builds a navigable delivery package.
| Input | Required | Default | Description |
|-------|----------|---------|-------------|
| client_name | Yes | -- | Client folder name under clients/ (e.g., truewind) |
| intro_message | No | -- | Custom introduction message for the top-level page. If not provided, generate a professional intro based on the assets found. |
| recipient_name | No | -- | Name of the person receiving the package (used in intro) |
| recipient_context | No | -- | Any framing context for the delivery (e.g., "we built these to capitalize on the Botkeeper shutdown") |
| include_strategies | No | true | Whether to include strategy documents |
| include_campaigns | No | true | Whether to include campaign assets |
| include_content | No | true | Whether to include content drafts |
| include_leads | No | true | Whether to include lead lists (uploaded to Google Sheets) |
| include_conference_speakers | No | true | Whether to include conference speaker data |
Requires access to:
No API keys need to be set manually — both are accessed through MCP.
Read the client folder at clients/<client_name>/ and inventory all available assets:
clients/<client_name>/
├── context.md # Client context, ICP, positioning
├── competitors.md # Competitive landscape (optional)
├── notes.md # Running log of decisions
├── strategies/ # Strategy documents (*.md)
├── campaigns/ # Campaign assets (folders or *.md)
├── content/ # Content drafts (blog posts, comparison pages, etc.)
└── leads/ # Lead lists (*.csv and *.md)
For each directory, list all files and read their contents. Build an inventory:
.md files in strategies/ (skip orchestration prompts or internal-only files).md files in campaigns/.md files in content/.csv files (for Google Sheets upload) and .md files (for Notion pages) in leads/If a directory doesn't exist or is empty, skip it in the output.
For each .csv file found in leads/:
Create a new Google Sheet using GOOGLESHEETS_CREATE_GOOGLE_SHEET1
<Client Name> — <Lead List Name> (derive from filename)Truewind — Botkeeper LinkedIn LeadsParse the CSV and write data using GOOGLESHEETS_BATCH_UPDATE
first_cell_location: "A1" and valueInputOption: "USER_ENTERED"Record the spreadsheet URL for linking in Notion pages later
If there are multiple CSVs, create sheets in parallel.
Design the page hierarchy based on what assets exist. The general pattern is:
Top-Level Page: "<Client Name> — GTM Engineering Package"
├── Introduction (on the top-level page itself)
├── Strategies (subpage — all strategy docs combined or as separate child pages)
├── <Signal-Specific Section> (subpage — groups campaigns + content for a specific signal)
│ ├── Campaign 1 (subpage)
│ ├── Campaign 2 (subpage)
│ ├── Content Asset 1 (subpage)
│ └── Content Asset 2 (subpage)
├── Conference Speakers (subpage — if speaker data exists)
└── Lead Lists (linked as Google Sheets from relevant pages)
Grouping logic:
When assets don't fit a theme: Create a "Campaigns" subpage and a "Content" subpage as catch-all sections.
Present the planned structure to the user and confirm before creating pages.
Create a standalone workspace-level page with:
Title: <Client Name> — GTM Engineering: Growth Strategies & Execution (or similar)
Content: An introduction section that includes:
recipient_name provided)recipient_contextIf intro_message is provided, use it as-is. Otherwise, generate a professional intro based on:
Use Notion-flavored Markdown. Do NOT include the page title in the content (Notion renders it automatically from properties).
For each section in the planned structure, create subpages under the top-level page:
For strategy documents:
.md content from the fileFor campaign documents:
.md contentFor content assets (blog posts, comparison pages):
.md contentFor lead/conference data in .md format:
.md contentFor grouped sections (e.g., "Botkeeper Strategies"):
Create pages in batches where possible (the Notion API supports creating multiple pages in one call when they share a parent).
After all pages are created, output a summary:
## Package Created
**Top-level page:** [<title>](<notion-url>)
**Subpages:**
- [Strategies](<url>) — 2 strategy documents
- [Botkeeper Strategies](<url>) — 4 assets (2 campaigns, 2 content pieces)
- [LinkedIn Engagement](<url>)
- [Listicle Author Outreach](<url>)
- [SEO Article](<url>)
- [Comparison Page](<url>)
- [Conference Speakers](<url>)
**Google Sheets:**
- [Lead List 1](<sheets-url>) — 12 leads
- [Lead List 2](<sheets-url>) — 9 leads
**Total:** X pages created, Y Google Sheets created
When converting client .md files to Notion content, keep these in mind:
<table> XML syntax, but standard markdown tables (| col | col |) also work\* \~ \ $ [ ] < > { } | ^`[text](url) works<empty-block/> for intentional blank lines (regular blank lines are stripped)<page url="...">Title</page> to reference existing child pages (but pages are created via the API, not inline)The skill produces:
| Problem | Solution |
|---------|----------|
| Notion page creation fails | Check that the Notion MCP server is connected. Try creating a simple test page first. |
| Google Sheets creation fails | Verify the Rube MCP server is connected and Google Sheets has an active connection. Run RUBE_MANAGE_CONNECTIONS with toolkits: ["googlesheets"]. |
| CSV parsing errors | Check the CSV for encoding issues. The skill expects UTF-8 CSVs with a header row. |
| Notion content looks wrong | Review Notion-flavored Markdown spec. Common issues: unescaped special characters, H1 in content (conflicts with page title), or raw HTML that Notion doesn't support. |
| Too many pages to create | Notion API supports batch page creation (up to 100 pages per call with shared parent). Group subpages by parent and batch create. |
| Lead list is empty or malformed | Skip that CSV and note it in the summary. Don't create an empty Google Sheet. |
metadata:
requires:
mcp_servers: ["notion", "rube"]
cost: "Free (Notion API + Google Sheets via Composio)"
content-media
Takes an existing screen recording or demo video and adds professional zoom/pan effects synchronized to the narration. Uses transcript-driven zoom targeting and Remotion for rendering. Optionally replaces audio with a soundtrack.
tools
Repurposes long-form video (podcasts, interviews, talks) into short-form vertical clips for Instagram Reels, TikTok, and YouTube Shorts. Handles transcription, moment selection, clip extraction, speaker-tracked reframing (16:9 to 9:16), and animated captions.
development
Creates talking head videos from any source material (docs, changelogs, blog posts, notes, transcripts). Produces multi-scene videos with avatar narration over screenshots/images using HeyGen v2 API. Supports Quick Shot and Full Producer modes.
tools
Generates Instagram-ready product reels from any e-commerce product page URL. Scrapes product images, classifies by type, generates AI-animated clips via Higgsfield API, creates text overlays with style presets, and composes a 15-20 second reel with music. Supports model-based and product-only reels.