返回 Skill 列表
extension
分类: 营销与增长无需 API Key

monetization-playbook

独立开发者的免费工具/游戏/应用程序变现完全手册。包括根据产品类型选择收益模型、定价策略、AdSense/Stripe/Gumroad的实现、营销整合、漏斗测量以及A/B测试等。在提到变现、定价、付费墙、免费增值模式、独立开发者收入时使用。

person作者: jakexiaohubgithub

💰 Indie Monetization Playbook

인디 개발자가 무료 제품을 수익화하는 실전 플레이북. 이론 없이, 실행만.


적용 시점

  • 새 제품 수익화 모델 설계 시
  • 기존 무료 제품에 수익 레이어 추가 시
  • "수익화", "monetization", "pricing", "paywall" 언급 시

1. 수익 모델 매트릭스

제품 유형 → 최적 수익 모델 즉시 선택.

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

모델별 핵심 설계

프리미엄 게이트 (모바일 앱 추천)

Free 버전: 모든 기능 사용 가능 + 워터마크/제한
Pro 버전: 워터마크 제거 + 프리미엄 기능 잠금 해제
가격: 1회 구매 ($4.99-$14.99)
  • ✅ 무료에서 충분한 가치 제공 → 전환율 향상
  • ✅ "서버 없음 → 구독 불필요" 내러티브 활용
  • ❌ 서버 비용 발생 제품에는 부적합

AdSense (브라우저 도구 추천)

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

리워디드 광고 (게임 추천)

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

2. 가격 전략: 반구독 모델

핵심: 1회 구매 + 선택적 연간 후원 (Anti-Subscription Narrative)

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

가격 포인트 결정 기준

| 제품 복잡도 | 1회 구매 가격 | 비교 기준 | |------------|-------------|----------| | 단순 도구 | $2.99-4.99 | 커피 1잔 | | 중급 앱 | $4.99-9.99 | 점심 1끼 | | 전문 앱 | $9.99-19.99 | 영화 + 팝콘 | | 프로 도구 | $19.99-49.99 | 월 구독 대비 저렴 강조 |

할인 전략

  • 교육 할인: 학생/교사/군인 50% (.edu / .ac.kr 이메일 확인)
  • 런칭 할인: 첫 2주 40% (FOMO 활용)
  • 프로모 코드: 25개 무료 + 할인 코드 40% (레딧 배포용)

3. 구현 가이드

3.1 AdSense 삽입 (브라우저 도구/웹사이트)

<!-- 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>

체크리스트:

  • [ ] 사이트에 충분한 콘텐츠 (최소 15-20 페이지/포스트)
  • [ ] Privacy Policy 페이지 필수
  • [ ] 모바일 반응형 확인
  • [ ] 광고 밀도: 콘텐츠 대비 30% 이하

3.2 Stripe 연동 (원타임 구매/구독)

// 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});
});

절대 금지:

  • ❌ Charges API (레거시)
  • ❌ Card Element 직접 사용 (PCI 부담)
  • ❌ payment_method_types 하드코딩

3.3 Gumroad 연동 (서버리스 대안)

<!-- 가장 간단: 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 선택: | 기준 | Gumroad | Stripe | |------|---------|--------| | 세팅 시간 | 5분 | 1-2시간 | | 수수료 | 10% | 2.9% + $0.30 | | 서버 필요 | ❌ | ✅ | | 라이선스 키 | 자동 생성 | 직접 구현 | | 추천 상황 | MVP/빠른 검증 | 스케일/커스텀 |

3.4 페이월 구현 패턴

// 프론트엔드 페이월 게이트
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. 마케팅 연동

4.1 #RoastMyApp 레딧 캠페인

포스트 템플릿:

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

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

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

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

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

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

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

타겟 서브레딧 (제품별): | 제품 유형 | 서브레딧 | |----------|---------| | 모바일 앱 | r/iOSProgramming, r/androiddev, r/AppBusiness | | 게임 | r/godot, r/iosgaming, r/indiegaming, r/IndieDev | | 웹 도구 | r/webdev, r/SideProject, r/InternetIsBeautiful | | 사진/카메라 | r/photography, r/mobilephotography |

핵심 규칙:

  • 5개+ 서브레딧에 동일 포맷 포스트 (각 서브 규칙 준수)
  • 코드 소진 시 댓글 알림 → FOMO 효과
  • 겸손한 톤 필수 ("솔직한 피드백 달라")
  • 먼저 커뮤니티에 기여 후 포스팅 (스팸 밴 방지)

4.2 ASO 39개 언어 로컬라이징

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

4.3 안티 구독 내러티브 (로컬 앱 전용)

포지셔닝 문구:

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

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

4.4 2중 커뮤니티

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

5. 측정: 퍼널 지표

핵심 퍼널

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

추적해야 할 지표

| 단계 | 지표 | 도구 | |------|------|------| | 유입 | 페이지뷰, 유입 채널 | Google Analytics / Plausible | | 활성화 | DAU, 세션 길이 | 자체 이벤트 로깅 | | 전환 | 업그레이드 모달 노출 vs 클릭 | 자체 이벤트 | | 결제 | 결제 완료율, 평균 매출 | Stripe Dashboard | | 유지 | D1/D7/D30 리텐션 | 자체 코호트 분석 |

A/B 테스트 패턴

테스트 1: 가격 포인트

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

테스트 2: 페이월 타이밍

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

테스트 3: CTA 문구

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

테스트 4: 무료 코드 수량

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

6. 실행 체크리스트

Phase 0: 수익 모델 결정 (Day 1)

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

Phase 1: 결제 인프라 구축 (Day 2-3)

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

Phase 2: 페이월 구현 (Day 4-5)

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

Phase 3: 마케팅 준비 (Day 6-7)

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

Phase 4: 런칭 + 측정 (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