---
name: the-media-plan-builder
description: "From a brief (product, audience, budget, goal, market), produce a defensible media plan: audience definitions, budget split across channels, flighting calendar, and a channel-mix rationale. Cross-platform. Uses Similarweb/Semrush for competitive context if connected. Plan doc, not a live launch."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "media-planning"
  adspirer_source: "https://www.adspirer.com/skills/the-media-plan-builder"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "paid media plan"
  adspirer_secondary_keywords: "media planning template, digital media plan"
  adspirer_launch_wave: "1"
  adspirer_kind: "skill"
  adspirer_level: "operator"
  adspirer_platforms: "google,meta,linkedin,tiktok"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "From a brief (product, audience, budget, goal, market), produce a defensible media plan: audience definitions, budget split across channels, flighting calendar, and a channel-mix rationale. Cross-platform. Uses Similarweb/Semrush for competitive context if connected. Plan doc, not a live launch."
  adspirer_connections_required: "semrush,adspirer"
  adspirer_connections_optional: "similarweb"
---

# The Media Plan Builder

## Use this when

Use when you're kicking off a new product/campaign push and need a defensible, board-ready media plan BEFORE any budget touches a live account — a new product launch, a new market entry, a quarterly budget reset, or a client/stakeholder deck that has to justify channel mix and flighting with numbers, not vibes. Best when you already have a real brief: a product/offer, a target audience description, a total budget and period, a primary goal (leads, purchases, installs, awareness), and a market/geo. Not for optimizing an existing live campaign (that's a monitor/optimizer skill) and not for actually launching anything — this produces the plan document that a human (or a separate launch skill) executes against.

## What you need

- A written brief: product/offer description, target audience (demo/firmo/interest signals), total budget, budget period (e.g. 6-week launch, quarterly), primary KPI (CPL, ROAS, CPA, installs, reach), and target market/geo.
- At least one ad platform connected in Adspirer among Google, Meta, LinkedIn, TikTok — the plan reads real account history (past CPCs, CPMs, conversion rates, audience sizes) from whichever are connected; unconnected platforms get benchmark-only estimates, clearly labeled as such.
- Optional: Semrush and/or Similarweb connected for competitive share-of-voice, competitor spend signals, and traffic-source mix — the plan ships fine without either, just with a narrower "why this channel mix" rationale.
- A rough sense of any hard constraints: brand-safety exclusions, a platform you're contractually required to include/exclude, a minimum test budget per channel, or a launch date that can't move.

## Procedure

1. Parse the brief into a structured spec: objective (awareness/consideration/conversion), primary KPI + target value if given, total budget, flight window (start/end dates or duration), audience description, geo/market, and any hard constraints (excluded platforms, mandatory inclusions, minimum per-channel spend). If budget, KPI, or flight window is missing, ask — don't invent a number and don't silently default a 30-day window when the user said "launch week."

2. Pull real account signals for every connected platform via Adspirer to ground the plan in the account's own history rather than generic benchmarks: recent CPC/CPM/CPA by campaign type, historical CTR and conversion rate, audience/segment sizes reachable at the given geo, and current account health (any active suspensions, disapprovals, or learning-phase campaigns that would bias recent numbers).
**Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed.

