SkinLab · Internal initiative

A perfect memory for our ads decisions

A system that records every change we (or our agency) make to our ads, offers and landing pages — automatically where possible — watches the numbers, and tells us honestly whether our optimisations worked or the market just moved.

Read-only — it never touches the ad accounts Google Ads first, Meta next Lives in Slack All 5 brands

Why we're building this

Two problems everyone who touches our paid ads will recognise.

1

Optimisation tracking is human-dependent

Campaign pauses, budget shifts, a new offer ($1699 for 400 shots of Ultherapy instead of freebies), a landing-page tweak, a new WhatsApp follow-up script — these live in people's heads and scattered chats. Three months later, nobody can reconstruct what was changed, when, or why.

2

Attribution runs on memory

Leads went up — was it our new offer, or the school holidays? Leads dropped — bad creative, or two doctors on leave that fortnight? Without a reliable timeline of changes and context, every answer is a guess dressed as an opinion.

The core insight: Google already records every in-platform change (who, what, when — including the agency's). We just have to capture it before it expires, and add the one thing no API knows: why we did it.

What it is — and what it is not

Setting expectations before anything else.

  • It never changes anything in the ad accounts. No auto-pausing, no budget moves. Humans (and the agency) keep the steering wheel; the system keeps the logbook and the instruments.
  • It doesn't replace anyone. It replaces the documentation and vigilance work nobody actually does consistently — not the judgment.
  • It won't invent precise answers. When the honest answer is "too early to tell — measurable in ~3 weeks", that's what it says. No fabricated "your change drove a 23% lift".
  • It's quiet by design. A message from it means something. Target: at most ~2 alerts a day across all brands; zero is a normal day.

How it works

Plain code does the watching (cheap, testable, never hallucinates). AI is used only where judgment is needed — deciding what matters and explaining it.

automaticChange captureGoogle Ads change history → every pause, budget & bid change, with who and when
one slack lineYour declarationsOffers, landing pages, WA scripts, doctor roster — things no API can see
automaticMetric sensorsSpend, clicks, CTR, CPC, conversions vs each campaign's own baseline — plus "silence" checks (tracking broke, spend at $0)
The LedgerOne append-only timeline of every change, hypothesis and context event — in the same warehouse as our metrics (BigQuery)
aiThe AnalystCross-checks anomalies against the Ledger, suppresses normal fluctuation, posts only substantiated flags — every claim cites real query results
aiWeekly digestWhat changed, what happened, what's attributable, what needs a proper experiment
#ads-optimisation on SlackWhere you declare changes, receive flags, and ask follow-up questions in threads

What it looks like day-to-day

Everything happens in one Slack channel. Three moments:

YouChanged SLAC Ulthera offer to $1699 for 400 shots, live from today. Hypothesis: leads hesitate at WA follow-up — price anchor should convert better than freebies.
ObserverRecorded ✓
Intervention #112 · SLAC · offer · Ulthera LP · 22 Jul
Old: first-trial freebie bundle → New: $1699 / 400 shots
Hypothesis: price anchor vs freebies at WA follow-up stage.
I'll baseline WA conversions for this campaign from today. Reply to correct anything.
ObserverSLAC — WhatsApp conversions down 42% over 6 days (11/wk → 6.4/wk, outside normal range for this campaign).
Ledger check: budget was raised +30% on 14 Jul by the agency (#98) — expected the opposite. No context events overlap. Spend and clicks are stable, so traffic is arriving but not converting — worth checking the LP and offer.
All numbers from campaign-level daily stats; thread me for the breakdown.
ColleagueLP was switched to the new template on the 15th — not declared 😅
ObserverRecorded as Intervention #113 (backdated 15 Jul) and linked to this flag ✓
Observer — Week 30 digest3 interventions, 1 context event, 1 open flag.
• Ulthera offer change (#112): WA conversions +18% vs baseline — too early to attribute; at this volume, effect is measurable from ~12 Aug. Holding.
• Agency bid adjustments across 47 SLAC keywords (#98): CPC −8%, no conversion impact detectable.
• TCL: quiet week, all metrics in range.
Recommendation: the freebies-vs-price-anchor question won't be answerable observationally — suggest a Google Ads experiment split next cycle.

Straight talk on attribution

This is where most tools overpromise. Ours won't.

Timeline, always

What changed, what happened after, what else was going on (holidays, roster, competitors). Never lost, never dependent on memory.

Estimates, when volume allows

Where the numbers are big enough, it compares against control baselines (untouched campaigns, sibling brands) and shows the uncertainty.

Experiments, for the big calls

Offer and LP questions usually can't be answered by observation. The system says so and recommends a proper split test instead of pretending.

Rule it lives by: no causal claims without the statistics to back them. "Not measurable yet — wait 3 weeks before reacting" is a first-class answer, and often the most valuable one.

Vocabulary

Five words you'll see it use.

Intervention
A deliberate change we made expecting it to affect performance — in-platform (pause, budget, bid; captured automatically) or off-platform (offer, landing page, WA script; declared in one Slack line).
Context Event
Something we didn't do as an optimisation but that moves the numbers — public holidays (loaded automatically), doctor leave / reduced roster, competitor pushes, platform shifts. Recorded so we don't credit or blame ourselves for them.
Ledger
The single append-only timeline of all interventions and context events. Fed automatically from Google's change history; humans add only the why.
Signal
A raw statistical anomaly a sensor picked up. Most are normal fluctuation and get suppressed — you never see them except summarised weekly.
Flag
A signal that survived scrutiny: cross-checked against the ledger, judged worth your attention, posted to Slack with the evidence attached. The only thing that interrupts you.

The plan

Ordered by what loses data by not existing — Google's change history only keeps ~30 days, so capture ships first.

0

Start the recorder

API access + daily capture of Google Ads change history into the Ledger. No AI yet — just stop the history from evaporating.

Every week of delay is ledger history lost forever
1

Give it a mouth

Slack bot goes live. The team can declare offers, LP changes and roster events in one line; the bot confirms what it recorded.

2

Turn on the sensors

Metric anomaly + silence detection across all 5 brands, with the Analyst filtering noise. We run 2–4 weeks and tune until "when it posts, it matters".

3

Close the loop

Weekly attribution digest: what changed, what worked, what's unknowable without an experiment.

4

Sharpen

Disapproval alerts for active ads only (no more year-old-paused-ad email noise) and budget pacing against declared plans.

5

Meta Ads

Extend the same sensing and ledger to Meta — our Meta metrics already flow into the warehouse daily.

FAQ

Can it accidentally mess up our campaigns?
No — structurally impossible, not just policy. It's built with read-only access; there is no code path that writes to the ad accounts.
Do I have to fill in forms or keep a doc updated?
No. In-platform changes are captured automatically. For everything else, a single natural-language Slack message is the entire workflow — the bot does the structuring.
What about the agency's changes?
Captured automatically with actor attribution — the ledger records who changed what, neutrally. It also gives us a factual record to discuss during agency reviews.
Why not include the sales sheets / lead data?
Deliberately out of scope for v1 — sheet data has human dependencies (manual tabs, hand-picked labels) that deserve their own project. v1 reads platform data only: spend, clicks, and platform-tracked conversions like WhatsApp clicks/messages, calls and form submits.
What does it cost to run?
It reuses our existing pipeline server and data warehouse. New spend is AI usage — expected in the low tens of dollars a month.