Google Ads · Diagnostic note
One ad group stops serving. The campaign is active, the budget is untouched, nothing is disapproved, and change history is clean. The view you open from inside a campaign only shows edits to that campaign — and the thing that killed the ad group was edited somewhere else.
The symptom
Five green lights and a dead ad group.
This pattern is a common one in public Google Ads help threads, and it sends people down the wrong path because every surface that is supposed to report a problem is reporting that there is no problem. The instinct is to start changing things — raise the bid, rewrite the ads, rebuild the group. That is the worst available move. Change history and the search terms report survive it, but every edit buries the real change under new rows around the exact date you need to isolate, and rebuilding the group leaves you with keywords that carry none of the search-term history that would have shown the block.
The sequence below is ordered deliberately. Each step rules out a whole class of cause and costs a couple of minutes. Work it in order and stop at the first thing that explains a total stop rather than a decline.
Status and diagnosis, keyword by keyword
Not the campaign column — open the ad group and read each ad and each keyword. You are looking for Disapproved, for Paused with the reason low activity, or for Eligible (limited) and its reason — low search volume, below first-page bid, rarely shown. Then hover each keyword’s status. If the diagnosis says a negative keyword is preventing your ad from showing, you have your lead, not yet your cause: the test checks only the keyword’s exact-match form, so a phrase or broad keyword can trip it and still serve on other variants. But an ad group at zero plus a named negative is the thing to chase first, and the only question left is where that negative lives. Google’s page for that message is careful about the same limit, then adds the line most people skip: check whether the negative is in a negative keyword list — one built in this account’s Shared Library, or one pushed down from a manager account. If the diagnosis names nothing, stop here; the rest of this sequence is about negatives, and the next place to look is the ad group’s own targeting.
Rules out → policy actions and dormant keywords; surfaces a negative if one blocks the keyword’s own exact query
Campaign change history, dated against the stop
You have probably already done this; do it once more with the range set to bracket the date traffic died, and read it for what it can and cannot say. It logs every write to this campaign and its ad groups, whoever made it — a person, Ads Editor, a script, a rule, an API tool — including someone attaching or detaching a negative keyword list, which is a campaign-level change. It does not cover what was put into a list the campaign already had.
Rules out → edits made to the campaign, including a list attached or removed
The negatives the campaign can see
Open the campaign’s negative keywords view. It shows the campaign’s and ad groups’ own negatives, and below them the names of any negative keyword lists applied — note those names, and note whether any belongs to a manager account. Then open Admin › Account settings › Negative keywords: account-level negatives apply to all Search and Shopping inventory, including the search and shopping placements inside Performance Max and App campaigns, and never appear in the campaign view. Read the campaign-level and account-level entries against the keyword the diagnosis named.
Rules out → a negative sitting in plain sight at campaign, ad-group or account level
Shared negative keyword lists, and where their edits are logged
This is the blind spot. Open each list the campaign uses and read it against the keyword — this is where the term usually is. Then the question is why nothing told you. A list can be attached to twenty campaigns at once, and adding a negative writes to the list itself — no campaign object is touched. That write is recorded, but as an account-level change-history row with an empty Campaign column: the list’s name, the terms added, the user, the tool, the timestamp. Open change history from inside the campaign, or filter it by campaign, and the row is invisible — filtered out, not untracked. There is no shared-list change type to filter on either — in my own accounts the row appears only under All changes, and none of the change-type chips claims it. If the list belongs to a manager account, it was edited from there, and you may need that account’s history. So the list gets a new entry on Tuesday, an ad group dies on Tuesday, the campaign’s history stays clean — truthfully — and nobody looking at the dead ad group ever scrolls up one scope.
Explains → a total stop, a diagnosis pointing at a negative the campaign view cannot show, a clean campaign history
Change history is account-wide, but the view you open from inside a campaign only shows edits to that campaign. An edit to a shared negative list is logged against the list. It is recorded; it is just not where you are looking.
Keyword overlap with a sibling ad group is usually offered as a cause here, and it is real, but it does not fit the symptom. If the same keyword sits in two ad groups, Google serves one: an exact-match keyword identical to the search first, then an identical phrase or broad keyword, then the ad group its relevance model judges the better fit, with Ad Rank as the tiebreaker. Two copies of the same keyword, same match type, sit level at that first step for any search: if the search is identical to the keyword Google goes straight to Ad Rank, and if it is not, its relevance model keeps the better-fitting ad group and Ad Rank decides if both survive. So the split is decided auction by auction. That usually produces a loss of share rather than a dated flatline — partial if the two trade wins, near-total if one consistently out-ranks the other — and a sibling created near the stop date would have shown in the campaign history you already opened. It belongs to the preceded by a decline check at the end rather than here.
People underestimate this because they are thinking about how positive keywords match. Negative keywords do not work the same way, and three of the differences matter here.
A negative always wins. It is not weighed against your bid or your quality score. If a query is excluded, no amount of exact-match precision or budget gets you into that auction.
A negative in broad match blocks any query that contains all of its terms, in any order. Not the phrase — the terms. So a single entry meant to exclude one bad query will also exclude every longer query built around the same words. If those words happen to be the words your ad group is themed on, the entry does not trim the group, it erases it.
A negative is not expanded to close variants. Plurals, singulars and synonyms each have to be added by hand. Misspellings are the exception since a 2024 update, and it runs one way: a correctly spelled negative blocks misspelled searches. Casing has never mattered.
| Incoming search query | Result | Why |
|---|---|---|
| free courier quote | BLOCKED | Contains both terms |
| courier quote free online | BLOCKED | Order is irrelevant |
| free same day courier quote london | BLOCKED | Extra words do not rescue it |
| courier quote | SERVES | Missing a required term |
| free courier quotes | SERVES | “quotes” is not “quote” |
| free couriers quote | BLOCKED | The variant is on a word the negative does not contain |
One negative broad entry — free quote — against six queries.
The last two rows are where this gets hard to see from the outside. The variation only rescues a query when it lands on a word the negative itself contains. free courier quotes escapes because “quotes” is not “quote”. free couriers quote does not escape, because the word that changed was never part of the negative. That is the inconsistency you actually observe: two almost identical queries, one serving and one not, which reads like a bidding problem and is nothing of the kind. That is the trim case. When the negative’s words are the group’s own theme — a broad courier quote against a courier-quote ad group — every row reads BLOCKED and the group flatlines.
Negatives are applied when a query is matched, before the auction. Nothing in your account is edited when that happens — change history only ever shows the negative being added, never the block. So most of what you would look for is an absence.
The keyword stays enabled; nothing is paused, removed or disapproved, and for any search the negative does not catch it competes normally. The Status column keeps reading Eligible either way — no value in that column means “blocked by a negative”. What changes is elsewhere. A negative that catches only some of the keyword’s queries leaves no trace at all. A negative that matches the keyword’s own text is the blunt case, and Google does surface that one: the hover diagnosis says a negative keyword is preventing the ad from showing, and for a negative added directly to the campaign the API reports the keyword as not eligible with the reason that a campaign negative overrides it. Whether a negative from an attached list produces the same API reason is not documented; the hover diagnosis is the surface that reliably fires.
Two things narrow that diagnosis. It tests the keyword’s exact-match form only. And the bulk tools you would reach for next are no help here. Ads Editor’s only conflict warning fires when a keyword and a negative in the same ad group have identical text; it ignores campaign negatives, shared lists and match-type logic entirely. Google’s Remove conflicting negative keywords recommendation does not document what it scans and is widely reported to miss entries in shared lists — in my accounts it has never flagged one. An empty Recommendations page is not a clean bill.
Quality Score does not fall either. It is built from searches that exactly match the keyword, compared over the last 90 days, so a negative that trims the surrounding broad and phrase queries never touches it. Only a negative that blocks the keyword’s own exact query starves it, and even then the score does not decline — it keeps showing until the exact-search history ages out, then shows a dash.
The search terms report is where the evidence lives, and it comes in two forms. Going forward, a blocked query earns no impression, so it gets no new row: it does not appear with poor metrics, it stops appearing. But the report is date-ranged. Widen the range to reach back before the stop and the queries that used to serve are still listed with their old impressions — and the Added/Excluded column reflects your negatives as they stand now, not as they stood when the search happened, so a term a current negative would catch reads Excluded. Whether that column sees negatives in an attached list as well as the campaign’s own is not something Google states, so treat it as a strong hint rather than proof. Terms below Google’s reporting threshold are folded into “other search terms” and are invisible either way. The confirmation that holds is the pair: the queries that vanished from the report, and the row in account-level change history that dates the list edit to the same day.
The specific answer here is a shared exclusion list. The transferable one is about the shape of the evidence.
A clean audit log is not proof that nothing changed. It only shows that nothing Google logs changed inside the scope and date range you opened. Every account has dependencies that sit outside the object you are looking at. Some are recorded but filed elsewhere — an edit to a list twenty campaigns share. Some sit at a scope you never opened — account-level negatives, a list managed from a manager account. And some are never logged at all — a Smart Bidding bid move, a policy decision; Google itself says the log is not exhaustive. When a total stop meets a clean history, the productive question is not what happened here but what does this depend on that would not be logged here.
That question is worth asking before touching bids, and it is usually free to answer.