The AI Max search terms report used to hand you a single undifferentiated list: a pile of queries your campaign served against, with no way to tell how any given one got there. Google has now added a source column to the AI Max search terms report that labels each query with where the match originated — and for anyone doing search-term hygiene, that one field changes how you triage waste. As the reporting documentation puts it, AI Max “shows as a new match type for incremental search terms in the search terms report, along with a source column indicating whether the match came from broad match expansion or keywordless matching.” The two are not the same problem, and until now you were fixing both with the same blunt tool.
This post is about reading that column and acting on it, not about the AI Max migration event or the numbers that fail to reconcile — those are covered elsewhere. The point here is narrow and practical: the source value tells you whether a wasted query came from a keyword you own or from Google matching with no keyword at all, and that distinction decides whether a negative keyword will actually hold. Get the read right and you stop pouring negatives into a leak they cannot plug. Get it wrong and you spend an afternoon extending a negative list against matches that were never anchored to a keyword in the first place.
The three values, and what each one means
The source column reports one of three values, and each is a different origin story for the query in front of you. ADVERTISER_PROVIDED_KEYWORD means the match came from a keyword you added — ordinary keyword matching, the thing you have controlled for years. AI_MAX_BROAD_MATCH means the match came from the broad-match expansion portion of AI Max: it started from one of your keywords and AI Max widened it to a semantically related query. AI_MAX_KEYWORDLESS means the match came from the keywordless portion, where AI Max served your ad with no keyword seed at all, reasoning instead from your landing page, asset copy, and user context. Google's own diff for the API exposes the same three states through the search_term_match_source enum, which is the field the UI column is built on.
The reason the split matters is that the three values sit on a spectrum of how much your keyword list still governs the match. Advertiser-provided keywords are fully under your control; broad-match expansion is loosely tethered to a keyword you own, so there is a lineage a negative can constrain; keywordless has no keyword lineage at all. When you sort the report by source, you are really sorting by how much leverage your negative list has over each row — and that is exactly the information you need before deciding what to do about a term that spent money and did not convert. A term that looks identical in the query column can demand a completely different response depending on which of the three buckets it fell out of.
Broad-match expansion: negatives still work here
Waste tagged AI_MAX_BROAD_MATCH behaves like the broad match you already know how to tame. The query started from one of your keywords and got widened, so there is a keyword lineage sitting behind it, and a negative keyword constrains that lineage cleanly. If you see an irrelevant query under this source — wrong intent, adjacent category, a modifier you never want — add the negative and it holds, because you are pushing back against an expansion of something you own rather than against a match conjured from page signals. This is the comfortable case: the source column is telling you the campaign is behaving like an aggressive broad-match setup, and aggressive broad match responds to disciplined negation.
The tactical move is to work these rows the same way you would work a broad-match search terms report on a Standard Search campaign — block at the pattern level rather than one string at a time, because an expansion that produced one junk variant will produce more. If a single junk stem shows up across several AI_MAX_BROAD_MATCH rows, negate the stem, not each row. The match-type decision behind those negatives is the same one covered in broad versus phrase negative match types: phrase negatives catch a family of variants where an exact negative would only catch one. Treat the broad-expansion slice of AI Max as the part of the report that rewards a well-structured negative list, because it is the part where your list still has real purchase.
Keywordless: where a negative list runs out of road
Waste tagged AI_MAX_KEYWORDLESS is the row that punishes the reflex to reach for a negative. There is no keyword behind the match — AI Max decided to serve based on your landing page content, your asset text, and the user's context, so the query was never anchored to anything in your keyword list. You can still add an exact-match negative for the specific junk string you saw, and it will block that exact query, but it does nothing about the reason the match happened. Block one keywordless query and the model, still reading the same page and the same context, surfaces three adjacent ones you never listed. This is the whack-a-mole that eats afternoons, and the source column is what lets you recognise it before you start swinging.
The durable fix for keywordless waste lives upstream of the negative list. If AI Max is inferring the wrong intent, the signals it is reading are the problem: tighten the landing page so it stops implying a category you do not serve, sharpen the asset copy so the model infers a narrower intent, and lean on campaign-level exclusions and brand controls that operate above the query level. This is the same boundary drawn in keywordless search ads and negative keyword controls: when the match is not reasoning from your keywords, your keyword-shaped tools only partly reach it, and the real levers are the ones that shape what the model infers. A concentration of waste under this source is a signal to change the inputs, not to extend the blocklist.
Triaging the report by source, in order
Reading the report in source order turns a wall of queries into a short decision tree. Start by segmenting the search terms report by the source column and looking at where the wasted spend concentrates. If it pools under ADVERTISER_PROVIDED_KEYWORD, this is not really an AI Max problem at all — your own keywords are matching things you do not want, and that is ordinary keyword and match-type hygiene. If it pools under AI_MAX_BROAD_MATCH, you have negative-list work to do, and it will pay off. If it pools under AI_MAX_KEYWORDLESS, stop reaching for negatives and go work the landing page and assets, because the blocklist will not converge on that source no matter how long you make it.
Turn on the combined view while you do this. The report can tie each search term to the headlines and final URLs AI Max served against it, and keywordless matches in particular are only legible next to the page they fired for — the URL is often the thing that explains why the model inferred the intent it did. This is the diagnostic layer the older segment the AI Max report and negate workflow was reaching for before the source column existed; now the origin is an explicit field rather than something you infer. Work the three buckets in the order above and you spend your negation effort only where it earns its keep, instead of firing negatives at every row because they all looked the same in the query column.
Watch-outs when the source column disagrees with the numbers
Trust the source column for triage, but hold it loosely as an accounting record, because AI Max reporting has known seams. Practitioners have documented that the incremental search-term view can be hard to reconcile against campaign totals, a theme Adalysis covers in the hidden challenges of AI Max search term reporting. The source label is reliable for deciding what kind of match you are looking at; it is less reliable as a precise share of spend, because AI Max still aggregates and withholds some query detail the way Performance Max does. Use the column to decide your response, not to compute an exact keywordless-versus-broad budget split to two decimal places.
The second watch-out is drift. Because keywordless matching reasons from signals that change — you edit a landing page, you rotate assets, seasonality shifts user context — the mix across the three sources moves over time, and a source split you triaged last month can look different this month for reasons that have nothing to do with your keywords. Re-read the column on a schedule rather than treating one pass as settled, and pair it with the reconciliation habits in AI Max search term attribution discrepancies so you notice when the report itself, rather than your account, is what shifted. The column is a far better map than the undifferentiated list it replaced — it is still a map, not the territory.
Related reading
For the negation workflow the source column feeds into, see segment the AI Max report and negate. For what your keyword-shaped tools can and cannot reach once matching goes keywordless, see keywordless search ads and negative keyword controls, and for when the report numbers themselves stop tying out, see AI Max search term attribution discrepancies.