The DELIVERY half of the AI Advertiser program: how to actually build + run Meta ads once a client is closed (vs brez-client-acquisition-module = how to GET the client). Rio going through it 7/5; this note grows as he feeds sections. This is the service Uprise sells — the thing Rio executes once a founding pilot signs.
🔑 Client Meta Access Setup (Lesson 3.4b — the FIRST fulfillment step, before any campaign)
Before you can run ads you need access to the client's Meta ad account. Source: ai-advertiser-course.vercel.app/classes/3.4b-client-meta-setup.html.
⚠️ PREREQUISITE — what RIO needs set up FIRST (his side): his OWN Meta Business Manager + ad account + business verification + a payment method. He's never run ads → he likely has NONE of this. Business verification can take days, so the smart move is to start his own BM + verification NOW (before a pilot signs) so onboarding isn't stalled by a multi-day Meta review. → actionable prep item, gated-but-worth-pre-doing.
✅ DONE 2026-07-06 (night) — Rio's side is BUILT + VERIFIED + TESTED
- Meta Business Manager: "Uprise" (business_id
986150920945671) — business-verified (IRS SS-4 uploaded through the entity/domain gate; ties to Costa Co Studio LLC). - Official Meta Ads MCP connected to Claude Code (
mcp.facebook.com/ads, OAuth) — NOT the course's Lesson-5.3 dev-app + pasted-access-token method, which is retired for our stack (OAuth = no raw token to leak, no 60-day refresh to babysit, wired straight into Claude Code/Command). Read + write both confirmed live via a real create→pause→delete test. - Ad accounts under the Uprise business:
1039878558609082"Uprise" — 🏠 HOME BASE. Has payment method attached, ACTIVE, MCP-enabled + queryable. Use this one.989368330534286"uprise Ads" — ACTIVE, no payment method (secondary/empty).2011885956060213— CLOSED (the old 0-asset "Rio Costa" portfolio Rio scheduled for deletion — dying as intended).2510476419414470— ACTIVE but tied to NO business (stray personal ad account; fold under Uprise or ignore so it's never accidentally used for client work).
- ⚠️ SAFETY GUARDRAIL (important for Ximena + Verónica — cast rules): the MCP can create / edit / pause / activate, but it CANNOT delete or archive a campaign. Update calls to DELETED or ARCHIVED are force-reverted to PAUSED (
status_forced_to_paused: true), and there is no delete tool at all. Worst-case AI blast radius = "paused," never "deleted." Deletion is a human-only action in Ads Manager. This is a feature: no automation can ever nuke a live client campaign. - Full Marketing API surface the MCP exposes: campaigns / ad sets / ads / creatives, custom audiences, catalogs + product feeds, pixel/CAPI events (Verónica's lane), A/B split + lift tests, insights + industry benchmarks, opportunity score. Everything Lesson 5.4's automation agent would need.
- Still open (forward work, not setup): (a) wire the MCP's metric pulls into Command's Fulfillment tab so Selena pre-labels the daily KILL/WATCH/SCALE calls; (b) on a pilot signing, get client partner-access to THEIR ad account (the People → Add People → Full Control step below).
🎛️ Ximena's Operating Rules — folded from the Traffic Command 5-agent pack (2026-07-06)
Diffed the pack's REAL system prompts (Aurelius/Zenith/Vortex/Stratos; Nexus was already extracted → Verónica) against Ximena. Kept the operating logic; rejected the market-specific numbers + the wrong funnel model. What Ximena runs on now:
1. Andromeda campaign STRUCTURE (her build spec — use every time she builds a campaign via the MCP): 1-2 campaigns MAX · 1-3 broad ad sets · 15-25+ diverse creatives per ad set · Advantage+ as the default campaign type · broad or NO targeting. The "rule of 6" died Feb 2025 — creative diversity replaces micro-segmentation ("creative IS the targeting"). Don't build 5+ campaigns, don't micro-segment, don't manually over-optimize. Learning phase needs ~50 conversions; don't judge for 7-14 days.
2. Symptom → diagnosis matrix (how she reads ad data):
| Symptom | Real cause | Action |
|---|---|---|
| High CPM + low CTR | creative | ship 15-20+ new diverse creatives |
| Low CPM + good CTR + low CVR | landing page | escalate to the web/site side |
| Good clicks + low leads/shows | follow-up | escalate to Rio / the client |
| Good shows + low close | sales | escalate to Rio / the client |
| CPM climbing daily | Andromeda penalty | MORE creative diversity |
| Sudden drop across ALL metrics | algorithm reset | do NOT panic — wait 72h |
Rule: "if it's not the ads, it's not Ximena's problem" → name the real owner and escalate, never guess.
3. Creative diversity = different MOTIVATIONS, not reworded variations. Each creative a distinct psychological angle (health / financial / speed / authority / fear), NOT the same line reworded. Same-angle reworded = algorithm penalty. Baseline volume = 50+ variations/month. (Deep creative craft — the 100-hook framework + DSL Disrupt-Story-Landing — lives in the pack knowledge base; that's Mariana's reference when writing ad creative, pull on demand.)
4. Budget-allocation tiers (once multiple ad sets run): Tier 1 = 60% of budget (ROAS >3x) · Tier 2 = 30% (2-3x) · Tier 3 = 10% (testing) · Tier 4 = 0% KILL (ROAS <1.5x for 5+ days). Always keep ~20% in testing.
5. Scale-readiness 4-pillar gate (before ANY >20% scale): ① metrics stable 7d · ② creative health (15+ active, no single creative >40% of spend, pipeline full) · ③ tracking health = Verónica's CAPI + match-rate sign-off · ④ infrastructure (can the CLIENT's phone/sales/cash absorb +30%?). 4/4 = scale · 3/4 = fix first · <3/4 = don't scale.
6. Scaling cadence: Day 1-3 hold/validate · Day 4-5 +15-20% if stable · Day 6-7 hold · Day 8-10 +15-20% · never >20% in one day · wait 24-48h after each bump before judging. (Consistent with Ximena's existing "SCALE ≤ target +20% ladder.")
7. Launch gate = Verónica, hard-linked. Data setup — CAPI + Advanced Matching + conversion events + pixel — is MANDATORY before launch. Any missing → Verónica audits, DON'T launch. (This makes Verónica's gate an explicit pre-launch dependency in Ximena's flow.)
🎯 CONTEXT-GATED (keep them — fire only for the right client + market; corrected per Rio 7/6):
- Brazilian R$ benchmark tables — KEEP as methodology reference + BR data point. Correction to earlier framing: Brazilian direct-response marketers are world-class — the ENTIRE logic above (DSL, kill/scale, creative-diversity, launch structure) is the Brazilian playbook, and we kept all of it. The one thing that doesn't port is the absolute price numbers — not because they're worse, but because they're in reais on the Brazilian ad auction. R$25 CPM ≈ ~$5 USD; a US local-service audience often runs $15-40 CPM (higher-cost auction + different currency + different vertical). So: use the BR tables to learn the RELATIONSHIPS (healthy CTR→CVR ratio, how CPM signals creative health), but build a parallel US-target table from real client data +
ads_insights_industry_benchmark, and never quote a R$ figure as a US client's target. - Challenge-funnel economics ($200K min, 8-week runway, 5-15x back-end) — KEEP, scoped to info-product / course-creator / high-ticket-coaching clients. Uprise is national + remote, so these ARE real future clients, and the framework is elite for THAT client type. The only malpractice is applying it to a local lead-gen service shop (pools/cleaning) — those get the simple Advantage+ Leads funnel (ad → landing/form → their inbox, client funds spend). Client type picks the funnel model: local lead-gen = Leads funnel · info-product/course/coach launch = challenge/webinar economics.
- The squad/dispatch orchestration (Aurelius routing to @zenith/@vortex) — this one stays OUT: Rio's cast already routes through Selena, and Ximena is CMO + metrics + creative-director in one for a solo shop. She escalates to Verónica (tracking), Mariana (copy), Camila (unit economics/cash), Rio (client/sales) — no sub-squad needed.
🎨 Ad creative DESIGN — making the actual ad image (Lesson 3.9b, added 7/7)
The VISUAL half of creative (copy lives in copywriting-direct-response). Verbatim: data/brez-course/3.9b-ai-ad-design.md. Creative is the #1 Meta lever now (Andromeda targets for you — the creative is your job). For local biz it must feel REAL, not corporate-stock ("like someone in the neighborhood took it").
Course workflow (Stitch → Canva, ~10 min/ad): (1) answer 3 Qs — what the client does · the offer · who sees it (e.g. homeowners 30-55 in [city]) + grab their logo + brand hex from their site. (2) Google Stitch (stitch.withgoogle.com, free) — describe the ad in plain English, iterate by text ("make text bigger", "add before/after split"), export. (3) Canva — drop the REAL logo, adjust, preview at phone size (95% see it on mobile), export PNG.
The 5 angles covering ~90% of local ads (make one of each, let Meta pick the winner — don't guess): ① Direct Offer · ② Before/After (split; strongest for service biz) · ③ Social Proof (stars + review + pro image) · ④ Problem Call-Out ("Your AC bill doesn't have to be this high") · ⑤ Urgency/Seasonal. (8 niche-specific Stitch prompts + a 10-niche quick-ref table are in the verbatim.)
The don'ts: no fake-looking stock · 5-8 words MAX on the image (rest goes in the copy) · always match the client's logo + color · mobile-preview everything · health before/after needs "results may vary" (Meta flags dental/weight-loss/skincare).
🔧 Rio's stack adaptation: Stitch is the free path, but Rio already pays for Higgsfield (image gen) + has the Canva MCP + a stitch-skill installed — the generation tool is a choice, the workflow is the same. Rio's anti-slop bar overrides the course (feedback_antislop_web_design): AI ad images must read as REAL, never AI-default. Per CLAUDE.md image rules: EXTRACT the client's real logo (never recreate from sight), pull brand hex from the site's actual CSS (never eyeball).
3 client scenarios: A = client has nothing (walk them through full setup) · B = has BM + ad account (skip to the access invite) · C = has a FB Page but no BM (create BM, then claim the page).
Scenario A — client's steps:
- Create Business Manager at business.facebook.com → business name + their full name + business email → confirm via Meta's verification email.
- Create ad account: Business Settings → Accounts → Ad Accounts → Add → Create New → set account name, time zone (their location), currency (CANNOT be changed later).
- Add payment method: Business Settings → Payment Methods → their own card. "Their card, not yours." (= reinforces the founding-pilot rule: client always funds ad spend.)
Granting Rio access (client does this): Settings (gear, bottom-left) → People → Add People → enter Rio's business email → toggle ON both Ad Account + Facebook Page with Full Control → Send. Then Rio accepts the invite in his own BM → the client's assets appear in his dashboard.
Client FAQ (pre-answers to calm them): no password sharing needed · BM doesn't expose your personal FB profile · your card pays ad spend, the management fee is separate · BM campaigns ≠ boosting a post.
7-point completion checklist: BM created · ad account made (correct tz/currency) · payment method added · invite sent w/ Full Control on both assets · invite accepted · ad account visible in Rio's dashboard · page visible in Rio's dashboard.
🎯 Rio: this slots into uprise-onboarding as the "activate the engine" access step. Add a copy-paste client message (the exact People → Add People → Full Control walkthrough) to the onboarding kit so a signed pilot can grant access in 5 minutes. The access handoff was already flagged to happen live on the kickoff call ("no passwords over text") — this is that step, formalized.
0. The mental model (the 3 levels, built top-down)
Campaign → Ad Set → Ad. Always built top-down:
- Campaign = the GOAL (objective, e.g. Leads). CBO/ABO budget toggle lives here.
- Ad Set = WHO sees it + the budget (audience, location, age; ABO budget lives here).
- Ad = WHAT they see (the creative: image/video + angle + version). Say it in one breath: Goal → who sees it + budget → what they see.
1. Campaign setup — the objective
Meta Ads Manager: + Create → pick the "Leads" objective → scroll to the "Campaign Budget Optimization" toggle. Toggle ON = CBO, OFF = ABO. (The daily-budget field MOVES depending on which is selected — at the campaign level for CBO, at the ad-set level for ABO.)
2. CBO vs ABO (budget optimization) — the core decision
ABO — Ad Set Budget Optimization (toggle OFF): you set a budget for EACH ad set individually. Full control.
- How: "$15/day for Ad Set 1, $15/day for Ad Set 2" — each gets exactly what you assign.
- ✅ Good for: testing new audiences + creatives — each test gets equal spend (Meta can't play favorites).
- ❌ Bad for: scaling — you're manually managing every ad set's budget.
CBO — Campaign Budget Optimization (toggle ON): you set ONE budget at the campaign level, Meta splits it across ad sets.
- How: "$30/day" → Meta gives ~$20 to the best-performing ad set, ~$10 to the other.
- ✅ Good for: scaling proven audiences — let Meta auto-optimize toward what's already working.
- ❌ Bad for: testing — Meta may starve a new ad set before it gets a fair chance.
🎯 THE SIMPLE RULE
Testing? → ABO. Scaling? → CBO. Start EVERY client on ABO. Move the winning ad sets into a CBO campaign once you know what works. (Test cheap + fair on ABO → graduate winners to CBO to pour budget on proven performers.)
3. Campaign naming (stay organized)
At 5 clients × 3 campaigns each it gets messy fast. Consistent naming from day one, so you're never staring at "Ad Set 1, Ad Set 2, Ad Set 3."
- Campaign:
[Client] – [Goal] – [Type]→ e.g.Tony's Pizza – Leads – ABO Testing/Tony's Pizza – Leads – CBO Scale - Ad Set:
[Audience] – [Location] – [Age]→ e.g.Pizza Lovers – Tampa 5mi – 25-55/Families – Tampa 10mi – 30-50 - Ad:
[Format] – [Hook/Angle] – [Version]→ e.g.Image – Family Deal $19.99 – V1/Video – Behind the Kitchen – V2→ The name encodes what/who/where at a glance; the– Versionon ads is what lets you read creative-test results without opening each ad.
4. The sales-call math tools — TWO different course calculators
The program has two separate calculators (Rio flagged the distinction 7/5):
- Budget Simulator ("See Your Client's Numbers") — sliders, 4 inputs (Daily Budget · Cost Per Lead · Close Rate · Avg Job Value) → Leads/Customers/Revenue/Ad Spend/ROAS. Shows the client's OUTCOME only.
- Napkin Math Calculator ("Will This Client Be Profitable?") — number inputs, 5 inputs (adds Your Monthly Fee) → everything above PLUS Client's total cost + Client's net profit + a "no-brainer" verdict. The actual CLOSE tool (shows the client their profit AFTER paying Rio).
✅ RIO HAS HIS OWN (built + deployed 7/5): https://uprise-roi.pages.dev — the Napkin Math superset (does everything both course tools do), Warm Rise branded, with niche presets (Custom Pools / Cleaning / Landscaping / Pizza). Source: ~/uprise-simulator/public/index.html (Cloudflare Pages project uprise-roi). The course's widgets weren't linked as usable resources, so Rio owns this one — pull it up on Call 2, type their numbers, the green net-profit line closes it. Custom Pools default: $30/day + $60 CPL + 15% close + $2,500 job + $1,000 fee → $900 spend, 2 customers, $5,000 rev, 5.6x ROAS, $3,100 client net profit → no-brainer. ⚠️ Optional: CNAME roi → uprise-roi.pages.dev for roi.uprisegrowth.io.
Purpose (both): "show clients the math — watch their eyes light up." The Call-2 close mechanic (brez-client-acquisition-module) made visual.
4 inputs → 5 outputs (example on screen):
- Daily Budget $15 · Cost Per Lead $32 · Close Rate 10% · Avg Job Value $1,000
- → Leads/mo 14 · New Customers 1 · Revenue $1,000 · Monthly Ad Spend $450 · ROAS 2.2x
The math (so it's reproducible, verified):
- Monthly Ad Spend = Daily Budget × 30 → 15 × 30 = $450
- Leads/mo = Ad Spend ÷ Cost Per Lead → 450 ÷ 32 = ~14
- New Customers = Leads × Close Rate → 14 × 10% = ~1
- Revenue = Customers × Avg Job Value → 1 × 1,000 = $1,000
- ROAS = Revenue ÷ Ad Spend → 1,000 ÷ 450 = 2.2x
🎯 The strategic read (not in the doc — Rio's edge): the two levers that move ROAS most are Avg Job Value and Close Rate, NOT budget. A $32 CPL against a $1,000 job barely clears 2x. Against a pool resurface ($2,500) or a paver patio ($8,500–27,000) — Rio's actual barrels — the same lead math throws a 10–50x ROAS. This is WHY the high-ticket local niches make the ad math sing, and it's the number to put in front of a Custom Pools / landscaping owner on Call 2. Rio already builds tools (roadmap, teardown, Command) — a branded version of this simulator would be a strong pilot-pitch asset (plug in THEIR job value live).
5. The Testing Framework — launch → wait → kill → scale → repeat
The optimization loop you run every week once a client's live:
- Launch: 3-5 ads per ad set.
- Wait: don't judge until you've spent 2-3x your target CPL on an ad (enough spend to be real, not a fluke — pairs with the learning phase §6).
- Kill: cut anything running at 3x+ your target cost-per-lead. Dead weight, no mercy.
- Scale: raise winners' budgets 20-30% every 2-3 days. Slow + steady so you don't shock delivery.
- Repeat: the winners become the CBO scale campaign (§2); relaunch fresh tests in ABO.
⚠️ Tension to know (Rio's edge): §6 says budget changes >20% RESET the learning phase, but this framework says scale 20-30%. So the safe scaling move is to stay at/just under 20% per bump — 20-30% is the aggressive ceiling and risks kicking a winner back into learning. When in doubt, +20% and wait the 2-3 days.
6. The Learning Phase (DON'T touch it)
New ad set → Meta enters the learning phase: it's figuring out who to show the ad to. Performance is inconsistent (some days great, some terrible) — that's normal. In Ads Manager the Delivery column reads "Learning" / "Learning Limited" until it exits to "Active."
- How long: ~3-7 days OR ~50 conversion events, whichever comes first.
- What RESETS it (avoid): editing targeting · changing budget by >20% · pausing for more than a few hours.
- What's SAFE to edit: new ad creative · bid caps · small budget increases (<20%).
- ⚠️ Set the expectation on the onboarding/kickoff call: "First week might look rough — that's normal, Meta's learning. Don't freak out. By week 2 we'll have real data." → stops the day-2 panic text. This is a Uprise onboarding-call line (uprise-onboarding); bake it into the founding-pilot kickoff so the client doesn't bail during learning.
7. First Campaign Structure (copy this — don't overthink)
Setup: + Create → Leads → name it → first ad set: broad targeting → location radius 10mi around a city → age 25-55 → $15/day. Then:
CAMPAIGN: [Client] – Leads – ABO Testing (Objective: Leads | Budget: ABO / ad-set level)
├─ Ad Set 1: Broad – [City] 10mi – 25-55 $10-15/day · broad targeting (let Meta's AI find them)
│ ├─ Ad 1: Image – [Offer Angle A] – V1
│ ├─ Ad 2: Image – [Offer Angle B] – V1
│ └─ Ad 3: Video – [Testimonial/BTS] – V1
└─ Ad Set 2: Interest – [Relevant Interest] – 25-55 $10-15/day · interest targeting (e.g. "Pizza","Italian food","DoorDash")
└─ Ad 1: the SAME 3 ads as Ad Set 1
Key logic: same 3 creatives across 2 audiences = you're testing AUDIENCES, not creatives (isolate one variable — this is the ABO testing method from §2 in practice). Broad vs Interest is the first audience test.
- Total daily spend: $20-30/day = $600-900/mo. Enough for real data + real leads.
- Hard floor: never start a client below $10/day — Meta can't gather enough to exit learning at that level.
🎯 Uprise adaptation (not in the doc): the example is a pizza shop (low job value, 10mi radius). Rio's barrels are pools/landscaping — higher job value + wider service area, so: bump the radius to metro-wide (pool cos serve a county, not 10mi), and the $600-900/mo ad spend clears profitably at a $2,500-27,000 job value where a pizza can't. Ad spend is on the CLIENT's card per the founding-pilot terms (uprise-onboarding) — so quote the pilot expecting them to fund ~$600-900/mo minimum, and set the "week-1 learning" expectation (§6) on the kickoff call.
🔁 DAILY OPS — the 15-Minute Optimization Routine (Lesson 3.11, Module 3: Fulfillment)
Once campaigns are live, the job flips from building → maintaining. Every day, per client, 15 minutes: read the data, make decisions. No guessing, no feelings — numbers → rules → action. "This is where you earn your retainer."
Screens: (1) Ads Manager — Campaign View (most of your time) · (2) Ads Manager — Ad Level (individual ad performance).
The routine (set a timer, 15 min, no more):
- 0:00-3:00 — SCAN: open Ads Manager, look at yesterday's numbers. What changed? Big spikes/drops? Just OBSERVE — don't touch anything yet.
- 3:00-7:00 — DECIDE: go ad by ad, apply the decision rules, label each: KILL / WATCH / SCALE / REFRESH (thresholds below). Write it down.
- 7:00-12:00 — EXECUTE: make ONLY the changes you decided. Kill losers, bump winner budgets 20%, add new creatives if frequency is high. Nothing extra.
- 12:00-15:00 — LOG: write what you changed + why (date, action, reason). This becomes the weekly client report.
⚠️ #1 beginner mistake: spending 2 hours "optimizing" and making it WORSE. The learning phase needs ~50 conversions/week to stabilize; every change resets it. Do LESS. Only change what the rules tell you to.
✅ Resolves the §5/§6 tension: the daily routine says bump winners 20% (not 20-30%) — so 20% is the canonical, learning-safe scale number. Use 20%.
🎯 Rio tie-in: this per-client 15-min "numbers → rules → action, then log" loop is the SAME shape as his Command Coach tab + daily KPI ritual — just pointed at a client's ad account instead of his own outreach. Once he has ad clients, this routine IS the retainer deliverable (and the LOG step = the report that justifies the monthly fee). ✅ BUILT INTO COMMAND 2026-07-06 — the "Fulfillment" tab (uprise-command.pages.dev): per-client ad tracking, daily log with auto-CPL + auto KILL/WATCH/SCALE/REFRESH suggestion (from CPL vs the client's target + freq), weekly totals, color-coded rows, and a "Generate weekly client report" button that auto-drafts the §7 report from the week's rows (em dashes stripped). Endpoint functions/api/adtrack.js (lazy-created ad_tracking table + client settings in K/V). This is Command's Fulfillment side going live — it was acquisition-only before.
The 4 metrics that matter (Ads Manager has 50+ columns — these are the only 4 to check daily)
Setup: Ads Manager → Columns → Customize → add Cost per result, CTR, CPM, Frequency, remove everything else, save as a "Daily Check" preset.
- CPL — Cost Per Lead ⭐ (your NORTH STAR): the one number that matters most — what it costs to get one lead (form fill / call / message). If CPL is good, you're good. Benchmarks vs your target CPL: Good = at/below target · Watch = 1.5-3x target · Kill = 3x+ target.
- CTR — Click-Through Rate: creative quality (higher = better).
- CPM — Cost Per 1,000 impressions: delivery cost.
- FREQ — Frequency: fatigue detector (how many times the avg person's seen it). ~3+ = creative fatigue → refresh.
The 4 Decision Rules (formal — §3; every ad gets ONE label, no "maybe")
Uses CPA (cost per acquisition / cost per result) vs your target. For lead-gen this = CPL, same north-star number.
| Label | Trigger (CPA vs target) | Action + nuance | Example (target $10) |
|---|---|---|---|
| KILL | 3x+ target | Bleeding money — off immediately, it won't recover. BUT judge only after you've spent 2-3x your target CPA (data must be real). | Kill at $30+ |
| WATCH | 1.5-3x target | Not great, not terrible. Give it 2-3 more days. Doesn't improve → kill. Drops below target → scale. | Watch at $15-30 |
| SCALE | at/below target | Winner. Raise budget 20-30%, GRADUAL — never double overnight (protects the learning phase). | Scale at ≤$10 |
| REFRESH | Frequency 3.0+ | People seeing it too often, perf about to drop. Add 3-5 new creatives to the ad set. Don't pause the old ones yet — let Meta redistribute. | Freq 3.0+ → add creatives |
🖨️ The principle: print these, stick them by your monitor. When tempted to make a "gut feeling" change — look at the rules. If the data doesn't say change it, don't. The algorithm is smarter than your gut. Always.
⚙️ Scaling number — reconciled (this note had a tension): the formal rule = 20-30% gradual; the learning-phase rule = changes >20% can re-trigger learning. Resolution: while an ad set is still stabilizing (under ~50 conv/week / recently out of learning) → cap bumps at 20%. Once it's well past learning with steady volume → 20-30% is fine. When unsure, 20% and wait 2-3 days. (The daily-routine card's "+20%" is the safe default; 30% is the aggressive ceiling for proven, high-volume winners.)
Worked example — Tony's Pizza, Day 7 (target CPL $10):
| Ad | Spend | CPL | CTR | Freq | Decision |
|---|---|---|---|---|---|
| Family Dinner – Video | $42 | $7 | 3.2% | 1.4 | SCALE (crushing it → +20%) |
| Late Night Deal – Static | $38 | $9.50 | 1.8% | 1.8 | SCALE (under target) |
| Lunch Special – Carousel | $35 | $17.50 | 1.1% | 2.1 | WATCH (~1.75x target) |
| Party Catering – Video | $45 | $45 | 0.4% | 1.6 | KILL (4.5x target → cut now) |
| Grand Opening – Static | $52 | $10.40 | 1.6% | 3.2 | REFRESH (good CPL, freq 3.2 = seen too often → new creative) |
🎯 Rio connection: CPL/CPA is the same "Cost Per Lead" input in his ROI calculator (uprise-roi.pages.dev). The calculator sets the TARGET you promised the client; this daily check validates the ACTUAL against it. Calculator = the pitch, daily check = keeping the promise.
Your Daily Tracking Sheet (§4 of the daily-ops lesson)
After each 15-min check, log the numbers → tracks trends, catches problems early, and becomes the weekly client report. The program ships a Google Sheet template ("Daily Campaign Tracker"): one tab per client, CPL auto-calculates, color-coded (green = good / yellow = watch / red = kill).
- 3 tabs: (1) Example — Tony's Pizza, 9 days of data + weekly summary + all formulas · (2) Blank Template — duplicate per new client, CPL formula pre-loaded · (3) How To Use — instructions + decision-rules reference.
- What you log daily (columns): Date · Spend · Leads → CPL auto-calcs (=Spend/Leads) · CTR · CPM · Frequency · Decision (KILL/WATCH/SCALE/REFRESH) · Notes (what you changed + why).
🎯 Rio: this is the LOG step of the daily routine made durable, and it's the client-side twin of Command's Coach tab (Coach tracks HIS outreach KPIs; this tracks a CLIENT's ad KPIs). ⚠️ Like the calculators, the course's Sheet isn't a linked/usable resource → Rio needs his own.
EXACT structure (from the real course sheet, screenshot 7/5) — the build blueprint:
- Columns: A
Date· BSpend ($)· CLeads· DCPL ($)==B/C, color-coded · ECTR (%)· FCPM ($)· GFrequency· HTop Performing Ad· IDecision(KILL/WATCH/SCALE/REFRESH badge) · JWhat I Changed. - Settings block (right side, ~col L):
Target CPL: 10·Daily Budget: 20· DECISION RULES: KILL CPL > 3x target · WATCH CPL 1.5-3x · SCALE CPL ≤ target (+20%) · REFRESH Freq > 3.0. - CPL color-coding (conditional format on col D vs Target CPL): green ≤ target · yellow 1.5-3x · red 3x+.
- 3 tabs: (1) Example = Tony's Pizza 9 days + weekly summary + formulas · (2) Blank Template = duplicate per client, CPL formula pre-loaded · (3) How To Use = instructions + decision rules.
- Example data (Tony's Pizza, target CPL $10): 2/24 $18.5/2/$9.25/WATCH/"Day 1 just launched" · 2/25 $20/3/$6.67/SCALE/"winner emerging, patience" · 2/26 $21.5/3/$7.17/SCALE/"budget $15→$18 on winner" · 2/27 $22/2/$11.00/WATCH/"slight dip, normal variance" · 2/28 $23/4/$5.75/SCALE/"budget $18→$22, best day" · 3/1 $24.5/3/$8.17/WATCH/"freq hitting 2.0, monitoring" · 3/2 $25/1/$25.00/WATCH/"bad day, CPM spiked" · 3/3 $22/3/$7.33/SCALE/"bounced back, killed Party Catering" · 3/4 $23.5/4/$5.88/SCALE/"added 3 new creatives".
✅ BUILT + DELIVERED 2026-07-05: ~/Downloads/Uprise - Daily Campaign Tracker.xlsx — 3 tabs (Example–Tony's Pizza w/ 9 days + weekly read · Blank Template w/ 30 pre-formula'd rows · How To Use), CPL auto-formula (=Spend/Leads), conditional formatting green/yellow/red vs the Target CPL in SETTINGS, Decision-column color badges, decision-rules reference. To make it a live Google Sheet: drag the file into drive.google.com → it converts (or File → Import). Not pushed straight to Drive because the Sheets MCP is a service account that can't share new files to Rio, and the Drive-141 base64 upload isn't transcription-reliable at 14KB — the Downloads → drag-to-Drive route is clean + 1 step. Rebuild script: scratchpad/build_tracker.py. Alternative future home: fold a per-client ad tracker into Command. The daily log = what justifies the retainer.
The 5 Optimization Killers (§5 — the mistakes that reset learning + burn client money)
- Changing things during the learning phase. Meta needs ~50 conversions/week to learn who to target. Edit budget/targeting/creative before that → resets to zero, learns all over. Wait.
- Doubling budget overnight. $15→$30/day resets learning; the algorithm panics at big jumps. Scale ~20-30% at a time: $15 → $18 → $22 → $27. (Concrete confirmation the safe ladder is ~20% steps.)
- Panic-killing after 24 hours. Day-1 data means nothing. Let an ad spend 2-3x your target CPA before judging — target $10 CPL → let it spend $20-30 first.
- Editing the winning ad. ⭐ NEW RULE: an ad's crushing it → "let me tweak the copy to make it even better" → you just killed it. NEVER edit a winner. Want to test a variation? Create a NEW ad and leave the winner completely alone.
- Optimizing based on feelings. "I don't like this ad" is irrelevant; "this ad has 3x CPA after $30 spend" is what matters. You are not the target audience. Your client is not the target audience. Only the data decides.
The Scaling Ladder (§6 — how to raise a winner's budget)
Ad winning = CPA at/below target for 3+ days. Scale gradually, never jump more than 20-30% at a time. The ladder: $15 → $18 (+20%) → $22 (+22%) → $27 (+23%) → $33 (+22%) → $40 (+21%).
- Wait 2-3 days between each step. Only bump if CPA is still at/below target.
- If CPA spikes after a bump → drop back to the previous budget immediately. (Reverse the step, don't push through.)
- Confirms the reconciliation: the real ladder is ~20-23% steps → "20%" is the safe operating number, 30% the ceiling.
The Weekly Client Report (§7 — the message that keeps them paying)
Every Monday, send a SIMPLE update — not a 10-page doc, just the numbers that matter + what you did. Clients don't care about CPM/CTR; they care about "how many leads and how much did they cost?" The tracker (§4) feeds this directly. Template:
Hey [Client]! Here's your weekly ads update:
📊 THIS WEEK'S NUMBERS
• Total Spend: $___
• Total Leads: ___
• Cost Per Lead: $___
• Best Performing Ad: [name] — $[CPL]
🟢 WHAT'S WORKING
• [Top ad + WHY it's winning — angle, creative type]
• [Any trends noticed]
🔴 WHAT WE CHANGED
• Paused [X] underperforming ads (too expensive)
• Increased budget on [Y] — best performer
• Added [Z] new creatives to keep things fresh
🟡 NEXT WEEK'S PLAN
• [What's next — new creatives, scaling, etc.]
Questions? Let me know!
This one message keeps clients happy + paying every month. ⚠️ Rio note: strip em dashes for client-facing use (feedback-no-em-dashes / CLAUDE.md rule) — the template uses them; rewrite before sending.
🏢 Client Meta Access Setup (Rio's readiness plan — written 7/6 12:50 AM, client close expected 7/6)
Current BM state (screenshot 7/6): 3 business portfolios — "Uprise" (Uprise Growth FB Page + IG, the real one) · "Rio Costa" (0 assets, junk) · "rio costa" (1 asset, unknown — check before touching). Rule: operate ONLY from the Uprise portfolio. Ignore the other two for now — do NOT delete anything at 1 AM; check the 'rio costa' asset in daylight (might be the old Costa Co page).
Get client-ready (~15 min, tonight or before the close)
- Uprise portfolio → Settings (gear) → Business info — confirm Rio is Admin, add [email protected] as the business email.
- Security: turn on 2FA for the account (Meta requires it for people in verified/partner flows; also it's the #1 hijack defense for an agency asset).
- Create Uprise's own AD ACCOUNT (Business settings → Accounts → Ad accounts → Add → Create new): name "Uprise Ads", USD, ET timezone. New BMs are capped at 1 ad account — that's fine. Add Rio's card as its payment method (this account = Rio's own tests/boosts ONLY, never client spend).
- Verify the domain (Business settings → Brand safety → Domains → uprisegrowth.io, DNS TXT record) — helps ad delivery trust + needed for some conversion features later.
- Business verification (start it, takes DAYS): Security Center → Start verification. ⚠️ Legal-entity wrinkle: the legal name is Costa Co Studio LLC (Uprise DBA not filed yet — Lucia's queue). Verify under the LLC's legal name/docs; the portfolio can still display "Uprise." Don't let a name mismatch stall it.
When the client signs (the onboarding sequence — THEIR assets, THEIR card, Rio gets ACCESS)
Doctrine (matches uprise-onboarding founding-pilot terms): the client owns their ad account + pays spend on their own card. Rio is a PARTNER with manage permissions — never logins, never Rio's card on client spend, and if they ever leave, they keep their data (clean + professional).
- Client needs: a FB Business portfolio (free, business.facebook.com — 5 min, walk them through it on the kickoff call), their FB Page in it, an ad account in it with THEIR payment method, and (e-com) their pixel/dataset.
- Rio requests partner access: Uprise Business settings → Partners → Partner with a business → ask the client for their Business ID (their Business settings → Business info), request: Page (advertise) + Ad account (manage campaigns) + Pixel/dataset (view/manage). OR the client-side route: they add Uprise's Business ID as a partner with those permissions. Either works; use whichever the client finds easier — usually Rio driving on a screen-share.
- Verify access: the client's ad account appears in Rio's Ads Manager account-switcher. Build the first campaign FROM THEIR account (
[Client] – Leads – ABO Testing, §7 structure). - Set the learning-phase expectation on the same call (§6 script: "first week might look rough, that's Meta learning — week 2 we get real data").
- Log the client in Command → Fulfillment (+ target CPL from the ROI-calc numbers quoted on the close call) — daily 15-min routine starts day 1 of ads.
Screen-share cheat: the whole client-side setup is ~10 min on the kickoff call. Don't send them written instructions and hope — drive it live.
🔌 META ADS MCP — the Fulfillment automation unlock (bonus lesson, captured 7/6)
Meta ships an OFFICIAL Ads MCP: https://mcp.facebook.com/ads — 29 tools across 5 families (campaign/ad write · catalogs · accounts · tracking · insights). Install in Claude Code = ONE command:
claude mcp add --transport http meta-ads https://mcp.facebook.com/ads
(OAuth against Rio's Meta login; Claude Desktop route = Settings → Connectors → add custom → same URL.) ⏳ GATE: install AFTER business verification clears + first ad client is live (advanced API access wants a verified business — exactly why verification was submitted 7/6, 2 AM). When live, this closes the loop we designed: Selena pulls spend/CPL/CTR/freq via MCP → pre-labels KILL/WATCH/SCALE/REFRESH → auto-fills the Command Fulfillment row → weekly report drafts itself. Daily 15-min routine → 3-min review. The 8 course prompts to adapt once connected: daily pulse dashboard (yesterday by campaign, red/yellow/green) · Friday client report (7-day HTML 1-pager) · cleanup audit (kill/keep/scale table) · catalog health · anomaly alert in plain English · auction-edge report (top 10 ads vs benchmarks) · pre-pitch account audit (1-pager on a PROSPECT's ad account — a teardown-machine upgrade for prospects already running ads) · live self-refreshing dashboard.
🎨 Creative production workflow (same bonus — adapted to Rio's stack)
Course teaches: Claude-built static ads (HTML → screenshot, 6 niche templates: dentist before/after, gym transformation, restaurant chalkboard-special, realtor sold-flex, salon before/after, plumber trust-builder w/ big phone number) + Freepik (Nano Banana stills → Seedance 5s image-to-video) + CapCut stitch (captions, CTA card, 9:16/1:1). Monthly per-client bundle: brief 5min → 4-6 statics 15min → hero images 10min → animate top 2 → stitch → Friday report = ~55 min/client/month core, ~90 min with LP + deck (charge $1.5-3K extra for premium bundle). The margin thesis: replaces the 5-day designer loop; 22-35% margins → 65%+. 🎯 Rio substitution: SKIP Freepik — Higgsfield ($49/mo, already paid) covers image gen + video gen + upscale. Pipeline: Claude/HTML statics (Rio already builds these better via the IG-post pipeline) → Higgsfield for photoreal stills + 5s animations → CapCut. Zero new subscriptions.
✅ Module mastery checklist (the program's own 7-point self-check)
- Explain Campaign → Ad Set → Ad in your own words (§0)
- Know when to use ABO vs CBO (§2)
- Use the naming convention (§3)
- Use the budget simulator for a practice client (§4)
- Know the testing framework: launch → wait → kill → scale → repeat (§5)
- Understand the learning phase + what NOT to touch (§6)
- Know the copy-paste starter structure for the first client (§7) Tags: campaign-structure · CBO · ABO · testing · scaling · learning-phase · budget · beginner.
Status: this note now covers all 7 — the ads-execution playbook is complete. Rio's practice rep (checklist item 4): run the budget simulator with a REAL barrel's numbers (Custom Pools $2,500 job value, not the $1,000 example) and screenshot it — that becomes his Call-2 close asset.
Complete as of 2026-07-05. Future sections if the program adds them: audiences, creative production, pixel/tracking, reporting.
🔍 Fidelity-audit additions (7/6 overnight — recovered from the verbatim archive)
Audit result: 3.6 (campaign structure) and 3.11 (daily optimization) = fully captured above, clean. But two module-3 lessons weren't in this note at all — 3.3 (ad platforms) and 3.4 (your own BM). The material parts:
3.3 — Platform selection doctrine (was missing entirely)
Unlock order (like weapons): Meta = Day 1 starter → Google = client #3+ → TikTok = right niche only → YouTube = advanced/retargeting only. The one rule: "Master Meta first. Get your client results on Meta. Make them profitable on Meta. THEN talk about adding Google or TikTok. One platform done well beats three done poorly." First 3 clients = Meta only.
Platform benchmarks:
| Platform | CPL (local) | Min budget | Key fact |
|---|---|---|---|
| Meta | $5-15 | $10/day | works for every niche, no website needed (Instant Forms) |
| $15-50 | $20/day | highest intent — leads close at 2-3x Meta's rate; add only after Meta is profitable | |
| TikTok | $3-12 | $20/day | cheapest reach, under-40 visual niches only, eats creative — new videos every 1-2 weeks |
| YouTube | $0.10-0.30/view | $15/day | retargeting play; needs 1,000+ site visitors/mo of pixel data first |
Niche→platform calls (the ones relevant to Rio's barrels + common asks):
- Plumber/HVAC: Meta first ($12-25 CPL, homeowners 15-20mi, seasonal offers) + add Google ASAP — "emergency plumber near me" is pure gold, $25-60 CPL but closes at 40-60%. Skip TikTok. Budget shape: $15/day Meta + $20/day Google ≈ $1,050/mo.
- Roofing/contractor: Meta $20-40 CPL (homeowners 20-30mi, storm/seasonal angles) + Google $30-80 CPL ("roof repair near me", job value $5-15K). One job pays for 6 months of ads. → the pools/patios math is this row.
- Med spa: Meta Instagram-heavy $12-25 CPL (before/afters, women 25-55) + TikTok for transformation virality. Skip Google — too expensive for the niche.
- Restaurant: Meta only $8-15 CPL. Skip Google ("people pick from Maps for free — don't pay $3-5/click when Meta gets leads for $8").
- Gym: Meta $8-18 CPL, 5-8mi. Skip Google (Maps/organic wins there).
- Lawyer = THE exception: the one niche where Google beats Meta as the starter — "personal injury lawyer near me" CPL $50-150 but one case = $5-50K+. $30-50/day Google minimum.
- E-com: Meta $10-30 CPA (Advantage+ Shopping) → TikTok Shop for <$50 products → Google Shopping third. Scale $100+/day on winners.
Client explainer line (verbatim, why-Meta-first): "We start with Meta because it's the fastest way to get you leads at the lowest cost. Your customers are already on Facebook and Instagram. Once we're profitable there, we can add Google for even higher quality leads."
3.4 — Own-BM warnings the readiness plan should absorb
- 🔴 Fake name or fake business on a BM = permanent ban. Meta verifies. And creating a new BM to dodge a restriction fails — Meta links BMs by IP, device, and payment method and bans those too. If restricted: appeal, never sneak.
- Business verification = 1-5 business days. Unverified BM = lower spend limits + higher restriction odds. (Confirms the "start it NOW" call — already submitted 7/6.)
- ⭐ Add a backup admin to the Uprise BM (second email Rio owns, or trusted person): if the main account gets locked, the backup admin recovers everything. NOT yet in the readiness checklist — add it.
- Never give a client admin access to YOUR BM — only to their own assets. A client with BM admin can (accidentally or not) touch other clients' assets.
- Fronting ad spend (Scenario B) exists but default to NO: your card on their account + invoice spend + fee, sometimes with markup (e.g. charge $500 for $300 of ads). Risk = chasing repayment. Standard = client pays Meta directly, fee separate via Stripe — which is already Uprise doctrine.