SuperAPI AI Directory

monetization-playbook

Marketing & growth

View repository

Updated 10-16 16:26

About this skill

💰 Indie Monetization Playbook

A practical playbook for indie developers to monetize free products. No theory, just execution.


When to Apply

  • When designing a monetization model for a new product
  • When adding a revenue layer to an existing free product
  • When "monetization", "pricing", "paywall" are mentioned

1. Revenue Model Matrix

Product type → immediately select the optimal revenue model.

제품 유형           │ 1순위              │ 2순위             │ 3순위
────────────────────┼────────────────────┼───────────────────┼──────────────────
브라우저 도구        │ AdSense            │ 프리미엄 업그레이드  │ 도네이션 (Ko-fi)
HTML5 게임          │ 인앱 광고 (리워디드) │ 프리미엄 모드       │ 스폰서십/포털 배포
모바일 앱 (로컬)     │ 프리미엄 게이트      │ 원타임 구매         │ 선택적 연간 후원
모바일 앱 (서버)     │ 구독 (월/연)        │ 프리미엄 티어       │ 사용량 과금
소설/콘텐츠          │ 유료 구독           │ 스폰서 챕터         │ 광고 삽입
텔레그램 Mini App   │ 리워디드 광고        │ Stars 아이템       │ 어필리에이트

Core Design by Model

Premium Gate (recommended for mobile apps)

Free 버전: 모든 기능 사용 가능 + 워터마크/제한
Pro 버전: 워터마크 제거 + 프리미엄 기능 잠금 해제
가격: 1회 구매 ($4.99-$14.99)
  • ✅ Provide enough value for free → improves conversion rate
  • ✅ Leverage the narrative "no server → no subscription needed"
  • ❌ Not suitable for products that incur server costs

AdSense (recommended for browser tools)

배치: 콘텐츠 하단 + 사이드바 (모바일: 인피드)
예상 RPM: $1-5 (도구 사이트), $0.5-2 (게임)
손익분기: 월 10,000+ 페이지뷰

Rewarded Ads (recommended for games)

트리거: 추가 생명/코인/힌트 획득 시
빈도: 게임 오버당 1회 (강제 아님)
보상: 유저에게 명확한 가치 (코인 50개 등)

2. Pricing Strategy: Anti-Subscription Model

Core: One-time purchase + optional annual support (Anti-Subscription Narrative)

┌─────────────────────────────────────────────────┐
│  Free          │  Pro (1회 구매)  │  Supporter    │
│  기본 기능      │  풀 기능         │  Pro + 우선 지원│
│  워터마크/광고   │  워터마크 제거    │  연간 갱신 선택 │
│  $0            │  $4.99-14.99    │  $2.99/년     │
└─────────────────────────────────────────────────┘

Criteria for Determining Price Points

Product Complexity One-Time Purchase Price Comparison Benchmark
Simple tool $2.99-4.99 1 cup of coffee
Intermediate app $4.99-9.99 1 lunch
Professional app $9.99-19.99 Movie + popcorn
Pro tool $19.99-49.99 Emphasize cheaper than a monthly subscription

Discount Strategy

  • Education discount: 50% for students/teachers/military (verify .edu / .ac.kr email)
  • Launch discount: 40% for the first 2 weeks (use FOMO)
  • Promo codes: 25 free + 40% discount codes (for Reddit distribution)

3. Implementation Guide

3.1 Inserting AdSense (browser tools/websites)

<!-- 1. 승인 후 ads.txt 루트에 배치 -->
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0

<!-- 2. 자동 광고 (가장 간단) -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX"
     crossorigin="anonymous"></script>

<!-- 3. 수동 광고 유닛 (추천: 콘텐츠 하단) -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXXXXXX"
     data-ad-slot="YYYYYYYY"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

Checklist:

  • Enough content on the site (minimum 15-20 pages/posts)
  • Privacy Policy page required
  • Check mobile responsiveness
  • Ad density: 30% or less relative to content

3.2 Stripe Integration (one-time purchase/subscription)

// Stripe Checkout — 가장 빠른 구현 (서버 사이드)
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

// 원타임 구매
const session = await stripe.checkout.sessions.create({
  line_items: [{
    price_data: {
      currency: 'usd',
      product_data: { name: 'Pro License' },
      unit_amount: 999, // $9.99
    },
    quantity: 1,
  }],
  mode: 'payment',
  success_url: 'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}',
  cancel_url: 'https://yoursite.com/cancel',
});
// → session.url로 리다이렉트

