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
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_microsset, 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
BROADone (now removed) and the newPHRASEone.
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
google_ads_ad_group_criterion— the resource reference.- Plan and apply — what happens between your edit and Google Ads.
- Roll back a bad change — for when the new match type turns out worse.