3. If Similarweb is connected, pull competitive traffic-source mix and estimated ad spend distribution for 2-4 named or inferred competitors in the category to sanity-check the channel split (e.g. if competitors get 40%+ of traffic from paid social vs paid search, that's a signal, not a mandate) — skip cleanly to step 4 if not connected, note the plan is running on platform benchmarks only.
**Optional — connect Similarweb:** this step is sharper with Similarweb, but skips cleanly without it. To enable it, add the Similarweb MCP/connector — setup: https://developers.similarweb.com/docs/similarweb-mcp.

4. If Semrush is connected, pull paid-search keyword competition/CPC estimates and organic-vs-paid share for the category to stress-test the Google/Bing budget line specifically (high organic share + high paid CPC can argue for shifting search budget toward branded-defense only and pushing incremental budget to social/display) — skip cleanly if not connected.
**Connect Semrush:** this step uses Semrush. Add the Semrush MCP/connector to your agent — setup: https://www.semrush.com/kb/1618-mcp, then continue. Skip only if a step says it's optional.

5. Build audience definitions per platform, not one generic audience copy-pasted four times: Google (in-market + custom-intent keyword themes + affinity), Meta (interest/lookalike seed logic — flag if the account lacks a pixel/CAPI event with enough volume for a 1% LAL, since under ~1,000 seed events makes a lookalike unreliable), LinkedIn (job title/seniority/company-size/industry — note LinkedIn CPMs typically run 3-6x Meta so this only pencils for high-LTV B2B or ABM, size the reachable audience and flag if it's under ~50k, too narrow to spend efficiently), TikTok (interest/behavior + Spark Ads consideration if there's existing organic content, note TikTok skews younger and needs creative-native framing, not repurposed statics).

6. Compute the channel budget split using a weighted method, not an even split: weight by (a) each platform's historical efficiency in this account toward the stated KPI, pulled in step 2, (b) reachable audience size at the given geo per step 5, (c) category competitive signal from steps 3-4, (d) funnel role — top-of-funnel goals (awareness/reach) skew Meta/TikTok, bottom-of-funnel high-intent (search, high-ticket B2B) skew Google/LinkedIn. Show the weighting logic in the plan, not just the resulting percentages — a buyer reviewing this needs to see why, e.g., Google got 45% not 30%.

7. Reserve a test/learning tranche: for any platform new to this account or with under 50 conversions/month history, cap its initial allocation at 10-15% of total budget regardless of what the efficiency weighting alone would suggest, and label it explicitly as a test tranche with a defined evaluation checkpoint (e.g. "re-evaluate at day 14 or 50 conversions, whichever first") — this is the single most common junior-planner mistake (over-committing budget to an unproven channel on paper efficiency alone).

8. Build the flighting calendar across the budget period: front-load 15-20% extra budget in week 1 on platforms using auto-bidding/learning-phase algorithms (Meta CBO, Google Smart Bidding, TikTok VBO) so the algorithm exits learning phase faster — learning phase typically needs ~50 conversions per ad set/ad group in a 7-day window; underfunding week 1 stretches learning phase and depresses week 1-2 efficiency reads. Flag any calendar collision with known high-CPM periods (BFCM, mid-Nov to early-Jan) if the flight window overlaps.

9. Assemble the plan document: executive summary (goal, budget, timeframe, top-line channel split), per-platform budget + audience + creative-format recommendation, flighting calendar with weekly budget curve, competitive context section (if steps 3-4 ran) or a note that it's benchmark-only (if not), assumptions and confidence caveats (e.g. "Google CPC assumes account's trailing-90-day average continues; a category CPC spike from a competitor launch is not modeled"), and the explicit test-tranche checkpoints from step 7.

10. Present the plan to the user for review before anything is scheduled or spent — this skill's output is a document, not a launch. Note clearly which line items are pending explicit spend approval and which platforms would need to be connected in Adspirer (if any weren't) before the plan could actually be executed.

## Fixed checks

- Budget lines sum to the user's stated total budget (or explicitly flagged if they don't, e.g. rounding).
- Every per-platform allocation is checked against that platform's LIVE connected-account data (real historical CPC/CPM/conversion rate pulled via Adspirer in step 2) — never against assumed or industry-average benchmarks when real account data exists.
- Any platform recommended for spend but NOT currently connected in Adspirer is flagged explicitly in the plan output, not silently included as if ready to launch.
- Audience size estimates (LinkedIn especially) are checked against the platform's live reachable-audience figure, not a guessed number — if under ~50k reachable, this is flagged as a targeting-too-narrow risk in the plan, not omitted.
- Test-tranche caps (step 7) are verified against the account's actual trailing conversion volume per platform, not assumed "new" status.
- Flighting calendar dates are checked against the actual calendar (no scheduling a launch flight starting on a date already in the past relative to today, no unflagged overlap with BFCM/holiday CPM spikes if in-window).

## Stop conditions

- Success: full plan document produced with budget split, audience definitions, flighting calendar, and rationale, grounded in live account data for all connected platforms; presented to user for review.
- Partial/no-op with disclosure: brief is missing budget, KPI, or flight window — stop and ask rather than fabricate; do not produce a plan with invented numbers.
- Degraded but complete: Similarweb and/or Semrush not connected — plan still ships, competitive-context section is replaced with a clear "benchmark-only, no live competitive data" note rather than omitted silently.
- Blocked: zero ad platforms connected in Adspirer — cannot ground any budget line in real account data; stop and tell the user which platform(s) to connect, do not proceed on pure industry benchmarks presented as if account-specific.
- Needs-approval: plan is complete and presented, but this skill takes no further action — it does not schedule, create campaigns, or spend; execution is a separate, explicitly approved step outside this skill's scope.

## Approval boundaries

This skill is read-only and produces a planning document — it takes no spend actions and creates, edits, or launches nothing in any live ad account. Pulling historical performance/audience data via Adspirer (step 2) is read-only reporting, not a spend action, so it does not itself require spend approval. If the user later asks to execute the plan (create campaigns, allocate real budget), that is explicitly out of scope for this skill and requires a separate workflow where every spend action gets the user's explicit approval before it goes live.

## What you get

A media plan document containing: (1) executive summary with objective, total budget, flight window, and top-line channel split; (2) per-platform budget allocation with the weighting rationale shown (historical efficiency, reachable audience, competitive signal, funnel role); (3) per-platform audience definitions (Google intent/affinity themes, Meta interest/lookalike with pixel-volume caveat, LinkedIn firmographic with reachable-size check, TikTok interest/behavior with creative-native note); (4) a week-by-week flighting calendar with budget curve, including learning-phase front-loading and any holiday/high-CPM collision flags; (5) a competitive-context section from Similarweb/Semrush if connected, or an explicit benchmark-only disclosure if not; (6) test-tranche caps and evaluation checkpoints for any new/low-volume platform; (7) an assumptions and confidence-caveats section. No campaigns are created and no budget is spent — this is a plan for the user (or a separate launch skill) to approve and execute.