// 웹훅으로 결제 완료 처리
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
  const event = stripe.webhooks.constructEvent(
    req.body, req.headers['stripe-signature'], webhookSecret
  );
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;
    // 라이선스 발급 로직
  }
  res.json({received: true});
});

Absolutely prohibited:

  • ❌ Charges API (legacy)
  • ❌ Using Card Element directly (PCI burden)
  • ❌ Hardcoding payment_method_types

3.3 Gumroad Integration (serverless alternative)

<!-- 가장 간단: Gumroad 오버레이 -->
<script src="https://gumroad.com/js/gumroad.js"></script>
<a class="gumroad-button" href="https://yourname.gumroad.com/l/product">
  Buy Pro License — $9.99
</a>

<!-- 또는 Gumroad API로 라이선스 검증 -->
<!-- GET https://api.gumroad.com/v2/licenses/verify -->
<!-- params: product_id, license_key -->

Gumroad vs Stripe choice:

Criteria Gumroad Stripe
Setup time 5분 1-2 hours
Fees 10% 2.9% + $0.30
Server required ❌ ✅
License key Auto-generated Implement yourself
Recommended situation MVP/rapid validation Scale/custom

3.4 Paywall Implementation Patterns

// 프론트엔드 페이월 게이트
function checkAccess(feature) {
  const license = localStorage.getItem('pro_license');
  if (!license && PREMIUM_FEATURES.includes(feature)) {
    showUpgradeModal(); // 구매 유도 모달
    return false;
  }
  if (license) {
    // 서버사이드 검증 (변조 방지)
    return verifyLicense(license);
  }
  return true; // 무료 기능
}

// 워터마크 방식 (카메라 앱 등)
function applyWatermark(canvas) {
  if (!isPro()) {
    const ctx = canvas.getContext('2d');
    ctx.font = '14px Arial';
    ctx.fillStyle = 'rgba(255,255,255,0.5)';
    ctx.fillText('Made with AppName', 10, canvas.height - 20);
  }
}

4. Marketing Integration

4.1 #RoastMyApp Reddit Campaign

Post template:

Title: #RoastMyApp: [제품명]에 대한 솔직한 피드백 구합니다. 무료 Pro 라이선스 25개 포함

Body:
[N]개월간 만든 [제품명]을 드디어 공개합니다.

핵심 기능:
- [기능 1]
- [기능 2]
- [기능 3]

🎁 무료 Pro 라이선스 25개 (선착순):
CODE1, CODE2, CODE3 ... CODE25

💸 할인 코드: [코드] (40% OFF)

솔직한 피드백 부탁드립니다. 칭찬보다 비판이 더 도움됩니다!

사용하신 코드는 댓글로 알려주세요 🙏

Target subreddits (by product):

Product type Subreddit
Mobile app r/iOSProgramming, r/androiddev, r/AppBusiness
Games r/godot, r/iosgaming, r/indiegaming, r/IndieDev
Web tools r/webdev, r/SideProject, r/InternetIsBeautiful
Photo/Camera r/photography, r/mobilephotography

