---
name: optimize-geographic-targeting
description: >-
  The recurring geographic performance pass: pulls location-level metrics, benchmarks each location against its own
  campaign's CPA/ROAS, sorts locations into bid-up, bid-down, and exclude tiers, and applies the changes the bid
  strategy actually permits, percentage modifiers only on Manual CPC (Smart Bidding ignores them), exclusions on
  everything. Includes the guardrails that keep geo work honest: 50-click minimums, two-period confirmation before
  permanent exclusions, and a cap on first-round modifier sizes. Run bi-weekly for multi-region accounts, monthly
  for single-country, quarterly for small local accounts, or immediately when location CPA spreads exceed 50%.
  Initial geo setup belongs to build-search-campaign-structure; device/schedule/audience modifiers to
  optimize-bid-modifiers; bid strategy selection to select-a-bidding-strategy.
---
# Geographic Performance Optimization

## Purpose
Location is one of the widest performance spreads hiding inside a single campaign average: the same keywords can
convert at half the CPA in one region and never convert in another. This skill quantifies that spread per campaign,
concentrates spend where conversions are cheap, trims where they are dear, and cuts locations that only consume, while respecting the hard rule that Smart Bidding already prices location itself and ignores manual percentage
adjustments.

## When to run
- Cadence by footprint: bi-weekly for multi-state/multi-country accounts, monthly for standard single-country,
  quarterly for small local accounts where data accrues slowly.
- Cost per conversion varies more than ~50% across locations in the current data.
- A new market was just added, or a seasonal event is reshaping geographic demand.

## When NOT to run
- Setting up location targeting for a brand-new campaign → `build-search-campaign-structure`.
- Device, hour-of-day, or audience modifiers are the question → `optimize-bid-modifiers` / `optimize-ad-schedule`.
- The campaign is switching bid strategies (which changes what geo levers exist) → `select-a-bidding-strategy` first.
- Under 30 days of location data, geographic patterns need a full month minimum to mean anything.

## Prerequisites
- Reporting access with at least 30 days of history (14–30 for bi-weekly reads, up to 90 for quarterly).
- Target CPA or ROAS per campaign in scope.
- Knowledge of the current location option (physical-presence-only vs. presence-or-interest), a campaign
  setting, settable via `positive_geo_target_type` on `gads_create_search_campaign` or `gads_update_campaign`
  updates `{geo_target_type_setting: {positive_geo_target_type: ...}}`.

## Procedure
1. **Establish the current targeting state.** `gads_get_campaign` for each in-scope campaign: targeted locations,
   exclusions, and (where surfaced) the presence/interest option. The recommended default is presence-or-interest
   with data driving any restriction, except businesses requiring physical visits (restaurants, clinics, local
   services), which should run presence-only from the start. Change the option via `gads_update_campaign`
   updates `{geo_target_type_setting: {positive_geo_target_type: ...}}`, preview it, don't assume it.
2. **Pull location performance.** `gads_get_geo_performance` for the cadence-appropriate window, supplemented by
   `gads_run_gaql_query` on the geographic/user-location views for full columns: clicks, impressions, cost,
   conversions, CVR, cost/conversion, conversion value. Choose granularity by footprint, country level for
   multi-country, region for nationwide, city for metro accounts. Drop rows under 50 clicks; sort by cost.
3. **Compare physical vs. interest traffic.** Where presence-or-interest is active, split metrics by location
   type via GAQL. Both on target → keep the open option. Physical on target but interest traffic off → recommend
   restricting to presence-only (via `gads_update_campaign`, preview → approval). Interest on target but
   physical off → data oddity;
   investigate before touching anything. Both off → the problem is not geographic.
4. **Benchmark per campaign.** Compute campaign-level average CPA, CVR, and ROAS (value accounts) from the same
   pull. Every location judgment is relative to its own campaign, never the account.
5. **Tier the locations.**
   - RAISE candidates: CPA 20%+ better than campaign average, CVR at/above average, 50+ clicks.
   - REDUCE candidates: CPA 30%+ worse than average, CVR below average, 50+ clicks.
   - CUT candidates: zero conversions, cost above 2x target CPA, 50+ clicks.
   Before finalizing, scan for patterns: neighboring regions sharing a tier (act at the regional level instead of
   piecemeal), urban/rural splits (often a landing-page or offer fit issue wearing a geographic costume), and
   seasonal one-offs (require a second period before permanent action).
