Hemp · CBD · Meta + Google Ads · Subscription · USA · Restricted industry
In this category every brand gets banned. This account ran 14 months without one.
CBD on Meta. 14 months. Zero bans. $745K from Google.
Moonwlkr makes premium hemp gummies (Delta-8, Delta-9, HHC, CBD) sold direct-to-consumer on subscription. Most brands in this category get banned on Meta within weeks, or never try at all.
I built the Restricted Industry Framework that keeps the account clean from a normal Facebook account, then rebuilt Google Ads from a near-dead state to $745K conversion value in one year. 14 months and counting, zero restrictions.
"Just appreciate what you do for us + I don't like money owed lol."
TJ, Brand owner · Moonwlkr · Slack message after I sent the invoice two days early. He paid it within the hour.
What this case study actually proves
- One brand, one client, 14 consecutive months on Meta + 13 months scaling Google. Not portfolio averaging, not blended agency math.
- Zero Meta account restrictions in a CBD/hemp category where every other brand gets banned. Architecture, not luck.
- Real screenshots, real numbers, verifiable math, and a real Slack message from the brand owner.
Who this case study is for
- CBD, hemp, THC, kratom, cannabis-adjacent DTC brands fighting for Meta access
- Subscription-first operators where LTV >> first purchase but the algorithm optimises identically on both
- $5-50K/month Meta accounts that keep getting reset every 6-8 weeks
- Brands whose agency said 'you can't run paid ads on CBD' or quoted a black-hat workaround
In restricted since
7+ yrs
iOS 14.5 broke default tracking, I rebuilt for restricted in 2019
Active restricted accounts
5+
Currently under management, anonymised by request
Restricted spend processed
€10M+
Across CBD, hemp, peptides, vape, adjacent
This account survival
14+ mo
and counting · year-end update due in this case study
No black hat. No workarounds. Built for brands that need a sustainable paid channel.
Why CBD brands get banned - and why this account didn't
Every agency tells CBD brands they can't run Facebook. We ran it for 14 months.
Accounts selling CBD and hemp get banned for two reasons: restricted creative and restricted signals. The creative problem is solvable - you learn what language Meta flags. The signal problem is structural. When your browser pixel fires on a hemp product page, Meta's systems see the product content alongside the conversion event. The pixel becomes the liability. The fix isn't better creative - it's moving the conversion signal server-side so Meta receives a clean, complete event with no product-page context attached. The complete implementation runs within the Restricted Industry Framework.
What gets most CBD accounts banned
- Browser pixel fires with product URL in the referrer, Meta logs the hemp page as event context
- Events arrive with partial parameters: no hashed email, no phone, no ZIP, low EMQ scores
- Account gets flagged. Creative gets blamed. Agency recommends a fresh account.
- New account. Same pixel architecture. Same outcome. Six to eight weeks later.
- Retargeting audiences built on dirty signals, lookalikes useless, CPM climbs
What I built instead
- All conversion events routed server-side first, browser pixel backed by CAPI at every touchpoint
- Full Enhanced Matching parameter set on every Purchase event, with click attribution preserved server-side across the full purchase path
- A pure server-only event Meta can't tie to a product page, scoring the highest event match quality in the pixel
- Redundant server-side purchase signal fires regardless of browser state, ad blocker, iOS restriction, or consent dropoff
- Result: 8.0/10 Purchase EMQ with 100% parameter coverage. Account invisible to the restriction triggers that take down default setups.

Fig 1, Meta Pixel overview · Full event funnel · EMQ scores across all events + Purchase parameter coverage
Aug–Sep 2024. Full event funnel running with browser + server integration on every event. A dedicated server-only event scores the highest EMQ in the entire pixel because it carries no browser component for Meta to tie back to a product page. This is what a clean architecture looks like from Meta's side.
Purchase EMQ breakdown (8.0/10): every Purchase event sends the full Enhanced Matching parameter set, all hashed, all at 100% coverage. CAPI recovering +14.5% conversions the pixel alone missed. Click attribution preserved server-side across the full purchase path, present in every payload. This is the signal coverage that keeps the account restriction-proof.

