Skip to main content

Know which campaigns are actually profitable.

Trellis grounds every recommendation based on your first-party data, ranks it by confidence, and sharpens with each audit you run. Computed with defensible statistical methodology, not a generic AI prompt.

Integrated with: Google Ads Microsoft Ads Meta Ads Shopify
Improve the way you manage performance marketing today
Catalyst Audit Ridgeline Outlets · last 30 days
Audit complete · 14 findings
What this audit found
Profitable after COGS, with room to scale Shopping | All Products campaign.
PDF ready
What the platforms claim vs. what you keep 16 campaigns · last 30 days
What Google & Microsoft report
4.12×
Reported ROAS, before adjustments
−0.47×
Attribution true-up
Trued up to your orders
3.65×
88.7% matched to Shopify orders, by click ID + UTM
−1.44×
Cost of goods sold (COGS)
What you actually keep
2.21×
Profit ROAS — break-even is 1.65×
Across the 30-day period, reported ROAS stays well above your profit after COGS.
Reported Validated vs orders Profit after COGS Changelog entry
  • 4,820
    Shopify orders read
  • 88.7%
    attribution matched
  • 60.5%
    gross margin
  • 95% CI
    Bayesian core
Acted on → measured You paused Search | NonBrand | Gift Set 12 days ago — confirmed at the following audit. +$1,810 profit / mo
Top recommendation · 1 of 5
Increase Shopping | All Products budget by up to 20%.
Evidence: strong · verified next audit
[PROJECTED — assumes current CVR, AOV, margin hold]
We'd shift if Profit ROAS drops below 1.85× next audit.
+$1,900
projected profit / mo
95% CI $1.2k–$2.4k

Trusted by brands investing in smarter performance marketing

Horizontally scrollable list. Swipe to see additional logos.
YLI ThreadsFAB FabricsQuilters ParadiseForemaster HealthHealthify

Your ROAS looks healthy. Your margin tells a different story.

A campaign was labeled as a top performer on the ad platform dashboard but caused a net loss per conversion. Trellis detects anomalies like conversion inflation, where the platform overstates conversions. Your COGS (or gross margin) and AOV are integrated throughout the audit, allowing you to easily identify high-performing campaigns, those that are hurting the account, and your contribution margin.

Recalculating
Δ$
Conversion inflation flagged during audits.
yli threads

"We thought one of our top campaigns was our hero. Trellis applied our actual margins and showed it was running nearly 7× over break-even CPA. We paused it the same day."

Bob P.
President

Three steps from connection to compounding evidence.

01

Connect your accounts in minutes

Plug in Google Ads, Microsoft Ads, Meta Ads, and Shopify. Trellis reads performance and order data in read-only mode. You stay in control of every change.

Connects to
Google Ads Microsoft Ads Meta Ads Shopify
02

Run a structured audit against your real economics

Trellis applies your gross margin, cross-references platform conversions against your store's orders, and gates every recommendation against a confidence threshold. The case for and against every major change is part of the report, not an afterthought.

Your business economics
AOV $58.24 CLTV $459.17 MARGIN 62%
03

Build a decision trail that compounds

Each cycle adds context to the last. At month one it's a log. At month six it's institutional memory: a record of what changed, what worked, and what to try next.

Apr 18 Retargeting Launched 30-day cart abandoner audience +$2,140 / 14d

Know what's earning, what's leaking, and what to fix first.

The Trellis Health Score reads every platform you run and rolls them up into one profit-weighted number. Not a vanity metric. It tells you whether you're earning after COGS, where the weakest pillar is, and what to change next.

Behind that score, three independent checks decide whether a recommendation reaches your report. All three must clear their thresholds. If any falls short, the audit names what's missing and how to close it.

  • Statistical weight — enough conversions that the pattern isn't random.
  • Audit depth — enough history to compare against your own baseline, not someone else's.
  • Business context — your gross margin, your AOV, and your real COGS grounded in attribution-validated orders.

