An ad set named for a placement proves nothing
Cost per conversation went from ₹8 to ₹20 on flat spend. The ad set was named after the cheap placement; its configuration had never heard of it.
A travel client’s lead quality fell off a cliff inside a week: the share of hot leads dropped from 35% to 11%, and three-quarters of new leads never typed a single word. Spend was flat. Creative was unchanged.
Everyone’s first suspect was the automated responder that answers the leads — it had just been updated. Verified live: working exactly as deployed. The problem was upstream, and it was hiding behind a label.
The drift
The account’s cheapest source of conversations was a full-screen story placement — roughly ₹8 CPM against ₹99–103 for the main feeds. The workhorse ad set was named after that placement. The name was in the reports, in the conversations, in everyone’s mental model.
The actual targeting configuration had no placement constraint at all. The field was simply absent, which means automatic — the platform places the ads wherever it likes. And over a fortnight, it had quietly drifted the budget off the cheap full-screen placement onto the expensive feeds. Cost per conversation went from ₹8 to ₹20 with nothing visibly changing, because the thing that changed doesn’t appear in any default report.
The name promised. The config never agreed. Naming conventions are documentation; the targeting object is enforcement; and nothing reconciles the two for you.
The tell worth remembering
What separated a placement problem from a creative problem: two ads sharing the same image were billing ₹7 and ₹21 per conversation — identical creative, different delivery period. Creative cannot explain a 3× cost gap between two copies of itself. Only where and when the system delivered them can. When identical ads diverge, stop interrogating the creative.
The trap behind the trap
While fixing it, a second lesson from a different account the same week: writing targeting back through the API replaces the entire object, not just the field you changed. A radius edit silently rewrote the placement list. So the discipline has two halves — read the configuration before diagnosing anything, and read it back after every write, because your own fix can introduce the same drift it was correcting.
The general form
Any system where a label can drift from a configuration will eventually punish you for reading the label:
- the file named
final_v2that isn’t final, - the campaign named “Retargeting” whose audience includes cold traffic,
- the spreadsheet tab named after a quarter it no longer covers.
The label is a claim. The configuration is the fact. When money is moving, audit the fact — the label costs nothing to write and nothing keeps it honest.