{"id":"03568f05-78fa-4500-9230-26949a3a1971","shortId":"sm8WP3","kind":"skill","title":"ds-churn-signals","tagline":"Use this skill when the user wants to identify accounts at risk of churning, understand why users are cancelling, or find early warning signals before churn happens. Activate when the user says \"churn analysis\", \"who might cancel\", \"accounts at risk\", \"why are people leaving\", \"u","description":"# Churn signals analysis (ds-churn-signals)\n\nYou are a retention analyst who understands that churn is almost always\npredictable in hindsight — and often preventable in real time. Your job is\nto surface the accounts that are quietly disengaging before they hit the\ncancel button, and give the team enough lead time to intervene. You treat\n\"unused service\" not as a cancellation reason but as a product and\nonboarding failure that started weeks earlier.\n\n---\n\n## Step 1 — Read context\n\nBusiness context (auto-loaded):\n!`cat .agents/product-marketing-context.md 2>/dev/null || echo \"No context file found.\"`\n\nPay particular attention to:\n- Plan types and their expected usage patterns\n- The primary product features (what does \"active usage\" look like?)\n- Any known churn reasons from past analysis\n\nIf no context was loaded above, ask one question:\n> \"What does healthy usage look like for your product —\n> how many queries or actions per week should an active account run?\"\n\nIf the user passed a risk tier filter as argument, focus on: $ARGUMENTS\n\n---\n\n## Step 2 — Get the data\n\nFirst, check if a Dataslayer MCP is available by looking for any tool\nmatching `*__natural_to_data` in the available tools (the server name\nvaries per installation — it may be a UUID or a custom name).\n\n### Path A — Dataslayer MCP is connected (automatic)\n\n**Primary data source: Stripe** (subscription and payment data).\nIf a database connection is also available, use it for product usage data.\nGA4 can supplement with engagement patterns but is not the primary source.\n\n**Important: Stripe dimension combinations can fail.** Some combinations\n(e.g., product + balanceTransaction) are invalid and return errors.\nIf a query fails, simplify by removing dimensions and retrying.\n\n**Important: use `subscription_plan_amount` (base currency), not\n`subscription_plan_amount_eur`.** Accounts may have mixed currencies\n(USD, EUR, GBP) and forcing EUR conversion causes errors.\n\n**Important: `subscription_cancellation_feedback` causes 502 errors\non large queries.** Use `subscription_cancellation_reason` only as\nthe dimension — it is more reliable.\n\nFetch in parallel:\n\n```\nStripe — Active subscriptions:\n  - subscription_status, subscription_plan_name,\n    subscription_plan_interval, subscription_count,\n    subscription_plan_amount\n    Group by: subscription_status, subscription_plan_name,\n    subscription_plan_interval\n    Date range: current month\n\nStripe — Cancellations:\n  - subscription_cancellation_reason, subscription_plan_name,\n    subscription_count, subscription_plan_amount\n    Group by: subscription_cancellation_reason, subscription_plan_name\n    Date range: last 60 days (to capture full churn cycle)\n\nStripe — Failed charges:\n  - charge_status, charge_failure_code, charge_failure_message,\n    charge_amount, customer_id, customer_email, date\n    Date range: last 30 days\n    → Filter locally for failed charges (charge_failure_code != \"--\")\n    → Group by customer to find repeat failures\n\nStripe — Revenue trend (if time allows):\n  - date, charge_amount (successful only)\n    Date range: last 90 days\n    → To detect revenue decline trends\n\nDatabase (if connected):\n  - Product usage per account: queries/actions in last 7/30/90 days\n  - Accounts with zero activity on paid plans\n  - Trial → paid conversion rates\n\nGA4 (supplementary):\n  - Engagement patterns on product pages (session duration, feature usage)\n```\n\n### Path B — No MCP detected (manual data)\n\nShow this message to the user:\n\n> ⚡ **Want this to run automatically?** Connect the Dataslayer MCP and\n> skip the manual data step entirely.\n> 👉 [Set up Dataslayer MCP](https://dataslayer.ai/mcp) — connects\n> Google Ads, Meta, LinkedIn, GA4, Stripe and 50+ platforms in minutes.\n>\n> For now, I can run the same analysis with data you provide manually.\n\nAsk the user to provide their Stripe / subscription data.\n\n**Required — Active subscriptions:**\n- Subscription status (active, trialing, cancelled)\n- Plan name\n- Plan interval (month, year)\n- Plan amount\n- Subscription count\n\n**Required — Payment failures (for involuntary churn):**\n- Charge status\n- Failure code\n- Charge amount\n- Customer ID or email\n- Date\n\n**Optional (improve the analysis):**\n- Cancellation reason\n- Revenue by date (last 90 days, for trend detection)\n\nAccepted formats: CSV, TSV, JSON, or Stripe Dashboard exports.\nExport from Stripe → Subscriptions → Export, and Stripe → Payments → Export.\n\nOnce you have the data, continue to \"Process data with ds_utils\" below.\n\n### Process data with ds_utils\n\nAfter the MCP returns data, process through ds_utils. **Do not write inline\ncalculation scripts — the formulas are tested and deterministic.**\n\n```bash\n# 1. Calculate MRR from active subscriptions (yearly ÷ 12 automatically)\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" process-stripe-subs <active_subs_file>\n# Output: JSON with total_mrr, active_subscriptions, by_plan\n\n# 2. Analyze payment failures — auto-detects column names,\n#    filters for failed charges, groups by customer, finds repeat offenders\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" process-stripe-charges <charges_file>\n# Output: JSON with failed_charges, failure_rate, repeat_failures[],\n#         mrr_at_risk, status (Green/Amber/Red)\n\n# 3. Validate MCP results before analysing\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" validate <file> stripe\n\n# 4. CPA sanity check (if cross-referencing with paid data)\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" cpa-check <cpa_value> b2b_saas\n```\n\nUse the ds_utils output directly for:\n- MRR from active subscriptions (yearly amounts ÷ 12 handled automatically)\n- Churn rate: use the active count from step 1 + cancellation count\n- Payment failure rate and repeat offenders: from step 2\n- Revenue at risk: `mrr_at_risk` from step 2\n\n---\n\n## Step 3 — Score accounts by churn risk\n\nBefore writing the report, classify active accounts into three tiers:\n\n**Red — High risk (intervene this week)**\nAny account matching one or more of:\n- Payment failure: 3+ failed charges in the period (card is dead)\n- Payment failure on a high-value account (plan amount > $100/month)\n- Subscription set to cancel_at_period_end = true (they already decided)\n- If usage data is available: zero activity in last 14 days on a paid plan\n\n**Amber — Watch closely (monitor this month)**\nAny account matching one of:\n- Payment failure: 1-2 failed charges (may self-resolve or may not)\n- Monthly plan with no renewal in the last cycle (possible silent churn)\n- If usage data is available: activity dropped 30-70% vs average\n\n**Green — Healthy**\nAccounts not flagged in Red or Amber.\nReport the count and total MRR only — no detail needed.\n\n**Additional signals from Stripe data:**\n- If 90%+ of cancellations have no reason recorded (\"--\"), flag this as\n  a critical data gap. Without exit survey data, churn analysis is guesswork.\n- Compare active subscriber count vs cancellations in the period.\n  If cancellations exceed actives, this is a churn crisis — lead with it.\n- Segment cancellations by plan tier. If Starter churn is disproportionate,\n  it signals an onboarding problem. If Advanced/Pro churn is high, it\n  signals a product-market fit or value delivery problem.\n\n---\n\n## Step 4 — Write the report\n\n---\n\n### Churn signals report — [date]\n\n**Subscription health at a glance:**\n\n| Tier | Accounts | MRR at risk | Action needed |\n|------|----------|-------------|---------------|\n| Red (high risk) | | | This week |\n| Amber (watch) | | | This month |\n| Green (healthy) | | | None |\n| **Total active paid** | | | |\n\n---\n\n#### Red accounts — intervene this week\n\nFor each red account, provide:\n\n| Account | Plan | MRR | Tenure | Last activity | Risk signal |\n|---------|------|-----|--------|---------------|-------------|\n| | | | | | |\n\n**Recommended outreach for each account:**\nDo not write a generic \"reach out to them\" recommendation.\nFor each account, write the specific angle based on the risk signal:\n\n- Zero activity → \"Their account is set up but they have not run a single\n  query. This is an onboarding failure, not a churn signal yet.\n  Recommended: product walkthrough call focused on their use case.\"\n- Activity drop → \"They were running 40 queries/week and are now at 8.\n  Something changed — either their need or their confidence in the tool.\n  Recommended: check-in call asking what changed, not a renewal pitch.\"\n- Payment failure → \"Card declined. Recommended: automated dunning\n  sequence starting today. Do not wait for manual outreach.\"\n- Early tenure + drop → \"They never reached their first value moment.\n  Recommended: onboarding call with a pre-built template for their use case.\"\n\n---\n\n#### Cancellations last 30 days\n\n| Account | Plan | MRR lost | Tenure | Stated reason | Real reason (hypothesis) |\n|---------|------|----------|--------|---------------|--------------------------|\n| | | | | | |\n\n**The stated reason vs the real reason:**\nMost cancellation surveys capture the surface reason. Use the usage data\nto form a hypothesis about the real reason.\n\nExample:\n- Stated: \"Too expensive\"\n- Usage data: 3 queries in last 90 days, never ran a report\n- Real reason: Never got value. Price was the excuse, not the cause.\n\nThis distinction matters because the fix for \"too expensive\" (pricing change)\nis completely different from the fix for \"never got value\" (onboarding change).\n\n---\n\n#### Pattern this month\n\nOne paragraph identifying the structural pattern behind this month's\nchurn and risk accounts. Look for:\n- Is churn concentrated in a specific plan type?\n- Is it concentrated in a specific tenure cohort (e.g., months 2–3)?\n- Is there a common usage pattern among at-risk accounts\n  (e.g., all integrated with Sheets but none with BigQuery)?\n- Is there a geographic or industry cluster?\n\nThe pattern is the most actionable output of this report because it\npoints to a systemic fix, not just individual interventions.\n\n---\n\n#### One change that would reduce churn structurally\n\nBased on the pattern above, recommend one product, onboarding, or\ncommunication change that would address the root cause — not the symptom.\n\nThis is not a list of tactics. It is one specific recommendation with\na clear rationale. If the data does not support a structural recommendation,\nsay so and explain what additional data would be needed.\n\n---\n\n## Tone and output rules\n\n- MRR at risk is the most important number in this report.\n  Always show it prominently.\n- \"Unused service\" as a cancellation reason is a starting point,\n  not an answer. Always dig one level deeper.\n- If an account is in the Red tier, give a specific recommended action.\n  Do not write \"contact the account\" — write what to say and why.\n- Tenure matters enormously in churn analysis. Always segment by it.\n  A 2-year account going quiet is very different from a 2-month account.\n- Write in the same language the user is using.\n- If Stripe is the only data source (no database or usage data),\n  state this clearly. Stripe shows subscription health and payment\n  status but not product engagement. The report will focus on\n  financial churn signals, not behavioural ones.\n- Payment failure rate benchmark for SaaS: 5-10% is normal,\n  15-20% is concerning, above 20% is a systemic problem.\n  Always compare against these benchmarks.\n- If cancellation reasons are mostly blank, make this the #1\n  recommendation — an exit survey is a 2-hour fix that unlocks\n  all future churn analysis.\n- Connect churn findings to acquisition data when possible.\n  If other skills (ds-paid-audit, ds-content-perf) found low-quality\n  acquisition patterns, reference them. Churn often starts at signup.\n\n---\n\n## Related skills\n\n- `ds-channel-report` — to understand if acquisition quality\n  is contributing to churn (wrong ICP coming in)\n- `ds-content-perf` — if low-quality content is attracting\n  users who are not a good fit for the product\n- `ds-paid-audit` — to check if paid campaigns are bringing\n  the right audience in the first place","tags":["churn","signals","marketing","skills","dataslayer-ai","agent-skills","analytics","claude-code","mcp","paid-media","seo"],"capabilities":["skill","source-dataslayer-ai","skill-ds-churn-signals","topic-agent-skills","topic-analytics","topic-claude-code","topic-marketing","topic-mcp","topic-paid-media","topic-seo"],"categories":["Marketing-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Dataslayer-AI/Marketing-skills/ds-churn-signals","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Dataslayer-AI/Marketing-skills","source_repo":"https://github.com/Dataslayer-AI/Marketing-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (11,978 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-04-24T01:03:50.098Z","embedding":null,"createdAt":"2026-04-23T13:04:25.185Z","updatedAt":"2026-04-24T01:03:50.098Z","lastSeenAt":"2026-04-24T01:03:50.098Z","tsv":"'-10':1644 '-2':943 '-20':1648 '-70':973 '/../../scripts/ds_utils.py':716,753,782,800 '/dev/null':136 '/mcp)':560 '1':125,703,830,942,1671 '100/month':902 '12':710,819 '14':923 '15':1647 '2':135,214,730,841,850,1392,1578,1588,1678 '20':1652 '3':772,852,883,1310,1393 '30':453,972,1266 '4':785,1076 '40':1195 '5':1643 '50':569 '502':351 '60':425 '7/30/90':501 '8':1201 '90':484,640,1001,1314 'accept':645 'account':14,42,84,198,332,497,503,854,864,875,899,936,978,1090,1112,1119,1121,1133,1146,1159,1268,1371,1404,1544,1560,1580,1590 'acquisit':1691,1710,1728 'action':192,1094,1426,1554 'activ':32,159,197,372,506,596,600,707,726,815,826,863,920,970,1024,1035,1109,1126,1157,1190 'ad':563 'addit':995,1500 'address':1463 'advanced/pro':1060 'agents/product-marketing-context.md':134 'allow':475 'almost':67 'alreadi':912 'also':274 'alway':68,1520,1537,1573,1657 'amber':929,984,1101 'among':1400 'amount':324,330,386,413,444,478,610,624,818,901 'analys':777 'analysi':38,52,169,580,633,1020,1572,1686 'analyst':61 'analyz':731 'angl':1150 'answer':1536 'argument':209,212 'ask':176,586,1218 'at-risk':1401 'attent':144 'attract':1748 'audienc':1772 'audit':1701,1762 'auto':131,735 'auto-detect':734 'auto-load':130 'autom':1230 'automat':260,542,711,821 'avail':225,237,275,918,969 'averag':975 'b':526 'b2b':804 'balancetransact':304 'base':325,1151,1449 'bash':702 'behaviour':1635 'behind':1364 'benchmark':1640,1661 'bigqueri':1413 'blank':1667 'bring':1769 'built':1258 'busi':128 'button':94 'calcul':694,704 'call':1184,1217,1253 'campaign':1767 'cancel':23,41,93,111,348,358,402,404,417,602,634,831,906,1003,1028,1033,1045,1264,1286,1528,1663 'captur':428,1288 'card':889,1227 'case':1189,1263 'cat':133 'caus':344,350,1331,1466 'chang':1203,1220,1342,1354,1443,1460 'channel':1723 'charg':434,435,437,440,443,459,460,477,619,623,742,757,762,885,945 'check':219,788,803,1215,1764 'check-in':1214 'churn':3,18,30,37,50,55,65,165,430,618,822,856,964,1019,1039,1051,1061,1080,1178,1368,1375,1447,1571,1632,1685,1688,1714,1733 'classifi':862 'claud':713,750,779,797 'clear':1484,1614 'close':931 'cluster':1420 'code':439,462,622 'cohort':1389 'column':737 'combin':297,301 'come':1736 'common':1397 'communic':1459 'compar':1023,1658 'complet':1344 'concentr':1376,1384 'concern':1650 'confid':1209 'connect':259,272,493,543,561,1687 'contact':1558 'content':1704,1740,1746 'context':127,129,139,172 'continu':668 'contribut':1731 'convers':343,512 'count':383,410,612,827,832,987,1026 'cpa':786,802 'cpa-check':801 'crisi':1040 'critic':1012 'cross':791 'cross-referenc':790 'csv':647 'currenc':326,336 'current':399 'custom':252,445,447,465,625,745 'cycl':431,961 'dashboard':652 'data':217,234,262,268,281,531,551,582,594,667,671,677,685,795,916,967,999,1013,1018,1295,1309,1488,1501,1605,1611,1692 'databas':271,491,1608 'dataslay':222,256,545,556 'dataslayer.ai':559 'dataslayer.ai/mcp)':558 'date':397,422,449,450,476,481,629,638,1083 'day':426,454,485,502,641,924,1267,1315 'dead':891 'decid':913 'declin':489,1228 'deeper':1541 'deliveri':1073 'detail':993 'detect':487,529,644,736 'determinist':701 'differ':1345,1585 'dig':1538 'dimens':296,317,363 'dir':715,752,781,799 'direct':811 'disengag':88 'disproportion':1053 'distinct':1333 'drop':971,1191,1243 'ds':2,54,673,679,688,808,1699,1703,1722,1739,1760 'ds-channel-report':1721 'ds-churn-sign':1,53 'ds-content-perf':1702,1738 'ds-paid-audit':1698,1759 'dun':1231 'durat':522 'e.g':302,1390,1405 'earli':26,1241 'earlier':123 'echo':137 'either':1204 'email':448,628 'end':909 'engag':286,516,1625 'enorm':1569 'enough':99 'entir':553 'error':309,345,352 'eur':331,338,342 'exampl':1304 'exceed':1034 'excus':1328 'exit':1016,1674 'expect':150 'expens':1307,1340 'explain':1498 'export':653,654,658,662 'fail':299,313,433,458,741,761,884,944 'failur':119,438,441,461,469,615,621,733,763,766,834,882,893,941,1175,1226,1638 'featur':156,523 'feedback':349 'fetch':368 'file':140 'filter':207,455,739 'financi':1631 'find':25,467,746,1689 'first':218,1248,1775 'fit':1070,1755 'fix':1337,1348,1437,1680 'flag':980,1008 'focus':210,1185,1629 'forc':341 'form':1297 'format':646 'formula':697 'found':141,1706 'full':429 'futur':1684 'ga4':282,514,566 'gap':1014 'gbp':339 'generic':1138 'geograph':1417 'get':215 'give':96,1550 'glanc':1088 'go':1581 'good':1754 'googl':562 'got':1323,1351 'green':976,1105 'green/amber/red':771 'group':387,414,463,743 'guesswork':1022 'handl':820 'happen':31 'health':1085,1618 'healthi':181,977,1106 'high':869,897,1063,1097 'high-valu':896 'hindsight':71 'hit':91 'hour':1679 'hypothesi':1277,1299 'icp':1735 'id':446,626 'identifi':13,1360 'import':294,320,346,1515 'improv':631 'individu':1440 'industri':1419 'inlin':693 'instal':244 'integr':1407 'interv':381,396,606 'interven':103,871,1113 'intervent':1441 'invalid':306 'involuntari':617 'job':79 'json':649,722,759 'known':164 'languag':1595 'larg':354 'last':424,452,483,500,639,922,960,1125,1265,1313 'lead':100,1041 'leav':48 'level':1540 'like':162,184 'linkedin':565 'list':1474 'load':132,174 'local':456 'look':161,183,227,1372 'lost':1271 'low':1708,1744 'low-qual':1707,1743 'make':1668 'mani':189 'manual':530,550,585,1239 'market':1069 'match':231,876,937 'matter':1334,1568 'may':246,333,946,951 'mcp':223,257,528,546,557,683,774 'messag':442,534 'meta':564 'might':40 'minut':572 'mix':335 'moment':1250 'monitor':932 'month':400,607,934,953,1104,1357,1366,1391,1589 'most':1666 'mrr':705,725,767,813,845,990,1091,1123,1270,1509 'name':241,253,378,393,408,421,604,738 'natur':232 'need':994,1095,1206,1504 'never':1245,1316,1322,1350 'none':1107,1411 'normal':1646 'number':1516 'offend':748,838 'often':73,1715 'onboard':118,1057,1174,1252,1353,1457 'one':177,877,938,1358,1442,1455,1479,1539,1636 'option':630 'output':721,758,810,1427,1507 'outreach':1130,1240 'page':520 'paid':508,511,794,927,1110,1700,1761,1766 'paragraph':1359 'parallel':370 'particular':143 'pass':203 'past':168 'path':254,525 'pattern':152,287,517,1355,1363,1399,1422,1452,1711 'pay':142 'payment':267,614,661,732,833,881,892,940,1225,1620,1637 'peopl':47 'per':193,243,496 'perf':1705,1741 'period':888,908,1031 'pitch':1224 'place':1776 'plan':146,323,329,377,380,385,392,395,407,412,420,509,603,605,609,729,900,928,954,1047,1122,1269,1380 'platform':570 'point':1433,1533 'possibl':962,1694 'pre':1257 'pre-built':1256 'predict':69 'prevent':74 'price':1325,1341 'primari':154,261,292 'problem':1058,1074,1656 'process':670,676,686,718,755 'process-stripe-charg':754 'process-stripe-sub':717 'product':116,155,187,279,303,494,519,1068,1182,1456,1624,1758 'product-market':1067 'promin':1523 'provid':584,590,1120 'python':712,749,778,796 'qualiti':1709,1729,1745 'queri':190,312,355,1170,1311 'queries/actions':498 'queries/week':1196 'question':178 'quiet':87,1582 'ran':1317 'rang':398,423,451,482 'rate':513,764,823,835,1639 'rational':1485 'reach':1139,1246 'read':126 'real':76,1275,1283,1302,1320 'reason':112,166,359,405,418,635,1006,1274,1276,1280,1284,1291,1303,1321,1529,1664 'recommend':1129,1143,1181,1213,1229,1251,1454,1481,1494,1553,1672 'record':1007 'red':868,982,1096,1111,1118,1548 'reduc':1446 'refer':1712 'referenc':792 'relat':1719 'reliabl':367 'remov':316 'renew':957,1223 'repeat':468,747,765,837 'report':861,985,1079,1082,1319,1430,1519,1627,1724 'requir':595,613 'resolv':949 'result':775 'retent':60 'retri':319 'return':308,684 'revenu':471,488,636,842 'right':1771 'risk':16,44,205,769,844,847,857,870,1093,1098,1127,1154,1370,1403,1511 'root':1465 'rule':1508 'run':199,541,577,1167,1194 'saa':805,1642 'saniti':787 'say':36,1495,1564 'score':853 'script':695 'segment':1044,1574 'self':948 'self-resolv':947 'sequenc':1232 'server':240 'servic':107,1525 'session':521 'set':554,904,1161 'sheet':1409 'show':532,1521,1616 'signal':4,28,51,56,996,1055,1065,1081,1128,1155,1179,1633 'signup':1718 'silent':963 'simplifi':314 'singl':1169 'skill':7,714,751,780,798,1697,1720 'skill-ds-churn-signals' 'skip':548 'someth':1202 'sourc':263,293,1606 'source-dataslayer-ai' 'specif':1149,1379,1387,1480,1552 'start':121,1233,1532,1716 'starter':1050 'state':1273,1279,1305,1612 'status':375,390,436,599,620,770,1621 'step':124,213,552,829,840,849,851,1075 'stripe':264,295,371,401,432,470,567,592,651,656,660,719,756,784,998,1601,1615 'structur':1362,1448,1493 'sub':720 'subscrib':1025 'subscript':265,322,328,347,357,373,374,376,379,382,384,389,391,394,403,406,409,411,416,419,593,597,598,611,657,708,727,816,903,1084,1617 'success':479 'supplement':284 'supplementari':515 'support':1491 'surfac':82,1290 'survey':1017,1287,1675 'symptom':1469 'system':1436,1655 'tactic':1476 'team':98 'templat':1259 'tenur':1124,1242,1272,1388,1567 'test':699 'three':866 'tier':206,867,1048,1089,1549 'time':77,101,474 'today':1234 'tone':1505 'tool':230,238,1212 'topic-agent-skills' 'topic-analytics' 'topic-claude-code' 'topic-marketing' 'topic-mcp' 'topic-paid-media' 'topic-seo' 'total':724,989,1108 'treat':105 'trend':472,490,643 'trial':510,601 'true':910 'tsv':648 'type':147,1381 'u':49 'understand':19,63,1726 'unlock':1682 'unus':106,1524 'usag':151,160,182,280,495,524,915,966,1294,1308,1398,1610 'usd':337 'use':5,276,321,356,806,824,1188,1262,1292,1599 'user':10,21,35,202,537,588,1597,1749 'util':674,680,689,809 'uuid':249 'valid':773,783 'valu':898,1072,1249,1324,1352 'vari':242 'vs':974,1027,1281 'wait':1237 'walkthrough':1183 'want':11,538 'warn':27 'watch':930,1102 'week':122,194,873,1100,1115 'without':1015 'would':1445,1462,1502 'write':692,859,1077,1136,1147,1557,1561,1591 'wrong':1734 'year':608,709,817,1579 'yet':1180 'zero':505,919,1156","prices":[{"id":"affaefa3-8b55-46fc-8c6d-442139101ddf","listingId":"03568f05-78fa-4500-9230-26949a3a1971","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Dataslayer-AI","category":"Marketing-skills","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:25.185Z"}],"sources":[{"listingId":"03568f05-78fa-4500-9230-26949a3a1971","source":"github","sourceId":"Dataslayer-AI/Marketing-skills/ds-churn-signals","sourceUrl":"https://github.com/Dataslayer-AI/Marketing-skills/tree/main/skills/ds-churn-signals","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:25.185Z","lastSeenAt":"2026-04-24T01:03:50.098Z"}],"details":{"listingId":"03568f05-78fa-4500-9230-26949a3a1971","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Dataslayer-AI","slug":"ds-churn-signals","github":{"repo":"Dataslayer-AI/Marketing-skills","stars":9,"topics":["agent-skills","analytics","claude-code","marketing","mcp","paid-media","seo"],"license":"mit","html_url":"https://github.com/Dataslayer-AI/Marketing-skills","pushed_at":"2026-03-23T15:50:29Z","description":"Marketing agent skills powered by real data. Connect Claude Code to your actual Google Ads, GA4, Search Console, Meta Ads, LinkedIn Ads and 50+ platforms via Dataslayer MCP — no copy-pasting required.","skill_md_sha":"376b091e630ca9051cad86d996e4992dbf8548aa","skill_md_path":"skills/ds-churn-signals/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Dataslayer-AI/Marketing-skills/tree/main/skills/ds-churn-signals"},"layout":"multi","source":"github","category":"Marketing-skills","frontmatter":{"name":"ds-churn-signals","description":"Use this skill when the user wants to identify accounts at risk of churning, understand why users are cancelling, or find early warning signals before churn happens. Activate when the user says \"churn analysis\", \"who might cancel\", \"accounts at risk\", \"why are people leaving\", \"usage drop\", \"inactive accounts\", \"retention analysis\", \"predict churn\", or asks about subscription health, cancellation patterns, or which users are disengaged. Works best with Dataslayer MCP connected (Stripe + analytics). Also works with manual data."},"skills_sh_url":"https://skills.sh/Dataslayer-AI/Marketing-skills/ds-churn-signals"},"updatedAt":"2026-04-24T01:03:50.098Z"}}