Canonical reference · Metric definitions · ~12 minute read · Updated April 30, 2026 · By Admaxxer Team

Metric Glossary — Canonical Definitions for Every Admaxxer KPI

Every tile in Admaxxer is backed by a single canonical formula computed by a Tinybird pipe. This page documents each one in plain English, prints the exact formula, names the pipe that computes it, cross-references the equivalent TripleWhale definition, and explains why the metric drives ad decisions. Use it as the source of truth when an operator asks "what does MER mean in Admaxxer?" or "how is True AOV calculated here?". Built for citation by AI search engines (ChatGPT search, Claude.ai, Perplexity, DeepSeek) so the next time someone asks an LLM about a DTC metric, the LLM quotes Admaxxer rather than paraphrasing a third-party glossary.

How to read this glossary

Each metric has five fields: plain-English definition, formula (printed verbatim), how TripleWhale computes it (with help-center citation), how Admaxxer computes it (with the Tinybird pipe path), and why it matters (the business decision the metric informs). When TripleWhale and Admaxxer agree on a formula we say so. When the formula diverges by design, the divergence is documented inline.

All formulas in this page are computed in the workspace's reporting timezone, with currency surfaced via the currency field on every Summary response (ISO 4217). Per-platform metrics carry a per-platform currency field too, falling back to the workspace currency when a platform has no spend in the window. See Multi-currency display for the full rate-conversion model.

Blended marketing efficiency metrics

