campaign-architect
Skill4 starsChanged 32 days agoMITView on GitHub
Plan a Google Ads account structure and budget from the account's own data: campaign types, naming, budget split, bidding stages, goals and negative lists. Use when the user says "plan our campaigns", "restructure the account", "how should I split the budget", "new account structure", "Q4 plan for <brand>", or before building several campaigns at once.
In this repository13 other files it gives its agents.
- ads-auditSkill
- consent-auditSkill
- demand-gen-launchSkill
- event-auditSkill
- gtm-buildSkill
- monthly-reportSkill
- performance-insightsSkill
- pre-launch-checkSkill
- search-launchSkill
- setupSkill
- tracking-auditSkill
- tracking-planSkill
- weekly-checkSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 8 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Ask once, all together, for whatever the data can't answer:
- Very specific: line 27
Call account_profile first (currency, writes, linked GA4).
- Very specific: line 29
Baseline, last 30 and 90 days (read-only): Don't plan from a blank sheet: the current account shows what to fix.
- Very specific: line 30
If the account has no campaigns yet, run tracking-audit before building anything.
- Distinctive: line 40
Search demand: keywords with almost no impressions over weeks mean little search demand in those markets.
- Very specific: line 41
Real leads: If GA4 is linked, ga4_custom_report with dimensions: ["landingPage", "eventName", "sessionDefaultChannelGroup"] and metrics: …
- Very specific: line 45
Measurement gate: If campaigns don't bid on a working, audience-specific goal, stop and recommend the tracking-audit skill first.
- Distinctive: line 57
No shared budgets. No Dynamic Search Ads.
- Distinctive: line 82
No bidding, goal or audience changes in the first 1–2 weeks.
- Distinctive: line 91
Don't negate "price" for business buyers: they search "<product> price".
- Distinctive: line 95
Search: Google Search only (partners and Display expansion off).
- Very specific: line 126
Never create campaigns in this skill.
- Distinctive: line 127
Never propose shared budgets, Dynamic Search Ads, or one campaign that mixes business and consumer goals.
- Distinctive: line 128
Never size a daily budget below one target cost per lead without flagging it.
- Very specific: line 129
Never quote industry averages as targets.
- Very specific: line 131
If the profile is read-only (no write tools), the plan is still complete.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Campaign architect
Turn an account's real performance into a campaign plan: which campaigns, which type, which budget, which bidding
stage, which goal. The plan is a document; building it is the job of search-launch and demand-gen-launch.
When to use
- A new quarter or a re-plan of an existing account.
- A new account that needs a structure before anything is built.
- "How much should each campaign get?" with more than one campaign involved.
Inputs
Ask once, all together, for whatever the data can't answer:
- Tracks: which audiences are separate businesses (for example business buyers vs consumers).
- Focus lines: the products or services that must get protected budget.
- Markets and languages (the languages each landing page exists in).
- Monthly budget per track, and a target cost per lead if they have one.
Steps
Call account_profile first (currency, writes, linked GA4).
- Baseline, last 30 and 90 days (read-only). Don't plan from a blank sheet: the current account shows what to fix.
If the account has no campaigns yet, run
tracking-auditbefore building anything. GAQL has noLAST_90_DAYS: for 90 days usesegments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'.get_account_summary,get_campaign_performance,get_campaign_budgets,get_keyword_performance, and the top search terms by cost withrun_gaql_query.- Network split per campaign:
SELECT campaign.name, segments.ad_network_type, metrics.cost_micros, metrics.clicks FROM campaign WHERE segments.date DURING LAST_30_DAYS. A "Search" campaign spending mostly outside Google Search is a Display campaign in disguise. - Spend outside the target areas:
geographic_view.location_typeanduser_location_view.targeting_location(see theads-auditskill for the queries). - What each campaign bids on:
campaign_conversion_goalandconversion_goal_campaign_config. - Search demand: keywords with almost no impressions over weeks mean little search demand in those markets.
- Real leads. If GA4 is linked,
ga4_custom_reportwithdimensions: ["landingPage", "eventName", "sessionDefaultChannelGroup"]andmetrics: ["keyEvents", "sessions"]for the same period. Cost per lead must be paid-only: use only the "Paid Search" rows for Search, and "Cross-network" / "Display" / "Paid Video" rows for Demand Gen. Work out cost per lead per line from Ads cost and those GA4 leads, not from Ads conversions alone. - Measurement gate. If campaigns don't bid on a working, audience-specific goal, stop and recommend the
tracking-auditskill first. Bidding on broken measurement wastes the whole plan.guide("measurement"). - Choose campaign types:
- Buyers search the product, category or brand → Search.
- Little or no search demand (keywords barely serve) → Demand Gen to create demand, plus a small Search campaign on problem or benefit terms.
- Own brand terms → a small separate Search campaign, so brand clicks don't flatter non-brand cost per lead.
- Reaching decision-makers before they search → Demand Gen with a business audience, judged on engaged visits and leads.
- Structure rules:
- One campaign = one budget = one goal = one audience. Separate business and consumer campaigns, always.
- Focus lines get their own campaign. Split a portfolio when one line's volume starves another.
- No shared budgets. No Dynamic Search Ads.
- Countries share a campaign at first; split one out only when its cost per lead differs by more than about 50%, or it needs a guaranteed budget.
- Build in waves: core Search first, Demand Gen as soon as creative exists, awareness later.
- Naming convention (pipe-delimited, fixed order, so the UI sorts and filters by it):
<Brand> | <B2B or B2C> | <Line> | <Search or DG> | <Markets> | <Period>; ad groups<Product> | <Theme> | <Language>; listsNEG | <Purpose>; goals<Audience> Leads. - Budget split:
- Per track first, then per campaign by strategic priority and expected lead value, not by last period's spend.
- Brand protection gets the smallest share (around 5–10% of its track).
- Each daily budget should be at least 1× the target cost per lead, ideally 2–3×. A campaign that can't buy about 15–30 conversions a month should be merged or start on clicks.
- Demand Gen needs more conversion volume to learn. If its budget can't buy about 30 conversions a month on its goal,
launch it on MAXIMIZE_CLICKS (supported by
ads_create_demand_gen_campaign) and judge it on engaged visits and leads. - Flag any campaign below that floor instead of silently accepting it.
Bidding stage per campaign:
Stage Search Demand Gen Launch, little history Maximize clicks with a CPC cap (about the line's historical average CPC) Maximize conversions when the goal records and the budget allows; otherwise Maximize clicks Brand campaign Manual CPC, low bid — About 15–30 conversions in 30 days (review in week 3) Switch from clicks to maximize conversions Stay About 30+ conversions a month and a stable cost per lead for 2–4 weeks Add a target CPA at the achieved level, never below Same No bidding, goal or audience changes in the first 1–2 weeks; one change per campaign per review. Bidding strategy changes are made in the Google Ads interface (Campaign → Settings → Bidding); no tool does it yet.
- Goals and negatives:
- One custom goal per audience, made of exactly that audience's lead actions. Page views stay secondary.
- Shared negative lists by audience, phrase match:
NEG | Globalon everything: jobs, courses, free, irrelevant industries, in every language.NEG | B2B - Consumer termson business campaigns: near me, reviews, at home…NEG | B2C - Trade termson consumer campaigns: supplier, wholesale, used, distributor…- Brand terms as negatives on non-brand campaigns.
- Don't negate "price" for business buyers: they search "
<product>price".
- Standard settings for every new campaign:
- Location: people in the location (presence).
- Languages: every language the landing page exists in (Google infers the languages a user understands; target every language the landing page exists in).
- Search: Google Search only (partners and Display expansion off).
- Own budget, campaign-level custom goal, created paused.
- In the interface: auto-apply recommendations off and automatically created assets off; Demand Gen final URL expansion off.
- Transition. New campaigns run in parallel with the ones they replace for about 7 days, then the old ones are paused. Keep an old campaign running if it's the only source of a lead type the new structure doesn't cover yet.
Optional foundations, after the user approves the plan:
ads_create_custom_goalper audience; it needsconversionActionIds(get them with theconversion_actionquery intracking-audit).ads_negative_listto create the shared lists (attach them when the campaigns exist).
Each one is a preview first, applied only after a yes.
Output
One plan document (Markdown, or HTML if they want to share it):
# <Account> plan: <period>
## Diagnosis (what the baseline showed, with numbers)
## Campaign map
| Campaign (named) | Type | Audience | Markets | Languages | Daily budget | Bidding stage | Goal |
## Budget split (per track, per campaign, the floor check)
## Goals and negative lists
## Standard settings
## Transition and review plan (launch day, day 3, week 1, week 3, monthly)
## Build order → hand off to search-launch / demand-gen-launchNever
- Never create campaigns in this skill; hand each campaign row to
search-launchordemand-gen-launch. - Never propose shared budgets, Dynamic Search Ads, or one campaign that mixes business and consumer goals.
- Never size a daily budget below one target cost per lead without flagging it.
- Never quote industry averages as targets; plan from the account's own baseline (
guide("benchmarks")only explains how to read numbers). - If the profile is read-only (no write tools), the plan is still complete; tell the user that creating the goals and
lists needs
npx google-marketing-agent accounts set <alias> writes trueand an MCP client restart.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

