Ad Automation Plan - Juicy Marbles
Quick Summary
Your paid social has stopped converting. We know why, we have seen it before, and we have a precise fix. This document covers what we will build, how it works, what it costs, and - critically - how it runs automatically after setup so you never have to think about it again.
Everything in this plan runs on free infrastructure (GitHub Actions). No SaaS subscriptions, no agency retainers, no dashboards to check every day. The system watches your ad accounts 24/7 and emails you when something needs attention.
What we need from you: API access to three platforms (Google Ads, Meta, Shopify). Setup takes 30-60 minutes on your end. Everything else we handle.
Section 1: Why Your Ads Stopped Converting
Based on your store data and common DTC failure patterns at your AOV (~$70-90), here are the five most likely causes:
1. Creative Fatigue (Most Likely - ~70% chance)
The Meta algorithm shows your ads to the same people repeatedly once it identifies your target audience. When someone has seen the same creative 3-5 times, they stop registering it. CTR drops. CPM rises. ROAS collapses.
The signal: Frequency above 3.0 on your best-performing ad sets, combined with CTR falling over the last 30 days on the same creatives.
The fix: Fresh creative, and a system that automatically flags fatigue before it becomes a crisis.
Industry benchmark: Creative refresh cycle should be every 4-6 weeks for top-of-funnel, every 8-12 weeks for retargeting.
2. Audience Saturation (Likely - ~50% chance)
If your campaigns have been running for 12+ months with the same targeting parameters, you have likely reached most of the people in your defined audience who were ever going to convert.
The signal: Reach declining or plateauing while frequency is increasing. Cost per result rising faster than market CPM increases.
The fix: Lookalike audiences built from your actual top-spending customers. Not lookalikes built from "website visitors" - those are too broad.
3. Wrong Audience Composition (Possible - ~30% chance)
If any campaigns target "plant-based diet" or "veganism" interest categories, you are targeting a small, expensive audience. Your real buyer is a meat-eater who is curious or health-motivated - a vastly larger, cheaper-to-reach pool.
The fix: Audience rebuild using flexitarian and omnivore interest stacks, with your real customer data as the targeting anchor.
4. Attribution Window Mismatch (Possible - ~25% chance)
Your products cost $60-160 and are frozen goods that require a considered purchase decision. People do not click and buy in the same session. If campaigns optimize for a 1-day click window, they miss late converters.
The fix: Set attribution to 7-day click / 1-day view for your price point.
5. Google Ads Budget Cannibalization (Worth Investigating - ~20% chance)
If Google brand campaigns are getting high budgets while non-brand prospecting is underfunded, you are paying for people who were already going to find you.
The fix: The Google Ads audit will show impression share, budget loss by campaign, and whether brand terms are eating prospecting budget.
Section 2: What We Know About Your Business
US Store (juicymarbles.com)
| Product | Entry Pack | Hero Pack | Per-Unit at Hero |
|---|---|---|---|
| Thick-Cut Filet | $64.99 (6-pack) | $159.99 (20-pack) | $8.00/filet |
| Whole-Cut Loin | $59.99 (1 loin) | $144.99 (3 loins) | $48.33/loin |
| Baby Ribs | $64.99 (2 racks) | $154.99 (6 racks) | $25.83/rack |
| Meaty Meat Pork-ish | $49.99 (4-pack) | $109.99 (12-pack) | $9.17/pack |
| Meaty Meat Lamb-ish | Out of stock - all variants | ||
| Kinda Salmon | $65.99 (4 filets) | $134.99 (10 filets) | $13.50/filet |
| Kinda Cod | $65.99 (4 filets) | $134.99 (10 filets) | $13.50/filet |
EU Store (eu.juicymarbles.com)
- Umami Burger (EUR 19.99 / 6 patties) - EU only, koji + miso, 30-day shelf life
- Lamb-ish is available in EU even though it is OOS in the US
- Fish products (Salmon, Cod): EUR 19.99 entry price vs $65.99 in the US - this is not a typo
The Fish Pricing Problem
Your Salmon and Cod filets are 3.3x more expensive in the US than in EU. If you are running the same fish ads in both markets, EU fish ROAS will look healthy while US fish ROAS will look broken. The algorithm will spend more in EU, less in US.
Before we touch anything else: we need separate campaigns for US and EU fish products. This structural fix alone will change how your account data reads.
Volume Discount Architecture
The 10-pack and 20-pack of Thick-Cut Filet cost the same per-unit ($8.00). That is a "smart buyer" signal that almost no brand leverages in ad copy:
"The 10-pack and the 20-pack cost exactly the same per filet. Buy 20, it feels like theft."
This works especially well as retargeting creative for people who have already visited the product page.
Free Shipping Threshold
Your free shipping threshold is $120 USD / EUR 120 EUR. A single 6-pack of Thick-Cut Filet at $64.99 does not hit it. Two packs do. Entry-price ads should hint at free shipping. Retargeting ads to single-item cart abandoners should show the "add one more, ship free" angle.
Brand Positioning
Your brand voice is rare: irreverent, chef-forward, and philosophically serious about food. "Plant-based, but big meat energy" is not just a tagline - it is a product thesis that actively rejects the category conventions.
| Ad Format | Typical Plant-Based Brand | Juicy Marbles |
|---|---|---|
| Soft lighting, nature backgrounds | Works | Brand-damaging |
| Green color palettes, dewy produce | Works | Looks like a competitor |
| "Healthy choice" messaging | Works | Alienates your buyer |
| Bold, slightly aggressive food styling | Off-brand | Perfect |
| Humor that assumes the viewer eats real meat | Off-brand | Perfect |
| Recipe videos where it replaces meat in a "real" dish | Off-brand | Perfect |
Your target customer is a home cook who eats meat and is open to interesting alternatives. Not a vegan. Running ads that look like they target vegans is a systematic audience mismatch.
Section 3: How This Actually Gets Built - Claude Code
Everything in Section 12 - the analytics pipelines, the smart policies engine, the ML optimizer, the RSA generator - is real, tested, production software running for other clients right now. The "adaptation" required to make it work for Juicy Marbles is not a development project. It is a conversation.
What Claude Code Is
Claude Code is an AI that lives in the terminal and acts as an autonomous software engineer. It can read entire codebases, understand what they do, modify them, write new scripts, and run them - responding to plain English instructions.
It is not a chatbot. It opens your files, reads them, makes the changes itself, and shows you the diff before saving.
What This Means in Practice
Henrik opens Claude Code and types something like:
"Take the Google Ads export script and adapt it for Juicy Marbles. The customer ID is 123-456-7890. Output should go to /reports/google-ads/. Here is the store overview document - use it to understand the two stores."
Claude Code reads the existing script (which may be 500 lines long), reads the store document, understands both, and makes every change needed. That is not a 2-week development sprint. That is 20 minutes.
What This Means for Ongoing Changes
If your product catalog changes, the update takes minutes. If Meta changes their API, Claude Code reads the documentation and patches the scripts. The maintenance cost is proportional to how often things change - not to how complex the system is.
What This Does Not Do
Claude Code is the engineering layer, not the strategy layer. It cannot tell you whether your Salmon pricing in the US is too high to convert - that takes understanding your business, your margin structure, and your competitors. That is what Henrik provides.
Section 4: What We Will Build
Component A - Shopify Customer Intelligence Export
Pulls your full order and customer history from both stores, scores every customer on three dimensions (Recency, Frequency, Monetary spend), and produces ready-to-upload audience files for Meta and Google.
Script: scripts/export-shopify-data.py | Runtime: ~2-5 minutes per store
| Output File | Purpose |
|---|---|
orders.csv | Full order history, line-item level |
customers.csv | All customers with lifetime spend |
rfm_segments.csv | Every customer scored and bucketed |
meta_custom_audience.csv | SHA-256 hashed, ready to upload to Meta |
google_customer_match.csv | Plain PII, ready for Google Ads upload |
top_20pct_customers_lookalike.csv | Your best customers - seed list for lookalikes |
| Segment | Who They Are | What We Do With Them |
|---|---|---|
| Champions | Bought recently, buys often, high spender | Lookalike seed (1%, 2%, 3% - test all) |
| Loyal | Consistent buyers | Upsell / bundle ads |
| At Risk | Used to buy regularly, 3-6 months gap | Win-back campaigns with recipe angle |
| Lost | No purchase in 6+ months | Exclude from prospecting |
| Recent | New buyers (last 60 days) | Do not retarget yet - give them time to reorder |
Component B - Google Ads Audit
Script: scripts/export-google-ads-data.py | Output: 16 CSV reports
| Report | Red Flag We Are Looking For |
|---|---|
| Campaign Performance | CPAs above $35 with no seasonal explanation |
| Ad Performance | Ads with <0.5% CTR still getting budget |
| Keyword Performance | Broad match terms triggering irrelevant searches |
| Search Terms | Actual queries triggering your ads - likely full of surprises |
| Quality Score | Scores below 5 on any spending keyword |
| Geographic Performance | US vs EU ROAS split - are you cross-spending? |
| Audience Performance | Which audience overlays are actually converting |
| Conversion Actions | Are conversions even tracked correctly? |
| Auction Insights | Who is outbidding you and why |
| Budget Performance | Impression share lost to budget limit (>20% means leaving conversions on the table) |
| Change History | When did things break? Often pinpoints a campaign change that caused the drop |
| Bidding Strategy | Are you on Target ROAS without enough conversion data? (Requires 30+/month) |
| Device Performance | Mobile vs desktop CVR split - should inform bid adjustments |
| Ad Extensions | Missing sitelinks or callouts = lower CTR |
| Landing Page | Bounce rate by destination - product pages vs homepage |
| Account Performance | Overall health baseline |
Component C - Meta Ads Audit
Script: scripts/export-meta-ads-data.py | Output: 4 CSV files with creative fatigue detection
| Signal | Normal | Concerning | Critical |
|---|---|---|---|
| Frequency | < 2.5 | 2.5-3.5 | > 3.5 |
| CTR (cold audience) | > 1.5% | 1.0-1.5% | < 1.0% |
| CPM week-over-week increase | < 15% | 15-30% | > 30% |
| ROAS week-over-week decline | < 10% | 10-25% | > 25% |
Component D - Audience Architecture Rebuild
Once we have the Shopify export and the Meta/Google audits, we build the full audience system from scratch.
| Audience | Source | Size Target | Campaign Type |
|---|---|---|---|
| Champions Lookalike 1% | Top-spending customers | 1-2M people | Cold prospecting |
| Champions Lookalike 2% | Top-spending customers | 2-4M people | Cold prospecting (A/B test) |
| All-Purchasers Lookalike 1% | Full customer list | 2-4M people | Cold prospecting |
| Website Visitors 30d | Pixel | Varies | Middle funnel |
| Product Page Visitors 14d (no purchase) | Pixel | Varies | Retargeting |
| Cart Abandoners 7d | Pixel | Varies | Retargeting (high intent) |
| Purchasers 180d | Customer list | Varies | Suppress from cold (save budget) |
| At Risk Customers | Shopify RFM | Varies | Win-back campaigns |
Component E - Ad Copy Generator (Phase 2)
Generates 15 headline variants + 4 description variants per batch, pre-scored for brand voice match, compliance, and hook strength.
| Angle | Why It Works | Example Hook |
|---|---|---|
| Recipe / "What to make with it" | Removes purchase uncertainty | "Wellington. Loin. 2 ingredients." |
| Math / Value | Smart buyer satisfaction | "10-pack or 20-pack. Same price per filet." |
| Social proof with specificity | Trust without being generic | "Granny-approved. And she eats brisket every Sunday." |
| Anti-vegan-brand positioning | Differentiation, humor | "Not a salad in sight. Not an apology either." |
| Protein / Nutrition hook | Health-motivated buyers | "20g protein per serving. Zero cholesterol." |
| Scarcity / OOS recovery | Re-engage lapsed buyers | "Lamb-ish is back. Not for long." (EU only) |
Section 5: Full Automation - How Everything Runs Itself
The Automation Stack (Zero-Cost)
| Tool | What It Does | Cost |
|---|---|---|
| GitHub Actions | Runs all scripts on a schedule (cron jobs in the cloud) | Free |
| GitHub Secrets | Stores your API keys securely (encrypted, never exposed) | Free |
| GitHub Artifacts | Stores all CSVs and reports from each run | Free (90-day retention) |
| Gmail SMTP | Sends you email alerts when thresholds are breached | Free |
| Python (standard) | All data processing | Free |
No Zapier. No Make/Integromat. No Looker Studio. No third-party analytics tools. Everything runs on infrastructure you control.
Automated Schedule
| Job | Runs | What It Does |
|---|---|---|
meta-audit | Every Monday 07:00 UTC | Pulls Meta campaign/adset/ad data for last 7 days, checks thresholds |
google-audit | Every Monday 07:15 UTC | Pulls all 16 Google Ads reports for last 7 days |
shopify-export | Every Sunday 23:00 UTC | Pulls fresh orders + customer data, recalculates RFM |
audience-refresh | First Sunday of each month | Rebuilds audience CSVs with fresh customer data |
creative-fatigue-check | Daily 06:00 UTC | Checks if any ad crossed frequency/CTR thresholds |
monthly-report | 1st of each month 08:00 UTC | Full account health summary - one email digest |
Critical Alerts (Email Immediately)
| Trigger | Threshold | Action |
|---|---|---|
| Campaign ROAS drops | 30% or more decline in 7 days | Email: "Campaign X ROAS dropped - review budget" |
| CPM spikes | 40% or more increase in 7 days | Email: "CPM rising - creative fatigue likely" |
| Creative frequency | Any ad crosses 3.5 | Email: "Ad X is fatigued - recommend pausing or rotating" |
| Zero conversions | Campaign runs 48h with no purchases | Email: "Campaign X - 48 hours, $0 in sales. Check targeting." |
| Budget exhausted early | Daily budget spent before 4pm | Email: "Campaign X exhausting budget by midday" |
Meta Automated Campaign Rules
| Rule | Trigger | Action |
|---|---|---|
| Pause fatigued ads | Frequency > 3.5 AND ROAS < 1.5 | Pause ad automatically |
| Scale winning ad sets | ROAS > 4.0 for 7 consecutive days | Increase daily budget by 20% |
| Kill budget-draining ad sets | Spend > EUR 100 with 0 purchases | Pause ad set |
| Frequency reset warning | Frequency > 3.0 | Send notification |
| CPM spike alert | CPM > EUR 20 for 3 consecutive days | Send notification |
Google Ads Scripts (Automatic)
| Script | Schedule | What It Does |
|---|---|---|
| Zero-Impression Pause | Daily | Pauses keywords with 0 impressions in 30 days |
| Search Term Harvester | Weekly | Promotes converting queries to exact match keywords |
| Budget Pacing | Daily | Checks daily budget utilization; alerts if >90% before 18:00 |
| Quality Score Monitor | Weekly | Flags any keyword below QS 5 with >EUR 10 spend |
| ROAS Bid Adjustment | Weekly | If campaign ROAS > target by 20%, raises bid ceiling |
Section 6: Creative Testing Framework
The Creative Lifecycle
Budget: EUR 20-30/day per ad set. Kill threshold: Below 25% hook rate. Promote threshold: Hook rate >30% AND CTR >1.5%.
Budget: EUR 50-150/day based on ROAS. Creative refresh trigger: Frequency > 2.5 OR CTR decline >20% week-over-week.
Move creative to "library" - do not delete. Some creatives revive after a 60-day break. Replace with fresh variation of the same winning angle.
Hook Rate Benchmarks (Food Category, Meta)
| Hook Rate | What It Means | Action |
|---|---|---|
| < 20% | Creative is not stopping the scroll | Kill immediately |
| 20-25% | Underperforming | Kill after 3 days if CTR does not improve |
| 25-30% | Average | Keep testing, watch ROAS |
| 30-40% | Strong | Scale with confidence |
| > 40% | Exceptional | Prioritize, test across audiences, extend run |
Seasonal Creative Calendar
| Period | Campaign Angle | Products to Feature |
|---|---|---|
| Jan (Veganuary) | "You are plant-curious. So is your protein." | Meaty Meat Pork-ish, Thick-Cut Filet |
| Feb-Mar | Recipe-led (comfort food season) | Baby Ribs, Whole-Cut Loin |
| Apr-May | Spring / lighter meals | Kinda Salmon, Kinda Cod |
| Jun-Aug (BBQ) | "The BBQ nobody saw coming." | Baby Ribs, Whole-Cut Loin, Thick-Cut Filet |
| Sep-Oct | Back to cooking season | Full catalog, bundle focus |
| Nov (Black Friday) | Value/bundle deals | Multi-packs, free shipping threshold ads |
| Dec (Gifting) | "The gift that is actually interesting." | Gift cards, Marbles' Signatures collection |
Landing Page Strategy
Most critical insight: Your recipe blog is your best conversion asset. Ads that send cold traffic to a shoppable recipe page convert at 15-20% higher rates than ads sending to a product detail page.
Section 7: Google Shopping Setup
People who search "buy plant-based filet" or "plant meat online" are ready to purchase. Shopping ads capture them visually before they reach organic results.
Shopping Feed Title Format
[Brand] [Product Name] [Key Attribute] [Size/Pack] [Category] Juicy Marbles Thick-Cut Filet Plant-Based 20-Pack FrozenJuicy Marbles Baby Ribs Plant-Based 6-Rack Vegan Meat AlternativeJuicy Marbles Kinda Salmon Plant-Based 4-Filet Frozen
Performance Max (PMax) Guidance
- Set up PMax for your top 3 SKUs
- Add brand exclusions (exclude "juicy marbles" - you do not want to pay for brand-name searches)
- Upload high-quality assets: 3-5 images per product, 2-3 video clips, all 15 headlines, all 4 descriptions
- PMax will cannibalize your other campaigns if budgets are shared
- PMax ROAS numbers include assisted conversions - actual incremental ROAS is usually 15-25% lower
Section 8: Timeline
| Week | Work | What Jon Provides |
|---|---|---|
| Week 0 (Now) | Plan delivered | Review this document |
| Week 1 | Google Ads audit + plain-English report | Google Ads Customer ID + OAuth |
| Week 1 | Meta Ads audit + creative fatigue flags | Meta System User token + Ad Account ID |
| Week 2 | Shopify export + RFM segments + audience CSVs | Shopify Admin API key (read-only) |
| Week 2 | Audience upload to Meta + Google | Jon uploads CSVs (5 min each) |
| Week 2 | GitHub Actions automation setup + email alerts | GitHub account (free) |
| Week 3 | First lookalike campaigns live | Budget approval per market |
| Week 3 | Meta automated rules configured | Business Manager admin access |
| Week 4 | Google Ads Scripts deployed | Google Ads manager access |
| Month 2 | First creative refresh based on fatigue data | 3-5 new creative assets |
| Month 2+ | Ongoing: weekly digests, monthly reports, audience refresh | - |
The actual bottleneck is always API access setup. If you can get credentials to us within 48 hours of reading this, you can have both audit reports by end of the week.
Section 9: What We Need From You
Google Ads
Invite our account as Manager at account level: Google Ads > Tools & Settings > Access and Security > Invite Users. Role: Standard (read + edit, no billing changes).
Share your Google Ads Customer ID (123-456-7890 format) and we set up OAuth credentials together via Google Cloud Console.
Meta
Business Manager > Settings > Users > Partners > Add Partner. Share your Business Manager ID.
Create a System User yourself: Business Settings > Users > System Users > Create (Analyst role). Generate token with ads_read + pages_read_engagement permissions. Share the token + your Ad Account ID (act_XXXXXXXXX format).
Shopify
For each store (US and EU separately): Admin > Settings > Apps and Sales Channels > Develop Apps > Create an App. API Access: grant read_orders + read_customers only. Copy the Admin API access token. Share token + store domain.
These are read-only credentials. We cannot place orders, modify products, or access customer passwords.
GitHub
Create a free account at github.com. Share the username and we will set up the automation repository. All API keys stored as encrypted secrets - not visible to anyone once uploaded.
Section 10: Budget Framework
Meta Budget Split (Recommended)
| Campaign Type | Budget Share | Why |
|---|---|---|
| Cold prospecting (lookalikes) | 50% | New customer acquisition |
| Middle funnel (site visitors, no purchase) | 20% | Keep brand in consideration |
| Retargeting (cart abandon, product page) | 20% | Highest ROAS, but small audience |
| Win-back (At Risk customers) | 10% | Reactivation has high LTV upside |
Scaling Rule
Never increase a campaign budget by more than 20% in a 7-day period. Meta's algorithm treats a large budget jump as a signal to reset the learning phase, which tanks performance for 5-10 days before recovering.
Section 11: Performance Targets
| Metric | Starting Point | 90-Day Target |
|---|---|---|
| Meta ROAS | Unknown (currently) | 2.5-3.5x |
| Google Shopping ROAS | Unknown | 4.0-6.0x (intent traffic) |
| Customer Acquisition Cost (Meta) | Unknown | <$45 USD / <EUR 40 |
| Email marketing: RFM-triggered win-back | Not running | 15-25% reactivation rate |
| Creative refresh cycle | Irregular | Every 4-6 weeks, systematically |
| Time you spend managing this per week | Unknown | <30 minutes (reviewing digests) |
Section 12: The Production System - What You Are Actually Getting
We run two other clients on fully automated ad intelligence systems: TEEI (a Norwegian education nonprofit) and YPAI (a professional development platform). Both run entirely without human intervention between weekly check-ins. What you are getting is a battle-hardened version of the same stack, tuned for an e-commerce DTC brand at your price point.
11A - The 11 "God Mode" Analytics Pipelines
These are diagnostic lenses - each one answers a specific question about why your account performs the way it does. They run on your Google Ads data after the weekly export.
| Pipeline | The Question It Answers |
|---|---|
| Market Share | "Are we losing impressions because of budget or because of quality?" |
| Real Money | "Which conversions are actual revenue vs. form fills / signups?" |
| Context | "Are we better on mobile or desktop? In which cities?" |
| Creative Lab | "Which individual headlines and descriptions are winning?" |
| Waste Hunter | "What search terms are triggering our ads that we have never looked at?" |
| Enemy Radar | "Who is outbidding us and where are we losing impression share?" |
| Interaction Anatomy | "Are clicks coming from ad headlines, sitelinks, or call extensions?" |
| Google Brain | "What does Google's AI think we should change?" |
| Demographic Filter | "Which age groups and genders click vs. actually convert?" |
| Time Lord | "When does your account make money? When does it waste it?" |
| Page Performance | "Which landing pages turn clicks into sales?" |
How this works for you: Every Monday, all 11 pipelines run against your fresh data. The output is a prioritized action list - not a spreadsheet to interpret yourself.
11B - Intelligent Keyword System
- Auto-Pause Zero-QS Keywords: Any keyword with Quality Score below 3 gets automatically paused every day.
- Search Term Harvester: Any query that drove a conversion but is not yet a keyword gets promoted to Exact Match. Any query that spent more than EUR 5 with zero conversions gets added as a Negative keyword.
- Paid-Organic Gap Analysis: Identifies keywords you are paying for where you already rank organically in position 1-3. Monthly cost: ~EUR 0.20.
- Negative Keyword Architecture: Master shared negative list that pre-blocks job-seeking queries, DIY queries, competitor brand names, and irrelevant category terms.
11C - GTM + Conversion Integrity Audit
Before we trust any ROAS numbers, we verify the tracking is correct. The GTM audit inventories every tag, trigger, and variable in your GTM container and maps each conversion tag to the corresponding Google Ads conversion action. If your purchase event is not firing on every completed checkout, Google's algorithm is learning from incomplete data.
11D - Gemini-Powered Responsive Search Ad Generator
Every RSA goes through: Context Extraction from your landing page, Gemini 2.5 Pro ad generation (15 headlines + 4 descriptions), Quality Scoring on 4 dimensions (0-10), and a gate at 8.0 minimum. Any ad below 8.0 goes back for revision.
11E - Smart Campaign Policies Engine
- Geo Targeting Policy: Ensures every campaign is set to "Presence Only" (not "Presence or Interest" - a default that silently wastes budget).
- Device Bid Adjustment: Mobile/tablet bids suppressed -70% to -90% (frozen goods are not impulse buys on mobile). Calibrated after 60 days of your data.
- Bidding Governance: Blocks Target ROAS bidding if a campaign has <30 conversions/month. Below that threshold, it uses Maximize Conversions instead.
11F - ML-Powered Creative Variant Testing
- Thompson Sampling Bandit Optimizer: Bayesian algorithm that automatically shifts budget toward better-performing creative variants in real-time, without waiting for full A/B test significance.
- A/B Test Analyzer: Both frequentist (chi-squared) and Bayesian analysis with minimum sample size calculation.
- Anomaly Detector (Isolation Forest): ML model trained on your normal account behavior. Flags statistically abnormal changes in ROAS, CPM, or conversion volume immediately.
11G - Recipe Blog to Paid Traffic Pipeline (New for Juicy Marbles)
Your 80+ recipe articles are an enormous untapped asset. The system indexes your blog by product and occasion, cross-references with actual Google search terms, and builds shoppable landing pages. Recipe-led ad creative ("Orange Whisky-Glazed Ribs. Yes, plant-based.") captures people through the dish, not the product.
11H - Multi-Store Automation (US + EU Separation)
Every script is multi-tenant by design. US and EU campaigns are tracked, audited, and reported separately. Audience files are built per market. EU-specific additions include: Umami Burger campaign template, Lamb-ish restock alerts, fish product pricing context, and 19+ country geo allow-list.
11I - The Complete Automation Schedule
Daily (06:00 UTC)
| Job | What It Does |
|---|---|
| Creative Fatigue Check | Checks all active ads. Emails if any ad crosses frequency 3.5 with declining CTR |
| Zero-Impression Keyword Pause | Pauses keywords with 0 impressions in last 30 days |
| Anomaly Detector | Runs Isolation Forest over last 7 days. Alerts if anything is statistically abnormal |
| Budget Pacing Check | Checks if daily budget is exhausting before 18:00 UTC |
Weekly (Monday 07:00 UTC)
| Job | What It Does |
|---|---|
| Google Ads Export | Pulls all 16 reports for last 7 days (US + EU accounts) |
| Meta Ads Export | Pulls campaign/adset/ad performance for last 7 days |
| 11 Analytics Pipelines | Runs all God Mode pipelines, produces prioritized action list |
| Search Term Harvest | Promotes converting queries, adds non-converting to negatives |
| Ad Copy Refresh Suggestions | Gemini generates new headline variants for any RSA showing LOW ad strength |
| Weekly Digest Email | Summarizes everything above in one readable email |
Monthly (1st of month, 08:00 UTC)
| Job | What It Does |
|---|---|
| Shopify Customer Export | Fresh order + customer pull from both stores |
| RFM Recalculation | Recalculates all customer segments with updated history |
| Audience CSV Build | New Meta Custom Audience and Google Customer Match files emailed |
| Paid-Organic Gap Analysis | Identifies keywords to add, keywords to stop paying for |
| Blog Content Index Update | Re-scans blog for new recipes, updates keyword-to-recipe matching |
| Campaign Policy Enforcement | Geo, device, negative, and bidding governance across all campaigns |
| Full Monthly Report | 30-day performance summary with YoY comparison |
Quarterly (Jan / Apr / Jul / Oct)
| Job | What It Does |
|---|---|
| ML Model Retraining | XGBoost propensity model retrained on fresh customer conversion data |
| A/B Test Significance Review | Statistical analysis of all running creative tests - calls winners, launches new tests |
| Creative Calendar Update | Generates seasonal creative brief for next quarter |
11J - Total Stack: What Gets Adapted for You
Source Systems (Already Built and Running):
- TEEI Google Ads Platform: 172+ tools, C# MCP server, 177 Python scripts, 8 API integrations
- YPAI Ads and SEO: 16-report GAQL exporter, smart policies engine, ML keyword scoring
- Apollo AI Outreach: XGBoost propensity model, Thompson Sampling bandit, Bayesian A/B testing, Isolation Forest anomaly detection
| Component | Source | Claude Code Instruction (roughly) | Timeline |
|---|---|---|---|
| 16-report Google Ads export | YPAI (direct port) | "Swap customer ID to JM's, set output to /reports/google-ads/" | Day 1 |
| 11 analytics pipelines | TEEI (direct port) | "Connect these pipelines to JM's account credentials" | Week 1 |
| Smart campaign policies | YPAI (adapt) | "Replace YPAI's country list with JM's 19 EU countries" | Week 2 |
| GTM + conversion audit | YPAI (direct port) | "Run against JM's GTM container ID" | Week 1 |
| Gemini RSA generator | TEEI (adapt brand voice) | "Load JM brand voice doc, prohibited phrases, and per-SKU USPs" | Week 2 |
| Search term harvester | TEEI (direct port) | "Connect to JM account, set spend threshold to EUR 5" | Week 1 |
| Auto-pause QS <3 | TEEI (direct port) | "Connect to JM account" | Week 1 |
| Meta export + fatigue flags | New (JM-specific) | Already built | Day 1 |
| Shopify RFM export | New (JM-specific) | Already built | Week 2 |
| Meta Custom Audience build | New (JM-specific) | Already built | Week 2 |
| GitHub Actions daily pipeline | Apollo (adapt) | "Wire up all JM scripts, add JM secrets" | Week 2 |
| Thompson Sampling bandit | Apollo (adapt) | "Connect to JM ad variant IDs from Meta API" | Month 2 |
| Anomaly detector | Apollo (adapt) | "Train baseline on JM's first 60 days of data" | Month 2 |
| Recipe blog pipeline | New (JM-specific) | "Build from scratch - read JM blog, categorize by product" | Month 2 |
| Bayesian A/B test analyzer | Apollo (direct port) | "Connect to JM creative test variant IDs" | Month 2 |
Zero new infrastructure to buy. Everything runs on GitHub Actions (free), Python (free), and APIs you already need for the account anyway.
Security Notice
No API keys or tokens should be sent by email or shared in this document. All credentials should be stored locally in a .env file, entered directly into GitHub Secrets (encrypted), or shared via a password manager (1Password, Bitwarden) shared vault entry.
Next Step
Send us whichever API access you can set up first - Meta or Google, your call. We will have the first audit report back to you within 24 hours of receiving credentials.
The automation setup (GitHub Actions + alerts) runs in parallel with the audits. By the time the audits are done, the monitoring system will already be live.
The first week will show you exactly what has been happening. The second week we fix it.