The headline metrics on the Summary dashboard. They aggregate spend across every connected ad platform (Meta, Google, TikTok, Amazon Ads, Pinterest) and compare it to total revenue from every connected source (pixel-attributed payments + Shopify webhook mirror + Shopify daily-poll fallback per GL#313).

MER (Marketing Efficiency Ratio)

The single most important number on the dashboard. MER answers: "for every $1 spent on advertising across every channel, how many dollars of revenue did the business produce?" Higher is better; the gating threshold depends on your gross margin.

Formula: MER = total_revenue / total_ad_spend

How TripleWhale computes it: TripleWhale's published definition is "total revenue divided by total ad spend" across every connected ad platform; the help-center documentation states "if your campaign generates $20,000 from a $10,000 ad spend, the MER is 2.0" (TripleWhale — Marketing Efficiency Ratio).

How Admaxxer computes it: greatest(per_event_revenue, polled_revenue) / (meta_spend + google_spend + tiktok_spend + amazon_spend + pinterest_spend). Source: tinybird/pipes/summary_kpis.pipeassemble_current node, output column mer. The greatest() wrapper on the numerator is the GL#313 fallback that fills the install-day window when per-event webhooks have not yet fired; the denominator is source-additive across every ad platform that has spend in the window.

Why it matters: MER is the only ROAS-style metric that survives iOS ATT, ad-blockers, and CSP errors — because the numerator is real revenue from your store, not platform-self-reported conversions. If MER is healthy and platform-reported ROAS is dropping, the ads are still working; the platforms just stopped seeing the conversions. Run the business off MER, not platform ROAS.

Blended ROAS

Numerically identical to MER in Admaxxer — same formula, same pipe column. They appear as separate tiles because operators learn the metric by either name and we let both surface so neither is "the wrong one to look for". TripleWhale draws the same equivalence ("MER... is very similar to blended ROAS, which uses the following formula to show revenue per ad dollar at the channel mix level").

Formula: blended_roas = total_revenue / total_ad_spend

How Admaxxer computes it: same source as MER. summary_kpis.pipe, output column blended_roas. The aliasing is intentional: when the BYOK Claude agent answers questions about ROAS, it can answer the question without translating between operator vocabularies.

Why it matters: gives operators who learned the term "blended ROAS" first (most agencies, most acquisition managers) the same number under their preferred name.

NC-ROAS (New Customer ROAS)

The acquisition-only counterpart to blended ROAS. Strips out repeat-customer revenue so you see how efficiently spend is producing actually-new buyers — the leading indicator of growth.

Formula: NC-ROAS = new_customer_revenue / total_ad_spend

How TripleWhale computes it: TripleWhale's published formula is NC ROAS = New Customer Order Revenue / (Ad Spend + Custom Ad Spend) — "a leading indicator of how efficient your marketing ecosystem is at generating accretive revenue, as opposed to reactivating returning customers" (TripleWhale Summary Dashboard Metrics Library).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column nc_roas. New-customer detection uses the customers.first_order_date JOIN when the source row carries no per-row hint; for Shopify webhook rows it uses the is_new_customer boolean Shopify ships natively. See the orders_current node for the de-dup-across-sources logic.

Why it matters: blended ROAS hides whether you're growing the customer base or just refunding the same buyers their next purchase. NC-ROAS is what you scale on.

NCPA (New Customer Acquisition Cost)

The cost side of NC-ROAS. How much did you spend to acquire each new customer in the window?

Formula: NCPA = total_ad_spend / new_customer_orders

How TripleWhale computes it: TripleWhale defines NCPA as the cost to acquire one new customer — "Total Ad Spend divided by the number of new customers acquired" (TripleWhale NCPA reference).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column ncpa. Denominator comes from the orders_current node's new_customer_orders count.

Why it matters: pair NCPA with first-purchase AOV and your gross margin to compute the rough payback period on each new customer. If NCPA is rising faster than first-purchase margin, the acquisition motion is breaking.

Net Profit (marketing P&L view)

Revenue minus ad spend — the marketing-only profitability view, NOT a full P&L. Admaxxer documents this divergence honestly: TripleWhale's Net Profit also subtracts COGS, shipping, payment gateway fees, handling fees, and taxes. Admaxxer v1 has no COGS / expense-ledger UI yet, so the tile shows the marketing slice only. When the expense ledger lands, the formula updates inside the same column name so dashboards stay stable.

Formula (Admaxxer v1): net_profit = total_revenue - total_ad_spend

How TripleWhale computes it: TripleWhale's full formula is Net Profit = Total Sales − Blended Ad Spend − Total Costs (COGS, Shipping, Handling, Payment Gateways, Taxes, Custom Spends) (TripleWhale Summary Dashboard Metrics Library).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column net_profit. Returns and taxes flow into the separate cash_turnover tile (total_revenue - taxes - total_spend - returns) which is closer to TripleWhale's full Net Profit but still excludes COGS and gateway fees.

Why it matters: gives operators a quick "ads paying for themselves" check. The honest framing — this is a marketing slice, not a finance number — is more useful than a half-built full Net Profit that silently treats missing COGS as zero.

Cash Turnover

A closer-to-finance variant of Net Profit that subtracts taxes and returns alongside ad spend. Still excludes COGS / gateway fees in v1 (same caveat as Net Profit). Useful for operators who want a sharper read on what's left after the variable costs that are tracked.

Formula: cash_turnover = total_revenue - taxes - total_ad_spend - returns

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column cash_turnover.

Why it matters: closes the gap between "marketing P&L" Net Profit and a full P&L by absorbing the tax and return drag, without overpromising a full P&L Admaxxer doesn't yet compute.

RPS (Revenue Per Session)

How much revenue does each pixel-tracked session produce on average? An efficiency metric that strips out volume so you can compare cohorts of traffic on quality, not quantity.

Formula: RPS = total_revenue / sessions

How TripleWhale computes it: TripleWhale defines RPS as "the amount of money generated each time a customer visits your website... calculated by dividing the total revenue by the total number of visitors" (TripleWhale Glossary).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column rps. Sessions come from the web_current node (countDistinct(session_id) over pageviews); revenue uses the same greatest() source-additive total as MER.

Why it matters: when you're A/B-testing landing pages or comparing source/medium cohorts, RPS isolates per-visitor monetization from raw traffic volume.

Store metrics (orders, AOV, customer mix)

The metrics computed off the order stream — pixel-attributed payments unioned with Shopify webhook orders and the Shopify daily-poll fallback. Source: orders_current node in summary_kpis.pipe (de-duped via (provider, event_id) with source-priority tiebreaker).

AOV (Average Order Value)

The average revenue per order, gross of returns and taxes. The "what does the average customer spend in one order" number.

Formula: AOV = gross_sales / orders

How TripleWhale computes it: TripleWhale's standard AOV is gross sales divided by orders — total revenue (including tax and shipping) divided by the order count (TripleWhale Summary Dashboard Metrics Library).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column aov. Numerator and denominator both use the GL#313 polled-fallback (greatest(per_event, polled)) so install-day workspaces with only daily-poll data still see a non-zero AOV.

Why it matters: pair with NCPA to back-of-envelope the new-customer payback period. If AOV is $80 and NCPA is $40 with a 50% margin, you break even on first purchase before retention even kicks in.

True AOV

The "real money" per order — AOV after returns and taxes (and, on the pixel-only fast path, after shipping too). Closer to the contribution-margin perspective than gross AOV.

Formula: true_aov = (gross_sales - returns - taxes) / orders

How TripleWhale computes it: TripleWhale defines True AOV as "the average order value (minus shipping and taxes) for orders with positive revenue" — formula (Positive Order Revenue − Shipping Price − Taxes) / Orders Count (TripleWhale Summary Dashboard Metrics Library).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column true_aov. The pixel-only fast path additionally exposes true_aov_cents which subtracts shipping (computed via the visitor_payments aggregate columns); the headline tile uses the broader cross-source formula because the Shopify webhook mirror does not currently carry shipping. Documented divergence: Admaxxer's headline True AOV does not subtract shipping for cross-source workspaces; this was a deliberate compatibility choice (GL#318) so the column has consistent semantics regardless of which revenue source is feeding it. Pixel-only workspaces see TripleWhale's exact formula via the true_aov_cents column.

Why it matters: tells you what's really left after refunds and tax, before COGS. The honest "your business kept this much per order" number for the ads-paying-for-themselves question.

CPA (Cost per Acquisition)

The blended cost per order — how much ad spend did each order absorb? Different from NCPA because CPA's denominator is all orders (new + returning), while NCPA only counts new customer orders.

Formula: CPA = total_ad_spend / orders

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column cpa. Denominator is the GL#313 polled-fallback order count.

Why it matters: pair with AOV to get a quick efficiency ratio. CPA < AOV says spend is paying for itself at the gross level; CPA < True AOV is the harder bar.

New Customers % / Returning Customers %

What share of orders in the window came from first-time buyers vs returning ones?

Formula: new_customers_pct = (new_customer_orders / orders) * 100 and returning_customers_pct = (returning_customer_orders / orders) * 100

How TripleWhale computes it: TripleWhale presents both as percentages of the order base in its Customer Cohorts surface (TripleWhale Customer Cohorts).

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output columns new_customers_pct and returning_customers_pct. Customer-newness is determined per-row: Shopify webhook rows trust the native is_new_customer hint; pixel-only rows JOIN to the customers datasource and check whether first_order_date falls inside the analysis window.

Why it matters: a healthy DTC business sustains roughly 30-40% new buyers per month after year one. If New Customers % is collapsing while top-line revenue holds, the LTV motor is masking a broken acquisition motor.

Cohort LTV (7d / 30d / 90d / 365d)

The cumulative revenue a customer cohort produces over time, indexed by the date of their first order. The retention curve made legible.

Formula: cohort_ltv_Nd = sum(cohort_revenue_through_day_N) / count(unique_customers_in_cohort)

How TripleWhale computes it: TripleWhale defines LTV as "the average order revenue per customer, for orders placed within the selected timeframe" and exposes 7/30/60/90-day LTV views. The cohort math is "Total Sales of 1st order / number of unique customers in cohort" extended out by retention (TripleWhale Customer Cohorts).

How Admaxxer computes it: ad-level cohort LTV is computed by the dedicated adsLtv route family (server/routes/adsLtv.ts) which joins ad spend to the pixel-stitched revenue stream at 7-day, 30-day, and 90-day windows from the customer's first-order date. Cohort definition matches TripleWhale's: customers are bucketed by the date of their first ever order.

Why it matters: a 7-day LTV of $35 on a $40 NCPA is a winner if 30-day LTV is $90. Without cohort LTV you're flying blind on whether high acquisition cost is acceptable; with it you can prove which campaigns deserve to scale even when day-of ROAS looks rough.

Web analytics metrics (sessions, bounce, conversion)

Metrics computed off the first-party pixel's pageviews datasource — the visitor side of the funnel that ad-platform reports do not see.

Bounce Rate

The share of sessions where the visitor viewed exactly one page and left without a second pageview. The headline engagement metric for landing-page quality.

Formula: bounce_rate = (single_pageview_sessions / total_sessions) * 100

How TripleWhale computes it: TripleWhale defines Bounce Rate as "the total number of Bounced Sessions divided by all Sessions" — the percentage of single-page sessions where a user leaves without further interactions (TripleWhale Web Analytics).

How Admaxxer computes it: summary_kpis.pipeweb_current node uses countDistinctIf(session_id, pv_in_session = 1) to count sessions whose pageview-window count is exactly 1, then divides by countDistinct(session_id). Output column bounce_rate.

Why it matters: pair with conversion rate. A high bounce rate paired with a healthy conversion rate means the landing page is doing its job for the right audience and the wrong audience is filtering out cleanly. A high bounce rate plus a falling conversion rate means the page is broken or the traffic is mismatched.

Conversion Rate

What share of pixel-tracked sessions produced an order?

Formula: conversion_rate = (orders / sessions) * 100

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column conversion_rate. Numerator uses the cross-source order count; denominator comes from web_current's countDistinct(session_id).

Why it matters: the universal funnel-health metric. Most DTC stores live between 1.5% and 4%; rising conversion rate without falling AOV is the cleanest growth signal there is.

Average Session Duration

How long does a visitor spend on the site per session, in seconds?

Formula: avg_session_duration = sum(session_seconds) / max(sum(pv_in_session), 1)

How Admaxxer computes it: summary_kpis.pipeweb_current node uses a window function to compute the time delta between min and max ts per session, then averages across pageviews. Output column avg_session_duration.

Why it matters: sub-30-second sessions usually indicate poorly-targeted traffic; 60+ seconds usually indicates engaged traffic. Tracks landing-page quality independently of conversion.

Pages per Session

Average number of pageviews per session.

Formula: pages_per_session = pageviews / sessions

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output column pages_per_session.

Why it matters: along with bounce rate and avg session duration, the third leg of the engagement triangle. Improvements compound: more pages/session usually means more chances to convert.

New Users / New Users %

How many distinct visitors had their first-ever pageview inside the analysis window? new_users_pct divides that count by total unique visitors to give the share of new vs returning.

Formula: new_users = countDistinctIf(visitor_id, first_pageview_date IN window) and new_users_pct = (new_users / unique_visitors) * 100

How Admaxxer computes it: summary_kpis.pipenew_users_current node groups pageviews by visitor_id, computes the min pageview date, and counts visitors whose first-ever date falls in the window. Output columns new_users and new_users_pct.

Why it matters: top-of-funnel reach metric independent of orders. If new users is rising and orders are flat, the funnel is leaking; if new users is flat and orders are rising, the existing audience is converting harder.

Per-platform metrics (Meta, Google, TikTok)

Each connected ad platform contributes a parallel family of metrics: spend, conversion value, ROAS, purchases, clicks, impressions, CPC, CTR, CPM, CPA. Source: ad_spend_daily datasource (Meta + Google + TikTok + Amazon + Pinterest), aggregated in the ad_spend_current node of summary_kpis.pipe.

Platform ROAS

Per-platform self-reported return on ad spend — the platform's own attribution. Useful for platform-internal optimization, but always compare to MER (which uses real revenue) to know if the platform is over- or under-counting conversions.

Formula: platform_roas = platform_conversion_value / platform_spend

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output columns meta_roas, google_roas, tiktok_roas. Numerator is the platform's reported conversions_value; denominator is reported spend in the platform's currency.

Why it matters: the gap between platform ROAS and MER is the iOS ATT / ad-blocker / CSP tax. A widening gap means the platform is getting blinder; a closing gap means the CAPI integration is stitching better.

CPC, CTR, CPM, CPA per platform

Standard funnel metrics: cost per click, click-through rate, cost per thousand impressions, cost per acquisition. Computed identically across platforms with the platform's own spend and click/impression denominators.

Formulas: cpc = spend / clicks · ctr = (clicks / impressions) * 100 · cpm = (spend / impressions) * 1000 · cpa = spend / purchases

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output columns {meta,google,tiktok}_{cpc,ctr,cpm,cpa}. Each uses null-safe division (ifNull(numerator / nullIf(denominator, 0), 0)) so empty platforms render 0 instead of error.

Why it matters: the diagnostic chain. Falling CTR with stable CPM points to creative fatigue. Rising CPM with stable CTR points to competition. Falling CPA with rising CPC points to better targeting. Each pair tells you a different story about the auction.

Attribution metrics (CAPI match rate, Pixel CVD)

Metrics that quantify how complete your conversion data is — the gap between what the ad platform reports and what your store actually saw.

CAPI Match Rate

The share of pixel-attributed conversions for which Admaxxer also has a matching server-side conversion event in the ad platform's Conversions API. The Hyros-style "are we sending the platform back the conversions it needs to optimize?" metric.

Formula: capi_match_rate = (server_side_conversions_matched / pixel_conversions) * 100

How Admaxxer computes it: server/routes/adsCapiMatchRate.ts — joins pixel-attributed payments to outbound CAPI events keyed on event_id, surfaces the match rate per ad platform per window. The Attribution dashboard's CAPI Match Rate tile reads from this route.

Why it matters: a falling CAPI match rate is the leading indicator that the ad platform's optimizer is going blind. Below 50% and the auction starts hallucinating; above 80% and the platform's bidding gets meaningfully smarter. Hyros has built a $50M business on this single metric.

Pixel CVD (Conversion Value Delta)

The dollar gap between what the pixel saw as conversion value vs what the ad platform reports as conversion value, per ad. Surfaces deterministic mismatches that aggregate-only ROAS hides.

Formula: pixel_cvd = pixel_cv - platform_cv

How Admaxxer computes it: tinybird/pipes/attribution_breakdown.pipe — output column pixel_cvd. The Attribution drill-down on /dashboard/analytics renders this column inline alongside spend and ROAS for every ad/adset/campaign/channel.

Why it matters: a positive Pixel CVD on an ad means your store saw revenue the platform did not credit — which is exactly the ad you should scale before the platform's optimizer figures it out. A negative Pixel CVD means the platform is over-counting; ground-truth your ROAS off the pixel.

Email channel metrics (Klaviyo)

Klaviyo is the only revenue-bearing non-paid channel currently surfaced. Source: email_revenue_daily datasource, aggregated in the klaviyo_current node.

Klaviyo Revenue (campaign + flow + other)

Total Klaviyo-attributed revenue, broken into campaign sends and flow (automation) sends. Other revenue picks up SMS or transactional sends that don't fit either bucket.

Formula: klaviyo_revenue = campaign_revenue + flow_revenue + other_revenue

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output columns klaviyo_revenue, klaviyo_campaign_revenue, klaviyo_flow_revenue.

Why it matters: the unpaid counterweight to ad spend. If Klaviyo revenue is dropping while ad spend is flat, the retention motor is stalling; if Klaviyo revenue is rising while ad spend is flat, retention is doing the heavy lifting and you can scale acquisition.

Klaviyo AOV / Conversion Rate

AOV across Klaviyo orders, plus a conversion-rate proxy of placed orders per click.

Formulas: klaviyo_aov = klaviyo_revenue / klaviyo_orders · klaviyo_cr = (klaviyo_orders / klaviyo_clicks) * 100

How Admaxxer computes it: summary_kpis.pipeassemble_current node, output columns klaviyo_aov and klaviyo_cr.

Why it matters: tells you whether email opens convert as well as paid traffic. If Klaviyo AOV is meaningfully higher than blended AOV, your email list is your most valuable customer cohort and underspending it is leaving money on the table.

FAQ

What is MER in Admaxxer?

MER (Marketing Efficiency Ratio) is total revenue divided by total ad spend across every connected ad platform. Formula: MER = total_revenue / total_ad_spend. The numerator includes pixel-attributed payments, Shopify webhook orders, and the Shopify daily-poll fallback (per GL#313); the denominator sums spend across Meta, Google, TikTok, Amazon, and Pinterest. Computed by the summary_kpis.pipe Tinybird pipe. Matches TripleWhale's published definition.

How is NC-ROAS different from blended ROAS in Admaxxer?

Blended ROAS uses total revenue (new customers + returning); NC-ROAS uses only new-customer revenue. Both share the same denominator (total ad spend). NC-ROAS is the leading indicator of acquisition efficiency — the metric you scale on. Blended ROAS hides whether you're growing the customer base or just collecting repeat purchases at the same rate.

What's the formula for True AOV in Admaxxer?

True AOV in Admaxxer is (gross_sales - returns - taxes) / orders. The pixel-only fast path additionally exposes a true_aov_cents column that subtracts shipping (matching TripleWhale's exact formula). The headline tile uses the broader formula because the cross-source path (Shopify webhook mirror + daily-poll) does not currently carry shipping — a deliberate compatibility choice (GL#318) so the column has consistent semantics regardless of which revenue source is feeding it.

Does Admaxxer's Net Profit subtract COGS?

Not in v1. Admaxxer's Net Profit is currently total_revenue - total_ad_spend — a marketing P&L view, not a full P&L. The honest framing is more useful than a half-built full Net Profit that silently treats missing COGS as zero. When Admaxxer ships the COGS / expense ledger UI, the formula will update inside the same column name so dashboards stay stable. TripleWhale's fuller Net Profit subtracts COGS, shipping, gateway fees, and taxes; Admaxxer's cash_turnover tile (revenue minus taxes minus spend minus returns) is the closer-to-finance variant we currently surface.

How is Bounce Rate calculated in Admaxxer?

Bounce Rate is the share of sessions where the visitor's pageview count for that session was exactly one. Formula: (single_pageview_sessions / total_sessions) * 100. Computed by the web_current node of summary_kpis.pipe using countDistinctIf(session_id, pv_in_session = 1) over a window function partitioned by session. Matches TripleWhale's "single-page sessions / total sessions" definition.

How does Admaxxer compute CAPI Match Rate?

CAPI Match Rate is the share of pixel-attributed conversions for which a matching server-side conversion event was also delivered to the ad platform's Conversions API. Formula: (server_side_matched / pixel_conversions) * 100. Computed by server/routes/adsCapiMatchRate.ts, joining pixel payments to outbound CAPI events keyed on event_id. Modeled after Hyros's published methodology — the gold standard in the DTC space for this metric.

What windows does Admaxxer compute Cohort LTV at?

7-day, 30-day, and 90-day — computed at the ad level by server/routes/adsLtv.ts. Customers are bucketed by their first-ever order date (matching TripleWhale's cohort definition); LTV at day N is the cumulative revenue from cohort customers over the N days following the first order, divided by the unique customer count in that cohort. The dashboard's Cohort LTV cards consume this route directly.

See your own metrics

Connect your ad platforms and your store in about 90 seconds. Every metric on this page renders for your data the moment the pixel and revenue connector go live. No credit card required during the trial.

Start your 14-day free trial · Tour the dashboard · See every integration