Skip to main content

Prompt packs · free template

PPC Audit Prompt Pack

Six copy-paste prompts that audit a paid-search account from exports — no logins, no APIs.

Fill in your values.

Everything you enter below is substituted live into the template — copy or download it and the file is already yours. Skip anything you're not sure of; unfilled fields stay as {{PLACEHOLDER}} markers. Values save in your browser and carry across every template in the library.

Your values · 22 fields

Your copy, ready to run.

The preview below updates as you type. Copy it to your clipboard or download it as ppc-audit-prompts.md.

PPC Audit Prompt Pack · 417 lines
# PPC Audit Prompt Pack

Audit a paid-search account from exports alone. No API access, no account login —
just the CSVs any read-only user can pull. Run the six prompts in order with Claude
(or any capable AI assistant). Each prompt tells the model exactly what to read and
exactly what to return, so the output is review-ready, not a wall of observations.

---

## Ground rules — read before running anything

- **Read-only by design.** Every prompt produces recommendations. Nothing in this
  pack applies a change. Changes happen only after a named owner reviews the output
  and applies approved items manually (for example, through Google Ads Editor).
- **Running this through an agent instead of a chat window?** The agent operates
  under your Campaign AGENTS.md scope rules: exports are read-only data sources,
  and every prompt here maps to the RECOMMEND tier. Nothing in this pack grants
  write access.
- **Evidence over estimates.** "Estimated wasted spend" always means cost already
  recorded in the export window on rows that produced no conversions — an observed
  number, never a projection or an annualized figure.
- **Every eventual change carries a log line.** Findings that would move money or
  targeting get converted into Trigger / Action / Impact log entries (Prompt 6)
  before anyone touches the account, so every change is auditable and reversible.
- **Set your definitions once.** Agree the conversion definition and the target
  efficiency number — {{TARGET_CPA_OR_ROAS}} (your agreed CPA or ROAS target) —
  before Prompt 1, so "waste" means the same thing in every prompt.

## Exports you need

Pull these from the Google Ads UI (read-only access is enough). Use the same date
range — {{DATE_RANGE}} (the window your exports cover, e.g. "the last 90 days") —
for every file so the passes agree with each other.

| # | Export (CSV) | Used by | Required columns |
|---|--------------|---------|------------------|
| 1 | Search terms report | Prompts 1, 5 | Search term, matched keyword, match type, campaign, ad group, impressions, clicks, cost, conversions, conv. value |
| 2 | Campaign performance report | Prompts 2, 4, 5 | Campaign, type, status, budget, cost, impressions, clicks, conversions, conv. value, cost/conv., search impr. share, search lost IS (budget), search lost IS (rank) |
| 3 | Keyword report with Quality Score columns | Prompts 3, 4 | Keyword, match type, campaign, ad group, Quality Score, exp. CTR, ad relevance, landing page exp., final URL, cost, conversions |
| 4 | Ad report | Prompt 3 | Ad group, ad type, headlines, descriptions, final URL |
| 5 | Ad group listing | Prompt 4 | Campaign, ad group, status |

Tip: filter to rows with at least one click before exporting to keep files inside
your AI tool's attachment limits.

---

## Prompt 1 — Search-term waste mining

**Inputs:** Export 1 (search terms report CSV), attached or pasted. Fill the
context placeholders in the prompt.

**Prompt:**

```
You are a senior paid-search auditor working from exports only. You have no
account access. Use only the data in the attached file — never invent numbers,
and never extrapolate beyond the export window.

CONTEXT
- Business: {{BUSINESS_DESCRIPTION}} (one or two sentences on what the business
  sells and to whom)
- Brand terms (never propose as negatives): {{BRAND_TERMS}} (your brand and
  product names)
- Known competitors: {{COMPETITOR_NAMES}} (competitor names that may appear in
  queries)
- Conversion definition: {{CONVERSION_DEFINITION}} (what a conversion means in
  this account)
- Target efficiency: {{TARGET_CPA_OR_ROAS}}
- Currency: {{CURRENCY}} (account currency, e.g. CAD)
- Export window: {{DATE_RANGE}}

TASK
The attached CSV is the Google Ads search terms report for the window above.

1. Classify every search term with recorded cost into exactly one of:
   converting / research-stage / competitor / irrelevant / ambiguous.
   If you are not confident, use "ambiguous" — do not guess.
2. Build a negative-keyword candidate list from the irrelevant and
   research-stage terms, plus competitor terms whose cost produced zero
   conversions. Ignore terms below {{MIN_TERM_SPEND}} (a per-term spend floor
   you set, below which a term is not worth acting on).
3. For each candidate, compute observed wasted spend = the term's cost in the
   window minus any conversion value it produced. This is history, not a
   forecast — label the column "observed spend in window".
4. Recommend a negative match type (exact or phrase) and a level (ad group /
   campaign / shared list) for each candidate. Prefer shared campaign-level
   lists when the same waste pattern appears across campaigns.
5. Separately flag match-type leakage: terms that entered through broad or
   phrase match while a better-performing exact keyword exists in this export.

OUTPUT
Table 1 — Negative-keyword candidates, sorted by observed wasted spend,
descending: search term | classification | campaign | ad group | matched
keyword | match type | clicks | cost | conversions | observed wasted spend |
proposed negative (text + match type) | proposed level | confidence
(high/medium/low) | one-line reasoning.

Table 2 — Ambiguous terms needing a human call: term | evidence row | the
specific question a reviewer must answer.

Close with: total observed wasted spend across high-confidence candidates
only, and the three worst match-type leakage patterns.

Every row is a recommendation pending human review. Do not phrase anything
as an applied or scheduled change.
```

