{"id":"2ca4c230-7e52-4b8f-8c28-b6a9471e0ee9","shortId":"futxaL","kind":"skill","title":"email-report","tagline":"Auto-generate the weekly or monthly email performance report in three formats — Slack update, CEO email, board-deck section — from real ESP data","description":"# Email Report\n\nThe 3-hour tax every email marketer pays: pulling last period's numbers, charting the trend, explaining the variance, and writing commentary in the right voice for the audience. This skill does it in one command and outputs three versions — Slack ping, CEO email, board deck section — so you can ship the one your stakeholder needs.\n\n**Requires:** Cogny MCP + a connected ESP. [Sign up](https://cogny.com)\n\n## Usage\n\n`/email-report` — monthly report, all three formats (default)\n`/email-report weekly` — last 7 days\n`/email-report monthly ceo` — monthly, only the CEO email\n`/email-report weekly slack` — weekly, only the Slack update\n\n## Prerequisites Check\n\nDetect connected ESP. If none, stop and prompt.\n\n## Steps\n\n### 1. Define the period\n\n| Mode | Current window | Comparison |\n|------|----------------|------------|\n| weekly | last 7 days | prior 7 days + 4-week rolling avg |\n| monthly | last 30 days | prior 30 days + 12-week rolling avg |\n\nState the exact date ranges up front.\n\n### 2. Pull the data\n\n**Per-ESP tool adapter.** The right tool depends on which ESP is connected:\n\n| Data | Klaviyo | Mailchimp | Rule | Get a Newsletter |\n|------|---------|-----------|------|------------------|\n| Campaign list | `list_campaigns` | `tool_list_campaigns` | `tool_list_campaigns` | `tool_list_sent` |\n| Campaign metrics | `get_campaign` + `list_events` (metric-filtered) | `tool_get_report` | `tool_get_campaign_statistics` | `tool_get_report` |\n| Automation / flow list | `list_flows` | `tool_list_automations` | `tool_list_journeys` | **not available** |\n| Flow metrics | `get_flow` | `tool_get_automation` | `tool_list_journeys` (limited) | **not available** |\n| Subscriber list size | `list_profiles` (count) | `tool_get_audience` | `tool_list_subscribers` (count) | `tool_list_contacts` (count) |\n| Revenue per send | ✓ via `list_events` with `metric=\"Placed Order\"` | **not available** | **not available** | **not available** |\n\nFor the current window AND the comparison window, pull:\n\n**Campaign broadcasts:**\n- Each campaign's subject, send date, recipient count, opens, unique opens, clicks, unique clicks, unsubs, bounces.\n- **Revenue attributed — Klaviyo only.** For Klaviyo, fetch \"Placed Order\" events scoped to the send window and attribute by campaign. For Mailchimp/Rule/Get a Newsletter, omit the revenue line entirely from the report and call it out.\n\n**Flows / automations — varies by ESP:**\n- Klaviyo: flow name, triggered volume, revenue per flow (via events).\n- Mailchimp: automation name, sends, opens, clicks (no revenue).\n- Rule: journey name + limited metrics.\n- Get a Newsletter: **no flow object exists.** Skip this section; use a \"recurring sends\" proxy if the user has a newsletter cadence.\n\n**List-level metrics:**\n- List size at period start vs end\n- New subscribers in period\n- Unsubscribes in period\n- Net change + growth rate\n\n### 3. Compute the report metrics\n\nFor each window, compute:\n\n| Metric | Calc | Why it matters |\n|--------|------|----------------|\n| Sends | total emails delivered | Volume sanity check |\n| Open rate | unique opens / delivered | Subject/preheader effectiveness (MPP-distorted) |\n| CTR | unique clicks / delivered | True engagement |\n| CTOR | unique clicks / unique opens | Content effectiveness (MPP-resilient) |\n| Unsub rate | unsubs / delivered | List health signal |\n| Bounce rate | bounces / sent | Deliverability signal |\n| Revenue per send | ecom revenue / delivered (if available) | The only metric execs actually care about |\n| List growth rate | (ending - starting) / starting | Acquisition health |\n\nShow **absolute value + % change vs prior period + % change vs rolling baseline**.\n\n### 4. Identify movers\n\nRank campaigns in the current window by open rate, CTR, and revenue. Identify:\n- **Top performer** — best campaign by revenue (or by CTOR if no revenue data)\n- **Worst performer** — bottom by revenue/CTOR\n- **Anomaly** — campaign whose metrics are >2σ from the user's typical baseline (surprise hit or surprise flop)\n\nFor each, write a one-sentence \"why\" hypothesis based on visible attributes (subject style, send time, segment, content type).\n\n### 5. Explain variance\n\nDon't just say \"CTR dropped 8%.\" Explain it. Cross-reference:\n\n- Did send volume change? More sends to less-engaged segments drag rate metrics even if absolute revenue is fine.\n- Did the segment mix change? (All-list sends vs engaged-only)\n- Did cadence change? (More sends per week → fatigue)\n- Did a specific campaign drag the average? (One dud to a huge segment)\n- Did list hygiene change? (Big unsub event or re-engagement deadline)\n- Was there an external event? (holiday, launch, outage)\n\nPhrase findings as **claim → evidence**:\n\n> \"Open rate dropped from 28% to 22%. Two of four sends this month went to the dormant 180-day segment (120k recipients at 14% open), which pulled the average down. If you look at engaged-segment sends only, open rate actually rose from 34% to 36%.\"\n\n### 6. Generate the three outputs\n\n#### 6.1 Slack update (≤500 chars, 3 bullets)\n\n```\n📧 Email – <period label>\n• Sends: <N> ( <±>% vs prior)  |  Open: <X>% ( <±>pp)  |  CTR: <Y>% ( <±>pp)\n• 🏆 Top: \"<subject>\" — <metric>  |  ⚠️ Watch: <one-line variance call>\n• Revenue: $<X> ( <±>% vs prior)  |  List: <±>% net growth  |  Next week: <1-line plan>\n```\n\n#### 6.2 CEO email (≤250 words, narrative)\n\n```\nSubject: Email performance — <period label>\n\nHi <CEO first name>,\n\nQuick update on email this <period>:\n\nHeadline: <one-sentence summary — is it good, bad, or mixed?>\n\nWhat happened:\n[2-3 sentences explaining volume, rate-metric movement, revenue. Tie to a\nbusiness narrative — launches, campaigns, segment focus.]\n\nWhat's notable:\n[1-2 sentences. Top campaign or surprise win or flagged concern.]\n\nWhat's next:\n[1-2 sentences. Concrete plan for next period. Pick ONE action, not five.]\n\nHappy to dig deeper on any of this.\n\n<signoff>\n```\n\n#### 6.3 Deck section (full)\n\n```\nEMAIL PERFORMANCE — <period label>\n\nSummary\n  <two-sentence narrative>\n\nKey metrics\n  [table: current / prior / rolling / %Δ]\n  Sends, Open rate, CTR, CTOR, Unsub rate, Revenue per send, List size\n\nTrend\n  [describe what a chart should show — up-and-to-the-right, step change, etc.]\n\nCampaign roundup\n  🏆 Best:  \"<subject>\"\n           <segment>, <recipients>, <metric wins>\n  📉 Worst: \"<subject>\"\n           <what happened>\n\nFlow performance (if applicable)\n  [table of top 3 flows by revenue, with recipient count and conv rate]\n\nWhat moved the needle\n  [2-3 bullets — claim → evidence]\n\nPlan for next <period>\n  [2-3 bullets — concrete, owned, measurable]\n```\n\n### 7. Save the narrative\n\nPersist the period summary to Cogny's context tree so future `/email-report` runs have historical continuity:\n\n```json\n{\n  \"path\": \"insights/email/reports/<period label>\",\n  \"body\": \"<the narrative summary + key numbers>\"\n}\n```\n\nBefore generating the report, also read any previous report from this path to reference in the \"What happened\" narrative (\"this matches the trend from last month\" / \"this reverses the dip we flagged\").\n\n### 8. Create findings for notable issues\n\nFor anything serious (unsub rate spike, deliverability drop, revenue collapse), create a finding so it lands in the dashboard — not just the report.\n\n```json\n{\n  \"title\": \"Unsub rate doubled vs prior month (0.18% → 0.37%)\",\n  \"body\": \"<which campaigns drove it, which segment, recommended fix>\",\n  \"action_type\": \"list_hygiene\",\n  \"priority\": \"high\"\n}\n```\n\n## Output defaults\n\n- If the user didn't specify a format, output all three and label them clearly.\n- Lead with the Slack version — fastest to read if they're skimming.\n- Include the raw metric table at the end so the user can copy numbers out.\n\n## Notes\n\n- **Open rate is noisy** since Apple MPP. Always report CTR and CTOR alongside. If open rate moves >5pp but CTOR doesn't, it's probably MPP population change, not real behavior.\n- For first-ever run, there's no prior period to compare to — call this out explicitly and use absolute numbers only.\n- **Don't invent revenue numbers.** Klaviyo is the only ESP in the cogny-mcp-proxy that exposes revenue data today (via \"Placed Order\" events with a `value` field). For Mailchimp, Rule, and Get a Newsletter, say \"revenue not exposed by this ESP's MCP\" and report on engagement only — or let the user paste in list-revenue so you can compute CPM/revenue-per-send on their numbers.","tags":["email","report","claude","code","marketing","skills","cognyai","agent-skills","ai-agents","claude-code","claude-skills","cluade-mcp"],"capabilities":["skill","source-cognyai","skill-email-report","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-skills","topic-cluade-mcp","topic-cursor","topic-geo","topic-growth-hacking","topic-llm","topic-marketing","topic-mcp","topic-seo"],"categories":["claude-code-marketing-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cognyai/claude-code-marketing-skills/email-report","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cognyai/claude-code-marketing-skills","source_repo":"https://github.com/cognyai/claude-code-marketing-skills","install_from":"skills.sh"}},"qualityScore":"0.474","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 48 github stars · SKILL.md body (8,392 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:58:06.158Z","embedding":null,"createdAt":"2026-04-22T18:59:06.835Z","updatedAt":"2026-05-18T18:58:06.158Z","lastSeenAt":"2026-05-18T18:58:06.158Z","tsv":"'-2':813,827 '-3':791,915,923 '/email-report':97,104,109,117,943 '0.18':1026 '0.37':1027 '1':136,759,812,826 '12':162 '120k':702 '14':705 '180':699 '2':173,790,914,922 '22':688 '250':765 '28':686 '2σ':556 '3':32,423,739,900 '30':157,160 '34':726 '36':728 '4':151,517 '5':588 '500':737 '5pp':1105 '6':729 '6.1':734 '6.2':762 '6.3':847 '7':107,146,149,928 '8':597,989 'absolut':507,619,1138 'acquisit':504 'action':836,1037 'actual':495,723 'adapt':181 'all-list':628 'alongsid':1100 'also':961 'alway':1095 'anomali':551 'anyth':996 'appl':1093 'applic':896 'attribut':317,332,580 'audienc':59,264 'auto':5 'auto-gener':4 'autom':230,237,249,352,367 'avail':242,255,284,286,288,490 'averag':650,710 'avg':154,165 'bad':785 'base':577 'baselin':516,562 'behavior':1118 'best':535,891 'big':661 'board':22,75 'board-deck':21 'bodi':951,1028 'bottom':548 'bounc':315,477,479 'broadcast':299 'bullet':740,916,924 'busi':803 'cadenc':400,637 'calc':433 'call':348,1132 'campaign':198,201,204,207,211,214,225,298,301,334,521,536,552,647,806,816,889,1030 'care':496 'ceo':19,73,111,115,763 'chang':420,509,513,606,627,638,660,887,1115 'char':738 'chart':44,877 'check':126,443 'claim':680,917 'clear':1059 'click':311,313,371,456,462 'cogni':88,937,1154 'cogny-mcp-proxi':1153 'cogny.com':95 'collaps':1004 'command':66 'commentari':52 'compar':1130 'comparison':143,295 'comput':424,431,1203 'concern':822 'concret':829,925 'connect':91,128,190 'contact':271 'content':465,586 'context':939 'continu':947 'conv':908 'copi':1084 'count':261,268,272,307,906 'cpm/revenue-per-send':1204 'creat':990,1005 'cross':601 'cross-refer':600 'ctor':460,541,865,1099,1107 'ctr':454,529,595,747,864,1097 'current':141,291,524,857 'dashboard':1013 'data':28,176,191,545,1160 'date':169,305 'day':108,147,150,158,161,700 'deadlin':668 'deck':23,76,848 'deeper':842 'default':103,1044 'defin':137 'deliv':440,448,457,473,488 'deliver':481,1001 'depend':185 'describ':874 'detect':127 'didn':1048 'dig':841 'dip':986 'distort':453 'doesn':1108 'dormant':698 'doubl':1022 'drag':614,648 'drop':596,684,1002 'drove':1031 'dud':652 'ecom':486 'effect':450,466 'email':2,11,20,29,36,74,116,439,741,764,769,775,851 'email-report':1 'end':411,501,1079 'engag':459,612,634,667,717,1189 'engaged-on':633 'engaged-seg':716 'entir':343 'esp':27,92,129,179,188,355,1150,1183 'etc':888 'even':617 'event':216,278,325,365,663,673,1165 'ever':1122 'everi':35 'evid':681,918 'exact':168 'exec':494 'exist':385 'explain':47,589,598,793 'explicit':1135 'expos':1158,1180 'extern':672 'fastest':1065 'fatigu':643 'fetch':322 'field':1169 'filter':219 'find':678,991,1007 'fine':622 'first':1121 'first-ev':1120 'five':838 'fix':1036 'flag':821,988 'flop':567 'flow':231,234,243,246,351,357,363,383,893,901 'focus':808 'format':16,102,1052 'four':691 'front':172 'full':850 'futur':942 'generat':6,730,958 'get':195,213,221,224,228,245,248,263,379,1174 'good':784 'growth':421,499,756 'happen':789,974 'happi':839 'headlin':777 'health':475,505 'hi':771 'high':1042 'histor':946 'hit':564 'holiday':674 'hour':33 'huge':655 'hygien':659,1040 'hypothesi':576 'identifi':518,532 'includ':1072 'insights/email/reports':950 'invent':1143 'issu':994 'journey':240,252,375 'json':948,1018 'key':854,955 'klaviyo':192,318,321,356,1146 'label':1057 'land':1010 'last':40,106,145,156,981 'launch':675,805 'lead':1060 'less':611 'less-engag':610 'let':1192 'level':403 'limit':253,377 'line':342,760 'list':199,200,203,206,209,215,232,233,236,239,251,257,259,266,270,277,402,405,474,498,630,658,754,871,1039,1198 'list-level':401 'list-revenu':1197 'look':714 'mailchimp':193,366,1171 'mailchimp/rule/get':336 'market':37 'match':977 'matter':436 'mcp':89,1155,1185 'measur':927 'metric':212,218,244,280,378,404,427,432,493,554,616,797,855,1075 'metric-filt':217 'mix':626,787 'mode':140 'month':10,98,110,112,155,694,982,1025 'move':911,1104 'movement':798 'mover':519 'mpp':452,468,1094,1113 'mpp-distort':451 'mpp-resili':467 'name':358,368,376 'narrat':767,804,931,953,975 'need':86 'needl':913 'net':419,755 'new':412 'newslett':197,338,381,399,1176 'next':757,825,832,921 'noisi':1091 'none':131 'notabl':811,993 'note':1087 'number':43,956,1085,1139,1145,1207 'object':384 'omit':339 'one':65,83,573,651,779,835 'one-sent':572,778 'open':308,310,370,444,447,464,527,682,706,721,745,862,1088,1102 'order':282,324,1164 'outag':676 'output':68,733,1043,1053 'own':926 'past':1195 'path':949,968 'pay':38 'per':178,274,362,484,641,869 'per-esp':177 'perform':12,534,547,770,852,894 'period':41,139,408,415,418,512,833,934,1128 'persist':932 'phrase':677 'pick':834 'ping':72 'place':281,323,1163 'plan':761,830,919 'popul':1114 'pp':746,748 'prerequisit':125 'previous':964 'prior':148,159,511,744,753,858,1024,1127 'prioriti':1041 'probabl':1112 'profil':260 'prompt':134 'proxi':393,1156 'pull':39,174,297,708 'quick':772 'rang':170 'rank':520 'rate':422,445,471,478,500,528,615,683,722,796,863,867,909,999,1021,1089,1103 'rate-metr':795 'raw':1074 're':666,1070 're-engag':665 'read':962,1067 'real':26,1117 'recipi':306,703,905 'recommend':1035 'recur':391 'refer':602,970 'report':3,13,30,99,222,229,346,426,960,965,1017,1096,1187 'requir':87 'resili':469 'revenu':273,316,341,361,373,483,487,531,538,544,620,751,799,868,903,1003,1144,1159,1178,1199 'revenue/ctor':550 'revers':984 'right':55,183,885 'roll':153,164,515,859 'rose':724 'roundup':890 'rule':194,374,1172 'run':944,1123 'saniti':442 'save':929 'say':594,1177 'scope':326 'section':24,77,388,849 'segment':585,613,625,656,701,718,807,1034 'send':275,304,329,369,392,437,485,583,604,608,631,640,692,719,742,861,870 'sent':210,480 'sentenc':574,780,792,814,828 'serious':997 'ship':81 'show':506,879 'sign':93 'signal':476,482 'sinc':1092 'size':258,406,872 'skill':61 'skill-email-report' 'skim':1071 'skip':386 'slack':17,71,119,123,735,1063 'source-cognyai' 'specif':646 'specifi':1050 'spike':1000 'stakehold':85 'start':409,502,503 'state':166 'statist':226 'step':135,886 'stop':132 'style':582 'subject':303,581,768 'subject/preheader':449 'subscrib':256,267,413 'summari':781,853,935,954 'surpris':563,566,818 'tabl':856,897,1076 'tax':34 'three':15,69,101,732,1055 'tie':800 'time':584 'titl':1019 'today':1161 'tool':180,184,202,205,208,220,223,227,235,238,247,250,262,265,269 'top':533,749,815,899 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-skills' 'topic-cluade-mcp' 'topic-cursor' 'topic-geo' 'topic-growth-hacking' 'topic-llm' 'topic-marketing' 'topic-mcp' 'topic-seo' 'total':438 'tree':940 'trend':46,873,979 'trigger':359 'true':458 'two':689 'type':587,1038 'typic':561 'uniqu':309,312,446,455,461,463 'unsub':314,470,472,662,866,998,1020 'unsubscrib':416 'up-and-to-the-right':880 'updat':18,124,736,773 'usag':96 'use':389,1137 'user':396,559,1047,1082,1194 'valu':508,1168 'vari':353 'varianc':49,590 'version':70,1064 'via':276,364,1162 'visibl':579 'voic':56 'volum':360,441,605,794 'vs':410,510,514,632,743,752,1023 'watch':750 'week':8,105,118,120,144,152,163,642,758 'went':695 'whose':553 'win':819 'window':142,292,296,330,430,525 'word':766 'worst':546,892 'write':51,570 'δ':860","prices":[{"id":"36b2cdf5-db00-4b59-9ec5-3bd5a8e9fd6b","listingId":"2ca4c230-7e52-4b8f-8c28-b6a9471e0ee9","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cognyai","category":"claude-code-marketing-skills","install_from":"skills.sh"},"createdAt":"2026-04-22T18:59:06.835Z"}],"sources":[{"listingId":"2ca4c230-7e52-4b8f-8c28-b6a9471e0ee9","source":"github","sourceId":"cognyai/claude-code-marketing-skills/email-report","sourceUrl":"https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/email-report","isPrimary":false,"firstSeenAt":"2026-04-22T18:59:06.835Z","lastSeenAt":"2026-05-18T18:58:06.158Z"}],"details":{"listingId":"2ca4c230-7e52-4b8f-8c28-b6a9471e0ee9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cognyai","slug":"email-report","github":{"repo":"cognyai/claude-code-marketing-skills","stars":48,"topics":["agent-skills","ai-agents","claude-code","claude-skills","cluade-mcp","cursor","geo","growth-hacking","llm","marketing","mcp","seo","vibe","windsurf"],"license":null,"html_url":"https://github.com/cognyai/claude-code-marketing-skills","pushed_at":"2026-05-07T20:57:53Z","description":"Marketing skills for Claude Code — SEO audits and implementation, ad analysis, ad optimization. Free skills need no account. $9/mo for live Search Console, Bing & LinkedIn data.","skill_md_sha":"3193ebcdec9814ff01a044f0f66c3fd1cf5d7dad","skill_md_path":"skills/email-report/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/email-report"},"layout":"multi","source":"github","category":"claude-code-marketing-skills","frontmatter":{"name":"email-report","description":"Auto-generate the weekly or monthly email performance report in three formats — Slack update, CEO email, board-deck section — from real ESP data"},"skills_sh_url":"https://skills.sh/cognyai/claude-code-marketing-skills/email-report"},"updatedAt":"2026-05-18T18:58:06.158Z"}}