Fig 2, Meta full year 2025 vs 2024 · $0 spend in 2024 · $130,531 in 2025 · $222,322 website purchase conv value
Jan–Dec 2025 vs Jan–Dec 2024. Prior year spend: $0.00. The account wasn't running Meta in 2024. Full year 2025: $130,531.88 spend, $222,322.41 website purchase conversion value. Restricted product, normal account, running the full year without interruption.
What rotation actually costs CBD/hemp brands per year
Run the math on a default CBD Meta setup. Typical pattern: account runs 6-8 weeks, gets banned, rebuild, repeat 3-4× per year.
- Each rebuild costs 4-6 weeks of pipeline. 3 bans/year = 16 weeks offline = 31% of your year not converting.
- Each ban resets the algorithm and retargeting audiences. Six weeks of compounding learning lost. The brand campaign at 36.43× ROAS doesn't exist without 14 months of continuous data feeding it.
- Most CBD brands give up on Meta entirely and pay 15-20% affiliate commission instead, losing customer data ownership and paying more per sale than working ads would cost.
- At Moonwlkr's scale, the broken-default outcome (no Meta + broken Google) was costing roughly $500K-$1M/year in revenue the brand was leaving on the table. The infrastructure rebuild was the cheapest line item in the entire P&L impact.
Most operators don't run this math because the cost shows up as "we couldn't scale", not as a line item.
Sound familiar? I can usually tell you in 30 minutes whether the same fix applies to your category.
Book a 30-min diagnostic →What you should stop doing immediately
Five default setups that guarantee your CBD account dies or underperforms.
If you recognise any of these in your current setup, you already know why the channel isn't working. None of them are fixable with "better creative" or "smarter bidding."
Running the default Meta pixel on your hemp/CBD product domain. You're feeding Meta's classifiers a complete map of what you sell, every page view. The pixel becomes the liability.
Browser-only attribution in a restricted category. You're losing 60%+ of conversions to iOS, ad blockers, and consent dropoffs, and the algorithm trains on the wrong signal.
Rotating Meta ad accounts every 6-8 weeks because the previous one got banned. Each fresh account starts the algorithm at zero. Retargeting audiences gone. Lookalikes useless.
Tracking a single 'Purchase' goal on a subscription product. The algorithm bids the same on a $7 repeat box as on a $200 LTV new subscriber, the new customer is worth 5-10× more.
Paying agencies to R&D on your account, your budget, your bans. They learn at your expense, you write the tuition.
Tracking architecture - Restricted Industry Framework
Most accounts get banned because the pixel is the liability. I moved the liability server-side.
Every Purchase event carries the full Enhanced Matching parameter set with click attribution preserved server-side across the full purchase path, full attribution even when the browser can't carry the click data forward. A pure server-only event ensures Meta never sees restricted product context alongside the conversion signal.
This replaced a previous third-party attribution solution. Off-the-shelf tools couldn't deliver the event-level architecture a restricted-category brand needs to survive on a normal account at scale. The custom implementation is now running across Meta, Google, and Snapchat, same framework, each channel built on it from scratch.
Server-side first, by default
All ad-platform events flow through the server before send. Full Enhanced Matching parameter set on every purchase, click attribution preserved across the full path, redundant capture so no event is lost to iOS, ad blockers, or consent dropoffs. The brand domain stays out of Meta's policy review layer entirely.
Creative strategy for restricted brands
- Lifestyle and benefit-led creative only, no product imagery
- Mix of produced video, AI video, AI-generated design, classic static
- Benefit language Meta's classifiers don't flag, no restricted terminology
- Compliance-aware landing layer maintains learning and attribution end to end
The full framework is documented for brands in restricted categories: supplements, CBD/hemp, adult wellness, gambling-adjacent, and other Meta and Google restricted verticals.
Restricted Industry Framework →Google Ads - from $21K annual to $745K
The account existed. It just wasn't working.
November 2024: $4,562 monthly spend. $2,332 monthly conversion value. 51% ROAS - below breakeven on first purchase, on a subscription product where first purchase is subsidized by LTV. The structure wasn't catastrophically wrong. It just hadn't been built for the subscription math.
Thirteen months later: $339K annual spend. $745K conversion value. 219% ROAS. Four campaigns. One brand campaign at 36× ROAS harvesting high-intent searches on minimal spend. One non-brand volume campaign at 1.45× - on a subscription product, 145% first-purchase ROAS is profitable when you factor in LTV. Demand gen and a prospecting campaign feed the pool that makes both efficient.
November 2024 - before
Monthly spend
$4,562
Monthly conv value
$2,332
ROAS
51%
Full year 2025 - after
Annual spend
$339K
Annual conv value
$745K
ROAS
219%
search · gummies · brand
36.43×
$7,996 spend
- 18,433 clicks at $0.43 CPC, buyers who already know Moonwlkr
- 29.05% CTR, the highest intent segment in the account
- 3,489 conversions, $291K conversion value on under $8K spend ($7,996 × 36.43× = $291,375)
- This ROAS is partly a function of demand gen investment building brand recognition
search · gummies · non-brand
1.45×
$245,972 spend
- 108,697 clicks, the main volume driver across all hemp search terms
- 145% ROAS on first purchase. Subscription LTV is where the real margin is.
- 14,964 conversions, builds the remarketing and lookalike audience pools
- $353K conversion value, the largest absolute revenue contributor

