{"id":"c6e212e8-ea1b-4bdb-8fc3-0958127f93d1","entityType":"agent","slug":"clawhub-elias-didoo-meta-ads-analysis","name":"Meta Ads Analysis","canonicalUrl":"https://www.xpersona.co/agent/clawhub-elias-didoo-meta-ads-analysis","canonicalPath":"/agent/clawhub-elias-didoo-meta-ads-analysis","generatedAt":"2026-10-11T07:41:57.695Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":null},"description":"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf... Skill: Meta Ads Analysis Owner: elias-didoo Summary: [Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf... Tags: latest:1.2.0 Version history: v1.2.0 | 2026-04-16T03:00:15.061Z | user Correct slug, removed didooai- prefix v1.1.1 | 2026-04-16T02:44:01.855Z | user Fix YAML: escape quotes in description v1.1.0 | 20","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s170zy2wssmkqheacrkh2syyv183vgqw:meta-ads-analysis","sourceUrl":"https://clawhub.ai/elias-didoo/meta-ads-analysis","homepage":"https://clawhub.ai/elias-didoo/skills/meta-ads-analysis","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/elias-didoo/meta-ads-analysis","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/elias-didoo/skills/meta-ads-analysis","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":null},"stars":null,"forks":null,"downloads":1148,"packageName":null,"latestVersion":"1.2.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:21:29.743Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T05:21:29.805Z","lastCrawledAt":"2026-10-11T05:21:29.743Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T05:21:29.743Z","lastVerifiedAt":null,"highlights":[{"version":"1.2.0","createdAt":"2026-04-16T03:00:15.061Z","changelog":"Correct slug, removed didooai- prefix","fileCount":3,"zipByteSize":5745},{"version":"1.1.1","createdAt":"2026-04-16T02:44:01.855Z","changelog":"Fix YAML: escape quotes in description","fileCount":2,"zipByteSize":4647},{"version":"1.1.0","createdAt":"2026-04-15T08:41:11.090Z","changelog":"Restored credentials table with OAuth scope; kept homepage and disambiguation","fileCount":2,"zipByteSize":4640},{"version":"1.0.6","createdAt":"2026-04-15T08:08:33.758Z","changelog":"Removed primaryEnv to reduce registry mismatch","fileCount":2,"zipByteSize":4451},{"version":"1.0.5","createdAt":"2026-04-15T07:56:51.581Z","changelog":"Removed credentials table to eliminate registry mismatch","fileCount":2,"zipByteSize":4462},{"version":"1.0.4","createdAt":"2026-04-15T07:18:08.380Z","changelog":"Added homepage, fixed credential ambiguity, added ads_read scope","fileCount":2,"zipByteSize":4653},{"version":"1.0.3","createdAt":"2026-04-15T07:00:08.632Z","changelog":"Changed to JSON format metadata.openclaw","fileCount":2,"zipByteSize":4562},{"version":"1.0.1","createdAt":"2026-04-15T06:56:51.622Z","changelog":"Changed credentials to metadata.openclaw.requires.env","fileCount":2,"zipByteSize":4524}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s170zy2wssmkqheacrkh2syyv183vgqw:meta-ads-analysis","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T07:41:57.692Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-elias-didoo-meta-ads-analysis/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":null},"readme":"Skill: Meta Ads Analysis\n\nOwner: elias-didoo\n\nSummary: [Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf...\n\nTags: latest:1.2.0\n\nVersion history:\n\nv1.2.0 | 2026-04-16T03:00:15.061Z | user\n\nCorrect slug, removed didooai- prefix\n\nv1.1.1 | 2026-04-16T02:44:01.855Z | user\n\nFix YAML: escape quotes in description\n\nv1.1.0 | 2026-04-15T08:41:11.090Z | user\n\nRestored credentials table with OAuth scope; kept homepage and disambiguation\n\nv1.0.6 | 2026-04-15T08:08:33.758Z | user\n\nRemoved primaryEnv to reduce registry mismatch\n\nv1.0.5 | 2026-04-15T07:56:51.581Z | user\n\nRemoved credentials table to eliminate registry mismatch\n\nv1.0.4 | 2026-04-15T07:18:08.380Z | user\n\nAdded homepage, fixed credential ambiguity, added ads_read scope\n\nv1.0.3 | 2026-04-15T07:00:08.632Z | user\n\nChanged to JSON format metadata.openclaw\n\nv1.0.1 | 2026-04-15T06:56:51.622Z | user\n\nChanged credentials to metadata.openclaw.requires.env\n\nv1.0.0 | 2026-04-15T06:41:54.874Z | user\n\nAdded metadata.openclaw.credentials\n\nArchive index:\n\nArchive v1.2.0: 3 files, 5745 bytes\n\nFiles: skill-card.md (1958b), SKILL.md (9508b), _meta.json (136b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \\\"analyze\\\", \\\"deep dive\\\", \\\"why is performance\\\", \\\"diagnose\\\", \\\"full audit\\\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For | OAuth Scope |\n|-----------|-------------|---------|-------------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls | `ads_read` (read-only, least-privilege) |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query | — |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1776308415061\n}\n\nFile v1.2.0:skill-card.md\n\n## Description:\n\n[Didoo AI] Analyzes Meta Ads campaign performance in depth: metrics, funnel, trends, and anomalies, producing structured analysis without recommendations.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[elias-didoo](https://clawhub.ai/user/elias-didoo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketers, growth operators, and agents use this skill to diagnose Meta Ads campaign performance, identify weak funnel points, trends, anomalies, and data caveats, and prepare structured analysis before any recommendation workflow.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill requires a Meta Marketing API access token and ad account ID to analyze account performance.\n\nMitigation: Use a read-only token limited to the ads_read scope and provide credentials only when Meta Ads analysis is intended.\n\nRisk: Generic trigger words such as analyze or diagnose may activate the skill when a Meta Ads workflow was not intended.\n\nMitigation: Confirm the user wants Meta Ads campaign analysis before requesting credentials or making API calls.\n\n## Reference(s):\n\n- [Didoo AI Blog](https://didoo.ai/blog)\n- [ClawHub Skill Page](https://clawhub.ai/elias-didoo/skills/meta-ads-analysis)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, guidance]\n\n**Output Format:** [Markdown structured analysis]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Analysis only; stores campaign context, funnel weak points, trend signals, anomalies, data quality notes, and general landing-page diagnosis in session context.]\n\n## Skill Version(s):\n\n1.2.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.1: 2 files, 4647 bytes\n\nFiles: SKILL.md (9508b), _meta.json (136b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \\\"analyze\\\", \\\"deep dive\\\", \\\"why is performance\\\", \\\"diagnose\\\", \\\"full audit\\\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For | OAuth Scope |\n|-----------|-------------|---------|-------------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls | `ads_read` (read-only, least-privilege) |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query | — |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1776307441855\n}\n\nArchive v1.1.0: 2 files, 4640 bytes\n\nFiles: SKILL.md (9498b), _meta.json (136b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For | OAuth Scope |\n|-----------|-------------|---------|-------------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls | `ads_read` (read-only, least-privilege) |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query | — |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1776242471090\n}\n\nArchive v1.0.6: 2 files, 4451 bytes\n\nFiles: SKILL.md (9079b), _meta.json (136b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n      },\n  }\n---\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1776240513758\n}\n\nArchive v1.0.5: 2 files, 4462 bytes\n\nFiles: SKILL.md (9122b), _meta.json (136b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n        \"primaryEnv\": \"META_ACCESS_TOKEN\",\n      },\n  }\n---\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1776239811581\n}\n\nArchive v1.0.4: 2 files, 4653 bytes\n\nFiles: SKILL.md (9541b), _meta.json (136b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n        \"primaryEnv\": \"META_ACCESS_TOKEN\",\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For | OAuth Scope |\n|-----------|-------------|---------|-------------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls | `ads_read` (read-only, least-privilege) |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query | — |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1776237488380\n}\n\nArchive v1.0.3: 2 files, 4562 bytes\n\nFiles: SKILL.md (9364b), _meta.json (136b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n        \"primaryEnv\": \"META_ACCESS_TOKEN\",\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For |\n|-----------|-------------|---------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If user doesn't want to answer, proceed with standard analysis.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1776236408632\n}\n\nArchive v1.0.1: 2 files, 4524 bytes\n\nFiles: SKILL.md (9298b), _meta.json (136b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nmetadata:\n  openclaw:\n    requires:\n      env:\n        - META_ACCESS_TOKEN\n        - META_AD_ACCOUNT_ID\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For |\n|-----------|-------------|---------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If user doesn't want to answer, proceed with standard analysis.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1776236211622\n}\n\nArchive v1.0.0: 2 files, 4590 bytes\n\nFiles: SKILL.md (9564b), _meta.json (136b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \"analyze\", \"deep dive\", \"why is performance\", \"diagnose\", \"full audit\".\"\nmetadata:\n  openclaw:\n    credentials:\n      - id: META_ACCESS_TOKEN\n        label: Meta Access Token\n        description: \"Generated via Meta Developer Console → Graph API Explorer\"\n        required: true\n      - id: META_AD_ACCOUNT_ID\n        label: Meta Ad Account ID\n        description: \"Format: act_XXXXXXXXX — found in Ads Manager URL\"\n        required: true\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For |\n|-----------|-------------|---------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If user doesn't want to answer, proceed with standard analysis.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / purchase | 1-day click |\n| Lead generation | 7-day click |\n| App installs | 7-day click |\n| Brand awareness | 28-day view |\n\nConvert to `YYYY-MM-DD,YYYY-MM-DD` format.\nDefault granularity:\n- ≤14 days → daily\n- 15–60 days → weekly\n\n---\n\n## Step 3: Route the Analysis\n| User is asking about | What to analyze |\n|----------------------|-----------------|\n| Overall / general health | Campaign-level metrics, no breakdown |\n| Audience / country / platform / age / gender | Adset or ad level with breakdowns |\n| Creative / which ad is better | Ad-level metrics |\n| Everything / full diagnostic | All three in sequence |\n| Follow-up on existing data | Use data already in session — don't re-fetch |\n\n---\n\n## Step 4: Pull and Interpret Performance Data\nUse the Meta Marketing API to fetch metrics for the relevant level and time range.\n\n### Key Metrics to Collect\n**At campaign or adset level:**\n- Spend, impressions, frequency\n- CPM (cost per 1,000 impressions)\n- CPC (cost per link click)\n- CTR (link click rate)\n- LPV rate (landing page view rate = landing page views / link clicks)\n- Results, cost per result\n- Conversion rate (results / landing page views)\n\n**At ad level, add:**\n- Individual ad performance\n- Creative elements if identifiable\n\n### What Each Metric Tells You\n| Metric | Declining = | Growing = |\n|--------|-------------|-----------|\n| CPM | Cheaper reach | Competition up |\n| CPC / cost_per_result | More efficient | Less efficient |\n| CTR / LPV rate / conversion_rate | Problem | Healthy |\n| Results volume | Dropping | Growing |\n| Frequency | — | Fatigue risk if > 3 |\n\n### Understanding \"Results\"\nThe meaning of \"results\" depends on the optimization goal:\n- LEAD_GENERATION → results = leads\n- LINK_CLICKS → results = link clicks\n- LANDING_PAGE_VIEWS → results = landing page views\n- PURCHASE / CONVERSIONS → results = purchases\n\nAlways clarify what \"results\" means when discussing cost_per_result.\n\n### Campaign Structure Matters\n- CBO (campaign-level budget): Evaluate at campaign level first\n- ABO (adset-level budget): Evaluate at adset level\n- Multiple ads in one adset: Evaluate at adset level, not individual ads\n- Active but less than 7 days old + less than 50 results since last significant edit: Treat as still in learning phase — data is unstable\n- Breakdown Effect: Meta optimizes for marginal CPA (cost of the next result), not average CPA. A segment showing higher average CPA may be protecting overall campaign efficiency. Do not judge system decisions by average CPA in breakdown reports alone.\n\n---\n\n## Step 4b: Lead Generation Campaigns\n> Use **meta-ads-lead-gen-analysis** instead — it has dedicated LPV benchmarks for lead gen, form friction analysis, CAPI verification, and lead quality diagnosis.\n\n---\n\n## Step 4c: Landing Page Diagnostic\n> This section has moved to **meta-ads-recommendation → Step 4**. Landing page diagnosis is now part of the recommendation workflow for better action alignment.\n\n---\n\n## Step 5: Check Ad Relevance Diagnostics\nWhen an ad's cost_per_result is elevated and basic metrics (CTR, LPV rate) don't fully explain it, check the Ad Relevance Diagnostics in Meta Ads Manager.\n\n| Diagnostic | What it measures | Low ranking suggests |\n|-------------|-------------------|-----------------------|\n| Quality Ranking | Perceived ad quality vs. competitors | Improve creative |\n| Engagement Rate Ranking | Expected engagement vs. competitors | Test new angles, improve hook |\n| Conversion Rate Ranking | Expected conversion vs. competitors with same optimization goal | Check landing page or audience-offer fit |\n\n**Usage rules:**\n- Requires 500+ impressions to be available — below that, diagnostics are not meaningful\n- These are diagnostic tools only, not auction inputs\n- When all three rankings are low simultaneously → strong audience-creative mismatch\n\n---\n\n## Step 6: Assess for Problems\nFlag these when you see them:\n- Frequency > 3 → Audience fatigue risk\n- CTR less than 1% → Weak creative hook or audience mismatch\n- LPV rate less than 70% → Ad-to-landing-page disconnect\n- cost_per_result rising → Efficiency problem\n- Status is not ACTIVE → Explain impact\n- Learning / Learning Limited → Warn: data not yet stable\n- Spend less than 50% of budget → Delivery problem — audience may be too narrow or bid too low\n- One segment vastly outperforming others → System is correctly finding winners\n\n---\n\n## Step 7: Structure Your Output\n- **Campaign Context**: one sentence covering objective, budget type, and status.\n- **Summary**: Spend, impressions, results, cost per result, CTR, CPM.\n- **Funnel**: Impressions → Link Clicks → Landing Page Views → Results, with rates at each stage.\n- **Trend Analysis**: Key metrics with direction and what it means for the business.\n- **Key Issues**: Specific problems and why they matter.\n- **Data Notes**: Any caveats — learning phase, insufficient data, zero-spend entities excluded.\n\n---\n\n## Tone and Language\n- Match the language the user speaks (English or Chinese)\n- Speak as a professional growth partner — translate numbers into business insights\n- Every judgment must cite specific data. Never say \"performance is bad\" without a number\n- When data is insufficient, say so: \"2 days isn't enough for reliable trends — let's revisit in a week\"\n\n---\n\n## Restrictions\n- Analysis only — never output recommendations in this skill\n- Do not recalculate metrics already computed by Meta (CTR, CPM, CPC are already calculated)\n- Never conclude an ad or adset is \"underperforming\" based on CPA alone without comparing to its own historical baseline and the account average\n\n---\n\n## Session Context — What This Skill Writes\n\nAfter completing analysis, store the following in session context:\n\n| Key | Description | Example |\n|-----|-------------|---------|\n| funnel_weak_points | Where the biggest funnel drop-off occurs | \"LPV rate 58%, well below 70% benchmark\" |\n| trend_signals | Direction of key metrics | \"CPM up 18% WoW; CTR down 0.4pp\" |\n| anomalies | Anything unusual or unexpected | \"Frequency 4.2 with CPL still at target\" |\n| data_quality | Whether there's enough data to act | \"Only 2 days — too early to judge\" |\n| lp_diagnosis_general | Is the problem ad-side or landing page-side? | \"Ad side — CTR declining, frequency stable\" |\n\n> **Routing:** If the campaign is Lead Gen, route to meta-ads-lead-gen-analysis and preserve these keys. meta-ads-recommendation reads these keys to produce the action plan.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776235314874\n}","readmeExcerpt":"Skill: Meta Ads Analysis Owner: elias-didoo Summary: [Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf... Tags: latest:1.2.0 Version history: v1.2.0 | 2026-04-16T03:00:15.061Z | user Correct slug, removed didooai- prefix v1.1.1 | 2026-04-16T02:44:01.855Z | user Fix YAML: escape quotes in description v1.1.0 | 20","codeSnippets":[],"executableExamples":[],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: meta-ads-analysis\ndescription: \"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is performing, identify weak points, or get data before receiving recommendations. Outputs structured analysis only; never provides recommendations. Triggers on: \\\"analyze\\\", \\\"deep dive\\\", \\\"why is performance\\\", \\\"diagnose\\\", \\\"full audit\\\".\"\nhomepage: https://didoo.ai/blog\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"requires\": { \"env\": [\"META_ACCESS_TOKEN\", \"META_AD_ACCOUNT_ID\"] },\n      },\n  }\n---\n\n## Required Credentials\n| Credential | Where to Get | Used For | OAuth Scope |\n|-----------|-------------|---------|-------------|\n| META_ACCESS_TOKEN | Meta Developer Console → Graph API Explorer → Generate Token | All Meta Marketing API calls | `ads_read` (read-only, least-privilege) |\n| META_AD_ACCOUNT_ID | Ads Manager URL: `adsmanager.facebook.com/act_XXXXXXXXX` | Identifying which account to query | — |\n\n## When to Use\nLoaded when user wants to understand how their Meta Ads campaign is performing — either a specific aspect (audience, creative, overall) or a full diagnostic. Can run standalone or as prerequisite for meta-ads-recommendation.\n\n---\n\n## Step 0: Understand the Campaign\nBefore pulling any data, get context on what this campaign is trying to do.\nAsk 1–2 quick questions if not already clear from conversation:\n- \"Is this an always-on campaign, or tied to a specific promotion?\"\n- \"Are you testing new things, or trying to scale what's already working?\"\n\nKeep it conversational. If META_ACCESS_TOKEN or META_AD_ACCOUNT_ID is not available, tell the user exactly what is needed and do not proceed with API calls.\n\n---\n\n## Step 1: Gather Campaign Structure\nAsk the user for their Meta Ads account access. Use the Meta Marketing API to fetch:\n\n### Campaign level\n- Campaign name, ID, status (is it ACTIVE?)\n- Objective (what counts as a \"result\" — leads, purchases, clicks?)\n- Budget type (CBO = campaign-level budget optimization, or ABO = adset-level)\n- Bid strategy, daily budget, start date\n\n### Adset level\n- Adset name, ID, status\n- Optimization goal (this determines what \"results\" means for this adset)\n- Targeting countries, budget, bid amount\n\n### Ad level\n- Ad name, ID, status\n- Which adset it belongs to\n\nStore this as `campaign_context`. Reuse across the session — don't re-fetch.\n\n---\n\n## Step 2: Confirm Time Range and Attribution Window\nAlways confirm the time period and attribution window before pulling performance data:\n\n1. Time range: \"What time period would you like to analyze? (e.g., last 7 days, last 30 days, or a specific date range)\"\n2. Attribution window: \"What attribution window are you using? Default in Meta is 7-day click. For e-commerce, 1-day click often gives a clearer signal. For lead gen, 7-day click is usually better.\"\n\n| Campaign type | Recommended attribution window |\n|--------------|--------------------------------|\n| E-commerce / "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn72xgwz1h6j5cfwscvt1wm10d83tj78\",\n  \"slug\": \"meta-ads-analysis\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1776308415061\n}"},{"path":"skill-card.md","content":"## Description:\n\n[Didoo AI] Analyzes Meta Ads campaign performance in depth: metrics, funnel, trends, and anomalies, producing structured analysis without recommendations.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[elias-didoo](https://clawhub.ai/user/elias-didoo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketers, growth operators, and agents use this skill to diagnose Meta Ads campaign performance, identify weak funnel points, trends, anomalies, and data caveats, and prepare structured analysis before any recommendation workflow.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill requires a Meta Marketing API access token and ad account ID to analyze account performance.\n\nMitigation: Use a read-only token limited to the ads_read scope and provide credentials only when Meta Ads analysis is intended.\n\nRisk: Generic trigger words such as analyze or diagnose may activate the skill when a Meta Ads workflow was not intended.\n\nMitigation: Confirm the user wants Meta Ads campaign analysis before requesting credentials or making API calls.\n\n## Reference(s):\n\n- [Didoo AI Blog](https://didoo.ai/blog)\n- [ClawHub Skill Page](https://clawhub.ai/elias-didoo/skills/meta-ads-analysis)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, guidance]\n\n**Output Format:** [Markdown structured analysis]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Analysis only; stores campaign context, funnel weak points, trend signals, anomalies, data quality notes, and general landing-page diagnosis in session context.]\n\n## Skill Version(s):\n\n1.2.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"[Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf... Skill: Meta Ads Analysis Owner: elias-didoo Summary: [Didoo AI] Analyzes Meta Ads campaign performance in depth — metrics, funnel, trends, and anomalies. Use when user wants to understand how a campaign is perf... Tags: latest:1.2.0 Version history: v1.2.0 | 2026-04-16T03:00:15.061Z | user Correct slug, removed didooai- prefix v1.1.1 | 2026-04-16T02:44:01.855Z | user Fix YAML: escape quotes in description v1.1.0 | 20","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1127,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:21:29.805Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:41:57.695Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}