Skip to content

Move a keyword between match types

You added a keyword as BROAD last month. It’s matching too much noise. You want to tighten it to PHRASE (or EXACT).

In the Google Ads UI this is a small click. In bidsmith it’s a two-line diff. The history is in Git.

The change

In your .bid file, find the google_ads_ad_group_criterion block holding the keyword:

resource "google_ads_ad_group_criterion" "kw_summer_deals" {
ad_group = google_ads_ad_group.summer_default.id
status = "ENABLED"
keyword {
text = "summer deals"
match_type = "BROAD" # ← change this
}
}

Change match_type to the new value:

keyword {
text = "summer deals"
match_type = "PHRASE"
}

That’s the entire change.

Plan and apply

Terminal window
bidsmith plan .

Expected: one ~ update row for this criterion, showing match_type: "BROAD" → "PHRASE". Nothing else.

Commit, PR, merge, apply.

What actually happens at apply time

Under the hood, Google Ads doesn’t update the match type of an existing keyword — it deletes the old one and creates a new one. This means:

  • The new keyword starts at zero quality score history. It will need a week or two of impressions to settle to a stable quality score.
  • Bid history is lost. If you had a custom cpc_bid_micros set, it carries over (bidsmith re-asserts it), but Google’s smart-bidding “learning phase” restarts.
  • Reports that filter by keyword ID will show two keywords: the old BROAD one (now removed) and the new PHRASE one.

This is a Google Ads quirk, not a bidsmith quirk — the UI does the same thing under the hood. Worth knowing because of the smart-bidding implication: if a keyword’s performance is borderline and you flip its match type, expect a learning-phase dip before it stabilizes.

Variations

Promote a broad term to phrase + exact

If your summer deals broad-match keyword is performing well and you want to also serve on the exact variant, declare both:

resource "google_ads_ad_group_criterion" "kw_summer_deals_phrase" {
ad_group = google_ads_ad_group.summer_default.id
status = "ENABLED"
keyword {
text = "summer deals"
match_type = "PHRASE"
}
}
resource "google_ads_ad_group_criterion" "kw_summer_deals_exact" {
ad_group = google_ads_ad_group.summer_default.id
status = "ENABLED"
cpc_bid_micros = 4000000 # exact-match deserves a higher bid
keyword {
text = "summer deals"
match_type = "EXACT"
}
}

Now you serve on both. The exact-match variant gets a higher bid because exact matches tend to be more valuable.

Compact form for many keywords

If you’re changing several keywords at once, use the compact form: group multiple keyword {} blocks in one resource per (ad_group, match_type) pair. See the example in the resource reference.

See also