**Expected output:** two tables and a two-line summary, ready to paste into a
decision sheet with an approve/reject column.

**Guardrail:** nothing from this table enters the account until a named reviewer
approves each row — ambiguous and low-confidence rows individually. Before
approving, check for terms that convert on longer windows than the export covers.
When applying later, use a dated shared negative list so the whole batch reverses
in one action.

---

## Prompt 2 — Budget vs performance misalignment

**Inputs:** Export 2 (campaign performance report CSV).

**Prompt:**

```
You are a senior paid-search auditor working from exports only. Use only the
data in the attached file — never invent numbers, never extrapolate beyond
the export window.

CONTEXT
- Export window: {{DATE_RANGE}}
- Currency: {{CURRENCY}}
- Target efficiency: {{TARGET_CPA_OR_ROAS}}
- Total monthly budget: {{TOTAL_MONTHLY_BUDGET}} (the figure the budget owner
  recognizes)
- Proposal cap: no single proposed shift may exceed {{MAX_SHIFT_PCT}} (a
  per-campaign ceiling you set yourself — a placeholder, not a benchmark) of
  the source campaign's current budget.

TASK
The attached CSV is the campaign performance report.

1. For each campaign compute: share of total spend, share of total
   conversions (or conversion value), cost per conversion vs the target, and
   — where the columns exist — impression share lost to budget and to rank.
2. Sort campaigns into three groups:
   a. Over-funded underperformers: spend share materially above conversion
      share AND efficiency worse than target.
   b. Constrained winners: efficiency at or better than target AND impression
      share lost to budget recorded in the export.
   c. In balance: leave alone.
3. Draft a reallocation proposal moving budget from group (a) to group (b),
   one row per move, each within the proposal cap. Never propose moves into a
   campaign with no conversion history in the window.
4. Where lost-impression-share columns are missing, say so and lower the
   confidence rating rather than inferring headroom.

OUTPUT
Table 1 — Campaign scorecard: campaign | budget | cost | spend share % |
conversions | conversion share % | cost/conv. | vs target | lost IS (budget)
| group (a/b/c) | one-line reasoning.

Table 2 — Proposed shifts: from campaign | to campaign | amount in
{{CURRENCY}} | % of source budget | evidence | confidence | risk note (what
could make this move wrong).

Close with the one sentence a budget owner needs: how much budget currently
sits in group (a), stated as an observed figure from the window.

These are proposals for the budget owner. Do not phrase any row as an
applied or scheduled change.
```

**Expected output:** a scorecard table, a shift-proposal table, and a one-sentence
budget-owner summary.

**Guardrail:** budget moves are never self-approved. Every proposed shift requires
sign-off from the named budget owner, and hard daily spend caps should already
exist as native Google Ads automated rules — independent of any AI workflow — so
no downstream failure can overspend.

---

## Prompt 3 — Keyword / ad / landing-page message-match gaps

**Inputs:** Export 3 (keyword report with Quality Score columns) and Export 4
(ad report). Plus landing-page copy.

**Prompt:**

