Enkindle Digital · Performance Playbook

Diagnose. Decide. Don't Guess.

The visual field-guide for the Enkindle team. Every metric is the end of a causal chain - your job is to walk it backwards until you find the broken link, then fix that one specific link.

15 Diagnostic Playbooks 5 Weekly Sprints 1 Iron Rule: never change >10%
Iron Rules Diagnostic Chain Daily Routine Weekly Cadence Traffic Playbooks Conversion Playbooks Tracking Playbooks Customer Playbooks

The Three Iron Rules

Break any of these and you'll know it within 48 hours.
1

The 10% Rule

Never change a budget or a bid target by more than 10% in one move. Ever. A 30% lift crashes learning and ruins the weekend.

2

The Diagnostic Chain

Business → Channel → Campaign → Root cause. Never skip a level. "ROAS dropped" is not a diagnosis - it's a symptom.

3

The Two Truths

Platform truth is diagnostic. Backend truth is ground truth. Always cross-check. Fix tracking before you fix media.

The Diagnostic Chain

When a metric moves the wrong way, walk these six levels in order. Don't skip. Never blame the product before you've ruled out media.

Step 0
Context
Seasonality · Calendar
Step 1
Topline
backend_orders
Step 2
Channel
Channels Performance
Step 3
Campaign
Meta / Google Campaigns
Step 4
Deep-Dive
10 levers in order
Steps 5-6
Root + Action
Synthesis · Lever-pull

Optimistic · Modeled

Platform Truth

What Meta, Google, TikTok report. Uses view-through, click-through windows, modeled conversions. Use it to diagnose which lever moved.

VS

Honest · Real

Backend Truth

What Shopify / Stripe / the database actually saw. The only truth that pays salaries. Anchor every client conversation here.

The Morning Routine

30 minutes if healthy · 90 minutes if something broke. In this order.
1

Did we hit yesterday's pace?

Spend, revenue, blended ROAS vs the rolling 7-day average. Spend at pace + revenue 40% under = problem.

Daily
2

Reconcile the two truths

GA4-reported orders vs backend orders. Within ~10–15% is fine. Wider gap → tracking issue, not performance issue.

GA4backend_orders
3

Channel pulse

Scan WoW deltas. Anything beyond ±15% deserves a look. Note which channel moved and which direction.

Channels Performance
4

Impression Share health

Read three numbers: Avg IS, Lost IS (Budget), Lost IS (Rank). Budget loss = under-funded. Rank loss = competitor or quality.

Imp. Share
5

Anomaly scan

Check which campaigns are leading to this drop.

Meta CampaignsGoogle Campaigns
6

Customer pulse

Check New Customers this week vs last week vs same week last year, check CAC, and retention metrics.

Customers Analysis
7

Log it

Three columns: Observation → Hypothesis → Action (now / weekly / monitor). This log is Daily's update narrative.

Action Log

The Weekly Cadence

Each day has one purpose. The cadence exists so the algorithm gets stable windows to learn.
MONDAY BI-WEEKLY A

Creative Sprint

Hook / Hold / Conv archetypes → Pause · Brief · Variations.

Creatives Overview creatives_action
TUESDAY

Search Intent

Mine SQR + Editor. Scale converters · Negate junk · Brief new ad groups.

SQR editor
WEDNESDAY BI-WEEKLY B

Merchandising

Product clusters → Stars · Hidden Gems · Fix Checkout · Dead Stock. Brief creative for SKUs.

Products Overview optimisation_products_clusters
THURSDAY

Client Narrative

WoW story → Symptom · Cause · Action · Asks · Plan. Never read numbers - explain movement.

Topline Performance Channels Performance
FRIDAY

Budget & Bid

10% rule, stair-step. No changes after 3 PM. Better a quiet weekend than a broken one.

budget_adjustment budget_distribution_remarketing

The 15 Diagnostic Playbooks

Each playbook follows the same chain: Step 0 Context → Step 1 Topline → Step 2 Channel → Step 3 Campaign → Step 4 Deep-dive → Step 5 Root → Step 6 Action.

Each playbook is an interactive decision tree. Click YES or NO at each question to expand the next branch. Trees drill down from WHERE the symptom came from (channel) → WHICH lever changed → ending in a concrete ACTION with a copy-paste log-entry template. Click any 'Stop. Upstream cause' pill to jump to the upstream playbook. The seasonality / payday-cycle context is in the amber banner at top of each card - check it first. TikTok follows the Meta pattern with shorter learning windows (~48h) and faster creative cycles (3-5 days).

Traffic Playbooks

A - E · Symptoms above the funnel
A

Sessions dropped

Symptom: total sessions down materially WoW or DoD.

Step 0

Context first. Same period last month? Same DoW two weeks back? Payday position (W1-2 dips are normal in UAE)? YoY same week? Holidays / Ramadan / school terms? If the drop matches a known calendar pattern, log and monitor - don't intervene.

1
Topline confirmation
Question
Did IMPRESSIONS also drop alongside sessions? (Impressions are upstream of sessions in the funnel)
YES  ·  Impressions ALSO downStop. Upstream cause - investigate B Impressions dropped first. Impressions are upstream of sessions. If both moved, the impression drop is the actual cause - investigate impressions in B (channel-specific impression drill, Auction Insights, Lost IS Budget vs Rank, audience/learning state).Click to jump ↗
NO  ·  Impressions held stable - sessions dropped despite stable impressions
Question
Did CLICKS or CTR drop too? (Sessions ≈ Impressions × CTR)
YES  ·  Clicks / CTR also droppedStop. Upstream cause - investigate C CTR collapsed first. If impressions held but CTR dropped, the click-through rate is the cause. Investigate CTR in C (creative fatigue, SQR drift, placement, engagement penalty).Click to jump ↗
NO  ·  Impressions AND CTR stable - sessions dropped anyway (unusual - click-to-session handoff issue)
Question
Did sessions drop ACROSS ALL CHANNELS or only ONE channel?
ALL channels equally - site-wide investigation
Question
Are backend orders also down proportionally?
NO  ·  Backend revenue flat or down less
Question
Is the platform-vs-backend gap > 15%?
YES  ·  Tracking gap confirmed
Action
STOP media investigation. Fix pixel firing, consent banner, GA4 config, server-side events. Re-evaluate sessions only after tracking validated.
How to log this in your Daily Log
ObservationSessions -[X]% in GA4; backend orders flat; gap >15%
HypothesisTracking gap inflating apparent session drop
Action takenSTOP media investigation. Fix pixel firing, consent banner, GA4 config, server-side events. Re-evaluate sessions only after tracking validated.
Insight / learningDocument gap baseline; cross-check pixel + consent + CAPI quarterly
NO  ·  Within normal noise (<15%)
Action
Real drop; continue assuming the data is good.
How to log this in your Daily Log
ObservationSessions -[X]%; backend confirms; gap within noise
HypothesisReal sessions drop - tracking healthy
Action takenReal drop; continue assuming the data is good.
Insight / learningContinue diagnostic
YES  ·  Backend confirms real drop
Question
Site outage / page-load regression / consent banner / GA4 config change in last 7 days?
YES  ·  Site or config change
Action
Fix the site / config issue first. Verify with PageSpeed + Search Console + GA4 Debug. No media change.
How to log this in your Daily Log
ObservationAll-channel sessions -[X]%; impressions+CTR stable; site change on [date]
HypothesisSite/config change breaking the click-to-session handoff
Action takenFix the site / config issue first. Verify with PageSpeed + Search Console + GA4 Debug. No media change.
Insight / learningPre-flight major site changes during slow days; rollback ready
NO  ·  No site / config change
Action
Click-to-session handoff broken (redirect chain, LP timeout, mobile rendering). Audit LP load on mobile + desktop for top traffic sources.
How to log this in your Daily Log
ObservationAll-channel sessions -[X]%; impressions+CTR stable; no site change
HypothesisClick-to-session handoff issue (redirects, LP timeouts)
Action takenClick-to-session handoff broken (redirect chain, LP timeout, mobile rendering). Audit LP load on mobile + desktop for top traffic sources.
Insight / learningClick-to-session gap is rare but real - audit LP load quarterly
ONE specific channel - drill into that channel
Question
Which channel lost sessions despite stable impressions and CTR?
GOOGLE (paid)
Action
Click-to-session gap on Google specifically. Audit final-URL redirects, LP load speed on the affected campaigns. If PMax, check that final URL expansion isn't sending users to a broken page.
How to log this in your Daily Log
ObservationGoogle sessions -[X]%; Google impressions+CTR stable
HypothesisClick-to-session handoff issue on Google
Action takenClick-to-session gap on Google specifically. Audit final-URL redirects, LP load speed on the affected campaigns. If PMax, check that final URL expansion isn't sending users to a broken page.
Insight / learningPMax final-URL expansion can land users on broken pages - audit weekly
META (paid)
Action
Click-to-session gap on Meta. Check link parameters + LP load on mobile. Meta's deep-link / app-link can sometimes break the session handoff.
How to log this in your Daily Log
ObservationMeta sessions -[X]%; Meta impressions+CTR stable
HypothesisMeta link / deep-link issue breaking click-to-session
Action takenClick-to-session gap on Meta. Check link parameters + LP load on mobile. Meta's deep-link / app-link can sometimes break the session handoff.
Insight / learningMeta deep-link bugs are rare; test app-link flow quarterly
TIKTOK (paid)
Action
Click-to-session gap on TikTok. Check link parameters and in-app browser behavior. TikTok's in-app browser can have rendering issues.
How to log this in your Daily Log
ObservationTikTok sessions -[X]%; TikTok impressions+CTR stable
HypothesisTikTok in-app browser or link handoff issue
Action takenClick-to-session gap on TikTok. Check link parameters and in-app browser behavior. TikTok's in-app browser can have rendering issues.
Insight / learningTikTok in-app browser bugs - test landing flow monthly
UNPAID (organic / direct / referral / email)
Action
Unpaid click-to-session gap. Check GA4 tracking, UTM stripping (iOS Safari), and referral source loss.
How to log this in your Daily Log
ObservationUnpaid sessions -[X]%; unpaid impressions/clicks stable
HypothesisGA4 tracking gap or UTM stripping in unpaid channels
Action takenUnpaid click-to-session gap. Check GA4 tracking, UTM stripping (iOS Safari), and referral source loss.
Insight / learningUTM persistence via first-party storage required on iOS
B

Impressions dropped (sessions OK)

Symptom: impressions fell but sessions and orders are flat.

Step 0

Context first. Same DoW pattern? Same period last month often shows the same delivery shape. Algo behavior in W1-2 (slower spend, narrower delivery) is normal in UAE.

