Google Ads AI Max Migration Hits Broad Match Campaigns
If you maintain a Google Ads integration and nobody on the marketing team mentioned September, check your campaign settings today. Google is running the Google Ads AI Max migration right now, from September 1 through September 30, 2026, and it's not a beta you can skip. Every Search campaign still using campaign-level Broad Match or the legacy Automatically Created Assets (ACA) setting is being auto-upgraded to AI Max, in place, whether anyone clicks a button or not.
This one matters beyond the marketing org. If you're an FDE who built reporting pipelines, bid automation, or a customer dashboard on top of the Google Ads API, this migration touches the schema you're reading from.
What's actually changing
Google stopped letting anyone create new campaign-level Broad Match or legacy ACA campaigns back on August 3, 2026, across the UI, Ads Editor, and the API. That was the warning shot. Now, through the end of September, every existing campaign using those settings gets migrated automatically to AI Max, Google's umbrella for search term matching, text customization, and final URL expansion.
The defaults differ depending on where a campaign is coming from:
- Campaign-level Broad Match campaigns migrate with search term matching turned on, text customization off, final URL expansion off.
- Automatically Created Assets campaigns migrate with search term matching and text customization on, final URL expansion off.
Existing brand inclusions and exclusions carry over automatically, and Google says the migration happens "in place" to minimize disruption. In practice that means a campaign's ID and structure stay the same, but the underlying matching and asset generation logic is now AI Max, not the legacy setting your integration might be assuming.
Why this breaks quiet things
Nothing about this migration throws an obvious error. That's the trap. Your API calls keep working, your dashboards keep rendering, and the numbers just start drifting: search term reports fill with queries Broad Match wouldn't have matched before, and asset reporting shifts to reflect AI Max's text customization instead of the old ACA logic. If a customer's dashboard has a hardcoded assumption like "this campaign uses ACA, so pull assets from X," that assumption silently goes stale.
The bigger technical hit is on the API surface itself. Any Google Ads API version released after September 1, 2026 removes the legacy entities used to create or manage campaign-level Broad Match and ACA. If your integration still calls those mutate operations (say, a script that provisions new campaigns with campaign-level Broad Match), it will start failing on newer API versions, and older versions supporting those entities are on a path to sunset around September 2027.
Track the migration with the new API fields
Google Ads API v25.1 shipped two new Campaign fields built for exactly this transition: broad_match_migration_date_time and aca_migration_date_time. They let you query, per campaign, when the migration has run (or is scheduled to run), instead of just knowing it happens "sometime in September."
from google.ads.googleads.client import GoogleAdsClient
def check_migration_status(customer_id: str):
client = GoogleAdsClient.load_from_storage(version="v25")
ga_service = client.get_service("GoogleAdsService")
query = """
SELECT
campaign.id,
campaign.name,
campaign.broad_match_migration_date_time,
campaign.aca_migration_date_time
FROM campaign
WHERE campaign.status = 'ENABLED'
"""
stream = ga_service.search_stream(customer_id=customer_id, query=query)
for batch in stream:
for row in batch.results:
c = row.campaign
print(c.id, c.name, c.broad_match_migration_date_time, c.aca_migration_date_time)
This runs against API v25.1 or later. Note that Google's own documentation doesn't confirm whether the timestamp populates before the migration or only after, so treat a non-empty value as "migrated or scheduled," not a precise future date you can schedule around.
What to do Monday morning
Run that query, or the equivalent GAQL pull, against every account your integration touches, and flag campaigns where those two fields are non-null. Then check three things: whether your reporting layer labels these campaigns by their old match type anywhere, whether any automation still calls the now-frozen mutate operations for campaign-level Broad Match or ACA, and whether you're pinned to an API version old enough to still support those legacy entities, since that version has a sunset clock now.
If you're also touching Microsoft Advertising, note the contrast: Microsoft rolled its own AI Max out globally in August 2026, but kept it opt-in for new and existing campaigns rather than forcing a migration. Don't assume the two platforms' AI Max settings behave the same way in a shared reporting layer.
One more thing worth checking: if a customer asks why their search term reports "changed" this month, the honest answer is Google did it for them, not that something broke.
For teams running AI systems in production, this is a reminder that vendor-side auto-migrations are a category of change you have to monitor for, the same as a model deprecation or an API version sunset.
Sources: Google sets AI Max migration timeline for Search campaigns, Google Ads Developer Blog: Migrate Campaign-level Broad Match and Automatically Created Assets to AI Max