```
You are a senior paid-search auditor working from exports only. You have no
live account or site access beyond what is pasted below.

CONTEXT
- Export window: {{DATE_RANGE}}
- Business: {{BUSINESS_DESCRIPTION}}
- Landing pages: {{LANDING_PAGE_COPY_OR_URLS}} (paste the visible copy of
  each major landing page under its final URL; list bare URLs only if your
  AI tool can fetch pages)

TASK
Attached: (1) the keyword report including Quality Score and its three
components — expected CTR, ad relevance, landing page experience; (2) the ad
report with responsive search ad headlines and descriptions per ad group.

1. Flag every keyword with meaningful cost where any Quality Score component
   is rated "below average".
2. For each flagged keyword, trace the message chain:
   keyword -> the ad group's RSA assets -> the final-URL landing page copy.
   Identify where the chain breaks:
   (a) keyword theme absent from headlines (ad relevance),
   (b) generic headline vs the likely query intent (expected CTR),
   (c) landing page copy that does not carry the ad's promise (landing page
       experience).
3. Recommend the smallest fix per break: a specific replacement headline or
   description (write the actual text, within RSA character limits), a
   keyword-to-ad-group move, or a landing-page copy change described
   concretely (which section, what claim).
4. Group findings by ad group so one batch of fixes covers all its keywords.

OUTPUT
Table — message-match gaps, sorted by cost on flagged keywords, descending:
ad group | keyword | cost | Quality Score | weak component | where the chain
breaks | recommended fix (specific text or change) | mechanism (which
component the fix addresses) | confidence.

Then list ad groups whose problem is structural — too many unrelated
keywords for copy fixes to solve — and mark them "refer to structure
review".

Describe mechanisms only. Do not predict Quality Score changes or promise
performance improvements.
```

**Expected output:** one gap table with written replacement copy, plus a short
referral list for the structure review in Prompt 4.

**Guardrail:** ad copy and landing-page edits ship through your normal creative,
brand, and legal review — this output never bypasses it. If you keep a Campaign
CLAUDE.md, check drafted headlines against its voice and never-say rules. Reject
any row that promises a score or performance outcome; the pack deals in mechanisms
and observed evidence only.

---

## Prompt 4 — Campaign structure and naming review

**Inputs:** Export 2 (campaign report), Export 5 (ad group listing), Export 3
(keyword report — reused).

**Prompt:**

```
You are a senior paid-search auditor working from exports only.

CONTEXT
- Account: {{ACCOUNT_NAME}} (the account or client name)
- Naming convention, if one exists: {{NAMING_CONVENTION}} (paste it, or write
  "none")
- Business: {{BUSINESS_DESCRIPTION}}

TASK
Attached: the campaign report, ad group listing, and keyword report.

1. Map the account tree: campaigns -> ad groups -> keyword counts and match
   types.
2. Flag structural risks visible from exports:
   - keyword overlap: same or near-identical keywords active in multiple
     campaigns or ad groups (internal competition);
   - unthemed ad groups: keyword sets spanning clearly different intents;
   - dormant elements: enabled campaigns or ad groups with no spend in the
     window;
   - brand and non-brand terms mixed in one campaign;
   - match-type strategy inconsistencies across sibling ad groups.
3. Audit names: from the name alone, can a stranger tell channel, market or
   geo, theme or funnel stage, and brand vs non-brand? Score each campaign
   name pass/fail per element.
4. Propose — do not apply — a naming pattern for this account (use the
   existing convention if provided, otherwise propose one pattern with named
   segments) and a rename map.

OUTPUT
Table 1 — structural findings: finding type | entities affected | evidence
from the exports | risk it creates | recommended restructure | effort
(S/M/L).

Table 2 — rename map: current name | proposed name | what changed.

Close with the two structural changes that unblock the most other fixes.

Mark every recommendation that would reset performance history or automated
bidding learning with the tag [RESETS HISTORY] so reviewers can weigh it.
```

**Expected output:** a findings table, a rename map, and a two-item priority call.

**Guardrail:** restructures are the highest-blast-radius recommendations in this
pack — moved or recreated entities reset learning. Treat each restructure as an
approved batch with a written rollback note, applied by one person on one date,
never piecemeal across a week.

---

## Prompt 5 — Prioritized findings summary for a stakeholder

**Inputs:** the full outputs of Prompts 1–4, pasted into the marked sections.

**Prompt:**

```
You are preparing an audit readout for {{STAKEHOLDER_ROLE}} (who will read
this — e.g. "the client's marketing director") on the {{ACCOUNT_NAME}}
paid-search account. The audience is busy and numerate but not in the
account daily.

Below are the outputs of four audit passes.

--- WASTE MINING OUTPUT ---
{{PROMPT_1_OUTPUT}} (paste the full output of Prompt 1)
--- BUDGET OUTPUT ---
{{PROMPT_2_OUTPUT}} (paste the full output of Prompt 2)
--- MESSAGE MATCH OUTPUT ---
{{PROMPT_3_OUTPUT}} (paste the full output of Prompt 3)
--- STRUCTURE OUTPUT ---
{{PROMPT_4_OUTPUT}} (paste the full output of Prompt 4)

TASK
1. Rank every finding on two axes: observed impact (the {{CURRENCY}} evidence
   from the export window — never a projection) and effort (S/M/L).
2. Produce a one-page readout containing:
   - a three-sentence account summary in plain language;
   - Top findings table: rank | finding | evidence (observed figure + which
     pass it came from) | recommendation | effort | owner who must approve;
   - two short lists: quick wins (high impact, S effort) and structural
     fixes (M/L effort);
   - a recommended approval sequence: what to review first and why;
   - this exact closing line: "This is an audit of exports covering
     {{DATE_RANGE}}. No changes have been made to the account."
3. Use only numbers that appear in the pasted outputs. If two passes
   disagree, surface the conflict — do not resolve it silently.

Tone: plain and confident, no jargon the stakeholder would not use.
```

