← Blog

The AI Max Search Terms Source Column, Made Useful

Search Terms10 min readSearch Term Pro

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.

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.

Frequently asked questions

What is the source column in the AI Max search terms report?

The source column is a field Google added to the search terms report for AI Max for Search campaigns that tells you where each query match came from. It reports one of three values: a match from a keyword you provided (ADVERTISER_PROVIDED_KEYWORD), a match from the broad-match expansion portion of AI Max (AI_MAX_BROAD_MATCH), or a match from the keywordless portion, where Google served your ad without any keyword input at all (AI_MAX_KEYWORDLESS). Before this column existed, every AI Max query landed in one undifferentiated list and you could not tell whether a wasted-spend term came from your own keyword being expanded or from Google matching on landing-page and context signals with no keyword involved. The column matters because those two sources need different fixes, and now you can finally sort them apart.

How is AI Max broad-match expansion different from keywordless matching?

Broad-match expansion starts from a keyword you added and widens it to semantically related queries — the keyword is the seed, and AI Max broadens it. Keywordless matching has no keyword seed at all: AI Max reads your landing page content, asset text, and user context to decide when to serve, so the match is driven by page and context signals rather than by anything in your keyword list. The practical consequence is that a negative keyword reliably reins in broad-match expansion, because there is a keyword lineage to constrain, but it only partially controls keywordless matching, where the query was never anchored to a keyword in the first place. When you see waste tagged AI_MAX_KEYWORDLESS, the durable fix is usually landing-page relevance, asset copy, and campaign-level exclusions rather than one more negative.

Do negative keywords work on keywordless AI Max matches?

Partially. Negative keywords still block a specific query string regardless of how AI Max arrived at it, so adding an exact-match negative for a junk term you saw under AI_MAX_KEYWORDLESS will stop that exact query. What negatives cannot do is address the root cause of keywordless matching, because the matching is not reasoning from your keywords — it is reasoning from your landing page and context. You end up in whack-a-mole: block one keywordless query and the model surfaces three adjacent ones you never listed. That is why the source column is diagnostic. A cluster of waste under AI_MAX_KEYWORDLESS is a signal that the fix lives upstream — tighten the landing page, sharpen the assets so the model infers a narrower intent, and lean on campaign-level negatives and brand controls — rather than a signal to keep extending a term-by-term negative list.

Where do I find the match source column in Google Ads?

Open the AI Max campaign, go to the search terms report (under Insights and reports, or the Search terms view on the campaign), and add the source or match-source column from the column customisation menu. The report shows AI Max as a match type alongside your existing keyword match types, and the source column sits next to it to break down the origin of each incremental term. If you manage at scale through the Google Ads API, the same information surfaces as the search_term_match_source enum, which is the underlying field the UI column is built on. The report also offers a combined view that ties the search term to the headlines and final URLs AI Max served against it, which is worth turning on because keywordless matches are best understood alongside the page they fired for.

Should I turn off AI Max if the keywordless matches waste money?

Not as a first move. Read the source column before you decide, because it separates a fixable problem from a structural one. If most of your wasted spend is tagged AI_MAX_BROAD_MATCH, the campaign is fine and you simply have negative-list work to do — that waste behaves like ordinary broad match and responds to ordinary negatives. If the waste is concentrated under AI_MAX_KEYWORDLESS and survives landing-page and asset fixes plus campaign-level exclusions, that is when you have a genuine case that keywordless matching is not serving this account, and scoping AI Max back or excluding it becomes defensible. The column turns 'AI Max is wasting money' from a gut feeling into a measurable split, so you act on the portion that is actually broken rather than switching off a setting that was earning its keep.