Fig 3, Google Ads full year 2025 vs 2024 · +1,477% spend · +1,862% conv value · 219% ROAS
Jan–Dec 2025 vs Jan–Dec 2024. Spend: $339,591 (+1,477%). ROAS: 2.19× (+24%). Conversions: 20,943 (+1,321%). Conv value: $745,032 (+1,862%). The 2024 baseline (~$21K) was the account before AdPistols. Every +∞ column in the non-brand campaign confirms it launched fresh in this period with no prior data.

Fig 4, Campaign breakdown · Nov 2024–Aug 2025 · ROAS by time window + conv value per campaign
All four campaigns: ROAS by time, conversions, conversion value, spend vs prior period. Total account: 2.26× ROAS, 178,210 clicks, 21,765 conversions, $303,737 spend. Every campaign shows +∞ or strong positive delta vs Jan–Oct 2024.
Subscription tracking - built for LTV, not just first purchases
Most accounts track one "Purchase" goal. I track three.
Purchase + New Customer + Subscription Start. Different signals for different bidding strategies. When Google Smart Bidding sees one conversion called "purchase," it treats every purchase identically. A twelfth-box repeat customer valued the same as a first-time subscriber, that's backwards. The algorithm needs to know the difference between a $7 repeat box and a $200 LTV new subscriber. New customers are worth 5–10× more over lifetime. The algorithm should bid accordingly.
Moonwlkr tracks three conversion actions. Purchase is primary - Google uses it for bidding. New Customer and Subscription Start are secondary - they tell the algorithm what kind of purchase just happened. Last 30 days: 395.71 purchases. 206.13 flagged as new customers. 76.62 as Subscription Start. That's 52% first-time buyers - and Google knows it.
Next step: shift the primary optimisation target to New Customer and Subscription Start only. Stop paying acquisition cost for repeat orders. Let Smart Bidding hunt first-time subscribers exclusively - the segment where LTV actually starts.
Purchase (primary)
395.71
$30,410.54 all conv. value
All conversions in last 30 days. The primary signal Google uses for bidding.
New Customer (secondary)
206.13
$14,178.30 all conv. value
52% of purchases are first-time buyers. Google tracks them as a separate signal.
Subscription Start (secondary)
76.62
$5,396.76 all conv. value
New subscribers entering the recurring revenue loop, the customers worth acquiring.

Fig 5, Customer lifecycle goal + conversion action breakdown · Purchase primary · New Customer + Subscription Start secondary
Lifecycle goal (Apr 16–May 15, 2026): $45.69 incremental value per new customer, 5 acquisition segments. Retention: not set - the account is acquisition-focused. Conversion actions: Purchase primary - 395.71 conversions ($30,410.54), 10 of 12 campaigns · New Customer secondary - 206.13 ($14,178.30) · Subscription Start secondary - 76.62 ($5,396.76). 52% of purchases are first-time buyers - and Google tracks them separately.
Q1 2026 - new ownership, same infrastructure, accelerating results
The company was sold. Now it's finally scaling.
Ownership changes usually pause acquisition. This one didn't. Q1 2026 vs Q4 2025 on Google Ads: ROAS up 66%. Conversions up 97%. The infrastructure built for the previous owner runs for the new one - same architecture, larger budget, same playbook. Snapchat is next: same server-side framework, new channel, same principle. Build the tracking first. Then spend.
Previous quarter
Q4 2025
~1.2×
~$43K spend · ~616 conv
Q4 2025 baseline, the comparison period for Q1 2026.
Jan–Mar 2026
Q1 2026
1.98×
$50,340 spend · 1,220 conv
+66% ROAS, +97% conversions vs Q4 2025. Google Ads accelerating under new ownership.
Apr–May 2026
Last 30 days
8.82×
$899 spend · 85 conv
Meta AP_sales_cold_purchase-click+view. Highest ROAS in the account. Cold audience converts on impression, not just click.

