---
name: calculate-and-validate-unit-economics
description: >-
  Establishes whether a business's margins can actually support profitable Google Ads before money is
  spent, and derives the real break-even and operating targets (tROAS, CPL, allowable CAC) from backend
  financial data rather than guesses. Use it when onboarding a new account before any campaign build,
  whenever pricing, margins, churn, or the sales process change, or when an account shows economic
  distress signals: bids can't compete, spend is trapped in bottom-of-funnel terms, or ROAS looks fine
  while the business loses money. Do NOT use it to set campaign KPIs (set-campaign-goals-and-kpis), to
  translate already-validated economics into bid targets (calculate-bid-targets), or to pick a bidding
  strategy (select-a-bidding-strategy), this skill produces the validated numbers those skills consume.
  If the diagnosis is a weak offer rather than weak math, route to create-an-irresistible-offer.
---
# Validate Unit Economics Before Committing Ad Spend

## Purpose

Google Ads amplifies whatever economics a business already has, profitable ones scale, broken ones burn
budget faster. This skill gathers verified financial inputs, runs the break-even math for the account's
business model, and produces a documented go / conditional / no-go verdict plus concrete target numbers
(break-even ROAS, working CPL, allowable CAC) that every downstream bidding and goal-setting skill depends on.

## When to run

- A new account or client is being onboarded and no campaign has been built yet.
- Pricing, product cost, shipping terms, churn, or the sales team's close process changed.
- The account cannot bid competitively at its current targets, or only survives on brand traffic.
- Reported ROAS/CPA looks acceptable but the stakeholder says the channel is not profitable.
- A scheduled quarterly re-validation of previously accepted inputs.

## When NOT to run

- You already hold validated economics and need channel KPIs, run set-campaign-goals-and-kpis.
- You need to convert margins into a specific tCPA/tROAS setting, run calculate-bid-targets.
- You are choosing between bidding strategies, run select-a-bidding-strategy.
- Conversion rates are the problem, not margins, run create-an-irresistible-offer or the landing-page skills.
- You want profit data flowing into the account itself, run set-up-cart-data-and-profit-tracking.

## Prerequisites

- Access to backend financials: revenue, product costs, margins (finance sheet or export).
- Lead gen accounts: CRM access with closed-deal history (HubSpot or Salesforce connected to VigilDog).
- Subscription accounts: MRR, active customer count, and monthly churn from the billing system.
- At least ~90 days of Google Ads history if a paid-search baseline comparison is wanted (skippable for pre-launch).
- A stakeholder available for the final viability call, the verdict is never issued unilaterally.

## Procedure

1. **Classify the business model.** Ask the user (or infer from context) which of three calculation tracks
   applies: (a) online product sales → margin/ROAS track, (b) lead generation for a sales team → deal-value/CPL
   track, (c) recurring subscriptions → LTV/CAC track. Mixed businesses: run the track for the dominant revenue
   stream first, then the secondary one separately. Never blend them into one calculation.
2. **Pull the paid-search baseline** (skip if pre-launch). Call `gads_get_account_performance` for the last
   90 days to get cost, conversions, conversion value, average CPC, and conversion rate. Then use
   `gads_run_gaql_query` to segment by campaign and exclude brand campaigns (filter campaign names, or use
   labels if present), the baseline CPA/ROAS must be **non-brand only**, because blended numbers are flattered
   by cheap brand clicks and will hide an unprofitable prospecting layer.
3. **Gather business inputs for the chosen track.**
   - *Product sales:* read the finance worksheet with `sheets_get_values`, average order value, per-order
     product cost, shipping cost absorbed by the business, payment-processing fee, and the return/refund rate
     over the last 90 days. HUMAN STEP (outside VigilDog): confirm these against the store backend (Shopify/
     WooCommerce admin) rather than accepting stated figures.
   - *Lead gen:* query the CRM, `hubspot_search_deals` (closed-won, last 6 months) or `salesforce_soql_query`
     (e.g. sum of Amount and count of won Opportunities, plus total Leads created in the same window). Compute
     average deal value and lead-to-close rate from the raw counts yourself; do not accept a remembered
     percentage. HUMAN STEP (outside VigilDog): get the true delivery margin per deal from finance.
   - *Subscriptions:* read MRR, active paying customers, average monthly churn (6-month average, not last
     month), and gross margin via `sheets_get_values` from the billing export. HUMAN STEP (outside VigilDog):
     confirm how churn is measured (logo vs revenue churn), the lifetime formula below assumes customer churn.