Core rules:

  • Post the same format in 5+ subreddits (follow each sub's rules)
  • When codes run out, notify in comments → FOMO effect
  • Humble tone required ("I'd like honest feedback")
  • Contribute to the community first, then post (to prevent spam bans)

4.2 ASO localization in 39 languages

실행 순서:
1. Xcode 시뮬레이터에서 스크린샷 캡처
2. ButterKit Pro로 39개 언어 자동 번역 + 프레이밍
3. App Store Connect에 업로드
4. 스크린샷 캡션에 검색 키워드 의도적 삽입
   (Apple이 스크린샷 텍스트를 검색 인덱싱에 반영)

4.3 Anti-subscription narrative (local apps only)

Positioning statement:

"서버가 없으니 구독이 필요 없습니다.
한 번 구매하면 영원히 사용하세요."

"No accounts. No tracking. No subscription.
Buy once, own forever."

4.4 Dual community

Discord (실시간)          Reddit (비동기)
├── #general              ├── 기능 요청 투표
├── #bug-reports          ├── 프로모 코드 배포
├── #feature-requests     ├── devlog 공유
└── #showcase             └── 유저 쇼케이스
→ 양쪽 크로스 링크
→ 기능 요청 → 개발 우선순위 반영 → 충성도 ↑

5. Measurement: Funnel metrics

Core funnel

방문 (Visit)
  ↓ [전환율 목표: 5-15%]
활성 사용 (Active Use)
  ↓ [전환율 목표: 2-5%]
업그레이드 시도 (Upgrade Intent)
  ↓ [전환율 목표: 30-60%]
결제 완료 (Payment)
  ↓ [유지율 목표: 70%+]
재구매/추천 (Retention/Referral)

Metrics to track

Stage Metric Tool
Acquisition Pageviews, acquisition channel Google Analytics / Plausible
Activation DAU, session length Custom event logging
Conversion Upgrade modal impressions vs clicks Custom events
Payment Payment completion rate, average revenue Stripe Dashboard
Retention D1/D7/D30 retention Custom cohort analysis

A/B testing patterns

Test 1: Price points

A: $4.99 (기본)
B: $9.99 (프리미엄 인식)
C: $6.99 (중간)
측정: 전환율 × 가격 = 매출 극대화 포인트
기간: 최소 2주, 유저 500명 이상/그룹

Test 2: Paywall timing

A: 3일 후 프리미엄 유도
B: 7일 후 프리미엄 유도
C: 기능 제한 도달 시 유도
측정: 전환율 + D30 리텐션 (너무 빠르면 이탈↑)

Test 3: CTA copy

A: "Upgrade to Pro"
B: "Remove Watermark — $4.99"
C: "Unlock All Features"
측정: 클릭율 → 결제 완료율

Test 4: Number of free codes

A: 10개 무료 코드
B: 25개 무료 코드
C: 50개 무료 코드
측정: 레딧 engagement + 후속 유료 전환

6. Execution checklist

Phase 0: Decide on revenue model (Day 1)

- [ ] 제품 유형 확인 → 매트릭스에서 수익 모델 선택
- [ ] 서버 비용 유무 확인 → 구독 vs 1회 구매 결정
- [ ] 경쟁 제품 가격 조사 (최소 5개)
- [ ] 가격 포인트 1차 결정
- [ ] Free vs Pro 기능 분리표 작성

Phase 1: Build payment infrastructure (Day 2-3)

- [ ] Stripe 계정 생성 + API 키 발급
  OR Gumroad 제품 페이지 생성 (MVP 시)
- [ ] Checkout 플로우 구현 (테스트 모드)
- [ ] 웹훅 설정 + 라이선스 발급 로직
- [ ] 결제 성공/실패 페이지 구현
- [ ] Privacy Policy + Terms of Service 페이지

Phase 2: Implement paywall (Day 4-5)

- [ ] 프리미엄 게이트 UI 구현 (모달/배너)
- [ ] 워터마크 또는 기능 제한 적용
- [ ] 라이선스 검증 로직 (프론트 + 백엔드)
- [ ] 복원 기능 (앱스토어) 또는 라이선스 키 재입력
- [ ] 업그레이드 CTA 배치 (자연스러운 위치)

Phase 3: Marketing preparation (Day 6-7)

- [ ] 프로모 코드 25개 생성
- [ ] 할인 코드 40% 생성
- [ ] #RoastMyApp 포스트 초안 작성
- [ ] 타겟 서브레딧 5개 선정 + 규칙 확인
- [ ] 앱스토어: ButterKit으로 39개 언어 스크린샷 (해당 시)
- [ ] Discord 서버 or 서브레딧 생성

Phase 4: Launch + measurement (Day 8+)

- [ ] 레딧 포스트 게시 (5개 서브레딧)
- [ ] 코드 소진 시 댓글 알림 게시
- [ ] Google Analytics / Plausible 설치
- [ ] 퍼널 이벤트 트래킹 설정
- [ ] 1주차: 전환율 체크 → 가격 A/B 테스트 시작
- [ ] 2주차: CTA 문구 A/B 테스트
- [ ] 4주차: 월간 수익 리포트 → 모델 조정

⚡ Quick Decision Guide

Q: 서버 비용 있나?
├── YES → 구독 모델 고려
└── NO → 1회 구매 + "안티 구독" 내러티브

Q: MVP인가?
├── YES → Gumroad (5분 세팅)
└── NO → Stripe (수수료 절감)

Q: 유저 100명 넘었나?
├── YES → 수익화 시작
└── NO → 수익화 보류, 유저 획득 집중

Q: 첫 유료 전환 확인됐나?
├── YES → A/B 테스트로 최적화
└── NO → CTA/페이월 위치 재검토

Reference: memory/projects/marketing.md, specs/butterkit-absorption.md