// design

Marketing Loops

Use when the user wants to build or diagnose a compounding growth loop — referral, viral, content, or paid-recycling — rather than optimize a linear funnel. Also use when the user mentions growth loops, viral loop, viral coefficient, k-factor, referral loop, content loop, network effects, compounding growth, flywheel, "how do we grow without spending more", or "why doesn't our growth compound". Computes the loop factor, shows what it buys in amplification and effective CAC, finds the throttling stage, and projects users over time.

DesignengineIntermediate
bash
$npx skills add sarojkjha/aaj-marketing-skills --skill marketing-loops

// when to use it

Use when the user wants to build or diagnose a compounding growth loop — referral, viral, content, or paid-recycling — rather than optimize a linear funnel. Also use when the user mentions growth loops, viral loop, viral coefficient, k-factor, referral loop, content loop, network effects, compounding growth, flywheel, "how do we grow without spending more", or "why doesn't our growth compound". Computes the loop factor, shows what it buys in amplification and effective CAC, finds the throttling stage, and projects users over time.

// what you give

The stages of one turn of the loop with their conversion rates, the output per completion (e.g. invites sent), and optionally a paid CAC and a paid feed rate for projection

// what you get

The loop factor k with a verdict, the amplification and effective-CAC it buys, the throttling stage to fix first, and a period-by-period projection decomposing loop-driven from paid-driven growth

Marketing Loops

Model growth that compounds because its output feeds back as input — not a funnel with the ends taped together.

Most of the catalog treats growth as a funnel: stages, hand-offs, leaks to plug, a linear path from stranger to customer. lifecycle-and-retention, onboarding-activation, and signup-flow-optimizer all optimize that path. This skill is for the other model. A loop is growth where each turn produces the input to the next turn — users invite users, content attracts people who make content, revenue funds acquisition that produces revenue.

The one question a funnel never asks, and a loop lives or dies on: does one turn of the loop produce more than one turn's worth of input? That ratio is the loop factor, k. It's the single number that separates a channel that compounds from one that merely converts. A funnel optimizer can improve every stage and still never know whether the thing loops, because "does output exceed input" is not a question the funnel frame contains.

The misconception this skill exists to correct is that k ≥ 1 is the goal. True virality — every user producing more than one new user, growth sustaining itself with no paid input — is rare, fragile, and usually the wrong target. The durable reality is sub-viral: a k of 0.5 to 0.8 that doesn't run on its own but more than doubles the value of every acquired user. A k=0.6 loop makes each paid acquisition do the work of 2.5. Teams chase k ≥ 1, miss it, and conclude they "don't have a loop" — when the sub-viral loop they do have is quietly the best line item in the model. This skill is built to surface that.

When to use

The user wants to build a referral or content loop, diagnose why growth isn't compounding, or decide whether a channel is a loop at all. For optimizing the linear conversion path, use onboarding-activation or signup-flow-optimizer. For whether the unit economics support paid acquisition in the first place, use unit-economics. For sequencing loop work into a broader plan, campaign-orchestrator routes here.

Before you start

  1. Draw one turn of the loop as stages. Not the funnel — the cycle. For referral: user sends invites → invite opened → clicked → signed up → (now sends invites). Each stage is a conversion rate; the last stage's output feeds the first.
  2. Get the output per completion. How many invites, shares, or pieces of content one completed turn produces. This is the branching factor, and it's what can push k above the stage-rate product.
  3. Have real rates, not hopes. k is a product of rates, so optimism at each stage multiplies into fantasy. Pull the numbers from analytics; if you're estimating, say so and treat the output as a scenario.
  4. Know whether you even have a loop. If the last stage's output doesn't become the first stage's input, it's a funnel. Model it as one and don't invent feedback that isn't there.

Method

k is the product of every stage rate times the output per turn. The math is deliberately simple; the discipline is in getting honest rates and reading the result correctly.

Two things the engine computes that change decisions:

Amplification — a decaying loop (k < 1) still sums to a finite multiplier, because a seed cohort yields N + Nk + Nk² + … = N/(1−k) total users. k=0.5 doubles; k=0.8 quintuples. This is the number that reframes a "failed" sub-viral loop as a working one.

The throttle — because k multiplies stage rates, the lowest rate caps the whole loop. A ten-point gain at the throttle lifts k more than a ten-point gain anywhere else. The engine names it, so effort goes to the stage that moves the number rather than the stage that's easiest to touch.

Run the engine

Paths assume you installed with npx skills add. From a clone of this repo, use skills/marketing-loops/resources/… instead.

node .agents/skills/marketing-loops/resources/loop-model.js --demo            # worked example, no args
node .agents/skills/marketing-loops/resources/loop-model.js score '<json>'    # compute k for one loop
node .agents/skills/marketing-loops/resources/loop-model.js project '<json>'  # compound it over time
node .agents/skills/marketing-loops/resources/loop-model.js --help

Score takes the loop's stages and branching factor, returns k, the verdict band, amplification, effective CAC (if a paid CAC is given), and the throttling stage. Project takes a k and a paid feed and shows users period by period, decomposing loop-driven from paid-driven growth so the compounding is visible rather than assumed.

Workflow

  1. Map one turn of the loop as stages with real rates, and the output per completion.
  2. Score it to get k and the verdict. Read the band honestly — sub-viral is the normal, workable case.
  3. Read the throttle and target it first; it's where a fixed amount of effort moves k most.
  4. Get the effective CAC if you run paid — the loop pays for k of every acquisition, and that lowered number is what should feed unit-economics and paid-media-budget-allocation.
  5. Project with a realistic paid feed to see the compounding, and to decompose how much growth is loop versus paid.
  6. Don't model compounding that isn't there. If k is near zero, say the channel is a funnel and route the work to the funnel skills.