Every claim in a Trellis audit is tagged with its evidence basis — measured fact, statistical inference with a credible range, projection with stated assumptions, or insufficient data. You always know what's grounded and what's inferred. Every significant recommendation names a credible alternative the data also supports, paired with the flip condition that would shift the call.

The changelog stitches each audit to the last. Six months in, you have a record of what changed, what worked, and what to try next — institutional memory you didn't have to build.

How an audit becomes a decision system.

Trellis applies your gross margin, investigates what's driving each result, and surfaces a changelog where your decisions live — so the next audit picks up where this one left off.

Campaign · Performance
Search | Brand | Brand+ Google Ads
Last 30 days Audited 2h ago
!
ROAS below break-even threshold
Reported ROAS of 2.41× sits under your COGS-adjusted break-even of 1.93×. Spend is unprofitable against actual gross margin, not platform cost.
Review
ROAS (reported)30d
2.41×
+0.48×vs. break-even
CPAblended
$48.20
+$11.80over target
Break-even ROASCOGS + fees
1.93×
Margin 38% · AOV $126
Ad groups · 14 PerformanceChangelogRecommendations
ROAS Trend
ROAS Break-even
4.0×3.0×2.0×1.0×
OctNovDecJanFebMarApr

See profitability, not just performance

Trellis applies your actual gross margin to every campaign. You see which spend is genuinely profitable after COGS and where your budget is working hardest.

Investigation · #INV-2418
ROAS Analysis – Search | Shopping | Kitchen
Investigating…
High priority
3
Signals
7d
Window
$11.4k
At risk
Cross-referencing platform changelog, search-terms data, and analytics. Three contributing factors identified — correlating with the regression beginning Apr 18.
Contributing factors
Sorted by impact Auto-correlated
Bid strategy
Switched from Target ROAS 380% to Maximize conversions on Apr 17 — the day before performance dropped.Changelog · edited by automation rule "scale_winners_v3"
96%
Confidence
Keyword quality
Quality Score on 4 of 11 top-spend keywords fell from 8 → 5; landing-page experience flagged "below average".Detected via daily QS snapshot · accounts for 41% of group spend
82%
Confidence
Data discrepancy
Platform-reported conversions +18% vs. analytics source-of-truth — gap widened over the same window.Cross-checked Google Ads ↔ GA4 ↔ store orders · attribution drift suspected
71%
Confidence
Synthesizing
Recommendation in ~12s

Understand why, not just what

Every audit investigates account structure, bid history, and performance trends together. It explains what's driving results and whether the data supports a change.

audit_recommend.py
trellis/audits/dsa-us/audit_recommend.py
running · pid 4812
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# trellis/audits/dsa-us/audit_recommend.py
# Generates ranked recommendations for the dsa-us account audit.
 
from trellis.audit import Audit, Finding, Recommendation
from trellis.platforms.google_ads import changelog, metrics
from trellis.stats import welch_t, cusum, bh_correct
from datetime import datetime, timedelta
 
# ─── Configuration ───────────────────────────────────────────────────────
ACCOUNT_ID = "dsa-us"
LOOKBACK_DAYS = 28 # 4-week pre/post window
MIN_SAMPLE_SIZE = 120 # clicks per arm before testing
ALPHA = 0.05 # BH-corrected family-wise rate
MIN_LIFT_PCT = 0.04 # ignore deltas below 4%
 
# ─── Pipeline ────────────────────────────────────────────────────────────
@audit.step(name="recommend", depends_on=["investigate"])
def build_recommendations(audit: Audit) -> list[Recommendation]:
"""Rank account-level fixes by expected lift × confidence."""
since = datetime.utcnow() - timedelta(days=LOOKBACK_DAYS)
edits = changelog.fetch(ACCOUNT_ID, since=since, kinds={"BID_STRATEGY", "KEYWORD", "BUDGET"})
prior, post = metrics.split_by_edits(ACCOUNT_ID, edits, window=LOOKBACK_DAYS)
# Welch's t per metric × CUSUM for changepoint, then BH multiple-test correction.
deltas = []
for edit in edits:
if prior[edit.id].clicks < MIN_SAMPLE_SIZE:
continue # under-powered, skip
t, p = welch_t(prior[edit.id].cpa, post[edit.id].cpa)
cp = cusum(post[edit.id].daily_cpa, threshold=3.0)
deltas.append((edit, t, p, cp))
 