Fig 6, Google Ads Q1 2026 vs Q4 2025 · ROAS +66% · Conversions +97% · Conv value +95%
Jan 1–Mar 31, 2026 vs Oct 3–Dec 31, 2025. Spend: $50,340 (+17%). ROAS: 1.98× (+66.47%). Conversions: 1,220 (+97.09%). Conv value: $99,763 (+94.66%). Brand campaign: ROAS 15.88× (+255.96%). Non-brand: 1.61× (+60.89%). Demand gen: 3.15× (+161.61%).
Meta ROAS · Q1 2026 · max attribution
2.90×
($75,820 1-day view + $102,020 28-day click) ÷ $61,307 spend
New ownership context: the brand changed hands at the start of Q1 2026. Same infrastructure, larger budget under the new owner. Zero learning lost in the transfer, what ran for the previous owner runs identically for the new one.

Fig 7, Meta Q1 2026 · $61,307 spend · purchase conversion value by attribution window
Jan 1–Mar 31, 2026. Total spend: $61,307.76. Website purchases total: $84,244.31. Conversion value by attribution window: 1-day view $75,820.87 · 1-day engaged $1,350.14 · 7-day click $65,503.41 · 28-day click $102,020.58. AP_sales_cold_purchase-click+view: $20,092 under 1-day view vs $2,788 under 28-day click - the cold audience converts on impression. Restricted product, normal account, full quarter without interruption.
14 months. Two ownership eras. Two platforms scaling. If you're in restricted and want this kind of continuity, 30 minutes is enough for me to tell you whether the framework fits your category.
Book a 30-min diagnostic →Methodology
How to verify these numbers yourself.
Everything on this page is calculable from the screenshots above. Here's the math and what's intentionally hidden.
Numbers are platform-native
Nov 2024–Aug 2025 (10 months): 226% blended (2.26× total account in Fig 4). Full-year 2025: 219% blended ($745,032 ÷ $339,591 = 2.19×, Fig 3). All figures pulled directly from Google Ads and Meta Ads Manager. Every screenshot shows OT_moonwlkr under AdPistols MCC in the header.
EMQ is Meta-attested
Purchase 8.0/10 and the highest-EMQ server-only event at 8.3/10 are Meta's own quality signals in Events Manager, not third-party estimates. These are the scores Meta gives when the CAPI payload contains enough valid Enhanced Matching to attribute the event to a real user identity.
Brand identity is public, performance data is real
Moonwlkr is named publicly with the client's consent. Every performance figure (spend, ROAS, EMQ, conversion value, restriction count) is the real account data. The Slack message in the hero is from TJ, the brand operator.
What's intentionally not shown
The exact server-side schema, attribution restoration logic, compliance-aware landing layer, and compound-level policy interpretation stay inside paying engagements. This page shows the outcome, the conceptual flow, and the verification math, not the build manual. My clients pay for that privacy.
Meta Q1 2026 ROAS 2.90×, max non-overlapping attribution
Spend $61,307.76. 1-day view $75,820.87 + 28-day click $102,020.58 = $177,841.45 ÷ $61,307.76 = 2.90×. Two non-overlapping sources: 1-day view (impression-based) + 28-day click (broadest click window, already includes the 7-day click value inside it, summing 7d and 28d would double-count). The 1-day engaged ($1,350.14) is excluded to keep the math clean. Fig 7 shows all attribution windows for transparency.
What working with me looks like
From your first call to an account that scales without resets.
No deck, no procurement, no 6-month "discovery." This is what an engagement actually looks like, end to end.
Diagnostic & feasibility
Live audit of your current Meta and Google accounts, restriction history, and Restricted Industry Framework fit for your category. Written scope with build cost, ongoing cost, and timeline before any commitment.
Framework build
Restricted Industry Framework deployment: server-side attribution layer, compliance-aware landing pattern, account architecture, creative system. Ads start running where it's safe, so you don't lose weeks of pipeline.
Scale phase
Algorithm learns from clean signal, ROAS ramps. Subscription logic, lifecycle conversion goals, and additional architecture layered in as the category and product model demand.
Ongoing partnership
Campaign management, creative refresh, channel expansion (Snapchat, TikTok, programmatic). Quarterly architecture reviews. Account stability compounds, you stop firefighting and start scaling.
Common questions before you book
The seven things every restricted-vertical operator asks me first.
Is server-side + compliance-aware landing against Meta or Google ToS?
No. The pattern is the same family of cross-domain attribution publishers, affiliates, and large e-commerce brands use. The setup runs on a normal account whose content is compatible with platform policy. Data goes server-side, where it's reconciled, encoded, and cleaned before send. No misrepresentation, no false claims. Defensible under any audit.
How long until I see results?
Infrastructure goes live in 3-4 weeks. Algorithm learning takes 6-12 weeks of clean signal. Moonwlkr's Google account went from 51% to 226% ROAS in ~9 months. The Meta channel hit sustained running at scale across 14 months. The framework rewards patience.
What does it cost?
Build is one-time, scoped after the diagnostic. Ongoing management uses the Restricted Vertical Framework tier on the pricing page: from €6,000/month per channel (Google + Meta together from €12,000/month). Setup from €5,000, scoped after the diagnostic. Ad spend always billed separately direct to platform.
What if I'm in THC, kratom, nootropics, peptides, vape, or hemp-adjacent?
Same playbook with category-specific tuning. The architecture is vertical-agnostic. Category-specific work is in policy interpretation, creative framework, and market-by-market compliance. I've run this in CBD, hemp, peptides, vape, kratom-adjacent, and other restricted categories.
What if my account gets restricted anyway?
It happens, even with the best architecture. When it does, I know the appeal process, I keep backup account structure ready, and recovery is 1-2 weeks instead of 6+. Restricted is a marathon. The point of this work is to make restrictions rare and recovery fast, not to claim immunity.
If this works so well, why isn't every agency doing it?
Technical barrier is high. Most agencies optimise for ad spend, not for infrastructure that lives upstream of ads. Building this requires server engineering, compliance interpretation, and ongoing platform monitoring. Not a 90-day learning curve for someone coming from generic DTC.
What happens if we stop working together?
Full handoff documentation is part of every engagement: architecture diagram, runbook, monitoring playbook, escalation contacts. Your in-house team or any future operator can pick up the work. Clients stay because they want to, not because they're locked in.
Operator's note
The brand owner pays invoices early. That's what 14 months of zero bans, $745K from Google, and a Meta channel that runs from a normal Facebook account buys you in a category where every other brand gets banned. Not because of luck, because of architecture.
I've been keeping restricted-category ad accounts alive since iOS 14.5 broke standard tracking. Seven years, 5+ active restricted accounts under management. I know which compounds Meta flags, which Google policy interpretations shift quarterly, where the default approach stops working.
To be clear: this is not a workaround. The architecture is the same family of cross-domain attribution publishers, affiliates, and large e-commerce brands rely on. Fully documented. Defensible under any audit. No misrepresentation, no policy violation waiting to surface.
Tell me your category and what you're running into. I'll tell you whether the same framework applies, what it would cost to build, and what it would cost to keep running. No pitch.
Third-party verification
Don't take my word for it.
📅 Year-end 2026 update
Full year data and the second-ownership-era arc will be added here in Q1 2027 once the account closes the year under new ownership. This case study is a living document, not a snapshot. The engagement is still active.
What this case study doesn't include - and why
- Subscription LTV breakdown, the math that makes 145% first-purchase ROAS profitable. Commercially sensitive.
- Full Meta spend totals, client preference on total budget disclosure.
- Snapchat results, channel launched after this case study was written.
- Server-side GTM container and CAPI event schema, proprietary architecture.
"Extremely knowledgeable and thorough, Marek is one of the best!"
Moonwlkr · cbd gummies · Upwork verified
Visual proof of the quote in the hero

Slack from TJ at Moonwlkr after I sent the invoice on the 29th (date said the 1st). Paid within the hour.
Selective by design · 1-2 capacity slots per quarter
Minimum engagement 3 months. Minimum spend $10K/month.
If you're above those numbers and your CBD/restricted account keeps getting reset before you can build any compounding data, three ways to start the conversation.
Starting from zero? Possible if you have capital to invest. The setup phase takes 2-3 months and needs substantial upfront investment before ROAS catches up. Better suited to brands already running, but if you're committed and funded, I can take you from $0 to scale.
Path 1 · Self-serve
Restricted ban-risk diagnostic
90-second diagnostic for CBD / hemp / restricted brands. Score your ban exposure across tracking, account structure, and creative. No call required. Best when you want a fast read before booking my time.
Run the diagnostic →Path 2 · Paid
Full Audit
Up to 3 marketing channels in one written report: structure, tracking, attribution, plus an AI opportunity layer. Delivered within 72 hours. €1,500 fixed.
See audit options →Path 3 · Direct
Strategy Call
30 minutes, your category, your situation, honest answer on whether the restricted framework applies and what it costs.
Book the Call →Or email contact@adpistols.comand describe your category and what you're running into.