Present the result

Lead with k and its verdict band, then what k buys — amplification and effective CAC — then the throttle. For a projection, show the paid-vs-loop decomposition; the gap between total and paid-alone is the entire argument for treating this as a loop.

Be explicit about the sub-viral point every time k lands below 1. Left unsaid, the user reads "k = 0.6" as failure. Said plainly, they read it as "every acquisition worth 2.5×," which is the truth.

Guardrails & common mistakes

  • k ≥ 1 is usually the wrong goal. Sustained virality is rare and fragile. A strong sub-viral loop that amplifies paid is the durable win; don't dismiss it for missing 1.0.
  • k is a product, so optimism compounds. Four stages each padded 10% inflates k by ~46%. Use measured rates; flag estimates as scenarios.
  • A projection with k ≥ 1 runs away. The model imposes no saturation ceiling, so an exponential curve is real in shape but fictional in magnitude. Add a ceiling before planning against the number.
  • Fix the throttle, not the easy stage. The lowest rate caps k. Effort anywhere else is worth less, however tempting the quick win.
  • A funnel with the ends joined is not a loop. If the output doesn't genuinely re-enter as input, there's no feedback and no compounding. Don't force the frame.
  • The loop lowers CAC; it doesn't make acquisition free. Effective CAC is paid CAC × (1−k), not zero. Feed the real number into the budget skills.
  • Loops saturate. Every k is measured at a point in time and tends to fall as the addressable network fills. Re-measure; don't assume today's k holds at scale.

unit-economics (where effective CAC and LTV:CAC get judged) · paid-media-budget-allocation (the paid feed a loop amplifies) · onboarding-activation and signup-flow-optimizer (the funnel model, for the linear path) · lifecycle-and-retention (retention, which raises loop rates by keeping users in the cycle) · campaign-orchestrator (routes here when the play is a loop).

// see it run

agent · design
$
view engine source

Examples

// prompt

node resources/loop-model.js --demo

// result

▸ DEMO 1 — score mode (compute the loop factor)

MARKETING LOOP — SCORE
══════════════════════════════════════════════════════════
Loop type   Viral / referral — users invite users; k = invites × accept-rate

LOOP FACTOR k = 0.252

VERDICT       CONTRIBUTING
  k in [0.2, 0.5) — a real assist. The loop meaningfully lowers effective CAC
  but won't carry growth alone. Worth improving; don't rely on it.

THE LOOP
  stage                       rate
  user sends invites        100.0%
  invite opened              45.0%
  clicks through             35.0%  ← throttle
  signs up                   40.0%
  × output per turn              4
  ────────────────────────────────
  = loop factor k            0.252

WHAT k BUYS YOU
  Amplification    1.34×   every seeded user ultimately yields 1.34 users
  Effective CAC    59.84   paid CAC 80 × (1 − k)
                           the loop pays for 25.2% of every acquisition

WHERE TO PUSH
  The throttle is "clicks through" at 35.0%. Because k is the product
  of every stage rate, the lowest rate caps the whole loop — a 10-point gain
  there lifts k more than a 10-point gain anywhere else. Fix the throttle first.

WHAT THIS MEANS
  A genuine assist, not an engine. Bank the lower effective CAC, but plan
  growth around paid and treat the loop as leverage on it, not a substitute.


▸ DEMO 2 — project mode (compound it over 12 periods)

MARKETING LOOP — PROJECTION
══════════════════════════════════════════════════════════
Loop factor k        0.600
Seed users           1,000
Paid feed / period   500
Periods              12

CUMULATIVE USERS
  period         new       total
  1            1,100       2,100  ████
  2            1,160       3,260  ██████
  3            1,196       4,456  █████████
  4            1,218       5,674  ███████████
  5            1,231       6,904  █████████████
  6            1,238       8,142  ████████████████
  7            1,243       9,385  ██████████████████
  8            1,246      10,631  ████████████████████
  9            1,247      11,879  ███████████████████████
  10           1,248      13,127  █████████████████████████
  11           1,249      14,376  ████████████████████████████
  12           1,249      15,626  ██████████████████████████████

WHERE THE GROWTH CAME FROM
  Paid + seed alone    7,000
  Added by the loop    8,626
  Loop multiplier      2.23×   the loop turned 7,000 into 15,626

WHAT THIS MEANS
  The loop is doing more than half the work. Notice the total far exceeds
  paid-alone — that gap is the compounding you'd miss modeling this as a
  funnel. Fund the paid feed; the loop multiplies it.

(Demo data. Replace with your real loop stages and paid feed.)

// faq

// install

$npx skills add sarojkjha/aaj-marketing-skills --skill marketing-loops

// run it

$node .agents/skills/marketing-loops/resources/loop-model.js --demo

// worked example

Get the worked example for marketing-loops

One email. The filled-in config, the output, and how to read it.

No spam. Unsubscribe anytime.

// sprint

Unit Economics & Retention Sprint — $3,500, 10 business days

This skill is one of the engines behind the Unit Economics & Retention Sprint — $3,500, ten business days.

LTV, CAC, payback and churn on your actual numbers — with a verdict, not a dashboard.

See what's included.

// human in the loop

Need a human in the loop?

AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.