significant = bh_correct(deltas, alpha=ALPHA, key=lambda d: d[2])
significant = [d for d in significant if abs(d[1]) >= MIN_LIFT_PCT]
 
recs = []
for edit, t, p, cp in significant:
recs.append(Recommendation.from_edit(edit, t_stat=t, p_value=p, cusum=cp))
 
recs.sort(key=lambda r: (-r.expected_lift * r.confidence, r.p_value))
recs = recs[:3] # top-3 only
audit.attach(step="recommend", payload=recs)
return recs
 
if __name__ == "__main__":
a = Audit.load(ACCOUNT_ID)
build_recommendations(a)
a.publish(channel="slack#dsa-us", format="digest")
print(f"emitted {len(a.recs)} recommendations")
 
python 3.12 UTF-8 LF spaces: 4 ln 36, col 5

Every decision builds on the last

Recommendations include the case for and against each change. Log what you changed and why; next month's audit knows what happened and starts where this one left off.

Who it’s for

A full audit written for your account, not a template.

Every audit applies your gross margin, cross-references platform-reported conversions against your order data, and gates every recommendation behind a 15-conversion floor. The report reads like a specialist’s assessment because the methodology is one.

Whether you run your own ads or manage a portfolio of client accounts, Trellis calibrates the depth, focus, and recommendations to your situation. One methodology, adapted to how you work.

$500–$5K/mo ad spend

Owner-operator

Clear answers, no spreadsheet required.

See which campaigns are earning after COGS. Every audit is tuned to your business economics, not just what the platform reports. Less time in dashboards, more confidence in every decision.

$5K–$15K/mo ad spend

In-house team

Connect spend to the revenue that matters.

Track how campaigns, bids, and budgets evolve over time, and what each change produced. Phased recommendations grounded in best practices and your account’s own history.

3–20 client accounts

Agency

Same rigor, every client, every time.

Every audit follows the same methodology, tuned to each client’s business. Manage more accounts with confidence: consistent insight across every account, without scaling your team.

A 3% lift in ROAS covers your year.

At $3,000+ in monthly ad spend, a 3% lift in your ROAS recovers more than a year of Trellis.

Core

Four audits a month, so the next decision is grounded in last month's evidence.

Recurring audits grounded in your actual gross margin.

$169 / month

billed annually

Core includes:

  • Every connected ad account
  • Four audits each month
  • Shopify integration with per-variant COGS
  • Changelog of every change to your account
  • Confidence-gated recommendations
  • 90 days of audit history
  • Datamart trends as a $99 / month add-on
Start with Core
Popular

Pro

Eight audits plus eight investigations — depth on the questions a dashboard can't answer.

Track what changed, and what happened next.

$419 / month

billed annually

Everything in Core, plus:

  • Eight audits each month, Enhanced mode included
  • Eight investigations each month — one campaign or ad group at a time, separate from your audits
  • Datamart with twelve months of trend history
  • Recommendation outcome tracking — see whether each change worked
  • Scheduled audits on a cadence you choose
  • Custom COGS upload to override product-level costs
  • 12 months of audit history
Start with Pro

Agency

Audits scoped per client, with one roster for the whole book of business.

Consistent methodology across every client.

$339 / account / month

3-account minimum · billed annually

Everything in Pro, per client — plus:

  • Eight audits per client each month, Enhanced mode included
  • Three investigations per client each month — one campaign or ad group at a time, separate from your audits
  • Datamart with 24 months of trend history per client
  • Per-client data isolation — separate setup, audits, and credits drawn from your agency pool
Talk to us

Five moments from a Catalyst Audit.

