About demand-gen-audit
demand-gen-audit is a Cogny Agent skill for auditing Google Ads Demand Gen campaigns. It reviews audience strategy, creative formats and fatigue, placements, and CPA, then reports recommendations without changing campaigns.
Key features
- 01Find Demand Gen campaigns and calculate CPA
- 02Review ad groups and audience signals
- 03Check creative formats and ad strength
- 04Identify creative fatigue and placement gaps
- 05Assess conversion-goal alignment
Use cases
- 01Find campaigns exceeding their target CPA
- 02Spot ad groups without audience signals
- 03Identify image-only or fatigued creative
- 04Review funnel-stage conversion goals
MCP support
Requires Cogny's Google Ads MCP tool for GAQL queries. It reads campaign data and produces recommendations; it does not make campaign changes.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ cognyai/ claude-code-marketing-skills --skill demand-gen-auditAfter installing, type/demand-gen-auditin Claude Code to confirm it loaded.
Details
From the project READMEDemand 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
Prerequisites Check
If mcp__cogny__google_ads__tool_execute_gaql is not available, print the Cogny
sign-up instructions (see /google-ads-audit) 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
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
Compute CPA and compare to the campaign's target CPA. Flag campaigns running >50% over target.
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 segments.date DURING LAST_30_DAYS
Demand Gen ad types: single image, carousel, and video responsive. Flag:
- Single-format ad groups — image-only campaigns miss YouTube/Shorts inventory; add video
- Ad strength
POOR/AVERAGE - Fewer than 2–3 ads per ad group (nothing to optimize between)
- Zero video creative when the budget is >$3K/mo
4. Creative fatigue
For each enabled ad, look at the CTR / conversion-rate trend over the last 30 days vs the prior 30. Flag:
- Ads live >60 days with a falling CTR (classic fatigue)
- Ad groups where every ad launched the same day and none has refreshed since
5. Placement & exclusions
Flag:
- No content/placement exclusions — Demand Gen can serve next to anything
- Conversions concentrated in one surface while budget spreads evenly (consider surface-specific campaigns)
6. Conversion goal alignment
Demand Gen is upper/mid funnel. Flag campaigns optimizing to a hard bottom-funnel action (purchase) with too few conversions to learn — a softer goal (lead, signup, add-to-cart) often suits the funnel stage better.
7. Score and report
Demand Gen Audit — [Account Name]
Demand Gen Score: X/100 · 30-day spend: [X] · Conv: [X] · CPA vs target: [X]
| Campaign | Ad groups | Audiences | Formats | Avg ad strength | CPA |
|----------|-----------|-----------|---------|-----------------|-----|
🔴 Critical — no audiences, no conversions, CPA far over target
🟡 Important — single-format creative, fatigue, no first-party signal
🟢 Optimization — add lookalikes, placement exclusions, creative refresh
Top 3 Actions:
1. [Highest $ impact]
2. ...
3. ...
8. Record findings
{
"title": "Demand Gen 'Prospecting - Q2' runs image-only — missing YouTube & Shorts",
"body": "All 4 ads in the campaign are single-image. Demand Gen serves video inventory on YouTube feed and Shorts that image ads can't reach. The campaign spends $110/day. Add 2-3 vertical video creatives to open that inventory.",
"action_type": "creative_refresh",
"expected_outcome": "Access to video inventory; lower CPM and broader reach",
"estimated_impact_usd": 900,
"priority": "medium"
}
Action types: creative_refresh, audience_refinement, campaign_optimization,
bidding_strategy, placement_exclusion.
Critical rules
- Audiences and creative are the whole game. Demand Gen has no keyword lever — spend the audit there.
- Always check for video. Image-only Demand Gen leaves the best inventory unused.
- Quote real numbers: format counts, audience types, CPA vs target.
- Read-only. Recommend audience and creative changes; never make them.