Paid social, automation, retention

Cost Per Lead Doubled in Four Weeks. The Report Caught It First.

A Gulf logistics client's WhatsApp lead campaign went from AED 0.63 to AED 1.36 per conversation. The morning report flagged it before the client did, the cause was creative age, and the pilot became a retainer. The system behind it.

Cost per lead does not jump. It drifts, a few fils a day, until one morning the number is double what the client signed off on and the relationship is already damaged. On a Meta click-to-WhatsApp campaign for a container haulage company in the UAE, cost per conversation went from AED 0.63 to AED 1.36 over four weeks. The client never had to point it out, because the report that lands in their inbox every morning flagged it first, named the likely cause, and proposed the fix. That is the difference between a pilot that ends and a pilot that becomes a retainer.

I run a digital agency and I built that reporting layer myself, with n8n, Zapier and Claude agents reading the ad account every morning. This is what the campaign was, what the report caught, and how the system is built, in enough detail to copy. The client is not named because the work is under a normal agreement; the numbers are from the ad account.

In numbers

  • Cost per conversation went from AED 0.63 to AED 1.36 over four weeks
  • The daily report flagged it in week three, before the client noticed
  • Cause: creative fatigue (frequency up, click-through down, lead quality steady), not targeting
  • 486 conversations in the first seven days at 7.9 percent click-through
  • The pilot became a retainer because the uncomfortable number arrived with a cause and a fix

The campaign

The client needed owner-operators with their own trucks, and the workforce is largely South Asian. Every competing ad in the market was in English. We ran Meta click-to-WhatsApp campaigns in Urdu, Hindi and Arabic, each language on its own campaign with its own budget so the smaller audiences were not starved by Meta’s budget optimisation. WhatsApp was inbound only, because a number that sends first gets restricted.

The creative that worked was 9:16 story video, which beat static images by roughly four to one, and short explainers of twenty to thirty-five seconds, which beat one-liners. In the first seven days the account produced 486 WhatsApp conversations at AED 0.63 each on a 7.9 percent click-through rate, with roughly nine in ten conversations from real truck owners. Those are the numbers the client signed the pilot on.

What the report caught

The morning report caught a cost per conversation that had moved from AED 0.63 to AED 0.95 in week three and to AED 1.36 in week four, while the click-through rate on the winning creative fell in step. Frequency on the Urdu campaign had climbed past the guard rail I set for it. The audience had not changed; the same people were seeing the same three ads too many times.

That is creative fatigue, not audience exhaustion, and the two look identical in a dashboard if you only watch cost. The tell is the pairing: rising frequency, falling click-through, stable conversation quality. When the audience is wrong, quality drops first. Here quality held, so the diagnosis was the ads, not the targeting.

The report said so in the client’s language, with the numbers in a table and one recommendation: rebuild the weakest ad, a static frame, into a driver-facing video with a route badge, and rest the highest-frequency creative. I built the replacement that day. The client read a problem, a cause and a fix in one email, before they had noticed the problem themselves.

Why that kept the account

Clients leave when a number surprises them, not when a number is bad. Ad costs go up; everyone who has run paid media knows that. What breaks trust is discovering it yourself and wondering how long the agency knew. Flagging the drift in your own report, with a cause and a fix attached, turns the same bad number into evidence that someone is watching.

I have run seventeen retained white-label accounts for a US partner on a fixed Friday status note, and the pattern is identical there. Every account I kept, I kept by saying the uncomfortable thing first. The Gulf client extended the pilot into a social media retainer after the fatigue episode, not despite it.

Want this done for your business?

An audit, a build, or a morning report on your own accounts. Tell me what you are trying to do and I reply myself within one working day.

How the reporting system works

The system is three parts: a scheduled pull, a set of guard rails, and a drafted report a human reads before it goes anywhere.

  1. The pull. Every morning an n8n workflow (Zapier did this originally) calls the Meta Ads API for yesterday’s results by campaign and by ad: spend, impressions, frequency, click-through, conversations started, cost per conversation. The Search Console equivalent runs for SEO clients on the same schedule. Always request today’s or yesterday’s date preset explicitly; the default three-day window hides a one-day spike.
  2. The guard rails. Each account has a small set of thresholds written down before launch: frequency above 3.5 on any ad set, cost per result more than 40 percent above the seven-day median, a spend cap, and any ad set that drops back into learning. Crossing one flags the row.
  3. The draft. A Claude agent reads the flagged rows and the trend, writes the client update in the agency’s voice with the table, the likely cause and a proposed fix, and drops it in a folder. I read it, change what needs changing, and send it. The agent never sends. That rule is what lets a client trust a morning email from a machine.

Monthly reporting that used to take a full day now takes the time it takes to read the draft. The skill that does the monthly version for Search Console exports is one of the ones I publish.

Rules that came out of it

Six rules came out of that campaign and they are now the delivery playbook for every click-to-WhatsApp account I run:

  • 9:16 story video beats static by about four to one; budget accordingly.
  • Twenty to thirty-five second explainers beat one-liners with this audience.
  • Each language gets its own campaign and budget, or campaign budget optimisation starves the smaller one.
  • Never run two campaigns on the same audience; they bid against each other.
  • WhatsApp stays inbound only, or the number gets restricted.
  • Check today’s numbers, not the last three days, or a spike hides in the average.

Common mistakes

What I see most often is agencies reporting monthly on a campaign that changes daily. A 40 percent cost increase in week three is invisible in a month-end average against a strong week one. Daily pulls with written thresholds are the only way to catch drift while it is still cheap to fix.

The second mistake is the opposite: automating the send. A report that goes to a client unread is a liability the first time the model misreads a column. Automation watches; a person decides.

The third is diagnosing by cost alone. Cost per lead rising with quality holding is creative fatigue. Cost rising with quality falling is targeting. Rebuilding ads for a targeting problem wastes a week.

Key takeaways

  • Cost per conversation drifted from AED 0.63 to AED 1.36 over four weeks; the daily report flagged it in week three.
  • Rising frequency plus falling click-through with stable lead quality means creative fatigue, not audience.
  • Say the uncomfortable number first, with a cause and a fix. That is what turned a pilot into a retainer.
  • The system is a scheduled pull, written guard rails, and a drafted report a human reads before sending.
  • Report daily on campaigns that change daily; monthly averages hide the problem until it is expensive.

The monthly reporting skill and the guard-rail template are in the free toolkit. If you run paid social for clients and want the morning report built for your accounts, tell me what you are running.

Also on this site

All writing