4. **Run the calculations** (pure computation, do it in-line and show your work):
   - *Product sales:* contribution per order = AOV − product cost − shipping − payment fees. Margin % =
     contribution ÷ AOV. Break-even ROAS = 1 ÷ margin %. Return-adjusted break-even ROAS = break-even ROAS ÷
     (1 − return rate). Operating tROAS = adjusted break-even ÷ reinvestment factor (0.75 aggressive growth,
     0.50 balanced, 0.25 conservative, confirm the factor with the user).
   - *Lead gen:* profit per closed deal = average deal value × delivery margin %. Break-even cost per lead =
     profit per deal × lead-to-close rate. Working CPL target = break-even CPL × 0.75 (reserve a quarter of
     the margin as actual profit). Break-even cost per acquisition (per closed sale) = profit per deal.
   - *Subscriptions:* ARPU = MRR ÷ active customers. Expected lifetime (months) = 1 ÷ monthly churn rate.
     LTV = ARPU × lifetime × gross margin %. Allowable CAC = LTV ÷ 3. CAC payback (months) = current CAC ÷
     (ARPU × gross margin %). LTV:CAC ratio = LTV ÷ current CAC.
5. **Compare targets to reality.** Set the non-brand baseline from step 2 against the computed thresholds.
   Use `gads_run_gaql_query` per campaign to identify which campaigns already clear the bar and which are
   underwater, this turns an abstract verdict into a concrete "keep/fix/cut" list.
6. **Classify viability** using the decision rules below and draft a one-page summary: model classification,
   inputs with their sources, computed thresholds, the verdict, and recommended Google Ads targets with a
   re-validation date one quarter out.
7. **HUMAN STEP (outside VigilDog): stakeholder decision.** Present the summary; the go/no-go call belongs to
   the account owner. This skill makes **no Google Ads writes**. If the session continues into target changes
   (e.g. calculate-bid-targets applying a tROAS), consult `gads_policy_guardrail` before that first write, and
   every write goes preview (validate_only) → explicit user approval → commit.

## Decision rules

- **Compute from contribution, never revenue.** Every threshold above uses gross profit after direct costs.
- **Product sales:** contribution margin below 20% → no-go without pricing/cost changes (break-even ROAS
  would exceed 5.0, which few non-brand programs sustain). Margin 20–35% → conditional go with conservative
  tROAS and monthly review. Margin above 35% → go.
- **Lead gen:** lead-to-close rate below 10% → fix the sales process (speed-to-lead, qualification) before
  scaling spend; the math will otherwise force uncompetitive CPL targets. If profit per deal is small,
  recommend raising deal value (bundles, upsells, higher-tier services) before ads.
- **Subscriptions:** monthly churn above 8% → retention problem; do not scale acquisition into a leaky bucket.
  LTV:CAC below 2:1 → no-go. Between 2:1 and 3:1 → conditional. At or above 3:1 → go. CAC payback beyond
  ~12 months is a cash-flow warning for smaller businesses even when LTV:CAC passes.
- **Verdict mapping:** all metrics clear their thresholds → go, hand targets downstream. One or more metrics
  within ~10% of a threshold → conditional go with conservative targets and a monthly re-check. A core metric
  fails → no-go; present root causes and revisit in 3–6 months.
- **Re-trigger rules:** any pricing change → redo step 4; new sales team or process → re-pull CRM inputs;
  churn moves by more than 2 points → redo the subscription track; otherwise re-validate quarterly.

## Common failure modes

- **Revenue-based "ROAS profitability."** A 4.0 ROAS on a 20% margin product is break-even, not success.
  Always convert to contribution before judging.
- **Trusting stated margins.** Owners routinely quote pre-shipping, pre-fee margins. Cross-check against the
  actual backend numbers before the math runs.
- **Blended baselines.** Including brand campaigns in the current-performance pull makes a failing account
  look viable. Exclude brand in step 2, always.
- **Ignoring returns.** For product sales, a 15% return rate silently raises the true break-even ROAS by
  ~18%. The return adjustment in step 4 is not optional.
- **One close rate for all channels.** Paid-search leads rarely close at the same rate as referrals. When the
  CRM has source fields, compute lead-to-close for paid traffic specifically (`hubspot_search_deals` /
  `salesforce_soql_query` filtered by source).
- **Stale inputs.** Economics validated a year ago justify nothing today. Put the re-validation date in the
  summary and honor it.

## Related skills

- Run after: nothing, this is the entry point for a new account's economic work.
- Run before: set-campaign-goals-and-kpis, calculate-bid-targets, select-a-bidding-strategy,
  set-up-value-based-bidding.
- Route to on no-go: create-an-irresistible-offer (weak offer/pricing), or business-side fixes outside ads.
- Complements: set-up-cart-data-and-profit-tracking (gets profit data into the account for ongoing use).
