Device targeting on Google is editable through targeting.devices on the ad route. Locations arenot: any other targeting field on an existing Google campaign returns a 400, so a campaign that targets the wrong region has to be recreated or
fixed in Google Ads.
Why it matters to us: region is the single most common thing a local business wants to change. An installer who adds a second service area, or someone who realises they're paying for clicks two provinces away, is making a small correction,
not starting over. "Delete this campaign and build a new one" loses the history and the learning, and it's a lot to ask for what feels like editing one line.
What would help: allow updating the location seton an existing campaign, even with the same constraint that already applies elsewhere, where an update replaces the fullset rather than merging it. We can work with "send the complete list
you want to keep"; we already do exactly that for LinkedIn targeting.
Shipped and live. You can update the location set on an existing Google campaign through the ad route, in the same dialect you already use for LinkedIn:
PUT /v1/ads/{adId}
{"targeting": {"countries": ["NL"]}}
Replace semantics, exactly as you asked for: send the complete list you want to keep. countries, regions, cities, zips and metros all work, both as top-level fields and nested under targeting.locations. Radius targeting is the one shape that still has to be set at creation, and it now says so instead of failing oddly.
Verified end to end on a throwaway campaign, reading the result back from Google through GAQL rather than trusting our own response: a campaign targeting the US came back as geoTargetConstants/2528 (Netherlands) after the call.
Two things worth knowing before you wire it up.
The docs paragraph you were working from was stale, and it was stale when you quoted it. It said any targeting field other than devices and keywords returns 400. That is corrected now.
More importantly, while shipping this we found and fixed a bug in the same code path that could have cost your customers real money: a location edit that resolved to an empty set was accepted with a 200 and removed every geo criterion, leaving the campaign targeting worldwide. That is refused now, along with every other route to an empty location set. If you ran any location edits against a live campaign recently, it is worth a look at the geo on those.
JW Stukart
•
Sep 11
you can ignore this feature request! thanks. (cant seem to delete it)
Log in to comment and vote
Comments2
Miquel Palet López
Sep 11
Shipped and live. You can update the location set on an existing Google campaign through the ad route, in the same dialect you already use for LinkedIn:
PUT /v1/ads/{adId} {"targeting": {"countries": ["NL"]}}Replace semantics, exactly as you asked for: send the complete list you want to keep.
countries,regions,cities,zipsandmetrosall work, both as top-level fields and nested undertargeting.locations. Radius targeting is the one shape that still has to be set at creation, and it now says so instead of failing oddly.Verified end to end on a throwaway campaign, reading the result back from Google through GAQL rather than trusting our own response: a campaign targeting the US came back as
geoTargetConstants/2528(Netherlands) after the call.Two things worth knowing before you wire it up.
The docs paragraph you were working from was stale, and it was stale when you quoted it. It said any targeting field other than devices and keywords returns 400. That is corrected now.
More importantly, while shipping this we found and fixed a bug in the same code path that could have cost your customers real money: a location edit that resolved to an empty set was accepted with a 200 and removed every geo criterion, leaving the campaign targeting worldwide. That is refused now, along with every other route to an empty location set. If you ran any location edits against a live campaign recently, it is worth a look at the geo on those.
JW Stukart
Sep 11
you can ignore this feature request! thanks. (cant seem to delete it)