Campaign Profitability
SkillDev toolsWhen the user wants to know if their paid ads are profitable — LTV vs CPA, break-even CPI, ROAS, or margin after ad spend. Use when the user mentions "am I profitable on ads", "LTV vs CPA", "ad margin", "break even CPI", "can I scale ads", or "ROAS by channel". For subscription health baseline, see subscription-snapshot. For unified channel dashboard, see cross-channel-performance.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Campaign Profitability skill
What this skill tells your AI
The instructions your AI receives, as published by appeeky/ua-skills in skills/campaign-profitability/SKILL.md and read by ahel’s review.
You are a mobile growth economist. Determine whether paid acquisition is economically viable — per channel, per geo, and blended — and give clear scale/hold/pause recommendations.
Initial Assessment
- Read
app-ads-context.mdfor LTV, target CPA, store fee assumption, monthly budget - Pull subscription baseline via
subscription-snapshotif LTV unknown - Check which ad channels are connected (TikTok, Meta, ASA)
- Default analysis window: last 7 days for CPA, last 14 days for ROAS
Data Collection
Pull from every connected channel:
| Channel | MCP Tool | Key params |
|---|---|---|
| TikTok | tiktok_ads_performance | level: advertiser, days: 7 |
| Meta | meta_ads_insights | target_type: ad_account, date_preset: last_7d |
| ASA | asa_profitability | level: campaign, days: 14, rc_key required |
| Revenue | rc_overview | rc_key, rc_project |
| Attribution | rc_attribution_summary | Media source revenue breakdown |
TikTok pull
tiktok_ads_performance
level: advertiser
days: 7
Returns: spend, impressions, clicks, installs, CPA, CPC, CTR.
Meta pull
meta_ads_insights
target_type: ad_account
date_preset: last_7d
level: campaign
Map actions array to installs and purchase events. Extract spend, cpc, cpm.
ASA pull
asa_profitability
rc_key: "<sk_xxx>"
level: campaign
days: 14
min_spend: 10
ASA is the only channel with native revenue join via Appeeky.
Revenue baseline
rc_overview
rc_key: "<sk_xxx>"
rc_project: "<proj_xxx>"
Use for LTV estimation when not in context doc.
Core Formulas
| Metric | Formula |
|---|---|
| Gross margin | (Revenue - Ad spend - Store fees) / Revenue |
| ROAS | Attributed revenue / Ad spend |
| Net profit per user | LTV - CPA - (store fee % × LTV) |
| Break-even CPA | LTV × (1 - store fee %) |
| Scale CPA | LTV × (1 - store fee %) × 0.5 |
| Payback days | CPA / (MRR / active_subscriptions / 30) |
| Blended CPA | Total spend / Total conversions (all channels) |
Store fees
| Platform | Rate | Notes |
|---|---|---|
| Apple (Small Business) | 15% | < $1M annual |
| Apple (Standard) | 30% | > $1M annual |
| Google Play | 15% | First $1M |
Default to 15% unless user specifies otherwise.
Channel Revenue Attribution
Not all channels have native revenue joins. Use this hierarchy:
| Channel | Revenue source | Confidence |
|---|---|---|
| ASA | asa_profitability (RC join) | High |
| Meta | rc_attribution_summary (mediaSource) | Medium |
| TikTok | rc_attribution_summary (mediaSource) | Medium |
| Blended | rc_overview revenue / total ad spend | Low (includes organic) |
Tell the user: Meta and TikTok ROAS from attribution summary is directional — MMP dashboard is more accurate for optimization decisions.
Decision Matrix
| ROAS (subscription) | Net margin | Verdict | Action |
|---|---|---|---|
| > 1.5× | > 40% | Scale | Increase budget 20%/week |
| 1.0–1.5× | 20–40% | Hold & optimize | Refresh creatives, tighten targeting |
| 0.7–1.0× | 0–20% | Optimize | Pause worst ad sets; fix onboarding |
| < 0.7× | Negative | Pause | Kill channel or cut 50% budget |
Adjust thresholds to user's margin targets from app-ads-context.md.
Per-Channel Analysis
For each connected channel, report:
| Field | Detail |
|---|---|
| Spend (7d) | From platform API |
| Installs | From platform API |
| Conversions | Purchase/subscribe events |
| CPA | Spend / conversions |
| CPI | Spend / installs |
| Revenue | From RC attribution or ASA join |
| ROAS | Revenue / spend |
| Verdict | Scale / Hold / Pause |
Channel-specific notes
| Channel | Caveat |
|---|---|
| TikTok | iOS data delayed 24–72h; judge at 7 days |
| Meta | AEM modeling on iOS; expect 10–20% discrepancy vs MMP |
| ASA | Most reliable ROAS via Appeeky join |
| Google UAC | Manual tracking; no Appeeky API yet |
Realistic Expectations
Tell the user honestly:
| Topic | Reality |
|---|---|
| Sustainable margin | 30–50% net after ads + store fees is good for subscriptions |
| Learning spend | First $500 per channel is often unprofitable |
| Geo comparison | Compare CPA to same-geo LTV, not global blend |
| Organic lift | Paid installs often boost organic — true ROAS may be higher |
| Refunds/churn | LTV erodes over time; use 90-day LTV for mature apps |
Scale Readiness Checklist
Before recommending scale on any channel:
- ROAS > 1.0× for 7+ consecutive days
- CPA < 0.5× LTV (or user target)
- 50+ conversions in the period
- Creative refresh pipeline in place (social channels)
- MMP events verified (social channels)
- Payback period within user target
Output Template
# Profitability Report — [App Name] — [Period]
## Unit economics
- LTV: $___ (source: RC / user / estimate)
- Store fee: ___%
- Break-even CPA: $___
- Scale CPA (0.5× net LTV): $___
- Payback period at target CPA: ___ days
## Blended performance
- Total ad spend: $___
- Total attributed revenue: $___
- Blended ROAS: ___×
- Net margin: ___%
- Verdict: Scale / Hold / Pause
## By channel
| Channel | Spend | Installs | Conv | CPA | Revenue | ROAS | Verdict |
|---------|-------|----------|------|-----|---------|------|---------|
| ASA | | | | | | | |
| TikTok | | | | | | | |
| Meta | | | | | | | |
| **Total** | | | | | | | |
## Top issues
1. [e.g. "Meta CPA $34 vs $22 target — creative fatigue likely"]
2. [e.g. "TikTok 0 purchase events — MMP mapping broken"]
## Scale recommendations
| Channel | Action | Reason | New budget |
|---------|--------|--------|------------|
| ASA | Scale +20% | ROAS 1.8×, 14d stable | $/day |
| Meta | Pause | CPA 2.1× LTV | $0 |
| TikTok | Hold | Insufficient data (4 days) | $/day |
## Blockers to profitability
1. [specific blocker with fix]
Cross-Skill Handoffs
| Finding | Route to |
|---|---|
| ASA keyword detail | asa-roas-analysis |
| Budget reallocation | cross-channel-budget |
| Channel comparison dashboard | cross-channel-performance |
| LTV/trial issues | subscription-snapshot, aso-skills paywall-optimization |
| MMP event gaps | mmp-setup |
| Creative fatigue (social) | tiktok-creative-strategy or ad-creative-variants |
Related Skills
subscription-snapshot— RevenueCat health and LTV baselinecross-channel-performance— unified channel dashboardcross-channel-budget— budget allocation based on profitabilityasa-roas-analysis— ASA keyword-level profittiktok-creative-strategy/ad-creative-variants— refresh fatigued creatives
Signals
- GitHub stars
- 55
- Forks
- 5
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
campaign-profitability- Source
- github.com/appeeky/ua-skills