The Shopify Meta Ads Stack We Run on Our Own Stores: Real Data, Real Rules
We don’t just build Calatrix. We use it.
Our company runs two Shopify stores with Meta ads. One does €25k/month, the other €18k/month. We’ve tested every automation tool on the market (Madgicx, Birch, Triple Whale, Meta native rules), and we’ve built our own (Calatrix).
This is what actually works.
The Two Stores
Store 1: Richmont Canada (Luxury Jewelry)
- Type: Branded, premium, repeat customers
- AOV: €280
- Product COGS: 42% (€118)
- Fees: 4.2% (€12)
- Target profit margin: 30% (€84)
- Monthly ad spend: €25,000
- Monthly revenue: €180,000
- Repeat customer rate: 22%
- Average customer LTV: 2.1x
Store 2: Laura Firenze (Women’s Fashion)
- Type: Branded, trend-driven, seasonal
- AOV: €95
- Product COGS: 48% (€46)
- Fees: 3.8% (€3.60)
- Target profit margin: 25% (€24)
- Monthly ad spend: €18,000
- Monthly revenue: €140,000
- Repeat customer rate: 18%
- Average customer LTV: 1.8x
The Math: Our Break-Even ROAS
Store 1: Richmont
Revenue: €280 Minus COGS: −€118 Minus fees: −€12 Available for ad spend + profit: €150
If we want 30% profit margin (€84):
- Max ad budget: €150 − €84 = €66
- Break-even ROAS: €280 / €66 = 4.24x
Wait, that’s high. But it’s first-purchase only. Repeats change it.
With 2.1x LTV (repeats):
- Effective break-even: 4.24x / 2.1 = 2.02x
Our kill rule threshold: 2.2x ROAS (7-day window, Shopify profit data)
Store 2: Laura Firenze
Revenue: €95 Minus COGS: −€46 Minus fees: −€3.60 Available for ad spend + profit: €45.40
If we want 25% profit margin (€24):
- Max ad budget: €45.40 − €24 = €21.40
- Break-even ROAS: €95 / €21.40 = 4.44x
With 1.8x LTV:
- Effective break-even: 4.44x / 1.8 = 2.47x
Our kill rule threshold: 2.8x ROAS (7-day window, Shopify profit data)
Our Automation Stack
We use three layers:
Layer 1: Kill Rules (Automated, Defensive)
These prevent disasters. They run 24/7 with zero manual intervention.
Calatrix is our tool for this. Why? Shopify profit integration. COGS awareness.
Our rules:
| Rule Name | Trigger | Threshold | Action | Evaluation Window |
|---|---|---|---|---|
| Break-even pausing (Store 1) | Profit margin | < 15% | Pause ad set | 7 days |
| Break-even pausing (Store 2) | Profit margin | < 12% | Pause ad set | 7 days |
| Learning phase guard | Spend | > €250, learning status | Pause ad set | 2 days |
| Zero-purchase guard | Conversions | 0, spend > €150 | Pause ad set | 2 days |
| Frequency control | Frequency | > 4.5 | Pause audience | 1 day |
Monthly impact:
- Pauses ~30–35 ad sets/month
- Saves €800–1,200/month in wasted budget
- Prevents 2–3 major loss events/month (where we’d have otherwise spent €500–1,000 on a doomed ad set)
Layer 2: Scaling & Optimization (Manual, Strategic)
This is where our team adds value. Rules can’t scale well. We do.
We review twice/day:
- 9 AM: Check yesterday’s performance, scale winners, pause marginal performers
- 5 PM: Quick scan for outliers (ad set spent €500 suddenly, check why), adjust bids
Process:
- Filter ad sets by ROAS (showing only those > 3.0x and < 1.8x ROAS)
- For ROAS > 3.0x: increase daily budget by 20–50%
- For ROAS < 1.8x (but profit margin not yet below threshold): reduce spend or test new creative
- For ROAS 1.8–2.2x: hold, collect more data (don’t panic kill)
Monthly impact:
- Reallocate €2,000–4,000/month to winners
- Catch early problems before rules do (by 3–6 hours)
- Test creative variations in scale winners
- Manage audience overlap manually (Meta won’t do this for you)
Layer 3: Strategic Experiments (Weekly)
This is where growth happens.
Richmont:
- Test new creative angles monthly (seasonal, occasion-based: “Engagement ring trends 2026”)
- Test new audiences (expand into adjacent markets: “Men buying jewelry for partners”)
- Test new positioning (loyalty program, gift sets)
Laura Firenze:
- Test trending styles (seasonal, TikTok trends)
- Test new demographic angles (age, interest, device type)
- Test new creative formats (video, carousel, collection)
Monthly impact:
- Find 1–2 new winning audiences/month
- Discover new creative angles
- Growth that automation can’t find
What Didn’t Work
Attempt 1: Meta Native Automated Rules
Tool: Meta Ads Manager built-in rules Cost: Free Result: Failure
Why: Meta rules are binary. You can pause if ROAS < X, but you can’t pause if profit margin < X. We have products with 40% COGS and 60% COGS. Meta sees only ROAS (same for both). It kept pausing products with 40% COGS (high margin, profitable) while running products with 60% COGS (low margin, unprofitable).
Example:
| Product | AOV | COGS % | Profit margin | Meta ROAS | Meta decision | Correct decision |
|---|---|---|---|---|---|---|
| Ring (40% COGS) | €500 | 40% | 35% | 1.9x | Kill (ROAS < 2x) | Keep (margin positive) |
| Pendant (60% COGS) | €200 | 60% | 8% | 2.1x | Keep | Kill (margin low) |
Meta killed profitable items, kept marginal ones. Automated rules started to fail.
Lesson: ROAS-based rules don’t work for product-level COGS variance.
Attempt 2: Madgicx (at scale)
Tool: Madgicx full stack Cost: €280/month Result: Partial success, then failure
What worked: Creative testing features. Budget scaling recommendations. Good UX.
What failed: Still ROAS-based. Didn’t see COGS.
Example: One of our Laura Firenze campaigns had low-cost items (€30 AOV, 60% COGS). Madgicx flagged it as unprofitable based on ROAS alone. But the margin was actually okay because fees were lower. Madgicx couldn’t see that.
Secondary failure: At scale (€43k/month combined), Madgicx costs climbed to €350+/month. ROI became marginal.
Lesson: Third-party tools are better than Meta native, but they miss COGS-level profit insight.
Attempt 3: Birch Ads (former Revealbot)
Tool: Birch (after rebrand) Cost: €200/month Result: Failure
Same issue as Madgicx: ROAS-based, not profit-based. Plus, Birch increased prices 20–30% after rebrand. At that cost, it needed to be 20–30% better. It wasn’t.
Lesson: Beware of rebrand tax. Birch wasn’t worth the increase.
What Worked
Calatrix + Manual Optimization
Tool: Calatrix for kill rules + manual review twice/day Cost: €100/month Result: Success, ongoing
Why it works:
-
Shopify profit data: Sees COGS per product. Rules are profit-based, not ROAS-based.
-
Real-time: Checks every 15 min. By 2 PM, we know if a morning launch is a dud.
-
Simplicity: Kill rules are simple (profit < 15%), forcing us to scale manually (where judgment matters).
-
Cost: €100/month is trivial at €43k/month spend. 0.23% of budget. ROI is 8–12x.
Real numbers (last 12 months):
- Paused: 365 ad sets
- Average waste prevented: €32/ad set = €11,680/year
- Tool cost: €1,200/year
- Net savings: €10,480/year
- ROI: 8.7x
Our Exact Rules (Production)
Richmont Canada
Rule 1: Break-Even Profit
IF profit margin < 15% in last 7 days
THEN pause ad set
EVALUATION WINDOW: 7 days
MINIMUM SPEND: €100
Why 15%? (Target is 30%, but we protect at 15% to be safe. If it goes below 15%, we’re losing money.)
Rule 2: Learning Phase Guard
IF learning status = "not yet exited" AND spend > €250 in last 2 days
THEN pause ad set
EVALUATION WINDOW: 2 days
Why? Learning phase burns budget. If it costs >€250 to learn, pause and re-launch with better targeting.
Rule 3: Zero Conversions
IF conversions = 0 AND spend > €150 in last 48 hours
THEN pause ad set
EVALUATION WINDOW: 2 days
Why? If we’ve spent €150 with zero conversions, something’s broken (targeting, creative, landing page). Pause and debug.
Rule 4: Frequency Control
IF frequency > 4.5 in last 1 day
THEN pause audience (rotate to new audience)
EVALUATION WINDOW: 1 day
Why? Repeat impressions kill CTR. High frequency = ad fatigue.
Laura Firenze
Rule 1: Break-Even Profit (more aggressive)
IF profit margin < 12% in last 7 days
THEN pause ad set
EVALUATION WINDOW: 7 days
MINIMUM SPEND: €100
Why 12% (vs 15% for Richmont)? Margin is tighter on fashion (48% COGS). Need to be more aggressive to protect profit.
Rule 2: Learning Phase Guard
IF learning status = "not yet exited" AND spend > €200 in last 2 days
THEN pause ad set
EVALUATION WINDOW: 2 days
Why €200 (vs €250)? Smaller AOV means learning phase costs less. €200 is the threshold.
Rule 3: Zero Conversions
IF conversions = 0 AND spend > €120 in last 48 hours
THEN pause ad set
EVALUATION WINDOW: 2 days
Rule 4: Frequency Control
IF frequency > 4 in last 1 day
THEN pause audience (rotate)
EVALUATION WINDOW: 1 day
Monthly Performance Dashboard
Richmont (Last 30 Days)
| Metric | Value | Target | Status |
|---|---|---|---|
| Ad spend | €25,300 | €25,000 | On track |
| Revenue | €182,400 | €180,000 | Exceeded |
| ROAS (Meta reported) | 7.2x | 6.0x | Exceeded |
| ROAS (Shopify actual) | 2.9x | 2.5x | Exceeded |
| Profit margin avg | 28% | 30% | On track |
| Kill rules triggered | 32 | ~30 | Normal |
| Waste prevented | €1,050 | — | Estimated |
Laura Firenze (Last 30 Days)
| Metric | Value | Target | Status |
|---|---|---|---|
| Ad spend | €18,100 | €18,000 | On track |
| Revenue | €139,200 | €140,000 | Close |
| ROAS (Meta reported) | 7.7x | 7.0x | Exceeded |
| ROAS (Shopify actual) | 2.5x | 2.3x | Exceeded |
| Profit margin avg | 24% | 25% | On track |
| Kill rules triggered | 25 | ~25 | Normal |
| Waste prevented | €780 | — | Estimated |
What We Learned
Lesson 1: ROAS is a Lie
Meta’s ROAS is inflated 20–40%. It’s not lying intentionally; it’s attribution modeling (gives credit to every touchpoint). But for Shopify stores, Shopify profit is the truth.
We now measure:
- Meta ROAS (for comparison to benchmarks)
- Shopify profit margin (for decision-making)
- Repeat rate (for LTV planning)
Lesson 2: Simple Rules > Complex Rules
We tried nested conditions (Madgicx style). Result: decision fatigue.
Simple profit margin rules work better: profit < X%, pause. Done.
Simplicity forces us to scale manually, where judgment matters. Automation handles the bleeding. Manual handles the growth.
Lesson 3: Frequency Matters More Than We Thought
Before kill rules, we didn’t track frequency. Turns out: CTR decay is the #1 cost driver at €20k+/month.
Now we pause audiences at frequency > 4.5 (Richmont) and > 4 (Laura Firenze). Saves ~€400/month per store in prevented CTR collapse.
Lesson 4: 7-Day Windows Are Better Than 24h
At first, we tried 24-hour kill rules (be aggressive). Result: killed profitable repeat-customer campaigns.
Switched to 7-day windows. Same kill rule triggers ~25% fewer pauses. But the pauses are 100% more accurate (you’re catching real problems, not noise).
Lesson 5: Manual Scaling Beats Automated Scaling
We tested automated budget scaling (scale +50% if ROAS > 3x). Result: scaled into saturation.
Now we manually review, decide which winners to scale and by how much. Slower, but more strategic. Prevents budget bloat.
The Cost of Mistakes
Mistake 1: No Kill Rules (Pre-Calatrix)
Without automated pausing, we lost ~€2,500/month (1.4% of budget).
How? Ad sets that should have been paused at day 3 (before €300 waste) ran until day 7 (€700 waste).
Mistake 2: ROAS-Based Rules (Madgicx Era)
Using Madgicx’s ROAS rules, we paused profitable items (high margin, lower ROAS) and kept marginal items (low margin, higher ROAS).
Cost: €600–1,000/month in wrong decisions.
Mistake 3: No Frequency Cap (Early Days)
High-frequency campaigns looked good (volume), but CTR collapsed by day 7. Ran until day 14 before we noticed.
Cost: €400–600/month in CTR decay waste.
Why We Built Calatrix
After running these stores for 3 years, we learned:
-
ROAS tools don’t work for Shopify. Shopify profit is what matters.
-
Product-level COGS is critical. We have items from 35–65% COGS. One rule doesn’t fit all.
-
Manual + automated is best. Automation prevents bleeding. Manual finds growth.
-
Founders understand their own stores best. Generic tools make generic decisions.
So we built Calatrix:
- Shopify profit data (not Meta ROAS)
- Product-level COGS integration
- Simple kill rules (we manually scale)
- Founder-first UX (straightforward, no complexity)
And we run it on our own stores first. Real data. Real margins. Real ROI.
The Bottom Line
We spend €43k/month on Meta ads across two stores. We use Calatrix for kill rules, manual review for scaling, and strategic thinking for growth.
Automation prevents disasters. Manual optimization finds upside.
ROAS is a metric. Profit is the goal.
Run the same stack on your store — Calatrix for kill rules, real Shopify profit data, 14-day free trial.
We built it for us. We use it every day. It works.
Your store’s profit margin is real, measurable, and worth protecting.
Ready to stop losing money on Meta ads?
Set up automated kill rules and let Calatrix protect your ad spend 24/7. Pair this with Shopify's real order data and COGS tracking to optimize for actual profit, not vanity metrics.
Start 14-day free trial