Why don't seasonal sales peaks show up as more impressions under a tight tROAS?
What to check before you touch anything
What was the campaign's status during the seasonal peak? An explicit "Limited by budget" or "Bid strategy constrained by target" flag on those specific days points to the target or budget physically preventing the system from taking advantage of the demand spike.
How far in advance is the peak known, and was it built into your settings ahead of time (via Seasonality Adjustments, or by manually loosening the target temporarily)? If nothing was prepared, the system reacts to the demand spike with the same tight target it uses on ordinary days, and simply doesn't expand reach.
Did overall competition intensify at the same time demand grew? During peak periods, many competitors also raise their bids, and a tight tROAS may genuinely lose more auctions in that environment than it does on average across the year.
Does the current budget match the expected peak volume? Even with the target constraint removed, if the budget is still set at an "ordinary month" level, the campaign can hit a budget ceiling on peak days.
Does Smart Bidding even have time to react to a sharp, short-lived surge? Under normal operation (without Seasonality Adjustments), the system leans on the history of past weeks, and a very sharp, short demand spike (1–3 days) may simply not get factored in in time.
It's also essential to check the competitive landscape specifically for this period, not just year-round averages. Practically, that's two steps: first, look at Auction Insights for your core keywords right during the peak days/weeks — how overlap rate, competitor impression share, and outranking share behave in this specific window compared to ordinary weeks (a rise in competitor activity during peak season shows up there, not in year-round averages). Second, manually check the search results for your key seasonal terms — what are competitors saying during this period (seasonal discounts, special offers, limited-time promotions), and has their messaging gotten noticeably stronger than yours specifically during the peak? If competitors ramped up activity and refreshed their messaging for the season while your offer and ads stayed the same, a tight tROAS will naturally lose more auctions in that situation — and the issue isn't your target settings, it's how competitive your offer is for this specific period.
Possible approaches
If the peak is short and predictable (a multi-day sale), Google specifically recommends Seasonality Adjustments for these cases: tell the system in advance to expect a conversion spike on specific dates so the strategy reacts faster than it would through organic learning.
If the peak is long (a season lasting weeks or months), rather than a point fix, it's usually smarter to loosen tROAS for the whole period ahead of time (and/or raise the budget), instead of relying on the tight target to somehow "catch" the demand spike on its own.
If the problem only surfaces after the fact (the peak has already passed and volume never grew), it's worth logging this as a recurring pattern and preparing settings ahead of time for the next similar period, rather than treating each season as a surprise.
If rising competition during the peak is a significant factor on its own, consider temporarily widening the acceptable ROAS range specifically for those dates (accepting lower efficiency in exchange for volume), rather than holding the year-round target fixed regardless of season.
If your search-results check shows competitors refreshed their seasonal offer and messaging more aggressively than you did, the logical move is to prepare your own seasonal offer and ad copy ahead of the next peak (not just adjust target or budget), since in this case the problem is about offer competitiveness, not just bidding strategy.
In some categories, it's worth maintaining a separate, pre-built budget and target scenario for peak periods (a "high season / low season" template), so you're not making decisions in the moment when it's already too late to react.
Manually cross-referencing rising competitor activity against your own keywords segment by segment is labor-intensive, especially in large accounts with hundreds of keywords. Our tool (DataMind) separately highlights the keywords that are losing auctions and failing to capture a meaningful share of voice in the overall impression volume for that search term — so you can see exactly which segments competitors are actually taking share in, right now, instead of manually running Auction Insights for every keyword one at a time.
Related Content
Check the campaign's status in the interface — is there an explicit "Limited by budget" or "Bid strategy constrained by target" flag alongside the overperformance? These are two different root causes producing the same symptom.
Check the campaign's status — an explicit "Bid strategy constrained by target" flag alongside underspent budget (no "Limited by budget" flag, but actual spend running well under the daily limit) is a direct sign that the target is what's holding volume back.
How sharp was the budget increase, and when did it happen? A gradual 10–20% raise and an abrupt 2–3x jump lead to very different behavior — the latter almost always resets part of the strategy's accumulated learning.
What exactly is being passed as "value" — the full order amount (revenue), or an amount already net of discounts, shipping, and taxes? Different systems (your website, your CRM, Google Ads) may define "value" differently, and it's worth cross-checking line by line on a handful of real orders.
How is ROAS being calculated for each product? tROAS optimizes toward conversion value (by default, usually the sale price/revenue), not automatically toward margin. A high-margin product with a lower price and/or lower conversion potential can post a lower "raw" revenue-based ROAS than a cheap, low-margin, high-turnover product — and the system will end up underrating the very product that's more valuable to the business, unless it's told about margin separately.
Does Google Ads actually receive information about whether a purchaser is new or returning? Without that signal, neither a separate goal nor separate reporting is technically possible.
What attribution model does each system use? Google Ads defaults to its own attribution model (usually data-driven), and GA4 may use a different model (or the same model with different cross-channel distribution rules) — the mismatch may be purely a methodology difference, not an error.
The practical way to check this is through Report Editor (or a standard report) broken out by Conversion Action, using the "All Conv. Value" metric. Building a report segmented by specific conversion action and comparing count/value per action makes it easy to spot whether the same purchase is being double-counted across multiple conversion actions (say, between the native Google Ads tag and a GA4 import) — in that case, the account's total "All Conv. Value" will noticeably exceed real revenue, and the breakdown by conversion action will show that several different actions are, in effect, recording the same transactions.
How long, and how consistently, has actual ROAS been beating target? A one-off overshoot from a couple of big orders is different from sustained overperformance across several weeks in a row.
Is this really a one-off anomaly (a single large order) or a recurring, if infrequent, pattern (say, bulk orders once a month)? These are different situations with different fixes.
What's the real median gap between click and purchase for this business (the Time Lag report in Google Ads)? Without this number, evaluating "recent" periods will be systematically skewed on volume and distorted on ROAS.
Campaign structure. Is the volume and makeup of keywords/targeting comparable — number of keywords, match types, number of ad groups, audience signal coverage (for Performance Max)? A campaign with a narrow structure physically can't deliver the same volume as one with broad coverage, even with an identical target — this isn't an efficiency question, it's a question of the structure's scale.
Pull up the "Conv. value / cost" and "Value / conv." columns broken out by Conversion Action — if the average conversion value looks suspiciously identical (say, exactly the same number) across many transactions of clearly different size/composition, that's a clear sign a fixed default value is being used, not the real transaction amount.
Campaign structure. Are different product categories currently split into separate campaigns/groups, or is everything running through one shared structure (especially relevant for Shopping/Performance Max)? Without structural separation, it's technically impossible to assign different targets to different categories in the first place.
Is the moment of refund reflected in the passed conversion value at all? If value is passed once, when the order is placed, and never adjusted afterward, ROAS in Google Ads will be systematically overstated relative to the business's real revenue, by the full amount of refunds.
Campaign structure. How broad is the campaign's own keyword/targeting setup? If the structure is narrow from the start (few keywords, tight audience signals), the system physically has nowhere to expand beyond the narrow segment it's already found, regardless of the target.
Campaign structure. Is your keyword/targeting setup broad enough that, once the target constraint is loosened, the system actually has somewhere to expand in a controlled way, rather than jumping straight into a wide pool of low-quality traffic?
Campaign structure. Is the keyword/targeting coverage broad enough that the system could actually find additional volume if the constraint were lifted? If the structure is narrow, the "constrained by target" flag may technically be there, but the real headroom for growth may still be modest.
Is the value rule actually active and applied to the specific campaigns/audiences/locations/devices it was built for? Value rules need to be explicitly turned on at the campaign level, and a rule that's configured but not connected to the right campaigns simply won't fire.