**Expected output:** a one-page readout a stakeholder can approve line by line.

**Guardrail:** this readout is the approval instrument. Findings become changes
only after the named owners sign the relevant rows; keep the signed copy with the
audit log so every later change traces back to an approval.

---

## Prompt 6 — Governed change plan (Trigger / Action / Impact)

**Inputs:** the rows from the Prompt 5 readout that owners actually approved,
with approver names attached.

**Prompt:**

```
You are converting approved audit findings into a governed change plan.
This produces a plan and audit-log entries for a human to follow — it
executes nothing.

CONTEXT
- Approved findings: {{APPROVED_FINDINGS}} (paste only the readout rows the
  owners approved, each with its approver's name)
- Application method: manual, via Google Ads Editor, by
  {{IMPLEMENTER_NAME}} (the person who will apply each batch)
- Rollback convention: each batch of negatives goes into a dated shared list
  named per {{LIST_NAMING_PATTERN}} (e.g. "NEG - account - YYYY-MM-DD") so a
  whole batch reverses in one action.

TASK
1. Group the approved changes into batches by type: negatives, budget
   shifts, copy changes, structure.
2. For every change, write a Trigger / Action / Impact log entry:
   - Trigger: the observed evidence that justified it, with the figure and
     the audit pass it came from;
   - Action: the exact change — entity, before value, after value;
   - Impact: the metric to watch and the check date {{REVIEW_DATE}} (when
     the implementer verifies the change did what the trigger implied).
3. Attach to each batch: approver name, a one-sentence rollback step, and a
   hold rule — if the account's spend or conversion pattern shifts
   materially before application day, the batch returns to review instead
   of shipping.

OUTPUT
One table per batch: change # | trigger (evidence) | action (entity,
before -> after) | impact (metric + check date) | approver | rollback step.

Above each table, a batch header: batch name | application date |
implementer | shared list or label used | hold rule.

Format every value so it can be transcribed into Google Ads Editor without
interpretation.
```

**Expected output:** transcription-ready batch tables that double as the audit log.

**Guardrail:** a human applies each batch, in the approved sequence, and runs the
check on {{REVIEW_DATE}}: if a negative is blocking converting traffic or a budget
shift underperforms its trigger, revert from the log — the before/after values
make every change one step from undone.

---

## Cadence and reuse

Re-run the pack quarterly, or on day one with any new account. Keep the Prompt 6
log and the rejected candidates from Prompt 1: paste them into the next run's
context so the audit stops re-flagging decisions you already made. When the
export-paste-review loop proves itself and you are ready to run it as a governed
automation, write the scope and tiers into a Campaign AGENTS.md and the caps into
a signed Guardrail Configuration first — the same discipline, made standing.

A copy-paste audit kit for paid-search accounts you can only see through exports. Six prompts take the CSVs any read-only user can pull — search terms, campaign performance, keywords with Quality Score, ads — and turn them into ranked negative-keyword candidates, a budget realignment proposal, message-match fixes, a structure review, a stakeholder readout, and a governed change plan.

Everything is recommendation-only by design: nothing in this pack applies a change. Named approvers sign each row, the caps are yours to set, and every change that eventually ships carries a Trigger / Action / Impact log entry so it can be audited and reversed.

Auditing a prospect's or new client's account before you have (or want) login access
Running a quarterly hygiene pass on your own account without wiring up any APIs
Producing an evidence-based readout a stakeholder can approve line by line
Proving the audit discipline manually before automating it as a governed workflow
Swap Google Ads column names for Microsoft Ads equivalents — the audit logic is platform-agnostic
Set {{MIN_TERM_SPEND}} and {{MAX_SHIFT_PCT}} to your own risk tolerance; they are caps you choose, not benchmarks
Paste landing-page copy into Prompt 3 directly when your AI tool cannot fetch URLs
Feed last cycle's decision log back into Prompt 1 so rejected candidates are not re-flagged
Reshape the Prompt 5 readout to your stakeholder's format — slide bullets, email, or one-pager
Used in practice by the PPC Intelligence build guide — the step-by-step build this template plugs into.