An audit starts with what the platform reports, traces the decisions that got you here, looks at what your store actually recorded, and ends with what to do next. The number in the middle is the recognition moment — the scope of what most teams act on without checking. Each card below turns a dashboard number into a decision you can defend.

COGS-Adjusted Profitability
Shopping — Promotional
30-day window · 847 clicks
Marginal
Platform ROAS
3.1×
After COGS
1.1×
Break-even
1.0×
Reported
3.1×
Margin-adjusted
1.1×
[FACT] SKU-level margin analysis

The margin story the platform doesn't tell.

A Shopping campaign reporting 3.1× ROAS appeared to be a top performer. The audit overlaid SKU-level margins and revealed the campaign was heavily weighted toward promotional products — contribution margin was well below the account average. What looked profitable at the platform level was operating near break-even after actual COGS.

85%

of ad spend decisions are based on platform-reported data alone — without first-party validation.

Changelog-Driven Detection
Change log Search — NonBrand
Apr 12, 14:33
Bid strategy changed
Manual CPC → Target ROAS @ 4.0×
Apr 14, 09:17
Device modifier adjusted
Desktop +15%
Measured outcome (6d)
CPC +98% Conv −31% Spend +$840

Every change tracked to its measured outcome.

CPC doubled over six days with no explanation in the platform UI. The changelog traced the shift to a bid strategy change followed by a device modifier adjustment two days later — cause and effect, with timestamps.

Attribution Verification
Attribution check 30-day window
197
Platform reported
150
Verified orders
−24%
Verified Over-reported
[FACT] Shopify UTM cross-reference

Platform numbers checked against your actual orders.

Google Ads reported 197 conversions over 30 days. Cross-referencing against first-party order data revealed 150 verified purchases — a 24% over-count from blending paid and organic Shopping clicks.

Root cause Investigation #01

Auto import overwriting manual optimizations

Google-to-MS import tool from previous agency, silently resetting device modifiers and re-enabling paused keywords since Feb 2026.

Every fix since Feb 26 overwritten within days 11 of 11
Automation Detection

The audit uncovered an invisible automation no one knew existed.

A business switching agencies found their optimizations reversing within days. The changelog detected changes being undone with no record of who made them. Investigation traced it to an auto-import tool left over from the previous agency, silently overwriting every manual fix for weeks.

Questions worth asking.

Every recommendation requires at least two measured data points from your account. Each one includes the evidence, a risk score (1–5), a credible alternative the data also supports paired with the flip condition that would shift the call, and a monitoring plan with specific thresholds. Recommendations are gated by confidence tiers — if a campaign has fewer than 15 conversions, Trellis says ‘not enough data’ rather than guessing. Every claim is labeled: [FACT] for measured data, [PROJECTED] for estimates with stated assumptions, [INFERRED] for patterns that need more evidence.

Trellis connects to your ad platforms via OAuth — the same authorization method used by Google and Microsoft themselves. The connection is read-only: Trellis pulls performance data for analysis but never modifies bids, budgets, or campaign settings. Your business economics (margins, targets, costs) are encrypted at rest and isolated per account. No data is shared between clients.

Three things your ad platform dashboard won’t surface: whether campaigns are profitable after actual COGS (not just revenue), whether platform-reported conversions match your real orders, and what specific configuration changes caused performance shifts. A campaign showing 3× ROAS might be operating near break-even once you factor in gross margin. Trellis catches that; the platform UI never will.

Connect your ad platform (OAuth, under 2 minutes), enter your blended gross margin (one number), and run your first audit. Most accounts see their first scored report within 5 minutes of signing up. No CSV uploads required. No technical configuration. Monthly billing with no contracts — cancel anytime.

Trellis works for anyone running Google Ads or Microsoft Ads who wants to understand profitability — from owner-operators managing $3K/month in ad spend to agencies managing $2M+ across 20 client accounts. The methodology scales: the same confidence tiers, estimation policy, and evidence standards apply whether you’re running one campaign or fifty.

Find what your reports are missing.

Connect your accounts and run your first Catalyst Audit in minutes.