6. **Gate on bid strategy.** `gads_list_bidding_strategies` / `gads_get_campaign` per campaign. Manual CPC →
   percentage modifiers are live levers; proceed to step 7. Any Smart Bidding strategy (tCPA, tROAS,
   maximize-type) → the algorithm already prices location and IGNORES percentage adjustments; skip modifiers
   entirely and use exclusions only (step 8).
7. **Apply modifiers (Manual CPC campaigns only).** After `gads_policy_guardrail` (before the session's first
   Google Ads write), set location bid adjustments via `gads_set_bid_adjustments`, preview first
   (validate_only default), commit only on explicit user approval. Sizing bands: CPA 20–30% better than average →
   +10–15%; 30–50% better → +15–25%; 50%+ better → +25–30%. Mirror for REDUCE: 30–50% worse → −10–15%; 50–75%
   worse → −15–25%; 75%+ worse → −25–30%. First round starts at the low end of each band and never exceeds ±30%.
   Remember modifiers stack multiplicatively with device and audience adjustments, check the combined effect
   before committing.
8. **Apply exclusions.** For CUT locations passing all three checks (2x+ target CPA spent with zero conversions;
   the pattern holds across two or more analysis periods; the exclusion does not wall off a meaningful share of
   the addressable market), apply negative location targeting via `gads_add_location_targeting` (exclusion mode), preview → approval → commit.
9. **Document and schedule.** Record every location touched: previous state, new state, tier, and the numbers
   behind it. Schedule the next pass per cadence.
10. **Review after 2–4 weeks.** Re-pull `gads_get_geo_performance` and compare campaign CPA/ROAS, conversions,
    and cost to the pre-change baseline. Correct overshoots: efficiency up but volume cratered → soften the
    negative modifier 5–10 points; CPA worse despite a positive modifier → remove it and investigate; an excluded
    location converting fine in sibling campaigns → re-admit with a negative modifier instead of exclusion.

## Decision rules
- **Smart Bidding gate is absolute:** percentage location modifiers on Smart Bidding campaigns are dead settings.
  Exclusions are the only geographic lever there.
- **Data floors:** 50+ clicks per location for any action; zero-conversion exclusions additionally need 2x target
  CPA spent AND two consecutive periods of the same pattern.
- **Modifier bands:** ±10–30% scaled to CPA deviation; open at the band's low end; hard cap ±30% until a second
  period confirms direction.
- **Benchmark locally:** a location is only good or bad against its own campaign's average.
- **Cluster before acting:** three adjacent underperforming cities are one regional decision, not three city
  decisions.
- **Presence-only restriction** is earned by data (interest-sourced traffic underperforming), except
  visit-required local businesses where it is the default from day one.
- **Exclusion is the last resort**, it removes the market entirely; a strong negative modifier keeps an option
  open on Manual CPC.

## Common failure modes
- **Setting modifiers on Smart Bidding campaigns** and reporting the geo work "done", nothing changed except the
  settings page. Step 6 exists for exactly this.
- **Excluding low-volume zeros.** Forty clicks with no conversions is silence, not failure; the 50-click and
  2x-CPA floors are the discipline.
- **±30%+ opening moves** that whipsaw volume and force a correction cycle; start low, confirm, then extend.
- **Ignoring modifier stacking:** a −20% location on a −20% device quietly bids −36%; compute the product.
- **Permanent exclusions from one odd period**, seasonality and one-off events masquerade as regional failure;
  demand two periods.
- **Defaulting non-local accounts to presence-only** "to be safe," discarding interest-driven demand that the data
  never condemned.
- **Urban/rural verdicts that are really page problems:** when whole density classes underperform uniformly,
  audit the funnel before cutting the map.

## Related skills
- Setup upstream: `build-search-campaign-structure` (initial geo), `select-a-bidding-strategy` (which levers
  exist).
- Adjacent modifier surfaces: `optimize-bid-modifiers` (device/audience/demographic), `optimize-ad-schedule`
  (time-based).
- Triggered by / feeds: `run-a-monthly-performance-review`, `run-search-campaign-optimization-cycle`,
  `scale-bids-and-budgets` when geographic headroom becomes a scaling lever.
