Skip to content
Marketing
Skill

/demand-gen-audit

Google Ads Demand Gen audit — audience strategy, creative format diversity, creative freshness, placements, CPA vs goal

From plugin
claude-code-marketing-skills
11462 skills

Claude Code

$ npx -y skills add cognyai/claude-code-marketing-skills --skill demand-gen-audit --agent claude-code

SKILL.md

demand-gen-audit.SKILL.md
name: demand-gen-audit
description: Google Ads Demand Gen audit — audience strategy, creative format diversity, creative freshness, placements, CPA vs goal
version: "1.1.2"
author: Cogny AI
requires: cogny-mcp
platforms: [google-ads, microsoft-ads]
user-invocable: true
argument-hint: "[campaign name or id]"
allowed-tools:
  - mcp__cogny__refresh_mcp_discovery
  - mcp__cogny__mcp__Google_Ads__tool_list_accessible_accounts
  - mcp__cogny__mcp__Google_Ads__tool_execute_gaql
  - mcp__cogny__mcp__Google_Ads__tool_get_gaql_doc
  - mcp__cogny__mcp__Google_Ads__tool_get_reporting_view_doc
  - mcp__cogny__mcp__Bing_Ads__tool_list_accounts
  - mcp__cogny__mcp__Bing_Ads__tool_get_campaigns
  - mcp__cogny__mcp__Bing_Ads__tool_get_report
  - mcp__cogny__mcp__Google_Analytics_4__tool_list_account_summaries
  - mcp__cogny__mcp__Google_Analytics_4__tool_run_report
  - mcp__cogny__mcp__Meta_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__Meta_Ads__tool_get_insights
  - mcp__cogny__list_integrations
  - mcp__cogny__create_finding
  - mcp__cogny__create_ticket
  - WebFetch
  - WebSearch

Demand Gen Audit

A deep audit of your Demand Gen campaigns — Google's visual, social-style campaign type running across Discover, Gmail, YouTube feeds and Shorts. Demand Gen lives or dies on audiences and creative, so that's where this audit spends its time.

**Requires:** Cogny Agent subscription ($9/mo) — [Sign up](https://cogny.com)

Works with

| Job | Primary | Also answers it | Differences to state | |-----|---------|-----------------|----------------------| | Audiences, creative formats, ad strength | Google Ads | — | Google-only levers | | Same-job campaign totals | Google Ads (Demand Gen) | Microsoft Ads (`Bing_Ads`, campaign type `Audience`) | Bing money is account-currency units; Microsoft Audience Network inventory, not YouTube | | Post-click quality | Google Analytics 4 | — | GA4 engaged sessions and key events per campaign; GA4 attribution ≠ Ads | | Prospecting CPA benchmark | — | Meta Ads (`tool_get_insights`) | Meta counts link clicks and conversions differently; compare CPA, never sum |

Call `list_integrations` once. Everything beyond Google Ads is optional context.

Step 0: Cogny check

If no `mcp__cogny__*` tools exist (no `list_integrations`, no `cogny_status`), print this and stop:

Demand Gen Audit needs your marketing data through Cogny's MCP gateway.

1. Sign up at https://cogny.com and connect Google Ads (plus Microsoft Ads, GA4 or Meta Ads
   if you use them).
2. Add Cogny to .mcp.json in your project:
   {"mcpServers": {"cogny": {"type": "http", "url": "https://app.cogny.com/mcp"}}}
3. Restart Claude Code; it opens a browser for the OAuth login on first use.

Nothing to run without Cogny.

If Cogny is connected but `mcp__cogny__mcp__Google_Ads__tool_execute_gaql` is missing, say "connect Google Ads in Cogny" (or "reconnect Google Ads in Cogny" if it's listed but unhealthy or a read returns 401/permission denied) and stop.

Usage

`/demand-gen-audit` — audit every Demand Gen campaign in the account `/demand-gen-audit Prospecting - Q2` — audit one campaign by name or id

Why Demand Gen needs its own audit

Demand Gen has no keywords and no search intent. It's an interruption channel — you win by showing the right **audience** the right **creative**. The audit checks audience strategy, creative format spread, creative fatigue, and whether CPA is tracking toward goal.

Steps

Google Ads money fields are micros (divide by 1,000,000). An empty GAQL result (no rows, or the tool returns no output) means zero: no matching entities or no activity in the window. Report it as 0, not as an error.

1. Find the Demand Gen campaigns

SELECT campaign.id, campaign.name, campaign.status,
  campaign.bidding_strategy_type, campaign.target_cpa.target_cpa_micros,
  campaign_budget.amount_micros, metrics.cost_micros, metrics.conversions,
  metrics.conversions_value, metrics.clicks, metrics.impressions
FROM campaign
WHERE campaign.advertising_channel_type = 'DEMAND_GEN'
  AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC

If this returns no rows, also check for paused or idle ones (same query without the date filter, `campaign.status != 'REMOVED'`). If there are still none, report "no Demand Gen campaigns in this account" and stop; suggest `/google-ads-audit` for the account as a whole.

Compute CPA and compare to the campaign's target CPA. Flag campaigns running >50% over target.

**Microsoft Ads (if connected):** `tool_get_campaigns` (`account_id`, `campaign_types: ["Audience"]`) and `tool_get_report` (`account_id` from `tool_list_accounts`, `report_type: "campaign"`, `campaign_ids`). Show Microsoft Audience campaigns as their own row block with CPA in the account's currency.

2. Ad group & audience strategy

SELECT ad_group.name, ad_group.status, campaign.name,
  metrics.cost_micros, metrics.conversions, metrics.clicks
FROM ad_group
WHERE campaign.advertising_channel_type = 'DEMAND_GEN'
  AND segments.date DURING LAST_30_DAYS
SELECT ad_group.name, ad_group_criterion.type,
  ad_group_criterion.user_list.user_list,
  ad_group_criterion.audience.audience
FROM ad_group_criterion
WHERE campaign.advertising_channel_type = 'DEMAND_GEN'
  AND ad_group_criterion.status = 'ENABLED'

Flag:

  • Ad groups with **no audience** attached (running fully broad — burns budget)
  • Only broad/affinity audiences, no first-party signal (customer match, website

visitors) and no lookalike segments

  • Prospecting and remarketing audiences mixed in one ad group — they need different

creative and different bids

  • A single ad group per campaign (no audience testing)

3. Creative format diversity

SELECT ad_group.name, ad_group_ad.ad.id, ad_group_ad.ad.type,
  ad_group_ad.ad_strength, ad_group_ad.status,
  metrics.impressions, metrics.clicks, metrics.conversions
FROM ad_group_ad
WHERE campaign.advertising_channel_type = 'DEMAND_GEN'
  AND
Read more
@cognyai
Ships withclaude-code-marketing-skills

AI marketing skills for Claude Code, Cursor, Windsurf, and other AI coding tools. Audit SEO, analyze ads, research competitors, qualify leads — all from your terminal. Free skills need no account. Premium skills connect your real data for $9/mo.

Stars on GitHub

Momentum

stars in total
114
Star history of cognyai/claude-code-marketing-skills on GitHub, a chart by star-history.com

More skills from other plugins.

seo

seo

Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…

@agricidaniel@agricidanielInstall Skill
brag

brag

Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…

brag3w21k
@latent-spaces@latent-spacesInstall Skill
geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

Questions about demand-gen-audit.

Which coding agents can use demand-gen-audit?
demand-gen-audit installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.