Diwali CPMs doubled: is it the auction or your account? (don’t blame the creative yet)

· has mistaken a festive auction for a broken campaign🪔 with a ROAS bridge chart, not a lecture

Published October 4, 2026

The 60-second version

  • ROAS is CTR × CVR × AOV ÷ CPM, so a festive CPM spike cuts ROAS even when every ad is working perfectly.
  • A bridge chart splits the drop into price, click, conversion and basket effects — price-adjusted ROAS tells you auction vs account in one line.
  • The fix: judge festive weeks against last year’s festive weeks and breakeven, then buy less and better instead of rebuilding good creative.
bottom line: check the price column before the creative

It is the second week of October. The sale banners are up, the warehouse is stocked, and the Meta account that ran at a steady 3.0x ROAS all September is suddenly at 1.9x.

The Monday meeting goes the usual way. Someone blames the new creative. Someone wants to pause the "broken" campaigns. Someone suggests a fresh audience. Nobody opens the CPM column, which has gone from ₹180 to ₹310 in three weeks.

The campaign did not break. The auction got expensive. same ads, pricier room Every festive season, brands that sell all year compete with brands that only show up for Diwali, and the price of reaching the same person climbs for six straight weeks. Before you fix anything, you need to know how much of the drop is the market and how much is you.

September vs festive week, same campaign

Festive ROAS drop
CPM₹180 → ₹310+72% — the price of 1,000 impressions
Click-through rate1.20% → 1.32%+10% — festive shoppers click more
Conversion rate2.50% → 2.75%+10% — and buy more once they land
Average order value₹1,800 → ₹1,620−10% — sale discounts shrink the basket
ROAS3.00x → 1.90xThe number everyone is panicking about
Price-adjusted ROAS3.27xFestive results at September prices — better than before
Three of the four inputs the team controls got better or held up. The one they do not control — the auction price — erased all of it. Pausing this campaign would have punished it for working.

Four numbers hiding inside ROAS

ROAS looks like one number, but it is four numbers multiplied together. Every rupee of ad spend buys impressions; some of those people click; some clickers buy; each buyer spends something.

ROAS, unpacked

Reporting Hierarchy
Tier 1
CPM — the price of attention

What 1,000 impressions cost. Set by the auction, not by you. It rises when more advertisers chase the same people.

spend ÷ impressions × 1,000
Tier 2
CTR — did they stop scrolling?

Share of impressions that became clicks. Driven by creative and offer.

clicks ÷ impressions
Tier 3
CVR — did they buy?

Share of clicks that became orders. Driven by landing page, price and stock.

orders ÷ clicks
Tier 4
AOV — how much did they spend?

Revenue per order. Discounts and bundles move it.

revenue ÷ orders

Put together: ROAS = CTR × CVR × AOV × 1,000 ÷ CPM. Here is the useful part: CPM sits on the bottom of the fraction. When it rises 72%, ROAS falls by the same proportion even if nothing else moves — and nothing about your ads has changed.

Why festive CPMs climb: big marketplace sales, Navratri and Dussehra, and the Dhanteras-to-Bhai Dooj week around Diwali (8 November in 2026) bring in advertisers who are quiet the rest of the year. Ad space is fixed; buyers multiply. Inventory around the Diwali week is usually the most expensive of the year.


Read the bridge, not the headline

A bridge chart takes the old ROAS, shows how much each input added or removed, and lands on the new ROAS. It turns "ROAS fell 37%" into "the auction took 1.31x, and we got some of it back".

WATCH IT BUILDWhere 1.10x of ROAS went
Sept ROAS
CPM +72%
CTR +10%
CVR +10%
AOV −10%
Festive ROAS

Sept ROAS 3.00x; CPM +72% −1.31x; CTR +10% +0.23x; CVR +10% +0.23x; AOV −10% −0.25x; Festive ROAS 1.90x.

Each bar is that input's share of the change. The price of attention took more than the whole drop; the team's own funnel — clicks and conversions — clawed back almost half a point.

split by each input's share of the total change (log method), so the bars add up exactly

Two things jump out. First, the auction price did more damage than the total drop. Second, the creative and landing page are outperforming September. A team that "fixes" the creative here is replacing the part that works.

The sale discount is the only self-inflicted wound — a 10% smaller basket cost a quarter of a point. That is a pricing decision, not an ad problem, and it was probably made on purpose.

Compare against last year's festive weeks, not last month. September is the wrong baseline for October. Festive weeks should be judged against the same weeks last year (adjusted for growth), or you will diagnose the calendar every single year.


Auction or account?

Price-adjusted ROAS answers the question in one line: what would this week's results have earned at normal prices? Multiply the current ROAS by how much CPM rose. If the answer is close to your baseline, the account is fine and the market is expensive.

LIVE · DRAG ITAuction problem or account problem?
₹180
₹310
3x
1.9x
CPM change
72.2%
Price-adjusted ROAS
3.27x
AUCTION, NOT YOU

At normal prices this week would match or beat your baseline. Leave the creative alone — the decision is how much to buy at festive prices, not what to fix.

live mathsestimates are fine — this is a what-if sandbox