1
Topline confirmation
Question
Did sessions ALSO drop alongside impressions, or did sessions hold flat / up while impressions dropped?
SESSIONS ALSO DROPPED - the impression drop is real and propagated downstream. Investigate impressions (DO NOT redirect to sessions - impressions are the TOP of the funnel).
Question
Did impressions drop ACROSS ALL CHANNELS or only ONE channel?
ALL channels - broad / tracking issue
Question
Site / pixel / consent banner / GA4 config change in last 7 days?
YES  ·  Tracking infrastructure change
Action
Fix tracking first. Verify with PageSpeed + Pixel Helper + GA4 Debug.
How to log this in your Daily Log
ObservationCross-channel impressions -[X]%; recent tracking change on [date]
HypothesisTracking / consent change suppressing reported impressions
Action takenFix tracking first. Verify with PageSpeed + Pixel Helper + GA4 Debug.
Insight / learningPixel/consent changes mimic auction issues - rule out infra first
NO  ·  No tracking change
Action
Broad-market auction softness OR category demand drop. Check Auction Insights + Google Trends.
How to log this in your Daily Log
ObservationCross-channel impressions -[X]%; tracking healthy
HypothesisExternal category-wide softness
Action takenBroad-market auction softness OR category demand drop. Check Auction Insights + Google Trends.
Insight / learningMap category seasonality
ONE channel - drill into impressions for that channel
Question
Which channel's impressions dropped?
GOOGLE (state-machine: not-serving / learning / underspending / at-cap)
Question
Step 1 - What is the campaign's serving state? (4 states: not-serving / learning / underspending / serving at cap)
PAUSED or DISAPPROVED (campaign not serving at all)
Action
Unpause / fix disapproval. Check ad / keyword disapproval messages in Google Ads.
How to log this in your Daily Log
ObservationGoogle impressions = 0 or near-0; status = paused/disapproved
HypothesisCampaign not serving
Action takenUnpause / fix disapproval. Check ad / keyword disapproval messages in Google Ads.
Insight / learningAlways check status first - cheapest diagnostic
IN LEARNING (algo rebuilding after a recent edit)
Action
Wait 48-72 hours. Don't compound changes during learning.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; campaign in learning since [date]
HypothesisLearning-phase delivery dip - transient
Action takenWait 48-72 hours. Don't compound changes during learning.
Insight / learningPlan edits during slow weeks
UNDERSPENDING (active, past learning, but spending <80% of daily cap - the algo CAN'T fill the budget)
Question
Why isn't the algo spending the budget? Open Imp Share + Auction Insights to diagnose.
Lost IS (Rank) is HIGH (bids too low to win auctions, OR Quality Score dragging rank down)
Question
Are ads >60 days old / ad relevance score amber-red?
YES  ·  Quality Score / ad relevance is the bottleneck
Action
Two-pronged fix: (1) Loosen tCPA target by 10% so the algo can bid higher to win, AND (2) refresh ad copy (3 fresh headlines/descriptions per ad group) to lift Quality Score. Stair-step.
How to log this in your Daily Log
ObservationGoogle underspending; Lost IS Rank [X]%; ads aged [N]d / relevance amber
HypothesisStale ads dragging QS - algo can't bid high enough to win at our QS level
Action takenTwo-pronged fix: (1) Loosen tCPA target by 10% so the algo can bid higher to win, AND (2) refresh ad copy (3 fresh headlines/descriptions per ad group) to lift Quality Score. Stair-step.
Insight / learningQS + bid are interdependent - low QS forces higher bids; raising bids alone wastes spend if QS is the real cause
NO  ·  QS healthy - bids are just too low
Action
Relax bids by 10%. Loosen tCPA target by 10% (or lift manual CPC cap 10%) so the algo can win more auctions. Stair-step weekly.
How to log this in your Daily Log
ObservationGoogle underspending; Lost IS Rank [X]%; QS healthy; tCPA target = $[Z]
HypothesisBids too low for current auction - missing winnable impressions
Action takenRelax bids by 10%. Loosen tCPA target by 10% (or lift manual CPC cap 10%) so the algo can win more auctions. Stair-step weekly.
Insight / learningUnderspending + Lost IS Rank = bid issue, not budget issue. Loosen target, don't lift cap.
Lost IS (Rank) is LOW but Lost IS (Budget) is also LOW (algo isn't being throttled by rank OR budget - it's just not finding enough demand)
Question
Recent audience / keyword / geo narrowing?
YES  ·  Recent narrowing - addressable demand shrank
Action
Broaden audience / loosen match types / expand geo back. Revert recent narrowing if unintentional.
How to log this in your Daily Log
ObservationGoogle underspending; Lost IS Rank low; Lost IS Budget low; narrowing on [date]
HypothesisNarrowing shrank addressable demand below cap
Action takenBroaden audience / loosen match types / expand geo back. Revert recent narrowing if unintentional.
Insight / learningNarrow audiences can't fill cap; either broaden or accept lower spend
NO  ·  No recent narrowing - inherently low demand for our targeting
Action
Add new keywords / interest stacks to expand surface area. Test broader match types on top-converters. Consider Advantage+ or DSA to surface new queries.
How to log this in your Daily Log
ObservationGoogle underspending; Lost IS Rank low; Lost IS Budget low; no recent change
HypothesisDemand pool genuinely small at current targeting
Action takenAdd new keywords / interest stacks to expand surface area. Test broader match types on top-converters. Consider Advantage+ or DSA to surface new queries.
Insight / learningIf demand is small, lifting bids won't fix it - expand surface area instead
tCPA / tROAS target unrealistic for current auction (algo can't find enough conversions at the price)
Action
Loosen tCPA target by 10% (or tROAS down 10%). Stair-step weekly. Document new baseline tCPA in client narrative.
How to log this in your Daily Log
ObservationGoogle underspending; tCPA target = $[Z] vs auction CPA = $[A]
HypothesistCPA target too tight - algo throttling delivery to protect goal
Action takenLoosen tCPA target by 10% (or tROAS down 10%). Stair-step weekly. Document new baseline tCPA in client narrative.
Insight / learningTight targets feel safe but starve volume; loosen until delivery normalizes
SPENDING AT/NEAR CAP (delivering full daily budget) - run the Imp Share diagnostic
Question
Step 2 - Open Imp. Share. What's the dominant signal?
Lost IS (Budget) is rising - exiting auctions before day-end
Question
Is Lost IS (Rank) ALSO rising?
YES  ·  Double issue (budget AND rank)
Action
Lift daily cap by 10% + defensive bid up 10% on top converters. Stair-step over 2 days. Recheck Auction Insights for a new competitor.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; Lost IS Budget [Y]%, Lost IS Rank [Z]%
HypothesisBudget cap + rank slip - probable competitor + under-funding
Action takenLift daily cap by 10% + defensive bid up 10% on top converters. Stair-step over 2 days. Recheck Auction Insights for a new competitor.
Insight / learningStair-step both levers separately so you can attribute which helped
NO  ·  Pure budget cap - rank healthy
Action
Lift daily cap by 10% if budget allows. Or document the ceiling and propose a budget lift.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; Lost IS Budget [Y]%; Rank stable
HypothesisPure budget cap on price-competitive auctions
Action takenLift daily cap by 10% if budget allows. Or document the ceiling and propose a budget lift.
Insight / learningDocument monthly cap ceiling; propose lift to client if recurring
Lost IS (Rank) is rising - ad rank slipping (Budget healthy)
Question
Open Auction Insights. New competitor or overlap rate up vs last week?
YES  ·  Competitor entered the auction
Question
Branded or non-branded queries affected?
YES  ·  Branded (competitor on our brand name)
Action
Defensive bid up 10% on brand campaign. Consider exact-match defensive ads. Escalate to lead if competitor uses our brand in ad copy.
How to log this in your Daily Log
ObservationBranded impressions -[X]%; competitor [name] at [Y]% overlap on brand terms
HypothesisCompetitor bidding on our brand - stealing branded traffic
Action takenDefensive bid up 10% on brand campaign. Consider exact-match defensive ads. Escalate to lead if competitor uses our brand in ad copy.
Insight / learningBrand defense is non-negotiable; flag legal if brand-in-copy
NO  ·  Non-branded queries
Action
Defensive bid up 10% on TOP-converting queries only. Refresh ad copy for relevance.
How to log this in your Daily Log
ObservationNon-branded impressions -[X]%; competitor [name] at [Y]% overlap
HypothesisCompetitor entered non-branded auction - lifting rank cost
Action takenDefensive bid up 10% on TOP-converting queries only. Refresh ad copy for relevance.
Insight / learningBid lifts on top converters preserve ROAS
NO  ·  No new competitor - Quality Score issue
Question
Are ads >60 days old without refresh?
YES  ·  Stale ads dragging Quality Score
Action
Refresh ad copy: 3 fresh headlines + descriptions per ad group. Pause low-relevance RSAs.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; Lost IS Rank up; ads [N] days old
HypothesisStale ad copy dragging Quality Score; ad rank slipping
Action takenRefresh ad copy: 3 fresh headlines + descriptions per ad group. Pause low-relevance RSAs.
Insight / learning60-day refresh cadence prevents QS decay
NO  ·  Recent ads but relevance still slipping
Action
Tighten ad-LP messaging. Ensure promo on ad matches LP. Check ad-relevance + landing-page-experience scores.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; ads recent but relevance amber
HypothesisAd-LP messaging mismatch hurting Quality Score
Action takenTighten ad-LP messaging. Ensure promo on ad matches LP. Check ad-relevance + landing-page-experience scores.
Insight / learningAd headline mirrors LP H1 word-for-word for best QS
Both Lost IS Budget AND Lost IS Rank are healthy - look at audience / external demand
Question
Recent audience / keyword narrowing? (INTENTIONAL or accidental?)
INTENTIONAL narrowing (quality move)
Action
Monitor 7-14 days. If CVR/ROAS held, the narrowing worked. Don't revert.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; intentional narrowing on [date]
HypothesisIntentional narrowing - expected delivery drop
Action takenMonitor 7-14 days. If CVR/ROAS held, the narrowing worked. Don't revert.
Insight / learningJudge intentional narrowing on CVR/ROAS not volume
ACCIDENTAL narrowing
Action
Revert the narrowing. Broaden match types / lookalikes / geo back.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; accidental narrowing on [date]
HypothesisAccidental restriction shrank demand
Action takenRevert the narrowing. Broaden match types / lookalikes / geo back.
Insight / learningUse change-history weekly to spot accidental restrictions
No narrowing - external demand softness
Action
Cross-check with Google Trends + YoY. Document seasonal pattern for next year.
How to log this in your Daily Log
ObservationGoogle impressions -[X]%; all internal signals healthy
HypothesisExternal demand softness (category seasonality)
Action takenCross-check with Google Trends + YoY. Document seasonal pattern for next year.
Insight / learningReference Google Trends monthly
META (state-machine: not-serving / learning / underspending / at-cap)
Question
Step 1 - What is the campaign's serving state? (4 states: not-serving / learning / underspending / spending at cap)
PAUSED or IN REVIEW (not serving)
Action
Unpause / fix review issue. Check ad/disapproval status in Ads Manager.
How to log this in your Daily Log
ObservationMeta impressions = 0 or near-0; status = paused/in review
HypothesisCampaign not serving
Action takenUnpause / fix review issue. Check ad/disapproval status in Ads Manager.
Insight / learningAlways check status first
IN LEARNING PHASE (algo rebuilding)
Action
Wait 48-72h. Don't compound changes during learning.
How to log this in your Daily Log
ObservationMeta impressions -[X]%; in learning since [date]
HypothesisLearning-phase dip - transient
Action takenWait 48-72h. Don't compound changes during learning.
Insight / learningPlan edits during slow weeks
UNDERSPENDING (active, past learning, but spending <80% of daily cap)
Question
Why isn't the algo spending? (Meta underspending is typically bid / audience / creative-quality)
Cost cap / bid cap too tight (algo can't pay enough to win auctions)
Action
Loosen cost cap by 10% OR move to lowest-cost bidding without a cap to let the algo discover delivery price.
How to log this in your Daily Log
ObservationMeta underspending; cost cap = $[X] vs auction CPA = $[Y]
HypothesisCost cap too tight - Meta throttling delivery
Action takenLoosen cost cap by 10% OR move to lowest-cost bidding without a cap to let the algo discover delivery price.
Insight / learningTight cost caps starve volume; lowest-cost often outperforms cost-cap on prospecting
Audience too narrow (small pool = not enough auctions to win)
Action
Broaden audience / expand lookalikes (LAL 3% → 5%) / move to Advantage+ Audience.
How to log this in your Daily Log
ObservationMeta underspending; audience size = [N]; freq healthy
HypothesisAudience pool too small to fill cap
Action takenBroaden audience / expand lookalikes (LAL 3% → 5%) / move to Advantage+ Audience.
Insight / learningUse Advantage+ Audience for prospecting; narrow only for remarketing
Ad-relevance diagnostics amber/red (Meta deprioritizes low-relevance ads)
Action
Refresh creative + test 3 new hooks. Low ad-relevance score throttles delivery silently.
How to log this in your Daily Log
ObservationMeta underspending; ad-relevance score amber/red
HypothesisMeta penalizing low-relevance creative with reduced delivery
Action takenRefresh creative + test 3 new hooks. Low ad-relevance score throttles delivery silently.
Insight / learningAd relevance is a delivery lever, not just a CPM lever
Pixel events misfiring (algo starved of optimization signal)
Action
Fix pixel events first. Re-verify CAPI + Pixel Helper. Algo cannot optimize delivery without events.
How to log this in your Daily Log
ObservationMeta underspending; pixel events misfiring or low EMQ
HypothesisPixel infrastructure starving the algo
Action takenFix pixel events first. Re-verify CAPI + Pixel Helper. Algo cannot optimize delivery without events.
Insight / learningPixel health = delivery health on Meta
SPENDING AT/NEAR CAP (delivering full daily budget) - run the audience + frequency diagnostic
Question
Step 2 - Open Audience Size + Frequency. What's the dominant signal?
Audience size dropping over time (saturation)
Action
Refresh seed audiences from recent high-LTV customers. Expand lookalikes. Rotate interest stacks.
How to log this in your Daily Log
ObservationMeta impressions -[X]%; audience size shrinking
HypothesisPool saturation - reached most of the addressable audience
Action takenRefresh seed audiences from recent high-LTV customers. Expand lookalikes. Rotate interest stacks.
Insight / learningQuarterly seed-audience refresh prevents saturation
Frequency > 3 across remarketing - audience burnt
Action
Expand lookalikes, refresh seed audiences, rotate exclusion windows.
How to log this in your Daily Log
ObservationMeta impressions -[X]%; remarketing freq = [Y]
HypothesisRemarketing pool saturated
Action takenExpand lookalikes, refresh seed audiences, rotate exclusion windows.
Insight / learningRotate remarketing windows monthly
Engagement-farming penalty (hide/report elevated)
Action
Pause the offending creative immediately. Meta silently throttles distribution.
How to log this in your Daily Log
ObservationMeta impressions -[X]%; hide/report rate elevated on [creative]
HypothesisEngagement-farming penalty - silent throttle
Action takenPause the offending creative immediately. Meta silently throttles distribution.
Insight / learningMonitor hide/report rate weekly
Healthy everything - broad-market lift
Action
External category-wide auction pressure. Budget for seasonal lift; document.
How to log this in your Daily Log
ObservationMeta impressions -[X]%; internals healthy
HypothesisExternal category-wide auction pressure
Action takenExternal category-wide auction pressure. Budget for seasonal lift; document.
Insight / learningDocument category seasonality benchmarks
TIKTOK (state-machine: not-serving / pixel / underspending / serving)
Question
Step 1 - Is the campaign serving normally?
PAUSED or DISAPPROVED
Action
Unpause / fix disapproval in TikTok Ads Manager.
How to log this in your Daily Log
ObservationTikTok impressions = 0 or near-0; status = paused/disapproved
HypothesisCampaign not serving
Action takenUnpause / fix disapproval in TikTok Ads Manager.
Insight / learningAlways check status first
PIXEL EVENTS MISFIRING (algo starved of signal)
Action
Fix pixel events first. Re-deploy via GTM if needed.
How to log this in your Daily Log
ObservationTikTok impressions -[X]%; pixel misfiring
HypothesisPixel infrastructure starving the algo
Action takenFix pixel events first. Re-deploy via GTM if needed.
Insight / learningTikTok pixel in monthly QA
UNDERSPENDING (active, past learning, but bid/audience throttling)
Question
Why isn't the algo spending?
Bid cap too tight
Action
Loosen bid cap by 10% or test no-cap delivery.
How to log this in your Daily Log
ObservationTikTok underspending; bid cap = $[X]
HypothesisBid cap too tight
Action takenLoosen bid cap by 10% or test no-cap delivery.
Insight / learningTikTok auction can be expensive; cost-cap often too tight
Audience too narrow
Action
Expand interest stacks + refresh seed audiences.
How to log this in your Daily Log
ObservationTikTok underspending; audience small
HypothesisAudience pool too small
Action takenExpand interest stacks + refresh seed audiences.
Insight / learningTikTok needs broader audiences than Meta
Creative quality (TikTok rewards engagement)
Action
Refresh creative with 3 new hooks. Low-engagement creatives get throttled.
How to log this in your Daily Log
ObservationTikTok underspending; creative aged
HypothesisCreative quality dragging delivery
Action takenRefresh creative with 3 new hooks. Low-engagement creatives get throttled.
Insight / learningTikTok delivery follows engagement signal closely
SERVING NORMALLY - check saturation / fatigue / external
Question
Step 2 - What's the dominant signal?
Audience saturation (TikTok pools burn fast)
Action
Expand interest stacks + refresh seed audiences.
How to log this in your Daily Log
ObservationTikTok impressions -[X]%; audience aged
HypothesisTikTok pool saturation
Action takenExpand interest stacks + refresh seed audiences.
Insight / learningTikTok needs monthly interest-stack refresh
Creative fatigue (3-5 day cycle)
Action
Pause stale creatives + brief 3 new hooks.
How to log this in your Daily Log
ObservationTikTok impressions -[X]%; creative aged [N] days
HypothesisTikTok creative fatigue
Action takenPause stale creatives + brief 3 new hooks.
Insight / learningTikTok creative brief weekly
Recent change or learning phase
Action
If in learning, wait 48h. If past learning and a change was made, revert.
How to log this in your Daily Log
ObservationTikTok impressions -[X]%; edit on [date]
HypothesisLearning regression or broken edit
Action takenIf in learning, wait 48h. If past learning and a change was made, revert.
Insight / learningTikTok learning ~48h
SESSIONS HELD FLAT (or up) while impressions dropped - efficiency case
Question
Is CTR up while impressions are down?
YES  ·  CTR is UP - algo got more efficient
Question
Is CPC also down or stable?
YES  ·  CPC also down - paying less per click
Action
This is a WIN, not a problem. Algorithm narrowed delivery onto higher-CTR creative/audience. Log positive; no action.
How to log this in your Daily Log
ObservationImpressions -[X]%; sessions stable; CTR +[Y]%; CPC -[Z]%
HypothesisAlgo efficiency win
Action takenThis is a WIN, not a problem. Algorithm narrowed delivery onto higher-CTR creative/audience. Log positive; no action.
Insight / learningDon't reverse the narrowing
NO  ·  CPC up - higher quality at higher cost
Action
Acceptable if CAC / ROAS held. Monitor 1 more week.
How to log this in your Daily Log
ObservationImpressions -[X]%; sessions stable; CTR +[Y]%; CPC +[Z]%
HypothesisNarrower + pricier auction
Action takenAcceptable if CAC / ROAS held. Monitor 1 more week.
Insight / learningWatch CAC/ROAS
NO  ·  CTR flat / down - audience genuinely shrinking
Question
Recent audience changes / exclusions / geo tightening?
YES  ·  Recent narrowing
Action
Revert the narrowing if not intentional. OR broaden lookalikes.
How to log this in your Daily Log
ObservationImpressions -[X]%; sessions stable; audience narrowed on [date]
HypothesisAudience narrowing shrank inventory
Action takenRevert the narrowing if not intentional. OR broaden lookalikes.
Insight / learningAudience tightening is rarely the right answer
NO  ·  No recent change - natural saturation
Action
Refresh lookalikes from recent high-LTV customers.
How to log this in your Daily Log
ObservationImpressions -[X]%; sessions stable; no recent change
HypothesisAudience saturation
Action takenRefresh lookalikes from recent high-LTV customers.
Insight / learningQuarterly seed refresh
Action
Final rule: Impressions are the TOP of the funnel - never redirect 'upstream' from here.
How to log this in your Daily Log
ObservationImpression investigation conclusion documented
HypothesisImpression drop is the root cause
Action takenFinal rule: Impressions are the TOP of the funnel - never redirect 'upstream' from here.
Insight / learningImpressions are TOP of funnel
C

CTR collapsed

Symptom: CTR fell materially WoW with impressions stable.

Step 0

Context first. Did promo end this week? Promo-loaded creatives drop in CTR the moment the offer disappears. Same window last month - same shape?

1
Topline confirmation
Question
Did CTR drop ACROSS ALL CHANNELS, or only ONE channel?
ALL channels - offer / category-wide
Question
Did a promo / offer just end this week?
YES  ·  Promo ended
Action
Post-promo CTR drop is mechanical. Plan non-promo creatives for the next sprint. No emergency action.
How to log this in your Daily Log
ObservationCross-channel CTR -[X]%; promo ended on [date]
HypothesisPost-promo CTR drop - mechanical, expected
Action takenPost-promo CTR drop is mechanical. Plan non-promo creatives for the next sprint. No emergency action.
Insight / learningBrief 'between-promo' creative library for the next gap
NO  ·  No promo change
Question
Did organic CTR also drop in Search Console (suggests SERP layout shift)?
YES  ·  SERP layout change
Action
AI Overviews expanded, ads block change. Brief creative team for refreshed hooks across the board.
How to log this in your Daily Log
ObservationCross-channel CTR -[X]%; GSC organic CTR also -[Y]%
HypothesisSERP layout shift reducing CTR universally
Action takenAI Overviews expanded, ads block change. Brief creative team for refreshed hooks across the board.
Insight / learningSERP changes are external; differentiate with stronger hooks
NO  ·  Paid-only drop
Action
Cross-channel creative fatigue or audience mismatch across the account. Refresh creative across channels; consider re-seeding audiences.
How to log this in your Daily Log
ObservationCross-channel paid CTR -[X]%; organic healthy
HypothesisCross-channel creative fatigue or audience mismatch
Action takenCross-channel creative fatigue or audience mismatch across the account. Refresh creative across channels; consider re-seeding audiences.
Insight / learningCross-channel CTR drops point to the audience layer
ONE channel only
Question
Which channel?
GOOGLE
Question
Did final URL expansion (PMax/DSA) pull a non-commercial page (blog, FAQ) into ads?
YES  ·  URL expansion issue
Action
Exclude the non-commercial URL via PMax exclusions / DSA URL filters. Verify with PMax URL insights report.
How to log this in your Daily Log
ObservationGoogle CTR -[X]%; ads serving non-commercial URL
HypothesisFinal URL expansion serving wrong page hurts CTR
Action takenExclude the non-commercial URL via PMax exclusions / DSA URL filters. Verify with PMax URL insights report.
Insight / learningWeekly PMax URL audit catches this - Tuesday SQR sprint
NO  ·  URL expansion clean
Question
Open sqr. Has the query mix drifted to broader / less-relevant queries?
YES  ·  SQR drift to junk
Action
Add negative keywords today from the Negate quadrant. Tighten match types.
How to log this in your Daily Log
ObservationGoogle CTR -[X]%; SQR shows [N] junk queries
HypothesisMatch-type drift pulled low-intent queries; CTR diluted
Action takenAdd negative keywords today from the Negate quadrant. Tighten match types.
Insight / learningWeekly negative-keyword review prevents drift accumulation
NO  ·  Queries clean
Question
Auction Insights shows new competitor or overlap up?
YES  ·  Competitor entered
Action
Refresh ad copy with stronger USPs. Defensive bid only on top converters.
How to log this in your Daily Log
ObservationGoogle CTR -[X]%; new competitor [name] in auction
HypothesisCompetitor pulled clicks with stronger copy
Action takenRefresh ad copy with stronger USPs. Defensive bid only on top converters.
Insight / learningRefresh ad copy every 60d to stay competitive
NO  ·  No competitor
Question
Ads >60 days old?
YES  ·  Stale ads
Action
Refresh ad copy: 3 new headlines + descriptions per ad group. Pause underperforming RSAs.
How to log this in your Daily Log
ObservationGoogle CTR -[X]%; ads [N] days old
HypothesisStale ad copy decay; QS slipping
Action takenRefresh ad copy: 3 new headlines + descriptions per ad group. Pause underperforming RSAs.
Insight / learning60-day refresh cadence prevents QS decay
NO  ·  Recent ads - ad-LP relevance
Action
Tighten ad-LP messaging. Ensure ad's promo/product matches LP.
How to log this in your Daily Log
ObservationGoogle CTR -[X]%; ads recent; relevance amber
HypothesisAd-LP mismatch hurting QS
Action takenTighten ad-LP messaging. Ensure ad's promo/product matches LP.
Insight / learningAd headline mirrors LP H1 word-for-word
META
Question
Frequency > 2.5 on the affected campaign?
YES  ·  Audience burn
Action
Pause fatigued creatives + brief 3 fresh variants. Pull Hook Rate decay from creatives_action.
How to log this in your Daily Log
ObservationMeta CTR -[X]%; freq = [Y]; Hook Rate -[Z]%
HypothesisAudience burn on stale creatives
Action takenPause fatigued creatives + brief 3 fresh variants. Pull Hook Rate decay from creatives_action.
Insight / learningSet freq>2.5 as alert threshold in daily log
NO  ·  Frequency healthy
Question
Engagement-farming penalty? (Hide/report rate elevated, negative reactions on the creative)
YES  ·  Engagement penalty
Action
Pause the offending creative immediately. Meta silently throttles negative-engagement ads. Brief replacement.
How to log this in your Daily Log
ObservationMeta CTR -[X]%; hide/report rate elevated on [creative]
HypothesisEngagement-farming penalty - silent throttle
Action takenPause the offending creative immediately. Meta silently throttles negative-engagement ads. Brief replacement.
Insight / learningMonitor hide/report rate weekly - silent throttle is dangerous
NO  ·  Engagement healthy
Question
Recent placement mix shift (Feed-shot creative now on Reels)?
YES  ·  Placement mismatch
Action
Adjust placements OR refresh creative for dominant placement (9:16 Reels, 1:1 Feed).
How to log this in your Daily Log
ObservationMeta CTR -[X]%; placement shifted to [placement]
HypothesisPlacement-creative format mismatch
Action takenAdjust placements OR refresh creative for dominant placement (9:16 Reels, 1:1 Feed).
Insight / learningBrief creative by-placement; aspect ratios matter
NO  ·  Placements stable
Question
Audience expansion in last 14 days?
YES  ·  Broader audience
Action
Tighten audience back. Re-seed lookalikes from high-LTV.
How to log this in your Daily Log
ObservationMeta CTR -[X]%; audience expanded on [date]
HypothesisBroader audience pulled lookers
Action takenTighten audience back. Re-seed lookalikes from high-LTV.
Insight / learningSeed lookalikes from high-LTV repeat customers
NO  ·  Stable
Action
Slow creative decay. Refresh creative with 3 new hooks.
How to log this in your Daily Log
ObservationMeta CTR -[X]%; internals healthy
HypothesisSlow creative decay
Action takenSlow creative decay. Refresh creative with 3 new hooks.
Insight / learningRefresh creative every 2 weeks even without obvious fatigue
TIKTOK
Action
TikTok CTR fatigue is fast (3-5 days). Pause stale, brief 3 new hooks. Check Creative Center for trending.
How to log this in your Daily Log
ObservationTikTok CTR -[X]%; creatives [N] days old
HypothesisTikTok creative fatigue
Action takenTikTok CTR fatigue is fast (3-5 days). Pause stale, brief 3 new hooks. Check Creative Center for trending.
Insight / learningWeekly TikTok refresh cadence is non-negotiable
D

CPC spiked

Symptom: cost per click up materially with no proportional CTR gain.

Step 0

Context first. Sale-period auctions (Black Friday, Ramadan, summer travel) lift CPCs broadly. Is the lift in our account or category-wide? Check Auction Insights.

1
Topline confirmation
Question
Did WE bump our own spend by more than 10% recently? (Violating the 10% rule causes CPC to spike mechanically)
YES  ·  Own spend lifted >10%
Action
Revert to 10% stair-step. Then re-evaluate CPC. Self-inflicted CPC spikes look exactly like auction pressure but aren't.
How to log this in your Daily Log
ObservationCPC +[X]%; own spend lifted >10% on [date]
HypothesisSelf-inflicted CPC spike from over-bidding
Action takenRevert to 10% stair-step. Then re-evaluate CPC. Self-inflicted CPC spikes look exactly like auction pressure but aren't.
Insight / learningThe 10% rule exists for a reason - audit weekly that nobody broke it
NO  ·  Own spend stable - real CPC issue
Question
Did CTR also drop materially? (CPC = Spend ÷ Clicks - if clicks fell, CPC mechanically rises)
YES  ·  CTR also droppedStop. Upstream cause - investigate C CTR collapsed first. Fix CTR first; CPC will normalize once CTR recovers.Click to jump ↗
NO  ·  CTR stable - real CPC issue
Question
Did CPC spike on ALL channels or ONE channel?
ALL channels - broad market lift
Action
Sale-period or category-wide pressure (Black Friday, Ramadan, EOSS). Budget for it.
How to log this in your Daily Log
ObservationCross-channel CPC +[X]%; category-wide lift
HypothesisExternal sale-period / category auction pressure
Action takenSale-period or category-wide pressure (Black Friday, Ramadan, EOSS). Budget for it.
Insight / learningBudget for seasonal CPC lifts; document for next year
ONE channel
Question
Which channel?
GOOGLE
Question
Open Auction Insights. New competitor or overlap rate up?
YES  ·  Competitor entered
Question
Branded or non-branded?
YES  ·  Branded
Action
Defensive bid up 10% on brand. Exact-match defensive ads. Escalate to lead if competitor uses our brand in ad copy.
How to log this in your Daily Log
ObservationBranded CPC +[X]%; competitor [name] at [Y]% overlap
HypothesisCompetitor bidding on our brand
Action takenDefensive bid up 10% on brand. Exact-match defensive ads. Escalate to lead if competitor uses our brand in ad copy.
Insight / learningBrand defense is non-negotiable; legal escalation if needed
NO  ·  Non-branded
Action
Defensive bid up 10% on TOP-CONVERTING queries only. Refresh ad copy.
How to log this in your Daily Log
ObservationNon-branded CPC +[X]%; new competitor in auction
HypothesisCompetitor entered non-branded auction
Action takenDefensive bid up 10% on TOP-CONVERTING queries only. Refresh ad copy.
Insight / learningTop-converter-only bid lifts preserve ROAS
NO  ·  No new competitor
Question
Is Lost IS (Rank) rising?
YES  ·  Quality Score / rank slipping
Question
Stale ads (>60 days)?
YES  ·  Stale ads
Action
Refresh ad copy: 3 new headlines/descriptions per ad group.
How to log this in your Daily Log
ObservationGoogle CPC +[X]%; Lost IS Rank up; ads [N] days old
HypothesisStale ads dragging QS, raising CPC
Action takenRefresh ad copy: 3 new headlines/descriptions per ad group.
Insight / learning60-day ad refresh cycle prevents this
NO  ·  Fresh ads, relevance slipping
Action
Tighten ad-LP messaging. Check ad-relevance + LP experience scores.
How to log this in your Daily Log
ObservationGoogle CPC +[X]%; ads recent; relevance amber
HypothesisAd-LP mismatch hurting QS
Action takenTighten ad-LP messaging. Check ad-relevance + LP experience scores.
Insight / learningAd and LP must mirror messaging
NO  ·  Rank OK - SQR drift
Action
Open sqr. Matching to broader queries. Add negatives today.
How to log this in your Daily Log
ObservationGoogle CPC +[X]%; SQR drifted
HypothesisMatch-type drift pulled higher-cost low-intent queries
Action takenOpen sqr. Matching to broader queries. Add negatives today.
Insight / learningWeekly SQR review prevents drift compounding
META
Question
Recent audience narrowing (smaller pool = higher CPC)?
YES  ·  Audience narrowed
Action
Broaden audience back or move to Advantage+ Audience.
How to log this in your Daily Log
ObservationMeta CPC +[X]%; audience narrowed on [date]
HypothesisNarrower audience mechanically costs more
Action takenBroaden audience back or move to Advantage+ Audience.
Insight / learningMeta rewards broad audiences via Advantage+
NO  ·  Audience stable
Question
Ad-relevance diagnostics amber or red?
YES  ·  Creative quality drop
Action
Refresh creatives. Meta prices low-relevance ads higher.
How to log this in your Daily Log
ObservationMeta CPC +[X]%; ad-relevance amber/red
HypothesisMeta penalizing low-relevance ads with higher cost
Action takenRefresh creatives. Meta prices low-relevance ads higher.
Insight / learningMonitor relevance diagnostics weekly
NO  ·  Relevance OK - account warm-up
Action
Likely auction-side. Wait through learning if recent restructure.
How to log this in your Daily Log
ObservationMeta CPC +[X]%; healthy; recent restructure
HypothesisAccount-wide learning running hot
Action takenLikely auction-side. Wait through learning if recent restructure.
Insight / learningRestructures run hot ~2 weeks; plan during slow seasons
TIKTOK
Action
TikTok CPC mostly creative-driven. Refresh creative if Hook Rate decayed. Check audience saturation.
How to log this in your Daily Log
ObservationTikTok CPC +[X]%; creatives aged
HypothesisTikTok creative-driven CPC lift
Action takenTikTok CPC mostly creative-driven. Refresh creative if Hook Rate decayed. Check audience saturation.
Insight / learningTikTok needs fresh hooks weekly
E

CPM spiked

Symptom: cost per thousand impressions up materially (Meta usually).

Step 0

Context first. Major sale periods (Black Friday, Ramadan, EOSS, summer) lift CPMs across categories - largely unavoidable. Account warm-up post-restructure also runs hot for ~2 weeks.

1
Topline confirmation
Question
Are CTR AND CVR stable? (CPM alone is not always a problem if downstream metrics held)
YES  ·  CTR + CVR healthy - CPM lift doesn't matter much
Action
Likely a quality-up-with-cost-up trade. Monitor CAC/ROAS over the next week before acting. CPM is not a goal metric.
How to log this in your Daily Log
ObservationCPM +[X]%; CTR/CVR stable
HypothesisHigher-cost-higher-quality auction; downstream healthy
Action takenLikely a quality-up-with-cost-up trade. Monitor CAC/ROAS over the next week before acting. CPM is not a goal metric.
Insight / learningCPM in isolation isn't a problem - CAC/ROAS is what matters
NO  ·  CTR or CVR dropping with CPM rise
Question
Did impressions also drop alongside CPM rising? (CPM = spend / impressions × 1000)
YES  ·  Impressions also downStop. Upstream cause - investigate B Impressions dropped first. Impressions upstream of CPM. Fix the impression drop and CPM will normalize.Click to jump ↗
NO  ·  Impressions stable - pure CPM lift
Question
Did CPM spike on ALL channels or ONE channel?
ALL channels - broad-market / category lift
Action
Sale-period lifts category CPMs 30-60% YoY. Budget for it; no tactical change.
How to log this in your Daily Log
ObservationCross-channel CPM +[X]%; category benchmarks confirm
HypothesisExternal category-wide auction pressure
Action takenSale-period lifts category CPMs 30-60% YoY. Budget for it; no tactical change.
Insight / learningDocument peak-season CPM % for next year's planning
ONE channel
Question
Which channel?
META (most common)
Question
Audience narrowing, exclusions, placement changes in last 14 days?
YES  ·  Recent narrowing
Action
Broaden audience back or move to Advantage+ Audience.
How to log this in your Daily Log
ObservationMeta CPM +[X]%; audience narrowed on [date]
HypothesisNarrow audience = less inventory at higher cost
Action takenBroaden audience back or move to Advantage+ Audience.
Insight / learningNarrow audiences need 50+ conv/wk to optimize
NO  ·  No recent change
Question
In learning phase?
YES  ·  In learning
Action
Wait 7-14 days. CPMs run hot in learning.
How to log this in your Daily Log
ObservationMeta CPM +[X]%; in learning since [date]
HypothesisLearning-phase volatility
Action takenWait 7-14 days. CPMs run hot in learning.
Insight / learningAllow 14d learning buffer after restructures
NO  ·  Past learning
Question
Ad-relevance diagnostics amber or red?
YES  ·  Creative quality
Action
Refresh creatives. Test 3 new hooks.
How to log this in your Daily Log
ObservationMeta CPM +[X]%; ad-relevance amber/red
HypothesisMeta penalizing low-relevance
Action takenRefresh creatives. Test 3 new hooks.
Insight / learningRefresh creative before relevance goes red
NO  ·  Quality OK - audience saturation
Action
Expand lookalikes or refresh seeds.
How to log this in your Daily Log
ObservationMeta CPM +[X]%; relevance healthy; pool aged
HypothesisAudience saturation
Action takenExpand lookalikes or refresh seeds.
Insight / learningQuarterly seed refresh; expand LAL gradually
GOOGLE / PMax
Question
Did PMax silently shift spend to Display/Video?
YES  ·  PMax mix shifted
Action
Re-balance PMax: tighten signals, add value rules, exclude bad placements.
How to log this in your Daily Log
ObservationPMax CPM +[X]%; channel-mix shifted to Display
HypothesisPMax shifted to cheap Display - quality dropped
Action takenRe-balance PMax: tighten signals, add value rules, exclude bad placements.
Insight / learningAudit PMax channel-split weekly
NO  ·  PMax stable
Action
Display inventory scarcity / asset quality. Refresh assets + tighten audience signals.
How to log this in your Daily Log
ObservationGoogle/PMax CPM +[X]%; assets aged
HypothesisAsset decay or inventory scarcity
Action takenDisplay inventory scarcity / asset quality. Refresh assets + tighten audience signals.
Insight / learningPMax asset refresh quarterly
TIKTOK
Action
TikTok CPMs spike with saturation. Expand interest stacks; refresh creative.
How to log this in your Daily Log
ObservationTikTok CPM +[X]%; audience aged
HypothesisAudience pool saturating
Action takenTikTok CPMs spike with saturation. Expand interest stacks; refresh creative.
Insight / learningTikTok needs monthly interest-stack refreshes

Conversion Playbooks

F - J · Symptoms inside the funnel
F

ROAS crashed

Symptom: revenue-to-spend ratio fell materially with spend flat or up.

Step 0

Context first. Promo ended? Salary cycle position (W1-2 lower AOV)? Same period last month - was ROAS also softer? Ramadan / Eid shift conversion windows.

1
Topline confirmation
Question
Confirm in backend_orders: is backend revenue flat while platform revenue dropped?
YES  ·  Platform-vs-backend gap > 15% suspectedStop. Upstream cause - investigate K Platform vs Backend gap first. Fix tracking first.Click to jump ↗
NO  ·  Backend confirms real drop
Question
Did the platform DOWNGRADE its attribution model (Google data-driven → last-click, Meta lost offline conv batch)?
YES  ·  Attribution model changed
Action
Document new baseline ROAS. Compare apples-to-apples by re-pulling pre-change data with new methodology. Don't change media until the baseline is reset.
How to log this in your Daily Log
ObservationPlatform ROAS -[X]%; attribution model change on [date]
HypothesisAttribution-model downgrade reduces visible ROAS without changing reality
Action takenDocument new baseline ROAS. Compare apples-to-apples by re-pulling pre-change data with new methodology. Don't change media until the baseline is reset.
Insight / learningAttribution changes shift baselines - document expected new normal
NO  ·  Attribution stable
Question
Refund rate spike this week? (Refunds erode revenue without changing other metrics)
YES  ·  Refund spike
Action
Investigate refund cause with client (product quality, shipping damage, expectation mismatch). Don't change media. Track refund-adjusted ROAS going forward.
How to log this in your Daily Log
ObservationROAS -[X]%; refund rate +[Y]%
HypothesisRefund-rate spike eroding revenue post-purchase
Action takenInvestigate refund cause with client (product quality, shipping damage, expectation mismatch). Don't change media. Track refund-adjusted ROAS going forward.
Insight / learningRefund rate is a product/CX metric - media can't fix; escalate to client
NO  ·  Refunds stable
Question
Did SESSIONS hold? (ROAS can fall on the traffic side OR the conversion side)
Sessions FELL alongside ROASStop. Upstream cause - investigate A Sessions dropped first. Sessions are upstream of revenue. Fix sessions first.Click to jump ↗
Sessions FLAT but orders fellStop. Upstream cause - investigate G CPO / CPA spiked first. Conversion-side issue.Click to jump ↗
Sessions + orders held, AOV fell (revenue per order)
Question
Did product mix shift to lower-AOV products?
YES  ·  Mix shift
Question
Top-AOV SKU out of stock?
YES  ·  OOS
Action
Work with client on restocking. Promote next-best high-AOV SKU. Don't pause campaigns - this is supply.
How to log this in your Daily Log
ObservationROAS -[X]%; AOV -[Y]%; top SKU [name] OOS
HypothesisInventory-driven AOV drop
Action takenWork with client on restocking. Promote next-best high-AOV SKU. Don't pause campaigns - this is supply.
Insight / learningStock alerts should ping media team; shift creative quickly
NO  ·  No OOS
Action
Creative or promo featured low-AOV products. Re-feature high-AOV winners.
How to log this in your Daily Log
ObservationROAS -[X]%; AOV -[Y]%; creative shifted
HypothesisCreative/promo dragged AOV
Action takenCreative or promo featured low-AOV products. Re-feature high-AOV winners.
Insight / learningBrief creative on AOV impact - feature premium + bundles
NO  ·  No mix shift
Question
Is PMax CANNIBALIZING brand search? (PMax ROAS up, brand_search ROAS down)
YES  ·  PMax cannibalization confirmed
Action
Add brand negatives to PMax via campaign-level brand exclusions. Force brand traffic back to brand_search where it belongs.
How to log this in your Daily Log
ObservationBlended ROAS -[X]%; brand_search ROAS down; PMax ROAS up
HypothesisPMax stealing branded queries inflates its ROAS, drains brand_search
Action takenAdd brand negatives to PMax via campaign-level brand exclusions. Force brand traffic back to brand_search where it belongs.
Insight / learningAudit PMax search-terms report monthly for brand cannibalization
NO  ·  No cannibalization
Question
Branded ROAS fell on its own?
YES  ·  Branded fell
Question
Branded budget-capped?
YES  ·  Capped
Action
Lift brand cap 10%. Document if intentional rebalance.
How to log this in your Daily Log
ObservationBlended ROAS -[X]%; brand_search Lost IS Budget [Y]%
HypothesisBrand capped, dragging blended down mechanically
Action takenLift brand cap 10%. Document if intentional rebalance.
Insight / learningBrand cap should be sized to brand demand
NO  ·  Not capped
Action
Brand search volume softened. Check Google Trends for brand health.
How to log this in your Daily Log
ObservationBlended ROAS -[X]%; brand spend down without cap
HypothesisBrand search volume softness
Action takenBrand search volume softened. Check Google Trends for brand health.
Insight / learningMonthly trend brand search volume
NO  ·  Prospecting AOV broken
Action
Prospecting creative bringing low-AOV shoppers. Push bundles / premium AOV.
How to log this in your Daily Log
ObservationBlended ROAS -[X]%; brand healthy; prospecting AOV down
HypothesisProspecting creative pulling low-AOV
Action takenProspecting creative bringing low-AOV shoppers. Push bundles / premium AOV.
Insight / learningCreative-product alignment matters for AOV
G

CPO / CPA spiked

Symptom: cost per order rising sharply.

Step 0

Context first. W1-2 of month often shows higher CPA in UAE (less liquidity, less spending). Same period last month - was CPA also higher? End of promo windows always lift CPA.

1
Topline confirmation
Question
Did SESSIONS hold, or did they also fall (mechanically lifting CPA)?
Sessions FELL tooStop. Upstream cause - investigate A Sessions dropped first. Fewer sessions → CPA rises mechanically.Click to jump ↗
Sessions HELD - real conversion-side issue
Question
Walk the funnel. Which stage broke?
VIEW → CART droppedStop. Upstream cause - investigate H ATC rate dropped first. ATC stage broke.Click to jump ↗
CART → CHECKOUT droppedStop. Upstream cause - investigate I Cart-to-Checkout dropped first. Cart-friction issue.Click to jump ↗
CHECKOUT → PURCHASE droppedStop. Upstream cause - investigate J Checkout-to-Purchase dropped first. Payment-or-trust issue.Click to jump ↗
All funnel rates stable
Question
Did CPC rise materially?
YES  ·  CPC upStop. Upstream cause - investigate D CPC spiked first. CPC upstream of CPA.Click to jump ↗
NO  ·  CPC OK
Question
Did CTR drop?
YES  ·  CTR downStop. Upstream cause - investigate C CTR collapsed first. CTR upstream of CPA.Click to jump ↗
NO  ·  Upstream OK - sanity-check the rest
Question
Is the sample size sufficient (>= 3 days stable, >= 50 conversions in the window)?
NO  ·  Sample too small / single-day signal
Action
Wait for 3-day stable signal. Single-day CPA noise is normal. Don't compress bids on noisy days.
How to log this in your Daily Log
ObservationCPO +[X]% single day; CPC/CTR/funnel healthy
HypothesisSingle-day noise
Action takenWait for 3-day stable signal. Single-day CPA noise is normal. Don't compress bids on noisy days.
Insight / learning3-day stable signal rule before reacting to cost metrics
YES  ·  Sample size adequate
Question
Did conversion lag / attribution window change (longer reporting delay)?
YES  ·  Attribution lag
Action
Wait for the attribution window to catch up. Document new attribution lag baseline.
How to log this in your Daily Log
ObservationCPO +[X]%; attribution window changed on [date]
HypothesisReporting lag, not real CPA rise
Action takenWait for the attribution window to catch up. Document new attribution lag baseline.
Insight / learningAttribution-window changes shift baselines; document expected delay
NO  ·  Attribution stable
Question
Did AOV / product mix shift (high-CVR low-AOV SKUs gaining share)?
YES  ·  AOV/mix shift inflated CPO
Action
Re-feature high-AOV products. Reweight PMax / Shopping feed toward premium SKUs.
How to log this in your Daily Log
ObservationCPO +[X]%; AOV -[Y]%; mix shift
HypothesisMix shift to low-AOV products mechanically lifted CPO
Action takenRe-feature high-AOV products. Reweight PMax / Shopping feed toward premium SKUs.
Insight / learningBrief creative + feed on AOV - CPO sensitivity
NO  ·  Mix stable
Question
Refund rate spike this week (refunds inflate effective CPO over time)?
YES  ·  Refund spike
Action
Investigate refund cause with client (quality, shipping, expectations). Don't change media until refund cause is known.
How to log this in your Daily Log
ObservationCPO +[X]%; refund rate +[Y]%
HypothesisRefunds eroding effective CPO
Action takenInvestigate refund cause with client (quality, shipping, expectations). Don't change media until refund cause is known.
Insight / learningRefund-adjusted CPO is the true cost; track it
NO  ·  Refunds stable
Question
Did we recently TIGHTEN the tCPA target (forcing the algo to chase)?
YES  ·  tCPA tightened
Action
Loosen tCPA by 10%. A target that is too tight makes the algo chase impossible CPA → wasted spend.
How to log this in your Daily Log
ObservationCPO +[X]%; tCPA tightened on [date]
HypothesistCPA target unrealistic; algo chasing
Action takenLoosen tCPA by 10%. A target that is too tight makes the algo chase impossible CPA → wasted spend.
Insight / learningLoosening tCPA often LOWERS CPA in practice - counterintuitive but real
NO  ·  tCPA stable
Action
Day-of-week / payday cycle / external. Cross-check vs same-DoW + same-week-last-month before acting.
How to log this in your Daily Log
ObservationCPO +[X]%; all internal signals healthy
HypothesisCyclical / external pattern
Action takenDay-of-week / payday cycle / external. Cross-check vs same-DoW + same-week-last-month before acting.
Insight / learningCalendar always checks before reacting to single-week metrics
H

ATC rate dropped (traffic stable)

Symptom: add-to-cart count is down with sessions flat.

Step 0

Context first. Promo ended? Discount-driven shoppers churned the day the promo expires. Pre-Eid / post-Eid swings are typical.

1
Topline confirmation
Question
Are SESSIONS GENUINELY STABLE while ATCs fell?
NO  ·  Sessions ALSO droppedStop. Upstream cause - investigate A Sessions dropped first. Sessions upstream of ATC.Click to jump ↗
YES  ·  Sessions truly flat, ATCs alone dropped
Question
Are sessions BUT bouncing fast? (Time on Site < 2s, 90%+ bounce - suggests bot or junk traffic)
YES  ·  Bot / junk traffic suspected
Action
Add bot-filtering to GA4 + Meta/Google audience exclusions. Check referral sources for fraud. Don't blame the ATC button - the visitors aren't real shoppers.
How to log this in your Daily Log
ObservationATC -[X]%; sessions stable; Time on Site < 2s; bounce > 90%
HypothesisBot or click-fraud traffic - sessions inflated but no buyers
Action takenAdd bot-filtering to GA4 + Meta/Google audience exclusions. Check referral sources for fraud. Don't blame the ATC button - the visitors aren't real shoppers.
Insight / learningBot traffic inflates sessions, deflates downstream metrics - check engagement quality first
NO  ·  Engaged sessions, real ATC issue
Question
Did ATC drop ACROSS ALL CHANNELS or only ONE?
ALL channels - site-wide ATC drop
Question
Recent site change (PDP, ATC button, shipping calc, theme update) in last 14 days?
YES  ·  Site changed
Action
Revert or fix the change. Test ATC flow on mobile + desktop. Site-wide drops are almost always site changes.
How to log this in your Daily Log
ObservationAll-channel ATC rate -[X]%; sessions stable; site change on [date]
HypothesisSite change broke ATC flow
Action takenRevert or fix the change. Test ATC flow on mobile + desktop. Site-wide drops are almost always site changes.
Insight / learningPre-flight ATC flow testing before any PDP/theme deploy
NO  ·  No site change
Question
Site-wide price increase across top SKUs in last 14 days?
YES  ·  Price rise
Action
Brief client on price-sensitivity finding. Prices climbed - ATC dropped. Test promo-led messaging to soften the impact.
How to log this in your Daily Log
ObservationAll-channel ATC -[X]%; site prices increased on [date]
HypothesisPrice-sensitivity hit ATC rate uniformly
Action takenBrief client on price-sensitivity finding. Prices climbed - ATC dropped. Test promo-led messaging to soften the impact.
Insight / learningPrice changes need ATC-impact forecast before deploy
NO  ·  Prices stable
Question
Did a top-traffic SKU's POPULAR VARIANT or SIZE go out of stock? (SKU in-stock but key size/color OOS)
YES  ·  Variant/size OOS on a top SKU
Action
Work with client on variant restocking. ATC button hides when popular sizes are gone. Reweight feed away from the partial-OOS SKU temporarily.
How to log this in your Daily Log
ObservationAll-channel ATC -[X]%; top SKU [name] has popular size/variant OOS
HypothesisVariant-level OOS hiding ATC on top SKU
Action takenWork with client on variant restocking. ATC button hides when popular sizes are gone. Reweight feed away from the partial-OOS SKU temporarily.
Insight / learningVariant-level inventory matters; SKU-level isn't enough
NO  ·  Inventory healthy at variant level
Action
Page-speed regression or mobile rendering. Audit top PDPs on mobile + desktop. Flag to client as CRO finding.
How to log this in your Daily Log
ObservationAll-channel ATC -[X]%; site + inventory healthy
HypothesisUX regression hurting conversion
Action takenPage-speed regression or mobile rendering. Audit top PDPs on mobile + desktop. Flag to client as CRO finding.
Insight / learningMonthly mobile-UX audit on top PDPs
ONE channel only
Question
Which channel's ATCs fell?
META
Question
Did sessions IN META hold?
NO  ·  Meta sessions also fellStop. Upstream cause - investigate A Sessions dropped first. Sessions upstream of ATC, even at channel level.Click to jump ↗
YES  ·  Meta sessions held - real Meta ATC issue
Question
Recent creative change in last 7-14 days?
YES  ·  Recent creative change
Question
Does the new creative match the LP (same product, promo, USP)?
NO  ·  Creative-LP MISMATCH
Action
Creative-LP mismatch is the #1 ATC killer. Swap creative back to a match, OR update LP.
How to log this in your Daily Log
ObservationMeta ATC -[X]%; new creative doesn't match LP
HypothesisCreative-LP mismatch breaks PDP expectation
Action takenCreative-LP mismatch is the #1 ATC killer. Swap creative back to a match, OR update LP.
Insight / learningEvery creative brief must include LP screenshot for alignment
YES  ·  Creative-LP match OK
Action
Creative attracting wrong audience. Check Hook Rate vs ATC by creative. Brief tighter audience-product fit.
How to log this in your Daily Log
ObservationMeta ATC -[X]%; new creative; LP matches; Hook Rate up but ATC down
HypothesisCreative attracts clickers, not buyers
Action takenCreative attracting wrong audience. Check Hook Rate vs ATC by creative. Brief tighter audience-product fit.
Insight / learningATC-per-creative is the buyer-quality signal
NO  ·  No recent creative change
Question
Audience expansion in last 14 days?
YES  ·  Broader audience
Action
Tighten audience back. Re-seed from high-LTV.
How to log this in your Daily Log
ObservationMeta ATC -[X]%; audience expanded on [date]
HypothesisBroader audience pulled research-intent
Action takenTighten audience back. Re-seed from high-LTV.
Insight / learningLookalike % expansion needs ATC-rate guardrail
NO  ·  Audience stable
Action
Slow creative decay OR specific SKU issue. Pull creative-level ATC rate.
How to log this in your Daily Log
ObservationMeta ATC -[X]%; audience and creative stable
HypothesisSlow creative decay
Action takenSlow creative decay OR specific SKU issue. Pull creative-level ATC rate.
Insight / learningTrack per-creative ATC rate; pause underperformers
GOOGLE
Question
Google Shopping / PMax affected most?
YES  ·  Shopping/PMax dominant
Question
Merchant Center: feed errors / disapprovals / suppressed items?
YES  ·  Feed issues
Action
Fix feed errors in Merchant Center. Resubmit; monitor approval.
How to log this in your Daily Log
ObservationGoogle Shopping/PMax ATC -[X]%; [N] disapprovals
HypothesisFeed disapprovals starving Shopping
Action takenFix feed errors in Merchant Center. Resubmit; monitor approval.
Insight / learningFeed health in daily checklist
NO  ·  Feed clean
Question
Top SKUs OOS (or variants/sizes)?
YES  ·  OOS / variant OOS
Action
Auto-suppression. Restock + reweight PMax product groups.
How to log this in your Daily Log
ObservationGoogle Shopping ATC -[X]%; top SKU [name] variant OOS
HypothesisVariant-level OOS suppression
Action takenAuto-suppression. Restock + reweight PMax product groups.
Insight / learningPMax groups need OOS-fallback weighting
NO  ·  Price competitiveness check
Action
Check Google price comparison. If our prices climbed above competitors, ATC drops.
How to log this in your Daily Log
ObservationGoogle Shopping ATC -[X]%; competitive audit needed
HypothesisPrice drift above market
Action takenCheck Google price comparison. If our prices climbed above competitors, ATC drops.
Insight / learningMonthly competitive pricing audit on top SKUs
NO  ·  Search-side ATC drop
Action
SQR drift to research-intent queries. Add negatives from Negate quadrant.
How to log this in your Daily Log
ObservationGoogle Search ATC -[X]%; SQR shows research queries
HypothesisMatch-type drift to low-intent
Action takenSQR drift to research-intent queries. Add negatives from Negate quadrant.
Insight / learningWeekly SQR cleanup
TIKTOK
Action
TikTok ATC drops usually from creative-LP mismatch. Audit creative-to-LP flow.
How to log this in your Daily Log
ObservationTikTok ATC -[X]%; sessions stable
HypothesisCreative-LP mismatch or audience misalignment
Action takenTikTok ATC drops usually from creative-LP mismatch. Audit creative-to-LP flow.
Insight / learningTikTok creative needs strict LP-alignment
I

Cart → Checkout dropped

Symptom: people are adding to cart but not initiating checkout.

Step 0

Context first. Post-promo cliff? Did a CRO test launch this week? Sometimes A/B tests break the funnel.

1
Topline confirmation
Question
Is ATC rate ALSO down?
YES  ·  ATC also droppedStop. Upstream cause - investigate H ATC rate dropped first. ATC upstream of Cart→Checkout.Click to jump ↗
NO  ·  Carts being created normally - real friction in this step
Question
Is the drop site-wide or campaign-specific? (Note: these friction points often COMPOUND - check each)
Site-wide - check each potential friction (they stack)
Question
Which friction(s) break? (check all that apply by self-testing)
BNPL / Apple Pay / Tabby / Tamara / wallet integration broken
Action
Audit third-party payment integrations immediately. In MENA, a missing or broken Tabby/Tamara/Apple Pay button can drop CVR 20-30% instantly. Test all wallets end-to-end.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; site-wide; BNPL or wallet button missing/broken
HypothesisThird-party payment integration broke at cart
Action takenAudit third-party payment integrations immediately. In MENA, a missing or broken Tabby/Tamara/Apple Pay button can drop CVR 20-30% instantly. Test all wallets end-to-end.
Insight / learningMonthly QA on all payment integrations (Tabby, Tamara, Apple Pay, Google Pay, COD)
Shipping cost shock (calculated at cart, surprises user)
Action
Communicate shipping in ad copy + LP. Negotiate flat-rate shipping.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; users abandoning at shipping calc
HypothesisShipping cost shock
Action takenCommunicate shipping in ad copy + LP. Negotiate flat-rate shipping.
Insight / learningPre-communicate shipping in funnel
Promo code field rejecting the ad's promised code
Action
Flag to client immediately. Validate code on production cart.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; promo code [code] failing
HypothesisPromo code mismatch ad↔cart
Action takenFlag to client immediately. Validate code on production cart.
Insight / learningQA every new promo end-to-end before paid push
Account creation required before checkout
Action
Enable guest checkout. 10-20% CVR killer.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; account creation required
HypothesisAccount-creation friction
Action takenEnable guest checkout. 10-20% CVR killer.
Insight / learningGuest checkout should be default
Cross-sell pop-up confusing users
Action
Disable or simplify pop-up. A/B test removal for 1 week.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; cross-sell pop-up added
HypothesisPop-up modal breaking checkout flow
Action takenDisable or simplify pop-up. A/B test removal for 1 week.
Insight / learningCart UX changes need A/B testing
Mobile UX bug in cart drawer
Action
Audit iOS + Android. Common after theme updates. Revert recent theme.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; mobile-only; recent theme update
HypothesisMobile cart-drawer bug
Action takenAudit iOS + Android. Common after theme updates. Revert recent theme.
Insight / learningMobile-first QA on every theme deploy
Channel-specific (one channel's traffic hits a friction the others don't)
Question
Which channel?
META (mobile-heavy)
Action
Likely mobile-specific friction. Test cart on iOS + Android.
How to log this in your Daily Log
ObservationMeta Cart→Checkout -[X]%; site-wide unaffected
HypothesisMobile-specific friction
Action takenLikely mobile-specific friction. Test cart on iOS + Android.
Insight / learningChannel drops = channel-specific UX issues
GOOGLE (more desktop, more intent)
Action
Check ad's promo language matches cart's accepted promos.
How to log this in your Daily Log
ObservationGoogle Cart→Checkout -[X]%; site-wide unaffected
HypothesisGoogle-specific ad-cart promo mismatch
Action takenCheck ad's promo language matches cart's accepted promos.
Insight / learningChannel-specific promo testing prevents single-channel friction
Action
Across all branches: This is almost always a CRO finding, not a media optimization. Flag to client immediately. Do NOT pause campaigns. Test cart end-to-end within one hour.
How to log this in your Daily Log
ObservationCart→Checkout -[X]%; rapid client comms needed
HypothesisCRO/site friction, not media
Action takenAcross all branches: This is almost always a CRO finding, not a media optimization. Flag to client immediately. Do NOT pause campaigns. Test cart end-to-end within one hour.
Insight / learningCart-stage drops are CRO findings; media can't fix them
J

Checkout → Purchase dropped

Symptom: people are starting checkout but not completing.

Step 0

Context first. Payment gateway maintenance windows? Holiday-related shipping date concerns?

1
Topline confirmation
Question
Is Cart→Checkout rate ALSO down?
YES  ·  Cart→Checkout also droppedStop. Upstream cause - investigate I Cart-to-Checkout dropped first. Cart→Checkout upstream of this step.Click to jump ↗
NO  ·  Checkouts started normally - real friction in the final step
Question
Test checkout end-to-end with a real card. Which step breaks?
Payment gateway rejecting cards / errors
Action
Flag to client immediately. Check gateway status. Try alternate gateway.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; gateway errors observed
HypothesisPayment gateway issue
Action takenFlag to client immediately. Check gateway status. Try alternate gateway.
Insight / learningGateway status in daily health check; alt-gateway ready
BNPL (Tabby / Tamara) or Apple Pay / Google Pay button missing/broken
Action
Audit BNPL + wallet integrations immediately. In MENA, missing Tabby/Tamara at checkout drops CVR 20-30%. Test the complete BNPL flow including approval/decline screens.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; BNPL/wallet broken at checkout
HypothesisMENA payment integration failure
Action takenAudit BNPL + wallet integrations immediately. In MENA, missing Tabby/Tamara at checkout drops CVR 20-30%. Test the complete BNPL flow including approval/decline screens.
Insight / learningMENA-specific payment methods are critical; weekly QA
COD (Cash on Delivery) toggle missing or service area restriction
Action
Verify COD availability + service area. COD is 30-50% of MENA e-commerce; if it's gone or restricted, checkout completion collapses.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; COD missing or area-restricted
HypothesisCOD availability issue
Action takenVerify COD availability + service area. COD is 30-50% of MENA e-commerce; if it's gone or restricted, checkout completion collapses.
Insight / learningCOD is the dominant payment in MENA; monitor it explicitly
Shipping address rejected for restricted / unserved areas
Action
Check shipping coverage map. Some addresses in UAE/KSA beyond major cities get rejected silently. Brief client to expand coverage or show pre-checkout warning.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; shipping address rejection rate +[Y]%
HypothesisShipping coverage gap rejecting valid orders
Action takenCheck shipping coverage map. Some addresses in UAE/KSA beyond major cities get rejected silently. Brief client to expand coverage or show pre-checkout warning.
Insight / learningShow shipping-coverage check on LP, not at checkout
Session timeout (user added to cart, switched apps, returned to expired session)
Action
Extend session timeout or add 'restore cart' feature. Common on mobile when users switch apps to check email/Stripe SMS.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; mobile session timeouts elevated
HypothesisSession timeout losing customers who switched apps
Action takenExtend session timeout or add 'restore cart' feature. Common on mobile when users switch apps to check email/Stripe SMS.
Insight / learningMobile users multi-task; session timeout needs to be >15 min on mobile
Currency conversion confusion (price flicker)
Action
Lock currency display. Show conversion rate clearly.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; currency display flicker
HypothesisCurrency-display confusion
Action takenLock currency display. Show conversion rate clearly.
Insight / learningLock currency from LP through checkout
Surprise fees / taxes at final step
Action
Show total cost earlier. Build trust with 'taxes included' on LP.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; fees added at final step
HypothesisFee surprise eroding trust
Action takenShow total cost earlier. Build trust with 'taxes included' on LP.
Insight / learningTotal-cost transparency from LP onward
Shipping date too far out (2-3 weeks)
Action
Negotiate faster shipping. Show ETA early.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; long shipping ETA
HypothesisLong shipping ETA killing intent
Action takenNegotiate faster shipping. Show ETA early.
Insight / learningShow shipping ETA early
Trust signal missing (no security badge / money-back guarantee)
Action
Add security badges + return policy near payment.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; trust signals missing
HypothesisMissing trust signals at payment
Action takenAdd security badges + return policy near payment.
Insight / learningTrust signals are checkout hygiene
Phone / address validation broken (MENA formats)
Action
Test +971 / +966 / +965 / +973 / +974 / +968 phone formats. Address validation must accept local formats.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; address/phone validation failing on MENA formats
HypothesisValidation library not configured for MENA
Action takenTest +971 / +966 / +965 / +973 / +974 / +968 phone formats. Address validation must accept local formats.
Insight / learningAddress validation locale-testing in every theme deploy
Action
Across all branches: Payment-and-trust issues need immediate client escalation. Half the time you find it in 5 minutes of self-testing.
How to log this in your Daily Log
ObservationCheckout→Purchase -[X]%; client escalation recommended
HypothesisPayment / trust / validation
Action takenAcross all branches: Payment-and-trust issues need immediate client escalation. Half the time you find it in 5 minutes of self-testing.
Insight / learningSelf-test checkout flow weekly

Tracking Playbook

K · When the two truths diverge
K

Platform purchases ≠ Backend orders

Symptom: Meta says 100 orders. Shopify backend says 78.

Step 0

Context first. Was a tag updated? Consent banner change? Server-side events deployed? Browser update (iOS / Safari ATT changes shift gap baselines)? Same window last month - what was the gap then?

1
Topline confirmation
Question
Did the platform's ATTRIBUTION MODEL recently change? (Meta moved off offline conv, Google data-driven → last-click, etc.)
YES  ·  Attribution model change
Action
This is a baseline shift, not a bug. Document new baseline gap. Compare apples-to-apples by re-pulling pre-change data with the new methodology. Don't change media until the new baseline is established.
How to log this in your Daily Log
ObservationPlatform-backend gap shifted on [date]; attribution model change documented
HypothesisAttribution-model baseline shift, not a tracking bug
Action takenThis is a baseline shift, not a bug. Document new baseline gap. Compare apples-to-apples by re-pulling pre-change data with the new methodology. Don't change media until the new baseline is established.
Insight / learningAttribution changes shift baselines; document expected new normal so future weeks compare fairly
NO  ·  Attribution model stable
Question
Is the gap a sustained baseline OR a sudden shift?
Sustained baseline (>3 months) - this is normal noise, not a bug
Action
Document the baseline. For MENA Meta, 10-25% under-reporting is normal post-ATT. Note baseline in narrative; do not investigate every week.
How to log this in your Daily Log
ObservationPlatform-backend gap baseline = [X]%; stable for 3+ months
HypothesisNormal post-ATT baseline gap
Action takenDocument the baseline. For MENA Meta, 10-25% under-reporting is normal post-ATT. Note baseline in narrative; do not investigate every week.
Insight / learningDon't chase baseline gaps - chase deviations from baseline
Sudden shift (last 1-4 weeks)
Question
What's the gap direction?
Platform OVER-reports (Platform > Backend)
Question
Most likely cause?
Pixel firing twice (duplicate events)
Action
Check page source for double install. Deduplicate in Events Manager / GTM. Validate with Pixel Helper / Tag Assistant.
How to log this in your Daily Log
ObservationPlatform > backend by [X]%; pixel duplicate suspected
HypothesisDuplicate pixel install inflating events
Action takenCheck page source for double install. Deduplicate in Events Manager / GTM. Validate with Pixel Helper / Tag Assistant.
Insight / learningPixel Helper / Tag Assistant in monthly QA
Refunds not subtracted
Action
Configure refund pass-back via CAPI / offline conversions.
How to log this in your Daily Log
ObservationPlatform > backend by [X]%; refunds not flowing back
HypothesisRefunds not subtracted from platform events
Action takenConfigure refund pass-back via CAPI / offline conversions.
Insight / learningRefund pass-back is standard CAPI / offline conv config
Test orders counted as real
Action
Exclude internal IPs / staff emails.
How to log this in your Daily Log
ObservationPlatform > backend by [X]%; test orders polluting
HypothesisInternal/test orders polluting platform events
Action takenExclude internal IPs / staff emails.
Insight / learningStandard IP/email exclusions from day one
View-through window too generous
Action
Tighten view-through to 1d or disable for prospecting.
How to log this in your Daily Log
ObservationPlatform > backend by [X]%; view-through 7d+
HypothesisOver-generous view-through attribution
Action takenTighten view-through to 1d or disable for prospecting.
Insight / learning1d-click + 1d-view is conservative standard for prospecting
Platform UNDER-reports (Platform < Backend)
Question
Most likely cause?
Event Match Quality (EMQ) score dropped below 6.0
Action
Improve EMQ: add hashed email, phone, FBP/FBC parameters via CAPI. Target EMQ ≥ 7.0. Audit the parameters sent on each event.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; EMQ score below 6.0
HypothesisLow Event Match Quality causes Meta to under-attribute
Action takenImprove EMQ: add hashed email, phone, FBP/FBC parameters via CAPI. Target EMQ ≥ 7.0. Audit the parameters sent on each event.
Insight / learningEMQ ≥ 7.0 is the new MENA standard; audit monthly
UTM parameters being stripped (iOS Safari / browser updates)
Action
Verify UTM persistence via the cart and checkout. iOS Safari strips referrers and UTMs; ensure server-side or first-party storage captures them.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; GA4 'Direct' share spiked recently
HypothesisUTM stripping causing paid traffic to misattribute as Direct
Action takenVerify UTM persistence via the cart and checkout. iOS Safari strips referrers and UTMs; ensure server-side or first-party storage captures them.
Insight / learningUTM persistence via first-party storage is required for iOS
iOS 14.5+ ATT signal loss (general)
Action
Deploy CAPI / Enhanced Conversions. Expected baseline gap in MENA: 10-25%.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; iOS ATT signal loss
HypothesisApple ATT framework limiting attribution
Action takenDeploy CAPI / Enhanced Conversions. Expected baseline gap in MENA: 10-25%.
Insight / learningCAPI/Enhanced Conv mandatory; track match rate monthly
Consent banner blocking pixel
Action
Verify Consent Mode v2 setup. Test consent accepted vs declined. Add server-side tracking.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; consent banner change
HypothesisConsent banner blocking pixel fires
Action takenVerify Consent Mode v2 setup. Test consent accepted vs declined. Add server-side tracking.
Insight / learningConsent Mode v2 setup required; test both states
Server-side events (CAPI) not configured
Action
Deploy CAPI / Server-side GTM. Target match rate >80%.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; no CAPI deployed
HypothesisNo server-side event mirroring
Action takenDeploy CAPI / Server-side GTM. Target match rate >80%.
Insight / learningCAPI is hygiene on every new account
Pixel installed below the fold / loaded late
Action
Move pixel to head; async loading.
How to log this in your Daily Log
ObservationPlatform < backend by [X]%; pixel below fold or late
HypothesisLate-loading pixel missing quick-bounce events
Action takenMove pixel to head; async loading.
Insight / learningPixel placement in head + async is standard
Action
Across all branches: Don't change media on numbers you don't trust. Fix tracking, validate gap returns to baseline, then resume optimization. Audit all suspected causes - they often compound.
How to log this in your Daily Log
ObservationTracking gap baseline established / fixed
HypothesisTracking infrastructure issue
Action takenAcross all branches: Don't change media on numbers you don't trust. Fix tracking, validate gap returns to baseline, then resume optimization. Audit all suspected causes - they often compound.
Insight / learningQuarterly baseline audit; expect 10-25% Meta gap in MENA

Customer Playbooks

L - O · The retention layer
L

New customer count dropped

Symptom: New Customers (this week) in Customers Analysis is down WoW.

Step 0

Context first. Payday position - W1-2 in UAE always shows fewer new customers (less spending appetite). Same window last month - was new-cust also low? Promo end?

1
Topline confirmation
Question
Did the DEFINITION of 'new customer' or the attribution source change recently? (Report filter, customer rule, backend logic)
YES  ·  Definition changed
Action
Re-establish baseline with new definition. Compare apples-to-apples. Don't change media until the metric is comparable.
How to log this in your Daily Log
ObservationNew customer count -[X]%; definition/filter change on [date]
HypothesisDefinition shift, not real business drop
Action takenRe-establish baseline with new definition. Compare apples-to-apples. Don't change media until the metric is comparable.
Insight / learningAlways confirm metric definition stability before reacting
NO  ·  Definition stable
Question
Is the BACKEND new-customer count confirmed (not just GA4)?
NO  ·  Backend confirms? Not yet checkedStop. Upstream cause - investigate K Platform vs Backend gap first. New-customer counts are tracking-sensitive. Confirm in backend before diagnosing media.Click to jump ↗
YES  ·  Backend confirms real drop
Question
Did SHARE of new customers fall (vs total orders), or did ABSOLUTE new-customer count fall?
ABSOLUTE count fell but share is stable - total orders also fellStop. Upstream cause - investigate A Sessions dropped first. If total orders are mechanically down (sessions etc.), new customers fall in proportion. Fix the volume issue upstream.Click to jump ↗
SHARE of new customers fell - prospecting quality issue
Question
Did the drop come from ALL prospecting campaigns or ONE channel's prospecting?
ALL prospecting - cross-channel quality issue
Question
Same prospecting creative live across channels for 4+ weeks?
YES  ·  Stale prospecting creative everywhere
Action
Brief 3 fresh prospecting creatives. Don't run the same creative across Meta+TikTok+Google >3 weeks.
How to log this in your Daily Log
ObservationNew customer SHARE -[X]%; same creative >4w across channels
HypothesisCross-channel creative fatigue producing lower-quality acquisitions
Action takenBrief 3 fresh prospecting creatives. Don't run the same creative across Meta+TikTok+Google >3 weeks.
Insight / learningStagger creative refresh across channels
NO  ·  Fresh creative, cross-channel quality drop
Action
Lookalike seed list outdated. Re-seed from latest high-LTV cohort.
How to log this in your Daily Log
ObservationNew customer SHARE -[X]%; creative fresh; cross-channel drop
HypothesisLookalike seed staleness
Action takenLookalike seed list outdated. Re-seed from latest high-LTV cohort.
Insight / learningRe-seed lookalikes quarterly from rolling high-LTV
ONE channel's prospecting
Question
Which channel?
META prospecting
Question
Did Meta prospecting spend hold or drop?
YES  ·  Spend held - quality issue
Question
Recent creative refresh (was it promo-led)?
YES  ·  Promo-led creative
Action
Swap to value-led creative for prospecting. Reserve promos for remarketing only.
How to log this in your Daily Log
ObservationNew cust from Meta -[X]%; promo-led creative
HypothesisPromo creative attracts One-Timers
Action takenSwap to value-led creative for prospecting. Reserve promos for remarketing only.
Insight / learningPromos for remarketing only; prospecting = value-led
NO  ·  Value-led but low new-cust
Action
Persona mismatch. Brief creatives matching top-LTV segments.
How to log this in your Daily Log
ObservationNew cust from Meta -[X]%; value-led but wrong persona
HypothesisCreative-persona mismatch
Action takenPersona mismatch. Brief creatives matching top-LTV segments.
Insight / learningBrief from top-LTV-segment personas
NO  ·  Spend dropped - volume issue
Question
Did we shift budget prospecting → remarketing?
YES  ·  Budget shifted
Action
Reallocate BACK to prospecting at 10% stair-step. Weak new-cust = weak cohort 30/60/90d later.
How to log this in your Daily Log
ObservationNew cust -[X]%; Meta prospecting -[Y]%; budget shifted [date]
HypothesisProspecting starvation
Action takenReallocate BACK to prospecting at 10% stair-step. Weak new-cust = weak cohort 30/60/90d later.
Insight / learningProtect prospecting/remarketing ratio
NO  ·  tCPA throttle
Action
Loosen tCPA by 10%; or lift daily caps.
How to log this in your Daily Log
ObservationNew cust from Meta -[X]%; prospecting down without shift
HypothesistCPA target unrealistic
Action takenLoosen tCPA by 10%; or lift daily caps.
Insight / learningtCPA throttle is silent; monitor weekly
GOOGLE prospecting
Question
Spend hold or drop?
YES  ·  Spend held - SQR drift
Action
SQR drifted to research-intent. Add negatives.
How to log this in your Daily Log
ObservationNew cust from Google -[X]%; SQR research-intent
HypothesisMatch-type drift pulling research traffic
Action takenSQR drifted to research-intent. Add negatives.
Insight / learningWeekly negative-keyword sprint
NO  ·  Spend dropped
Question
Lost IS Budget high?
YES  ·  Capped
Action
Lift cap 10%.
How to log this in your Daily Log
ObservationNew cust from Google -[X]%; Lost IS Budget [Y]%
HypothesisProspecting budget cap
Action takenLift cap 10%.
Insight / learningTrack Lost IS Budget on prospecting
NO  ·  Not capped - tCPA throttle
Action
Loosen tCPA by 10%.
How to log this in your Daily Log
ObservationNew cust from Google -[X]%; prospecting under-spending
HypothesistCPA target unrealistic
Action takenLoosen tCPA by 10%.
Insight / learningtCPA review quarterly
TIKTOK prospecting
Action
TikTok needs constant creative refresh. Brief 3 new hooks weekly.
How to log this in your Daily Log
ObservationNew cust from TikTok -[X]%
HypothesisTikTok creative fatigue
Action takenTikTok needs constant creative refresh. Brief 3 new hooks weekly.
Insight / learningTikTok weekly refresh mandatory
M

Repeat purchase rate dropped

Symptom: Repeat Purchase Rate in Customers Analysis fell WoW.

Step 0

Context first. Cohort age matters - a young recent cohort dragging M1 lower is normal noise. Compare cohort-over-cohort, not WoW only. Post-Eid / post-promo windows always show repeat softness.

1
Topline confirmation
Question
Did the DEFINITION of repeat purchase change? (Window length, segment rule, attribution source)
YES  ·  Definition changed
Action
Re-establish baseline with new definition. Don't react to a definition-shift artifact.
How to log this in your Daily Log
ObservationRepeat rate -[X]%; definition/window change on [date]
HypothesisDefinition shift, not real behavior change
Action takenRe-establish baseline with new definition. Don't react to a definition-shift artifact.
Insight / learningConfirm metric definition stability before reacting
NO  ·  Definition stable
Question
Does the product naturally repurchase in <30, 30-60, 60-90, or >90 days? (Repeat-rate WoW only makes sense relative to replenishment cycle)
Product replenishes <30d - WoW comparison valid
Question
Are we comparing same-age cohorts?
NO  ·  Different ages
Action
Re-pull M1 of cohort-this-month vs M1 of cohort-last-month.
How to log this in your Daily Log
ObservationRepeat rate metric comparing different cohort ages
HypothesisCohort age mismatch in comparison
Action takenRe-pull M1 of cohort-this-month vs M1 of cohort-last-month.
Insight / learningCohort-over-cohort same elapsed month
YES  ·  Same age comparison
Question
Is M1 retention falling cohort-over-cohort?
NO  ·  Single-week noise
Action
WoW retention is volatile. Confirm with 4-week rolling cohort.
How to log this in your Daily Log
ObservationRepeat rate -[X]% single week; cohort stable on 4w roll
HypothesisSingle-week noise
Action takenWoW retention is volatile. Confirm with 4-week rolling cohort.
Insight / learning4-week rolling smooths retention
YES  ·  Real cohort-over-cohort decline
Question
Which acquisition channel did the underperforming cohorts come from?
META-acquired cohorts retain worse
Question
Recent Meta prospecting (promo-heavy)?
YES  ·  Promo-led acquisition
Action
Swap to value-led prospecting. Promos for remarketing only.
How to log this in your Daily Log
ObservationMeta cohort M1 -[X]%; promo-led creative
HypothesisPromo acquisition pulled One-Timers
Action takenSwap to value-led prospecting. Promos for remarketing only.
Insight / learningTrack retention by acquisition creative
NO  ·  Value-led but bad cohort
Question
Audience expansion 30 days?
YES  ·  Broader audience
Action
Re-tighten; re-seed from repeat purchasers only.
How to log this in your Daily Log
ObservationMeta cohort M1 -[X]%; audience expanded
HypothesisBroader audience = lower-fit
Action takenRe-tighten; re-seed from repeat purchasers only.
Insight / learningSeed from repeat purchasers, not all customers
NO  ·  Stable - product/experience
Action
Post-purchase experience issue. Talk to client about product satisfaction.
How to log this in your Daily Log
ObservationMeta cohort M1 -[X]%; audience+creative stable
HypothesisProduct/experience dragging retention
Action takenPost-purchase experience issue. Talk to client about product satisfaction.
Insight / learningRetention is product; media can't fix it
GOOGLE-acquired cohorts retain worse
Question
SQR drift to research-intent?
YES  ·  SQR drift
Action
Add negatives; tighten to commercial-intent.
How to log this in your Daily Log
ObservationGoogle cohort M1 -[X]%; research-intent SQR
HypothesisResearch-intent acquisitions don't retain
Action takenAdd negatives; tighten to commercial-intent.
Insight / learningResearch traffic = acquisition pollution
NO  ·  Clean queries
Action
PMax/Shopping shifted to one-time SKUs. Reweight feed.
How to log this in your Daily Log
ObservationGoogle cohort M1 -[X]%; PMax pushing one-time SKUs
HypothesisFeed weighting on non-repeat SKUs
Action takenPMax/Shopping shifted to one-time SKUs. Reweight feed.
Insight / learningFeed should favor repeat-friendly SKUs
ALL channels' cohorts retain worse - product/experience
Action
Talk to client. Product / shipping / PDP-product mismatch.
How to log this in your Daily Log
ObservationCross-channel cohort M1 -[X]%
HypothesisCross-channel product/experience issue
Action takenTalk to client. Product / shipping / PDP-product mismatch.
Insight / learningCross-channel retention drop = product, escalate fast
Product replenishes 30-60d - WoW too noisy, M2 comparison only
Action
WoW repeat rate is not a meaningful metric for 30-60d replenishment products. Use M2 cohort retention as the signal.
How to log this in your Daily Log
ObservationProduct cycle 30-60d; WoW repeat metric is noise
HypothesisReplenishment cycle longer than measurement window
Action takenWoW repeat rate is not a meaningful metric for 30-60d replenishment products. Use M2 cohort retention as the signal.
Insight / learningMeasurement cadence must match product replenishment cycle
Product replenishes >60d - WoW meaningless
Action
Repeat rate WoW for slow-replenishment products is statistical noise. Build a quarterly retention dashboard instead.
How to log this in your Daily Log
ObservationProduct cycle >60d; WoW retention metric not actionable
HypothesisReplenishment cycle too long for WoW
Action takenRepeat rate WoW for slow-replenishment products is statistical noise. Build a quarterly retention dashboard instead.
Insight / learningSlow-replenishment products need quarterly cohort dashboards
N

CAC creep

Symptom: CAC trending up over several weeks without a clear cause.

Step 0

Context first. Compare to LTV trend over the same window - rising CAC is fine if LTV rises proportionally. Sale-period CPM lift is a known CAC driver. Year-over-year same window.

1
Topline confirmation
Question
Are we INTENTIONALLY scaling aggressively this period (deliberately bidding up for share)?
YES  ·  Intentional aggressive scaling
Action
Confirm with client that the CAC lift is within acceptable bounds for the scale-test. Document expected CAC ceiling. Don't 'fix' something that's working as designed.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; deliberate scale-up phase
HypothesisCAC creep is intentional, part of growth scale-test
Action takenConfirm with client that the CAC lift is within acceptable bounds for the scale-test. Document expected CAC ceiling. Don't 'fix' something that's working as designed.
Insight / learningScale-tests need pre-agreed CAC ceiling so the team doesn't 'fix' them
NO  ·  Not intentional - real CAC creep
Question
Did the brand run a major promo last month (50%+ off)? (Post-promo hangover is real)
YES  ·  Promotional hangover
Action
Don't force scale. Market is 'digesting' inventory from the promo; intent recovers when next promo approaches. Focus on brand / community / retention while CAC is high.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; major promo ended on [date]
HypothesisPost-promo hangover - audience waiting for next promo
Action takenDon't force scale. Market is 'digesting' inventory from the promo; intent recovers when next promo approaches. Focus on brand / community / retention while CAC is high.
Insight / learningPromo planning needs post-promo recovery window built in
NO  ·  No promo hangover
Question
Is LTV (and MARGIN) rising proportionally?
YES  ·  LTV + margin rising too - acceptable
Action
Quality-vs-cost trade-off. Acceptable if LTV:CAC + margin hold above targets. Continue; monitor.
How to log this in your Daily Log
ObservationCAC +[X]%; LTV +[Y]%; margin holding
HypothesisLTV:CAC + margin in target - trade-off OK
Action takenQuality-vs-cost trade-off. Acceptable if LTV:CAC + margin hold above targets. Continue; monitor.
Insight / learningTrack LTV:CAC and gross margin together
NO  ·  LTV flat or falling, or margin compressing
Question
Did we shift budget prospecting → remarketing in last 4 weeks?
YES  ·  Budget shifted
Action
#1 multi-week CAC driver. Reallocate BACK to prospecting at 10% weekly stair-step.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; prospecting share -[Y]%
HypothesisProspecting starvation collapsing funnel
Action taken#1 multi-week CAC driver. Reallocate BACK to prospecting at 10% weekly stair-step.
Insight / learningProspecting/remarketing ratio is foundational
NO  ·  No deliberate shift
Question
Which lever is most degraded? (check sequence: cheapest to fix first)
Creative fatigue (not refreshed 4+ weeks)
Action
Refresh every 2-3 weeks. Brief 3 fresh variants now.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; prospecting creative aged [N]d
HypothesisProspecting creative fatigue
Action takenRefresh every 2-3 weeks. Brief 3 fresh variants now.
Insight / learningCreative refresh cadence is a CAC lever
Audience saturation (lookalikes burnt)
Action
Re-seed lookalikes from recent high-LTV. Expand LAL 3% → 5%.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; lookalike pools aged
HypothesisLookalike pool saturation
Action takenRe-seed lookalikes from recent high-LTV. Expand LAL 3% → 5%.
Insight / learningLookalike refresh quarterly
Auction Insights: broad-market CPM lift
Action
Diversify channels; shift to underweighted channels.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; category-wide lift
HypothesisExternal CPM pressure
Action takenDiversify channels; shift to underweighted channels.
Insight / learningChannel mix hedges single-channel lifts
Bid strategy: tCPA unrealistic
Action
Loosen tCPA target by 10%.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; tCPA stale
HypothesistCPA target stale vs auction
Action takenLoosen tCPA target by 10%.
Insight / learningtCPA monthly review vs benchmarks
SQR / placement drift to cheaper-but-worse sources
Action
Add negatives / exclude placements.
How to log this in your Daily Log
ObservationCAC +[X]% over 4w; SQR/placement quality dropped
HypothesisSourcing drift
Action takenAdd negatives / exclude placements.
Insight / learningQuality > volume on prospecting
Action
Final rule: If LTV/margin flat-or-falling AND CAC rising → slow scale, fix the funnel first. Don't raise budget on a degrading funnel.
How to log this in your Daily Log
ObservationCAC trajectory vs LTV/margin context
HypothesisFunnel degradation - more spend would compound the problem
Action takenFinal rule: If LTV/margin flat-or-falling AND CAC rising → slow scale, fix the funnel first. Don't raise budget on a degrading funnel.
Insight / learningScale is earned through funnel health
O

At-Risk VIP segment growing

Symptom: count of At-Risk VIP customers in segments is climbing.

Step 0

Context first. Post-Eid / post-summer churn is normal. Same window last year (YoY) - was the segment also growing? Competitor major promo this week may have pulled them.

1
Topline confirmation
"At-Risk VIP" definition: a customer in the top-LTV decile who has not purchased in the last 60-90 days (the exact window depends on the product replenishment cycle - use 60d for fast-cycle, 90d for slower). Confirm the definition matches your segments tab rule before reading the trend.
Question
Did the DEFINITION of 'At-Risk VIP' change recently? (Recency window, LTV decile, segment rule)
YES  ·  Definition changed
Action
Segment count can grow just because the rule changed. Confirm by recomputing the old definition's count and comparing.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; segment rule changed on [date]
HypothesisDefinition shift, not real customer behavior change
Action takenSegment count can grow just because the rule changed. Confirm by recomputing the old definition's count and comparing.
Insight / learningAlways confirm segment definitions are stable before reacting
NO  ·  Definition stable
Question
Confirmed material growth (>15% WoW) in At-Risk VIP segment count?
NO  ·  Within normal noise
Action
Single-week noise. Track over 4 weeks to confirm trend.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]% WoW; 4w noise band
HypothesisSingle-week noise
Action takenSingle-week noise. Track over 4 weeks to confirm trend.
Insight / learningSegment WoW noisy; need 4w rolling
YES  ·  Real trend - investigate where the leak is
Question
Where is the leak? (Check in order, cheapest fix first)
1. CRM activity dropped (email/push/WhatsApp frequency lower)
Action
Talk to CRM lead today. Restart cadence. Pull At-Risk VIP list for personalized win-back. Target: 15-25% win-back rate.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; CRM send volume -[Y]%
HypothesisCRM cadence drop
Action takenTalk to CRM lead today. Restart cadence. Pull At-Risk VIP list for personalized win-back. Target: 15-25% win-back rate.
Insight / learningCRM + paid sync weekly
2. Audience definition changed in retargeting (excluded older VIPs by mistake)
Action
Check Meta/Google custom audience rules. Re-add older VIPs if excluded by mistake.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; audience-definition change on [date]
HypothesisAudience-definition change excluded older VIPs
Action takenCheck Meta/Google custom audience rules. Re-add older VIPs if excluded by mistake.
Insight / learningQuarterly custom-audience-definition audit
3. Top repeat-bought SKU went OOS
Action
Pull purchase history for At-Risk VIPs. Identify their most-purchased SKUs. Cross-check inventory; escalate restocking.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; top repeat SKU [name] OOS
HypothesisVIP-favorite SKU OOS removing reason to buy
Action takenPull purchase history for At-Risk VIPs. Identify their most-purchased SKUs. Cross-check inventory; escalate restocking.
Insight / learningVIP-SKU OOS alerts should ping retention immediately
4. Post-purchase experience changed (PDP / re-order flow / login broken)
Action
Audit re-order journey as a returning customer yourself. Login broken? Past-orders page missing?
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; site change on re-order flow
HypothesisRe-order experience regression
Action takenAudit re-order journey as a returning customer yourself. Login broken? Past-orders page missing?
Insight / learningRe-order flow QA monthly as a returning customer
5. Competitor launched aggressive loyalty / promo
Action
Brief client on competitive response. Suggest loyalty perk, early-access, or matching promo. Win-back paid is a fraction of new-CAC cost.
How to log this in your Daily Log
ObservationAt-Risk VIP +[X]%; competitor [name] launched loyalty on [date]
HypothesisCompetitor program pulling VIPs
Action takenBrief client on competitive response. Suggest loyalty perk, early-access, or matching promo. Win-back paid is a fraction of new-CAC cost.
Insight / learningLoyalty programs are sticky - speed of response matters
Action
This is found money. Pull list weekly to CRM. If no win-back campaign exists, build one this week. Cost to win back is a fraction of new acquisition.
How to log this in your Daily Log
ObservationAt-Risk VIP list exported and routed
HypothesisWin-back via paid + CRM is cheaper than new acquisition
Action takenThis is found money. Pull list weekly to CRM. If no win-back campaign exists, build one this week. Cost to win back is a fraction of new acquisition.
Insight / learningWeekly export is standing process, not ad-hoc