Today targeting.keywords / targeting.negativeKeywords on PUT /v1/ads/{adId} replace the entire set of that kind on the ad group — anything not sent is removed. That is the right primitive for a campaign builder, but it is a dangerous
one forany tool that acts on a suggestion.
Our use case: we analyse a customer's search terms and propose "exclude these three wasteful terms". To execute that today we must re-send the ad group's complete keyword inventory, correctly, including match types. If our inventory is
one sync behind — a paginated sync that hit a 429, a keyword added in Google Ads five minutes ago — we silently delete working keywords and spend the customer's money in the wrong places. There is no way to detect that after the fact.
Request: an additive shape, e.g. targeting.addKeywords / targeting.removeKeywords (and the same for negatives), or a PATCH-style operation list. Removal by keyword text + match type would be enough; a criterion ID would be even better.
Why it matters beyond us: any agent or advisory layer built on your API runs into this. Full replacement forces every integrator to maintain a perfectly fresh mirror of the platform's state, which is exactly the thing an API should not
require.
This is now supported through dedicated additive endpoints.
Use POST /v1/ads/keywords to add keywords to an existing Google Search ad group without replacing its existing keywords. For example:
accountId: your connected Google Ads account ID; adSetId: the Google ad group ID; keywords: an array containing the keyword text; negative: true.
Use negative: true for ad-group negative keywords; omit it or use false for positive keywords. To remove one criterion, call DELETE /v1/ads/keywords/{keywordId}, using the Zernio keyword ID returned by the add/list endpoints, not the Google criterion ID. Other keywords remain unchanged. These operations apply to ad-group keywords; campaign-level negatives have a separate API.
Docs: : / : .
Miquel Palet López
Team•
Aug 26
Keyword editing on Google did ship since you filed this: PUT /v1/ads/{adId} now accepts targeting.keywords and targeting.negativeKeywords, and the two kinds are independent, so you can update negatives without sending a single positive keyword. Under the hood we read the ad group's live criteria from Google and diff by (text, match type), so anything you re-send unchanged keeps its criterion ID, bids and history, and only what is genuinely absent from your list is removed.
Your core point still stands though: the list you send is the full set for that kind, so a stale view of the negatives can still delete working criteria, and GET /v1/ads/keywords is synced roughly weekly so it is not a safe source for that read. We are keeping this open for the additive addKeywords / removeKeywords shape.
Log in to comment and vote
Comments2
Miquel Palet López
Sep 8
This is now supported through dedicated additive endpoints.
Use
POST /v1/ads/keywordsto add keywords to an existing Google Search ad group without replacing its existing keywords. For example:accountId: your connected Google Ads account ID;adSetId: the Google ad group ID;keywords: an array containing the keyword text;negative:true.Use
negative: truefor ad-group negative keywords; omit it or usefalsefor positive keywords. To remove one criterion, callDELETE /v1/ads/keywords/{keywordId}, using the Zernio keyword ID returned by the add/list endpoints, not the Google criterion ID. Other keywords remain unchanged. These operations apply to ad-group keywords; campaign-level negatives have a separate API.Docs: : / : .
Miquel Palet López
Aug 26
Keyword editing on Google did ship since you filed this:
PUT /v1/ads/{adId}now acceptstargeting.keywordsandtargeting.negativeKeywords, and the two kinds are independent, so you can update negatives without sending a single positive keyword. Under the hood we read the ad group's live criteria from Google and diff by (text, match type), so anything you re-send unchanged keeps its criterion ID, bids and history, and only what is genuinely absent from your list is removed.Your core point still stands though: the list you send is the full set for that kind, so a stale view of the negatives can still delete working criteria, and
GET /v1/ads/keywordsis synced roughly weekly so it is not a safe source for that read. We are keeping this open for the additiveaddKeywords/removeKeywordsshape.