The two kinds of drop leave different fingerprints:

Signature A · the market moved

🏷️ Auction problem

CPM up sharply, everything else flat or better. Your ads still persuade the people who see them; it just costs more to be seen.

  • CPM +30% or more vs last year's same weeks
  • CTR and CVR steady or rising
  • Competitors' ads everywhere in the Ad Library
Signature B · something of yours broke

🔧 Account problem

CTR, CVR or AOV fell while CPM stayed roughly normal. The price did not change; the persuasion did.

  • A funnel rate down 15%+ week on week
  • A recent edit, site deploy or stock-out
  • Same drop on days when CPM was calm

Real weeks are often a mix. The bridge tells you the proportions, so you fix the part that is actually yours.


The decomposition in SQL

This query builds the bridge for any two periods from a daily ad table. Swap in your own table name and dates; the log maths makes the four pieces add up exactly.

ROAS bridge: festive week vs last year's same week

If price_adjusted_roas is at or above roas_before, you are looking at an auction problem. If cpm_effect is small and one of the other effects is large, that input is your suspect — go straight to change history for it.


What to do when the auction is the problem

Knowing the market is expensive does not make 1.9x profitable. If your breakeven ROAS is 2.5x (a 40% margin), every rupee at 1.9x loses money — healthy funnel or not. The question changes from "what is broken?" to "how much should we buy at this price?"

Festive buying, in order

Process Flow
1

Confirm it is the auction

Run the bridge against last year's same weeks. Fix any funnel input that dropped on its own before touching budgets.

2

Check the floor, not the baseline

Compare festive ROAS to breakeven, not to September. Above breakeven at festive prices? Keep buying. Below? Go to step 3.

3

Buy only your best inventory

Cut the weakest audiences, placements and hours first. Retargeting and past buyers usually hold up best when prices rise.

4

Move money to channels without an auction

Email, WhatsApp and SMS to existing customers cost the same in October as in March. Festive weeks are where they earn their keep.

5

Decide if new customers are worth a loss

Paying above breakeven can be fine if festive buyers come back. Check last year's festive cohort before you approve it.

Your festive-season habits set these up before the peak →

  • Track CPM daily next to ROAS — when ROAS drops, the first glance goes to the price column, not the creative.
  • Build last year's festive baseline now — same weeks, same campaigns, adjusted for growth. Compare against that, never against September.
  • Pre-approve a festive ROAS floor — agree with finance in advance what ROAS you will accept in Diwali week, so nobody panic-pauses on a Monday.

Quick gut-check

One question. If you get it, the whole post clicks. 30 seconds, no maths!

Diwali week: CPM is up 60%, CTR and CVR are flat, AOV is flat, and ROAS fell from 3.2x to 2.0x. What is the right first move?


Frequently asked questions

How much do CPMs rise during the Indian festive season?

It varies by category and year, but it is common to see CPMs 30–100% above normal levels in the run-up to Diwali, with the steepest prices in the week around Dhanteras and Diwali itself. Measure your own account against last year's same weeks rather than relying on a general number.

Should I lower bids or budgets when CPMs spike?

Lower spend on your weakest segments, not across the board. Compare each campaign's festive ROAS to breakeven: keep funding the ones above it, cut or cap the ones below it, and shift some budget to owned channels like email and WhatsApp that have no auction.

Can CPM inflation look like creative fatigue?

Yes — both make ROAS fall. The difference is in CTR. Fatigue shows falling CTR at steady CPM; auction inflation shows rising CPM at steady CTR. Read the two columns side by side before refreshing creative. More on that in creative fatigue vs audience saturation.


The summary

  • ROAS is CTR × CVR × AOV ÷ CPM, so a CPM spike cuts ROAS even when your ads work perfectly.
  • A bridge chart splits any ROAS change into price, click, conversion and basket effects that add up exactly.
  • Price-adjusted ROAS (current ROAS × how much CPM rose) tells you in one line whether the market or your account caused the drop.
  • Judge festive weeks against last year's festive weeks and against breakeven, never against September.
  • When the auction is the problem, buy less and better — don't rebuild what is working.

Takeaways for your next report

  • ROAS has CPM on the bottom of the fraction: a 72% price rise alone takes ROAS down by ~42%.
  • Split every ROAS drop into CPM, CTR, CVR and AOV before deciding what to fix.
  • Price-adjusted ROAS = current ROAS × (festive CPM ÷ normal CPM). Near baseline means the auction, not you.
  • Compare festive weeks to last year's festive weeks and to breakeven ROAS — never to last month.
  • When prices spike, cut the weakest inventory and lean on email and WhatsApp instead of rebuilding good creative.
stick this on your Monday report
Free tool

ROAS Drop Doctor

ROAS fell and nobody agrees why. Answer 5 questions about what moved — CPM, CTR, CVR, AOV, frequency — and get a ranked diagnosis with a fix checklist.

Chinmay Raibagkar

Chinmay Raibagkar

About author →

Founder of DataLens AI. He helps non-technical teams read their ad and database numbers with confidence — which number to trust, what to do next, and what to ignore.

Glossary terms referenced