--- name: ltv-calculation description: "Judge whether the users you are buying are worth what you paid, using real retention curves rather than platform ROAS. Use before scaling spend on a subscription, marketplace, or repeat-purchase business." license: MIT compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer." metadata: author: "Adspirer" version: "1.0.0" adspirer_category: "analytics-reporting" adspirer_source: "https://www.adspirer.com/skills/ltv-calculation" adspirer_trigger: "tell me whether the customers I am acquiring are actually profitable" adspirer_connection_url: "https://adspirer.ai/sign-up" adspirer_primary_keyword: "ltv calculation" adspirer_secondary_keywords: "customer lifetime value, cohort analysis marketing" adspirer_launch_wave: "2" adspirer_kind: "skill" adspirer_level: "operator" adspirer_platforms: "meta,google" adspirer_supported_clients: "claude,claude-code,claude-cowork,chatgpt,codex,cursor,gemini,windsurf" adspirer_summary: "Read retention by acquisition cohort against what each cohort cost, and say plainly when it is too early to judge." adspirer_connections_required: "adspirer,posthog" adspirer_connections_optional: "" --- # Cohort LTV Reader ## Use this when Platform ROAS says the campaigns are working, and the bank account disagrees. Acquisition costs have crept up over two quarters, someone wants to double the budget, and nobody can say whether the customers bought last month are worth more or less than the ones bought a year ago. Use this skill before that budget decision. It works out: - how each acquisition cohort actually retains, rather than what it converted on day one; - whether the value a cohort produces has covered what it cost to acquire, and by when; - whether newer cohorts are behaving worse than older ones, which is what rising costs usually hide; - which channels are buying customers that stay and which are buying customers that leave; and - whether the account is even old enough for any of this to be answerable. That last point is the most common outcome. A cohort projected to lifetime value after ten days is a guess wearing a number, and this skill says so rather than producing it. ## What you need - Adspirer connected to the ad accounts being judged, so acquisition cost comes from the platforms rather than a spreadsheet. - PostHog connected, with a revenue or value-relevant event already configured. If users are tracked but no revenue event is wired, that gets said up front — retention curves are still readable, lifetime value is not, and the output will be explicit about which of the two it is delivering. - At least one acquisition cohort old enough to have shown a curve. For anything on a monthly billing cycle that means several full cycles, not a few weeks. Where the account is younger, the honest answer is that it is too early. - Acquisition cost for the same date ranges as the cohorts. Mismatched windows — a short attribution window against a months-old cohort — misattribute value to the wrong spend and quietly invert the conclusion. - A reliable mapping between acquisition channel and cohort. Where campaign tagging is inconsistent, the verdict degrades from per-channel to account-level, and that gets flagged rather than split on guesswork. ## Procedure **Connect Adspirer before any live ad-account step.** Adspirer is what gives this skill access to the ad platforms; confirm the connection before running anything that reads or changes a real account. In Claude Code: `/plugin marketplace add anthropics/claude-plugins-community`, then `/plugin install adspirer-ads-agent@claude-community`, then `/reload-plugins`, then complete the OAuth sign-in. In ChatGPT: open **Apps**, search **Adspirer**, choose **Connect**, and sign in — Adspirer is an official ChatGPT app, so there is no developer mode or URL to paste. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → `https://mcp.adspirer.com/mcp`. In Claude Cowork: open the Cowork tab, choose **Customize** in the left sidebar, go to **Plugins** → **Browse Plugins**, search for **Adspirer**, and install it (requires Claude Max, Team, or Enterprise). Any other client: https://www.adspirer.com/docs/ai-clients. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. 1. **Establish whether this question can be answered yet.** Check how old the cohorts are against the business's own cycle, and confirm a revenue event exists rather than only activity events. If the oldest cohort has not lived long enough to show a curve, stop here and say what date it becomes answerable. This is the step that prevents the entire exercise from producing a confident number built on ten days of data. 2. **Pull cost and cohorts on the same basis.** Read acquisition spend by channel and period from the ad accounts, and retention or revenue by acquisition cohort from the product analytics, aligned to identical date ranges. Confirm the channel mapping holds. Where tagging is broken and cohorts cannot be attributed to a channel reliably, say so now and drop to an account-level read rather than inventing a per-channel split. 3. **Read the curves before computing anything.** Look at how each cohort retains over time and where the curve flattens, because a curve that has not flattened cannot support a lifetime projection. Compare newer cohorts against older ones at the same age — this is the comparison that matters, and comparing a two-month-old cohort's total against a two-year-old cohort's total is the most common way this analysis goes wrong. 4. **Work out payback, and be honest about projection.** Establish what each cohort has actually returned against what it cost, and how long that took. Report realized value separately from projected value, and state the assumption behind any projection. Where a curve has not flattened, give a range and say why a single number would be false precision. 5. **Give a verdict per channel and name what it rests on.** Say which channels are acquiring customers that stay and which are not, with the evidence and the cohort ages behind each call. Where the evidence supports "hold and re-check on this date" rather than scale or cut, say that. This is a read-only analysis; any budget change it implies is a separate decision with its own approval. ## Fixed checks - Confirm a revenue or value event genuinely exists before offering any lifetime figure; where only activity events exist, deliver retention and say lifetime value is unavailable. - Confirm cohort age against the business's own cycle before projecting, and refuse to project from a curve that has not flattened. - Align acquisition cost and cohort windows to the same date ranges, and state the attribution basis used on both sides. - Compare cohorts at equal age, never total-to-date against total-to-date. - Verify channel-to-cohort mapping before producing any per-channel verdict; degrade to account level rather than splitting on assumption. - Report realized and projected value as separate figures, never merged into one number. - State the account timezone and currency behind every cost figure. ## Stop conditions - **Success:** a per-cohort read with payback, per-channel verdicts, and the evidence behind each. - **No change needed:** cohorts are paying back within the expected window and newer ones are behaving like older ones. - **Blocked — too early:** no cohort has lived long enough to show a curve. Report the date this becomes answerable rather than producing a projection. - **Blocked — no revenue event:** only activity is tracked, so retention is readable but lifetime value is not. - **Blocked — access:** Adspirer or PostHog cannot be reached, or cohorts cannot be tied to acquisition. - **Needs a handoff:** channel tagging, event instrumentation, or revenue tracking needs an engineer before a per-channel verdict is possible. - **Still uncertain:** curves have not flattened, so the payback estimate is a range. Say what would narrow it. ## Approval boundaries This skill is read-only. It reads spend from the ad accounts and cohorts from product analytics, and it produces an analysis — it does not change budgets, bids, targeting, or campaign status. Any scaling or cutting decision it supports is made by a person and applied with its own explicit approval. It cannot instrument a revenue event, repair channel tagging or UTM conventions, change analytics configuration, or reconcile a billing system; where one of those blocks the read it is named with its owner. Projections are always labelled as projections with their assumptions stated, and are never presented as measured results. ## What you get An answer to whether the customers being bought are worth their cost — or an honest statement that it is too early to know, which is frequently the correct output and rarely the one a dashboard gives you. Cohorts are compared at equal age rather than by totals, which is what exposes newer cohorts quietly performing worse than the ones that built the historical average. Realized value stays separate from projected value, with the assumption behind any projection stated, so nobody mistakes a modelled number for a measured one. Where channel tagging is reliable you get a per-channel verdict on which sources acquire customers who stay; where it is not, you get an account-level read and a clear note about why, rather than a confident split built on broken attribution. And where the right answer is to wait, you get the date it becomes answerable instead of a number that would justify whatever someone already wanted to do.