Case 04 · Kesha Select · Paid growth · Aug to Sep 2026
Meta ads, planned and measured
I stood up paid social for a store that had never run it: audited the account, split it into clean lines, fixed attribution, wrote the creative playbook and gave the owner one number to steer by. Within weeks the live ads' cost per purchase sat in the top tenth of the food category.
Artifact and decisions
one issue · 5 linked fixes · numbers match the callouts
The issue
We could not tell what a new customer actually cost
One blended campaign, inconsistent tags and personalized landing pages meant the 2.5× gap was a measurement artifact as much as a fact. The group below makes every later number legible before any budget moves.
Simplified recreation in English. Costs are relative to the returning line. *As first measured, on broken attribution. No spend or account data appears.
Returning, new and local, each with its own audience, budget and cost per purchase.
One tagging scheme on every ad; personalized destinations turned off for paid traffic so an ad lands on one page.
A scorecard with a pre-launch check; only items that already sell get budget.
Two to three new videos a week, ten concepts a month, the product being eaten or used first.
Seven-day spend over seven-day revenue, computed from two tables the owner already trusts, checked daily.
Audited the account before touching a budget. One campaign served returning and new customers together, so the blended cost per purchase hid both. Ads pointed at personalized destinations, so a returning customer and a stranger saw different pages under the same ad. Purchases were attributed with inconsistent tags, so the store and the ad platform disagreed about what worked.
Pulled ad-level spend and results into the same SQLite store as the Shopify order sync, joined on campaign tags, and listed every landing URL the ads used. The join itself exposed the problem: a large share of ad-attributed orders had no usable source tag at all.
The question the owner asked was "should we stop paying for new customers". The question worth answering first was "do we know what a new customer costs". Four hypotheses: H1 new-customer acquisition is inefficient and should be cut. H2 the measurement is broken, so efficiency is unknown. H3 creative fatigue, not targeting, is the real constraint. H4 we are advertising the wrong products.
Trust before spend. Nothing gets scaled or cut on a number nobody believes. Order of work: fix attribution, split the account so each audience has its own line and its own cost, keep one clean acquisition test line running while the decision waits, then fix product selection and creative cadence.
Sized the fix by where it lived: tags and destinations were a configuration change, the campaign split was an account rebuild, and the creative pipeline needed people and a calendar, not code. Configuration went first because it made every later number legible.
- Account structure. Three lines: returning customers, new customers, and local (a geo-targeted line around a Bay Area pop-up and clearance, treated as inventory and first-order acquisition rather than revenue).
- Product selection. A hero-SKU scorecard with a pre-launch check. Only items with proven pull get advertised. The top creative slot is reserved for new items and brands.
- Creative playbook. Food creative lives about nine days. Plan two to three new videos a week and at least ten concepts a month. Lead with the product being eaten or used, never a ranking slide or a price tag.
- Decision rule. Every campaign gets a daily health check against one metric everyone trusts.
Wrote one tagging convention and applied it to every ad. Turned off personalized destinations on paid traffic so an ad lands on one page. Exported the returning and new audiences from the lifecycle segments I had built for the migration study, so the ad account, the CRM and the store agreed on who was who. Built the daily health check as a query over spend and orders, not a manual read of two dashboards.
With attribution fixed and the lines split, the account read cleanly for the first time: the live ads' cost per purchase sat in the top decile of the food category, and the returning-customer line was the cheapest purchase the store could buy. The apparent 2.5× penalty on new customers turned out to be a measurement artifact, which the rebuild removed.
A merchandising fix came free with the measurement: one campaign's featured page had sold under five percent of that campaign's revenue because it did not match what the community was posting. The next campaign synced the page to the daily posts.
Ads amplify product fit; they cannot create it, so only proven items get budget. With Meta running efficiently, the strategic call was where the next dollar goes: the only scalable new-customer channel that does not depend on an aging Facebook group is intent search, so the Q4 plan opens Google Search and Merchant Center from zero while Meta holds at its efficient level.
A metric nobody can compute from raw data is a metric nobody trusts. The spend-to-revenue ratio survives because it is one query over two tables the owner already believes. Every attribution fix became a rule in the pipeline so the next campaign starts clean.
What I would not claim
The category benchmark is a snapshot from the weeks the account ran under the new structure, not a quarter of data. The 2.5× figure is presented as what the broken measurement showed, not as a finding about new customers.
Rule this produced
One trusted number for paid. Rolling seven-day ad spend divided by store revenue, until attribution is proven clean.