{"id":"f8049f87-ff5d-4fe4-b90f-36e5af8555b4","shortId":"yNe9RN","kind":"skill","title":"ds-paid-audit","tagline":"Use this skill when the user wants to audit, review, or diagnose their paid media campaigns. Activate when the user says \"audit my campaigns\", \"check my Google Ads\", \"why is my CPA high\", \"review my paid media\", \"what's wrong with my ads\", \"analyze my campaigns\", or asks about ca","description":"# Paid media audit (ds-paid-audit)\n\nYou are a senior paid media strategist with deep expertise in Google Ads,\nMeta Ads, and LinkedIn Ads for B2B SaaS companies. You diagnose campaigns\nwith precision: you find the real problem, not the surface symptom, and you\ngive specific next actions — not generic advice.\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\nIf no context was loaded above, ask the user one question only:\n> \"Which channels do you want me to audit, and what is your target CPA\n> (or target ROAS)?\"\n\nIf the user passed a channel 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**Important: always fetch current period and previous period as two separate\nqueries.** The MCP returns cleaner data when periods are split.\n\nDate range: last 30 days vs previous 30 days (for trend comparison).\n\nFetch all available channels in parallel — do not wait for one before\nstarting the next.\n\n```\nFetch in parallel (each as TWO queries — current period + previous period):\n\n  Google Ads:\n    - Campaign-level: campaign name, impressions, clicks, cost,\n      conversions, allConversions, CTR, average CPC\n    - Daily trend: date + campaign name + impressions, clicks, cost,\n      conversions (to detect pauses, ramp-ups, and variance)\n    - Search terms report (may return empty for PMax campaigns —\n      this is expected, note it and move on)\n\n  Meta Ads:\n    - Campaign-level: campaigns, ad sets, spend, impressions, clicks,\n      conversions, CPA, ROAS\n\n  LinkedIn Ads:\n    - Campaign-level: campaigns, spend, impressions, clicks,\n      conversions, CPL, CPF\n\n  TikTok Ads (if connected):\n    - Campaign-level: campaigns, spend, impressions, clicks, conversions\n```\n\nIf a channel returns an error or is not connected in Dataslayer, skip it\nsilently and note it once at the end of the report. Do not ask the user\nto paste data manually.\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\nThen ask the user to paste or provide a file with their paid campaign data.\n\n**Required columns** (minimum to run the audit):\n- Campaign name\n- Impressions\n- Clicks\n- Cost / Spend\n- Conversions\n\n**Optional columns** (improve the analysis):\n- Date (enables pause detection and daily trend analysis)\n- CPA, CTR, CPC (if not present, calculated from the required columns)\n- Ad set / Ad group name\n- ROAS / Conversion value\n- Channel / Platform (if data covers multiple platforms)\n\nAccepted formats: CSV, TSV, JSON, or a table pasted directly in the chat.\nIf the user provides a file path, read it. If they paste a table, parse it.\n\nOnce you have the data, continue to \"Process data with ds_utils\" below —\nthe processing pipeline is identical regardless of data source.\n\n### Process data with ds_utils\n\nAfter the MCP returns data, process through ds_utils. **Do not write inline\nscripts for pause detection, CPA checks, or period comparison.**\n\n```bash\n# 1. Detect paused campaigns from daily trend data\n#    Automatically calculates: days paused, est. conversions lost, active-days-only metrics\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" process-campaigns <google_ads_daily_file>\n# Output: JSON with campaigns[], any_paused, total_est_lost\n\n# 2. CPA sanity check — flags suspiciously low CPA (likely tracking soft events)\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" cpa-check <blended_cpa> b2b_saas\n# Output: JSON with status (Green/Amber/Red), assessment, likely_issue\n\n# 3. Compare current vs previous period\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" compare-periods '{\"spend\":X,\"conversions\":Y,\"cpa\":Z}' '{\"spend\":X2,\"conversions\":Y2,\"cpa\":Z2}'\n# Output: JSON with direction and pct_change for each metric\n\n# 4. Validate MCP results\npython \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" validate <file> google_ads\n```\n\nThe `process-campaigns` command detects paused campaigns automatically:\ncampaigns with 0 impressions for 3+ consecutive days at the end of the\nperiod are flagged. It also calculates metrics from active days only —\nso daily averages are not diluted by inactive days. If any campaign is\npaused, the output includes `est_conversions_lost` — this is often the\nsingle most impactful finding in the audit.\n\n---\n\n## Step 3 — Run the audit\n\nFor each channel with data, work through these four checks in order.\n\n### 3.1 Budget efficiency\n\n- Total spend vs total conversions — is the CPA above or below target?\n- Which campaigns are consuming more than 30% of budget but delivering\n  less than 15% of conversions? Flag these as \"budget traps.\"\n- Which campaigns have zero conversions in the last 14 days despite\n  spend? Flag as \"dead weight.\"\n\n### 3.2 Audience quality\n\n- For Google Ads: check audience signals in Performance Max campaigns.\n  Look for conversion distribution across asset groups and audiences.\n  Flag any audience segment generating more than 25% of conversions\n  that does not match the target ICP.\n- For Meta: check age, gender, and placement breakdowns. Flag any\n  segment with CPA more than 2x the account average.\n- For LinkedIn: check company size, job function, and seniority.\n  Flag any targeting dimension with CPL more than 40% above average.\n\n### 3.3 Creative fatigue\n\n- Check impression frequency vs CTR trend over the 30-day window.\n  If frequency is above 4 and CTR has dropped more than 20% in the\n  last 14 days, flag as \"creative fatigue.\"\n- Identify the top 3 creatives by conversion rate and the bottom 3.\n  Note the gap between them.\n\n### 3.4 Conversion tracking integrity\n\n- Compare conversions reported in the ad platform vs actual results\n  (if internal data is available via Dataslayer).\n- Flag any discrepancy above 20% as a tracking issue.\n- Note any conversion actions that look duplicated or misattributed\n  (e.g., page view counted as a conversion).\n\n**CPA sanity check:** Run `python \"${CLAUDE_SKILL_DIR}/../../scripts/ds_utils.py\" cpa-check <cpa> b2b_saas`\nto get an automated assessment. The tool flags CPA <€10 as Red (likely\ntracking soft events like form_submit or page_view), CPA €10-30 as Amber\n(verify tracking), and €30-80 as Green (normal range). If the CPA check\nreturns Red, this should be the #1 finding — all other analysis depends\non accurate conversion data.\n\n### 3.5 Campaign pause detection\n\nUsing the daily data from Step 2:\n- Identify if any campaign has zero impressions for 3+ consecutive days\n  at the end of the period. If so, it is paused.\n- Calculate the daily run rate from the active days only.\n- Estimate conversions lost = daily conversion avg × days paused.\n- This finding should appear first in the Critical Findings section\n  if it exists — a paused campaign overrides all other findings.\n\n---\n\n## Step 4 — Write the audit report\n\nStructure the output exactly like this:\n\n---\n\n### Paid media audit — [date range]\n\n**Overall health:** [Green / Amber / Red]\n**Total spend:** [X]  |  **Total conversions:** [X]  |  **Blended CPA:** [X]\n\n---\n\n#### Channel breakdown\n\n| Channel | Spend | Conv. | CPA | vs Target | Trend |\n|---------|-------|-------|-----|-----------|-------|\n| Google Ads | | | | | |\n| Meta Ads | | | | | |\n| LinkedIn Ads | | | | | |\n\n---\n\n#### Critical findings\n\nList only findings that require action. Maximum 5. Each one follows this format:\n\n> **[FINDING NAME]** · [Channel] · Severity: High / Medium / Low\n>\n> What is happening: [one sentence, specific numbers]\n> Why it matters: [one sentence, business impact]\n> What to do: [specific action, not generic advice]\n\nExample of a good finding:\n> **Audience mismatch in PMax Europe** · Google Ads · Severity: High\n>\n> What is happening: \"Pet Food & Supplies\" audience segment is generating\n> 39% of conversions at a CPA of €124, vs target of €52.\n> Why it matters: You are spending €1,800/month acquiring users who are\n> unlikely to be your ICP, inflating your blended CPA by ~35%.\n> What to do: Add \"Pet Food & Supplies\" as a negative audience signal in\n> the PMax campaign. Monitor for 7 days and check if CPA normalizes.\n\nExample of a bad finding (do not write like this):\n> \"You should optimize your audience targeting to improve performance.\"\n\n---\n\n#### Recommended priority actions\n\nNumber them 1 to 3. Each one includes:\n- The exact change to make\n- The channel and campaign name it applies to\n- The expected impact if the fix works\n- How long before you can measure results (usually 7–14 days)\n\n---\n\n#### What is working well\n\nOne short paragraph. Name the specific campaigns, ad sets, or audiences\nthat are performing above target. These should not be touched.\n\n---\n\n## Tone and output rules\n\n- Use real numbers from the data. Never write \"high CPA\" — write \"€84 CPA vs €52 target.\"\n- If a finding has no clear data to support it, do not include it.\n- Do not pad the report. Five sharp findings beat ten vague ones.\n- If data is missing for a channel (not connected), say so once at the end.\n  Do not repeat it throughout the report.\n- Write in the same language the user is using.\n- When campaigns are paused, calculate all daily averages and comparisons\n  using only the active days, not the full period. A 30-day period with\n  17 active days will show misleading totals if compared raw against a\n  full 30-day previous period.\n- PMax campaigns do not return search terms data — this is a Google Ads\n  limitation, not a data issue. Note it once and do not attempt workarounds.\n- If conversion tracking quality is suspect (CPA too low for the vertical),\n  flag it as the #1 finding. All other analysis depends on accurate\n  conversion data — a beautiful CPA built on junk conversions is worse\n  than no data at all.\n\n---\n\n## Related skills\n\n- `ds-brain` — for a full cross-channel synthesis that connects paid\n  performance to organic, content, and retention\n- `ds-channel-report` — for a broader weekly cross-channel digest\n- `ds-seo-weekly` — if organic is also part of the audit scope\n- `ds-churn-signals` — to check if acquisition quality is contributing\n  to high churn downstream","tags":["paid","audit","marketing","skills","dataslayer-ai","agent-skills","analytics","claude-code","mcp","paid-media","seo"],"capabilities":["skill","source-dataslayer-ai","skill-ds-paid-audit","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-paid-audit","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 (10,612 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.437Z","embedding":null,"createdAt":"2026-04-23T13:04:25.562Z","updatedAt":"2026-04-24T01:03:50.437Z","lastSeenAt":"2026-04-24T01:03:50.437Z","tsv":"'-30':1064 '-80':1071 '/../../scripts/ds_utils.py':626,655,679,713,1034 '/dev/null':119 '/mcp)':429 '0':728 '1':108,602,1086,1299,1365,1587 '10':1049,1063 '124':1288 '14':842,957,1400 '15':826 '17':1528 '2':118,167,639,1106 '20':953,1005 '25':879 '2x':904 '3':669,731,782,966,974,1115,1367 '3.1':798 '3.2':850 '3.3':928 '3.4':980 '3.5':1096 '30':238,242,819,939,1070,1524,1541 '35':1315 '39':1281 '4':705,946,1168 '40':925 '5':1222 '50':438 '52':1292,1445 '7':1334,1399 '800/month':1300 '84':1442 'accept':523 'account':906 'accur':1093,1594 'acquir':1301 'acquisit':1664 'across':867 'action':103,1013,1220,1253,1362 'activ':21,618,747,1136,1517,1529 'active-days-on':617 'actual':992 'ad':32,47,74,76,79,274,323,328,337,349,432,508,510,716,855,989,1208,1210,1212,1268,1413,1557 'add':1319 'advic':106,1256 'age':892 'agents/product-marketing-context.md':117 'allconvers':284 'also':743,1651 'alway':215 'amber':1066,1187 'analysi':449,488,496,1090,1591 'analyz':48 'appear':1150 'appli':1382 'argument':162,165 'ask':52,131,387,456 'assess':666,1044 'asset':868 'attempt':1569 'audienc':851,857,871,874,1262,1277,1326,1355,1416 'audit':4,13,26,57,61,144,476,780,785,1171,1181,1655 'auto':114 'auto-load':113 'autom':1043 'automat':213,411,610,725 'avail':178,190,249,998 'averag':286,752,907,927,1511 'avg':1144 'b':395 'b2b':81,659,1038 'bad':1344 'bash':601 'beat':1469 'beauti':1598 'blend':1195,1312 'bottom':973 'brain':1615 'breakdown':896,1199 'broader':1638 'budget':799,821,832 'built':1600 'busi':111,1247 'ca':54 'calcul':503,611,744,1129,1508 'campaign':20,28,50,86,276,278,291,313,325,327,339,341,353,355,468,477,605,629,633,720,724,726,761,814,835,862,1097,1110,1162,1331,1379,1412,1505,1546 'campaign-level':275,324,338,352 'cat':116 'chang':701,1373 'channel':138,159,250,362,516,788,1198,1200,1230,1377,1479,1621,1634,1642 'chat':535 'check':29,172,597,642,658,795,856,891,910,931,1028,1037,1079,1337,1662 'churn':1659,1670 'claud':623,652,676,710,1031 'cleaner':229 'clear':1452 'click':281,294,332,344,358,480 'column':471,485,507 'command':721 'compani':83,911 'compar':670,681,984,1536 'compare-period':680 'comparison':246,600,1513 'connect':212,351,369,412,430,1481,1624 'consecut':732,1116 'consum':816 'content':1629 'context':110,112,122,127 'continu':557 'contribut':1667 'conv':1202 'convers':283,296,333,345,359,483,514,615,685,691,768,805,828,838,865,881,969,981,985,1012,1025,1094,1140,1143,1193,1283,1572,1595,1603 'cost':282,295,481 'count':1022 'cover':520 'cpa':36,150,334,497,596,640,646,657,687,693,808,901,1026,1036,1048,1062,1078,1196,1203,1286,1313,1339,1440,1443,1577,1599 'cpa-check':656,1035 'cpc':287,499 'cpf':347 'cpl':346,922 'creativ':929,961,967 'critic':1154,1213 'cross':1620,1641 'cross-channel':1619,1640 'csv':525 'ctr':285,498,935,948 'current':217,269,671 'custom':205 'daili':288,494,607,751,1102,1131,1142,1510 'data':170,187,230,392,400,420,451,469,519,556,560,572,575,583,609,790,996,1095,1103,1436,1453,1474,1552,1561,1596,1608 'dataslay':175,209,371,414,425,1000 'dataslayer.ai':428 'dataslayer.ai/mcp)':427 'date':235,290,489,1182 'day':239,243,612,619,733,748,758,843,940,958,1117,1137,1145,1335,1401,1518,1525,1530,1542 'dead':848 'deep':70 'deliv':823 'depend':1091,1592 'despit':844 'detect':298,398,492,595,603,722,1099 'diagnos':16,85 'digest':1643 'dilut':755 'dimens':920 'dir':625,654,678,712,1033 'direct':532,698 'discrep':1003 'distribut':866 'downstream':1671 'drop':950 'ds':2,59,562,577,586,1614,1633,1645,1658 'ds-brain':1613 'ds-channel-report':1632 'ds-churn-sign':1657 'ds-paid-audit':1,58 'ds-seo-week':1644 'duplic':1016 'e.g':1019 'echo':120 'effici':800 'empti':310 'enabl':490 'end':381,736,1120,1487 'entir':422 'error':365 'est':614,637,767 'estim':1139 'europ':1266 'event':650,1055 'exact':1176,1372 'exampl':1257,1341 'exist':1159 'expect':316,1385 'expertis':71 'fatigu':930,962 'fetch':216,247,262 'file':123,464,541 'filter':160 'find':90,777,1087,1148,1155,1166,1214,1217,1228,1261,1345,1449,1468,1588 'first':171,1151 'five':1466 'fix':1389 'flag':643,741,829,846,872,897,917,959,1001,1047,1583 'focus':163 'follow':1225 'food':1275,1321 'form':1057 'format':524,1227 'found':124 'four':794 'frequenc':933,943 'full':1521,1540,1618 'function':914 'ga4':435 'gap':977 'gender':893 'generat':876,1280 'generic':105,1255 'get':168,1041 'give':100 'good':1260 'googl':31,73,273,431,715,854,1207,1267,1556 'green':1073,1186 'green/amber/red':665 'group':511,869 'happen':1237,1273 'health':1185 'high':37,1232,1270,1439,1669 'icp':888,1309 'ident':569 'identifi':963,1107 'impact':776,1248,1386 'import':214 'impress':280,293,331,343,357,479,729,932,1113 'improv':486,1358 'inact':757 'includ':766,1370,1459 'inflat':1310 'inlin':591 'instal':197 'integr':983 'intern':995 'issu':668,1009,1562 'job':913 'json':527,631,662,696 'junk':1602 'languag':1499 'last':237,841,956 'less':824 'level':277,326,340,354 'like':647,667,1052,1056,1177,1349 'limit':1558 'linkedin':78,336,434,909,1211 'list':1215 'load':115,129 'long':1392 'look':180,863,1015 'lost':616,638,769,1141 'low':645,1234,1579 'make':1375 'manual':393,399,419,454 'match':184,885 'matter':1244,1295 'max':861 'maximum':1221 'may':199,308 'mcp':176,210,227,397,415,426,581,707 'measur':1396 'media':19,41,56,67,1180 'medium':1233 'messag':403 'meta':75,322,433,890,1209 'metric':621,704,745 'minimum':472 'minut':441 'misattribut':1018 'mislead':1533 'mismatch':1263 'miss':1476 'monitor':1332 'move':320 'multipl':521 'name':194,206,279,292,478,512,1229,1380,1409 'natur':185 'negat':1325 'never':1437 'next':102,261 'normal':1074,1340 'note':317,376,975,1010,1563 'number':1241,1363,1433 'often':772 'one':134,257,1224,1238,1245,1369,1406,1472 'optim':1353 'option':484 'order':797 'organ':1628,1649 'output':630,661,695,765,1175,1429 'overal':1184 'overrid':1163 'pad':1463 'page':1020,1060 'paid':3,18,40,55,60,66,467,1179,1625 'paragraph':1408 'parallel':252,264 'pars':550 'part':1652 'pass':157 'past':391,460,531,547 'path':207,394,542 'paus':299,491,594,604,613,635,723,763,1098,1128,1146,1161,1507 'pct':700 'per':196 'perform':860,1359,1419,1626 'period':218,221,232,270,272,599,674,682,739,1123,1522,1526,1544 'pet':1274,1320 'pipelin':567 'placement':895 'platform':439,517,522,990 'pmax':312,1265,1330,1545 'precis':88 'present':502 'previous':220,241,271,673,1543 'prioriti':1361 'problem':93 'process':559,566,574,584,628,719 'process-campaign':627,718 'provid':453,462,539 'python':622,651,675,709,1030 'qualiti':852,1574,1665 'queri':225,268 'question':135 'ramp':301 'ramp-up':300 'rang':236,1075,1183 'rate':970,1133 'raw':1537 'read':109,543 'real':92,1432 'recommend':1360 'red':1051,1081,1188 'regardless':570 'relat':1611 'repeat':1490 'report':307,384,986,1172,1465,1494,1635 'requir':470,506,1219 'result':708,993,1397 'retent':1631 'return':228,309,363,582,1080,1549 'review':14,38 'roa':153,335,513 'rule':1430 'run':410,446,474,783,1029,1132 'saa':82,660,1039 'saniti':641,1027 'say':25,1482 'scope':1656 'script':592 'search':305,1550 'section':1156 'segment':875,899,1278 'senior':65,916 'sentenc':1239,1246 'seo':1646 'separ':224 'server':193 'set':329,423,509,1414 'sever':1231,1269 'sharp':1467 'short':1407 'show':401,1532 'signal':858,1327,1660 'silent':374 'singl':774 'size':912 'skill':7,624,653,677,711,1032,1612 'skill-ds-paid-audit' 'skip':372,417 'soft':649,1054 'sourc':573 'source-dataslayer-ai' 'specif':101,1240,1252,1411 'spend':330,342,356,482,683,689,802,845,1190,1201,1298 'split':234 'start':259 'status':664 'step':107,166,421,781,1105,1167 'strategist':68 'stripe':436 'structur':1173 'submit':1058 'suppli':1276,1322 'support':1455 'surfac':96 'suspect':1576 'suspici':644 'symptom':97 'synthesi':1622 'tabl':530,549 'target':149,152,812,887,919,1205,1290,1356,1421,1446 'ten':1470 'term':306,1551 'throughout':1492 'tiktok':348 'tone':1427 'tool':183,191,1046 'top':965 'topic-agent-skills' 'topic-analytics' 'topic-claude-code' 'topic-marketing' 'topic-mcp' 'topic-paid-media' 'topic-seo' 'total':636,801,804,1189,1192,1534 'touch':1426 'track':648,982,1008,1053,1068,1573 'trap':833 'trend':245,289,495,608,936,1206 'tsv':526 'two':223,267 'unlik':1305 'up':302 'use':5,1100,1431,1503,1514 'user':10,24,133,156,389,406,458,538,1302,1501 'usual':1398 'util':563,578,587 'uuid':202 'vagu':1471 'valid':706,714 'valu':515 'vari':195 'varianc':304 'verifi':1067 'vertic':1582 'via':999 'view':1021,1061 'vs':240,672,803,934,991,1204,1289,1444 'wait':255 'want':11,141,407 'week':1639,1647 'weight':849 'well':1405 'window':941 'work':791,1390,1404 'workaround':1570 'wors':1605 'write':590,1169,1348,1438,1441,1495 'wrong':44 'x':684,1191,1194,1197 'x2':690 'y':686 'y2':692 'z':688 'z2':694 'zero':837,1112","prices":[{"id":"77ea0ef8-d39f-40fa-92f5-b8ebed525281","listingId":"f8049f87-ff5d-4fe4-b90f-36e5af8555b4","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.562Z"}],"sources":[{"listingId":"f8049f87-ff5d-4fe4-b90f-36e5af8555b4","source":"github","sourceId":"Dataslayer-AI/Marketing-skills/ds-paid-audit","sourceUrl":"https://github.com/Dataslayer-AI/Marketing-skills/tree/main/skills/ds-paid-audit","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:25.562Z","lastSeenAt":"2026-04-24T01:03:50.437Z"}],"details":{"listingId":"f8049f87-ff5d-4fe4-b90f-36e5af8555b4","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Dataslayer-AI","slug":"ds-paid-audit","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":"f4367e3e2946a25adda7c031503855848c73f86c","skill_md_path":"skills/ds-paid-audit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Dataslayer-AI/Marketing-skills/tree/main/skills/ds-paid-audit"},"layout":"multi","source":"github","category":"Marketing-skills","frontmatter":{"name":"ds-paid-audit","description":"Use this skill when the user wants to audit, review, or diagnose their paid media campaigns. Activate when the user says \"audit my campaigns\", \"check my Google Ads\", \"why is my CPA high\", \"review my paid media\", \"what's wrong with my ads\", \"analyze my campaigns\", or asks about campaign performance on Google Ads, Meta, LinkedIn Ads, TikTok Ads, or any other paid channel. Works best with Dataslayer MCP connected. Also works with manual data."},"skills_sh_url":"https://skills.sh/Dataslayer-AI/Marketing-skills/ds-paid-audit"},"updatedAt":"2026-04-24T01:03:50.437Z"}}