How we scaled through BFCM when discounts invalidated the algorithm
In mid-November the client announced 40-60% discounts. The problem: Smart Bidding had learned its conversion patterns at full price. To the algorithm, Product X at $150 and Product X at $75 are different things, and the $75 version has zero conversion history. We had three weeks to build a scoring system, a segmented campaign architecture and a real-time monitoring dashboard to guide the algorithm through the sale.
Ad spend rose 119% year over year and revenue rose 284%, with ROAS up 7 points. Scoring products on profit and splitting them into separate campaigns let us steer Smart Bidding through a sale that wiped out what it had learned.
- Ad spend, year over year
- +119%
- Revenue, year over year
- +284%
- ROAS improvement
- +7pp
- Conversion rate
- +89%
The challenge
In mid-November, the client announced aggressive BFCM discounts: 40-60% off across major categories, new pricing tiers and flash deals on specific products.
Great for driving revenue. Terrible for Google Ads Smart Bidding.
Why this was a problem
Smart Bidding isn’t magic. It’s pattern recognition from historical conversion data. The algorithm spends weeks learning things like:
- Product X at $150 converts at 2.3% from this search term
- Users in demographic Y buy this category on weekends
- A $200 order from this traffic source has an 85% chance of not returning
We had 3 weeks to solve this.
Two paths forward
There were two ways to structure the account for the sale.
| Path 1: the Google way | Path 2: the business-context way (chosen) | |
|---|---|---|
| How it works | Fewer campaigns, more products per campaign. More conversions per campaign means faster Smart Bidding learning. Let the algorithm optimize within campaigns. | More campaigns, segmented by product performance labels we’d create. Fewer conversions per campaign. Manual seasonal adjustment tweaks during the sale. We control the throttle. |
| Pros |
|
|
| Cons |
|
|
Why we chose Path 2
“We’d rather have 80% of the algorithm’s optimization potential but 100% control over WHERE it spends, than 100% of the algorithm’s potential but 0% control over WHAT it prioritizes. During a sale where every hour matters, speed beats perfection.”
Context matters. This is a high-AOV business with 15-25 conversions per day normally. Smart Bidding needs volume, and we didn’t have it. Waiting for Smart Bidding to “figure it out” could take weeks. We had 4 days.
Scoring every product
We blended Google Ads data with backend profit metrics to prioritize products by true business value. Each product got a score from 0 to 100, built from seven weighted factors.
The score decided how hard we pushed a product. Cash cows (80-100) got maximum budget so they never missed an impression. High potentials (40-79) were scaled carefully and monitored closely. Low-score products (0-39) got minimal budget and higher tPOAS targets.
What a score (0–100) means for budget
Campaign architecture
We kept the evergreen campaigns running untouched and layered separate BFCM campaigns on top, one per product segment. Separate campaigns meant separate control levers during the sale.
BFCM campaigns
| Segment | Score | Target | Seasonal adj. |
|---|---|---|---|
| Cash cows | 80–100 | 200%+ POAS | +200% |
| High potentials | 50–79 | 150% POAS | +150% |
| Liquidation | Inventory | 100% POAS | +100% |
| Low score | 0–49 | 250%+ POAS | +50% |
| Losers (circuit breaker) | Spend > 2× AOV and POAS < 75% | Paused | |
Surgical control. Each campaign is a separate lever. We could boost, throttle or pause one segment in real time without disrupting the others.
Evergreen campaigns
Protected core business. Kept running at normal budgets throughout BFCM to protect ongoing business and capture baseline demand.
LOSERS circuit breaker paused underperformers within 10 minutes
Budget multipliers applied within minutes, not hours or days
Real-time monitoring enabled quick adjustments all weekend
Why segmentation mattered
On Cyber Monday, when HIGH POTENTIALS (functional items) started outperforming CASH COWS (decorative items), we could shift seasonal adjustments in minutes.
In a unified campaign that is impossible: you’re stuck with whatever the algorithm prioritizes. You also can’t build a new campaign mid-sale, because Google takes hours to approve it. The pre-built structure gave us options when chaos hit.
The critical moment: Black Friday, 10 AM
Black Friday morning hit. Traffic spiked 3x higher than we predicted. Not 3x versus normal, but 3x versus our elevated forecast.
By 10 AM, HIGH PRIORITY campaigns were burning through daily budgets. At this rate, budgets would be exhausted by 11 AM. The dashboard showed immediate ROAS at 280% (target: 400%), with spend accelerating 2.5x faster than forecast.
The typical response would be to pull back budgets. We did something different.
The 6-hour conversion delay
Google Ads reports conversions 4-8 hours after they happen. At 10 AM on Black Friday, the platform numbers were flying blind. So we checked the backend instead.
280% ROAS in Google Ads
- Spend accelerating 2.5x faster than forecast
- ROAS appears to be underperforming badly
- Natural response: pull back budgets immediately
The trap. Conversions from 8 to 10 AM just hadn’t reported yet. Making decisions on incomplete data could kill the best-performing window.
Orders not yet in Google Ads
Avg. improvement · median delay 5.8 hours
Based on 60% higher backend revenue
The decision. Increased seasonal adjustments +30% on CASH COWS. Actual 4 PM mature ROAS: 430%, in line with the prediction.
What made this work: understanding how Google Ads works (the conversion reporting delay) and having backend validation ready, so we could make the right call at the critical moment. Without this multi-source analysis, the natural response would have been to pull back budgets and miss the day’s best performance window.
Day by day, Black Friday to Cyber Monday
Revenue grew faster than spend on every single day of the sale. Investment grew +119% and revenue grew +284%. The gap is profitability.
We didn’t just spend 2.84x more to get 2.84x more revenue. We spent +119% more and generated +284% more revenue. The difference is profitability: product-level optimization through scoring and segmentation, working exactly as designed.
The results
When the sale ended, the numbers told a clear story: strategic scale with better profitability, not just revenue growth.
| Metric | Change | What it means |
|---|---|---|
| Revenue (YoY) | +284% | 2.84x the revenue of the previous year’s BFCM. We didn’t just spend 2.84x more: we spent +119% more and generated +284% more revenue. The gap is profitability. |
| Ad spend (YoY) | +119% | Strategic scale, not wasteful scale. Every incremental dollar had a clear path to profitable revenue. Traffic was 3x higher than forecast, and the pre-built campaign structure gave us the confidence to lean in. |
| ROAS | +7pp | At this scale, 7 percentage points is massive in absolute dollars. It proves we scaled profitably, not just scaled. Anyone can dump money into Google Ads during BFCM. Scaling while improving ROAS is hard. |
| Conversion rate | +89% | Same traffic quality. Same website. A different product mix, scored and segmented by priority. Product selection matters. |
After the sale: the wind-down
Most advertisers waste thousands post-sale because Smart Bidding doesn’t know the sale is over. The algorithm sees 4 days of massive conversion volume and concludes “this is the new normal.” Without an active wind-down, Google Ads keeps spending aggressively Tuesday to Thursday, chasing conversions that aren’t there.
What the client said
“We were skeptical: ‘Too many campaigns will confuse Google.’ But when Black Friday hit and traffic spiked 3x higher than predicted, those segmented campaigns became the control knobs that let us steer. Denis could boost CASH COWS, throttle LIQUIDATION and trigger the LOSERS circuit breaker, all without disrupting our core business. The backend data analysis at 10 AM when ROAS looked terrible? That decision alone made the day.”
E-commerce Director, Home Decor Brand
What to take away
- 1
Blend data sources for complete visibility
Google Ads data alone shows ROAS but not margins, inventory levels or strategic priorities. Client data alone shows margins but not real-time performance. Blended data gives the complete picture. We knew which products were performing (Google Ads), profitable (client margins), in stock (inventory system) and strategic (upsell potential).
- 2
Campaign segmentation means real-time control
Separate campaigns are separate levers you can pull in real time. On Cyber Monday, when HIGH POTENTIALS (functional items) started outperforming CASH COWS (decorative items), we shifted seasonal adjustments in minutes. The LOSERS circuit breaker paused underperformers within 10 minutes. In a unified campaign, that is impossible.
- 3
Understanding platform mechanics matters
Google Ads reports conversions 4-8 hours after they happen. At 10 AM on Black Friday, immediate ROAS showed 280% (target: 400%). Backend ERP data showed revenue 60% higher than Google Ads reported. Based on backend data and historical maturation patterns, we predicted 400-440% mature ROAS (actual: 430%). That understanding of conversion delay informed the decision to maintain and increase budgets.
- 4
Seasonal adjustments give you speed
Budget and bid changes work on monthly averages, which is slow. Seasonal adjustments work within minutes. During a 4-day sale where every hour matters, speed is everything. We tweaked adjustments every 2-4 hours and saw spend adjust within 10 minutes. That responsiveness let us ride the wave instead of getting crushed.
- 5
Plan the wind-down as carefully as the ramp-up
Smart Bidding does not know the sale is over. Without an active wind-down, Google Ads keeps spending aggressively post-sale, chasing conversions that are not there. We applied negative seasonal adjustments (-60%) immediately and increased PMAX target ROAS 15% to restrict Display remarketing. That saved thousands in wasted post-sale spend.