SaaS Growth Framework:零广告预算获取首批 100 位付费客户的增长框架

面向早期 SaaS 初创公司的增长框架,从获客、转化、留存四个阶段拆解如何获取首批 100 位付费客户,无需付费广告。

Maya Patel
Maya Patel
June 11, 202615 min read
其他语言:Deutsch · English

TL;DR: 首批 100 位付费客户决定了你的 SaaS 能否活下去。本框架将获客流程拆解为四个阶段——Define(定义)、Reach(触达)、Convert(转化)、Retain(留存)——每个阶段都有具体打法。你将学会如何通过内容营销、社区运营和产品驱动增长(PLG)构建客户获取管道——全部零付费广告。附赠完整的 UTM 追踪设置方案、落地页转化优化模式和将客户转化为销售力量的推荐系统架构。


The First 100 Problem(首批 100 客户难题)

每位 SaaS 创始人都面临同样的先有鸡还是先有蛋的困境:你需要客户来验证产品,但你需要一个已验证的产品来获取客户。数据令人警醒:

指标数值来源
首批 100 位客户前倒下的 SaaS 初创公司~60%CB Insights
达成首批 100 位客户的平均耗时(自筹阶段)6-12 个月Baremetrics
首批 100 位客户的获取成本(自筹阶段)$50-500OpenView
首批 100 位客户的主要渠道创始人主导销售 & 内容SaaS Labs
产品市场契合前就投付费广告的初创公司70% 烧光退出Lenny Rachitsky

以下框架假设零营销预算。每个打法消耗的是时间,不是钱——因为在拥有 100 位付费客户之前,你唯一可扩展的资源就是自己的努力。


Stage 1: Define — 首批 100 位客户是谁?

大多数创始人的网撒得太广。首批 100 位客户具有一些共同特征:

理想客户画像(ICP)工作表

typescript
// src/lib/marketing/icp.ts
interface ICP {
  role: string
  companySize: string
  techStack: string[]
  painPoint: string
  budget: string
  whereTheyHangOut: string[]
}

// Example ICP for TanStack Ship:
const icpTanStackShip: ICP = {
  role: "Indie founder / Full-stack developer",
  companySize: "1-10 employees",
  techStack: ["React", "TypeScript", "Cloudflare", "Node.js"],
  painPoint: "Building SaaS boilerplate from scratch takes 4-8 weeks",
  budget: "$200-500 for tools per month",
  whereTheyHangOut: [
    "r/reactjs", "r/webdev", "r/SaaS",
    "Hacker News", "X/Twitter #buildinpublic",
    "Indie Hackers", "React Discord",
  ],
}

练习:写下 10 个会为你的产品付费的真实用户的名字。如果连 10 个都想不出来,说明你的 ICP 定义还不够具体。这 10 个人将成为你的首批外展目标。

100 人管道漏斗

目标 500 → 触达 200 → 演示 50 → 付费 100
(外展)     (回复)    (转化)    (激活)

每个阶段都需要特定的转化策略:

管道阶段目标转化策略工具
外展500 个潜在客户个性化冷邮件/DMClay + Apollo
回复200 条回复价值优先的信息你的收件箱
演示50 场演示问题感知型话术Calendly
付费100 位客户限时创始人优惠Stripe

Stage 2: Reach — 如何出现在对的人面前

战术 1:社区优先内容(技术型 SaaS 最高 ROI)

与其广播"买我的产品",不如在 ICP 活跃的社区中提供真正的价值:

typescript
// src/lib/marketing/content-strategy.ts
const contentPlan = [
  {
    platform: "r/reactjs",
    format: "Tutorial",
    topic: "How to implement file-based routing with TanStack Router",
    callToAction: "Mention TanStack Ship as a complete starter",
    frequency: "1x per week",
  },
  {
    platform: "Hacker News",
    format: "Show HN",
    topic: "Show HN: I built a SaaS starter with TanStack Start + Cloudflare Workers",
    callToAction: "Direct link to landing page",
    frequency: "At launch + major updates",
  },
  {
    platform: "X/Twitter",
    format: "Build in public",
    topic: "Daily progress on SaaS features, revenue, users",
    callToAction: "Link in bio + profile",
    frequency: "Daily",
  },
  {
    platform: "Indie Hackers",
    format: "Interview / Milestone",
    topic: "How I reached $1k MRR with TanStack Ship",
    callToAction: "Link to product",
    frequency: "Monthly",
  },
]

这份内容计划确保你持续出现在 ICP 常驻的平台。每条内容都承载双重使命:为社区提供真正的价值,同时在讨论相关问题时自然引出你的产品作为解决方案。

战术 2:创始人主导的冷外展

个性化冷邮件在方法正确的情况下依然有效:

typescript
// Template: High-value cold email
const coldEmailTemplate = `Subject: Quick question about ${prospect.tool}

Hey ${prospect.firstName},

I noticed you built ${prospect.project} with ${prospect.techStack}.

I am working on [Your Product] — a [one-line value prop]. Since you are already using ${sharedInterest}, I would love your feedback.

No pitch, just 10 minutes to show you what I am building and get your honest thoughts.

Are you open to a quick call this week?

Best,
${yourName}`

500 封冷邮件的行业基准数据:

  • 打开率:45-60%
  • 回复率:10-20%
  • 预约演示:3-5%
  • 转化为客户:1-2%

战术 3:带有 SEO 护城河的内容营销

创作能占领 ICP 搜索的长尾关键词内容。对于基于 TanStack 的 SaaS:

关键词月搜索量竞争度内容类型
"TanStack Start tutorial"2.4K/月低教程
"Cloudflare Workers SSR"1.8K/月低-中指南
"how to build a SaaS solo"3.2K/月中框架文章
"SaaS boilerplate comparison"1.2K/月中对比

Stage 3: Convert — 将兴趣转化为收入

落地页转化架构

typescript
// src/components/marketing/HeroSection.tsx
export function HeroSection() {
  return (
    <section className="max-w-4xl mx-auto text-center py-20">
      {/* 1. Problem-aware headline */}
      <h1 className="text-5xl font-bold mb-4">
        Ship Your SaaS in Weeks, Not Months
      </h1>

      {/* 2. Specific value proposition */}
      <p className="text-xl text-gray-600 mb-8">
        TanStack Ship gives you a production-ready SaaS starter with
        authentication, billing, UTM tracking, and email campaigns —
        so you can focus on your unique product logic.
      </p>

      {/* 3. Social proof */}
      <div className="flex justify-center gap-8 mb-12">
        <div className="text-center">
          <div className="text-3xl font-bold">50+</div>
          <div className="text-sm text-gray-500">Early adopters</div>
        </div>
        <div className="text-center">
          <div className="text-3xl font-bold">4+</div>
          <div className="text-sm text-gray-500">Weeks saved</div>
        </div>
        <div className="text-center">
          <div className="text-3xl font-bold">100%</div>
          <div className="text-sm text-gray-500">TypeScript</div>
        </div>
      </div>

      {/* 4. Primary CTA */}
      <div className="flex justify-center gap-4">
        <Link
          to="/pricing"
          className="bg-blue-600 text-white px-8 py-3 rounded-lg text-lg font-semibold hover:bg-blue-700"
        >
          Start Building →
        </Link>
        <Link
          to="/blog/tanstack-start-end-to-end-tutorial"
          className="border border-gray-300 px-8 py-3 rounded-lg text-lg font-semibold hover:bg-gray-50"
        >
          Read the Tutorial
        </Link>
      </div>
    </section>
  )
}

这个英雄区遵循经过验证的转化模式:问题感知型标题 → 具体价值主张 → 社会证明(数字)→ 清晰的 CTA 并附上教育内容的次要链接。每个元素都建立在前一个元素之上,逐步消除用户顾虑。

转化优化的定价页

追踪潜在客户查看了哪些定价方案、以及他们从哪个 UTM 来源到来,有助于你理解哪些渠道带来了高意向流量。以下服务端函数记录每次定价页访问及其归因数据:

typescript
export const trackPricingView = createServerFn({ method: "POST" }).handler(
  async ({ plan, utmSource }: { plan: string; utmSource?: string }) => {
    await env.DB.prepare(
      `INSERT INTO conversion_events
        (event_type, plan, utm_source, page_url, timestamp)
       VALUES ('pricing_view', ?, ?, ?, unixepoch())`
    ).bind(plan, utmSource ?? "direct", getCurrentUrl())
      .run()
  }
)

有了这些数据,你可以按渠道和按方案计算转化率,从而将营销精力集中在吸引愿意为高级方案付费客户的渠道上。

创始人折扣策略

对于首批 100 位客户,使用递进折扣来制造紧迫感,同时不贬低产品价值:

已获客数量折扣幅度理由
1-25终身 40% off最大激励,换取早期反馈
26-50年度 30% off仍有诚意,建立动能
51-75年度 20% off验证增长中,折扣递减
76-100年度 10% off接近原价
100+全价市场验证已完成

Stage 4: Retain — 留住并扩展首批 100 位客户

首批 100 位客户的流失是致命的——如果流失率为 20%,你需要 20 个新客户才能维持现状。重点应放在激活上,而不仅仅是获客。

激活指标仪表盘

sql
-- Track activation events per user
CREATE TABLE activation_events (
  id TEXT PRIMARY KEY,
  user_id TEXT NOT NULL,
  event_type TEXT NOT NULL CHECK (
    event_type IN (
      'signed_up', 'completed_onboarding',
      'created_first_project', 'invited_team_member',
      'connected_payment', 'deployed_to_production'
    )
  ),
  occurred_at INTEGER NOT NULL DEFAULT (unixepoch()),
  FOREIGN KEY (user_id) REFERENCES users(id)
);

-- Activation health view
CREATE VIEW user_activation_status AS
SELECT
  u.id,
  u.email,
  u.created_at,
  MAX(CASE WHEN ae.event_type = 'completed_onboarding' THEN 1 ELSE 0 END) as onboarded,
  MAX(CASE WHEN ae.event_type = 'created_first_project' THEN 1 ELSE 0 END) as created_project,
  MAX(CASE WHEN ae.event_type = 'deployed_to_production' THEN 1 ELSE 0 END) as deployed,
  CASE
    WHEN MAX(ae.event_type = 'deployed_to_production') THEN 'Fully Activated'
    WHEN MAX(ae.event_type = 'created_first_project') THEN 'Exploring'
    WHEN MAX(ae.event_type = 'completed_onboarding') THEN 'Onboarded'
    ELSE 'Stuck'
  END as activation_stage
FROM users u
LEFT JOIN activation_events ae ON ae.user_id = u.id
GROUP BY u.id;

每周留存邮件序列

typescript
// src/lib/email/retention.ts
const retentionSequence = [
  {
    day: 1,
    subject: "Welcome to TanStack Ship — Your First Project",
    content: "Step-by-step guide to deploying your first app",
    cta: "Deploy Now",
  },
  {
    day: 3,
    subject: "Tip: Authentication is Already Set Up",
    content: "How to customize the auth flow for your brand",
    cta: "View Auth Docs",
  },
  {
    day: 7,
    subject: "35% of Users Miss This Feature (UTM Tracking)",
    content: "How to track every customer acquisition channel",
    cta: "Set Up UTM",
  },
  {
    day: 14,
    subject: "You Have Been Using TanStack Ship for 2 Weeks",
    content: "Here is what you have built so far + what you might have missed",
    cta: "See Progress",
  },
  {
    day: 30,
    subject: "One Month In — How Can We Help?",
    content: "Personal check-in from the founder",
    cta: "Book a Call",
  },
]

这个结构化邮件序列引导新用户从注册到激活、再到全面使用产品。每条消息聚焦单一行动或功能,减少认知负担,提高用户完成每个步骤的概率。

NPS + 流失预防闭环

typescript
// Score-based intervention
export async function handleNpsResponse(
  userId: string,
  score: number,
  feedback: string
) {
  if (score >= 9) {
    // Promoter → Ask for referral
    await triggerReferralPrompt(userId)
  } else if (score <= 6) {
    // Detractor → Immediate founder outreach
    await notifyFounder(userId, feedback)
    await scheduleRecoveryCall(userId)
  }

  await env.DB.prepare(
    `INSERT INTO nps_responses (user_id, score, feedback, responded_at)
     VALUES (?, ?, ?, unixepoch())`
  ).bind(userId, score, feedback).run()
}

这个基于 NPS 评分的干预系统将推荐者(9-10 分)视为推荐机会,将贬低者(0-6 分)视为挽回机会。核心洞察是:一次及时的创始人电话可以将贬低者转化为忠诚客户——许多流失风险实际上只是未被回答的问题。


用 UTM 归因追踪一切

无法衡量就无法优化。从第一天起就建立 UTM 追踪:

typescript
// src/lib/marketing/utm.ts
import { useSearchParams } from "@tanstack/react-router"

export function useUtmCapture() {
  const [searchParams] = useSearchParams()

  const utmData = {
    source: searchParams.get("utm_source") ?? "direct",
    medium: searchParams.get("utm_medium") ?? "none",
    campaign: searchParams.get("utm_campaign") ?? "none",
    term: searchParams.get("utm_term") ?? "none",
    content: searchParams.get("utm_content") ?? "none",
  }

  // Persist UTM parameters across the session
  useEffect(() => {
    if (utmData.source !== "direct") {
      localStorage.setItem("utm_data", JSON.stringify(utmData))
      trackUtmVisit(utmData) // Server-side tracking
    }
  }, [searchParams])

  return utmData
}

归因表格:展示哪些渠道驱动了你的首批 100 位客户:

渠道占首批 100 客户的 %成本转化率到首次付费的时间
内容营销(博客)30%仅时间2-5%14-30 天
社区(Reddit/HN)25%仅时间3-8%7-21 天
创始人冷外展20%仅时间1-3%3-14 天
产品驱动(病毒/推荐)15%内置5-15%1-7 天
合作伙伴10%收入分成10-25%30-90 天

首批 100 客户仪表盘

构建一个简易仪表盘实时追踪进展:

sql
CREATE VIEW first_100_dashboard AS
SELECT
  COUNT(DISTINCT u.id) as total_users,
  COUNT(DISTINCT CASE WHEN s.status = 'active' THEN u.id END) as paying_customers,
  COUNT(DISTINCT CASE WHEN ae.event_type = 'deployed_to_production' THEN u.id END) as activated_users,
  ROUND(AVG(CASE WHEN s.status = 'active' THEN s.mrr END), 2) as avg_mrr,
  ROUND(SUM(CASE WHEN s.status = 'active' THEN s.mrr END), 2) as total_mrr,
  ROUND(
    100.0 * COUNT(DISTINCT CASE WHEN s.status = 'active' THEN u.id END) /
    NULLIF(COUNT(DISTINCT u.id), 0), 1
  ) as conversion_rate,
  ROUND(
    100.0 - 100.0 * COUNT(DISTINCT CASE WHEN s.status = 'canceled' THEN u.id END) /
    NULLIF(COUNT(DISTINCT CASE WHEN s.status IN ('active', 'canceled') THEN u.id END), 0), 1
  ) as retention_rate
FROM users u
LEFT JOIN subscriptions s ON s.user_id = u.id
LEFT JOIN activation_events ae ON ae.user_id = u.id;

这个仪表盘视图让你实时看到客户获取管道的快照:有多少用户注册、有多少在付费、有多少已激活(达到"啊哈时刻")、以及平均每位客户的收入。每周追踪这些指标,可以判断你的增长引擎是否在正常运转。


执行时间线:90 天获取 100 位客户

周次重点关键活动目标客户数
1-2定义 & 构建定稿 ICP,准备 500 人外展名单,发布 2 篇 SEO 文章0
3-4触达(冷启动)发送 250 封个性化冷邮件,在 5 个社区发帖5-10
5-6触达(内容)再发布 2 篇文章、15 条社媒帖、5 条论坛回复15-25
7-8转化20-30 场演示,上线创始人折扣,优化定价页30-45
9-10推荐激活推荐系统,请求推荐者做介绍50-70
11-12规模化加码最佳渠道,根据反馈迭代80-100

结语

获取首批 100 位付费客户没有银弹——靠的是在增长框架四个阶段上的系统执行:

  1. 定义:在动手构建任何东西之前,精确知道你的首批 100 位客户是谁
  2. 触达:通过社区内容、个性化外展和 SEO 出现在他们面前,无需付费广告
  3. 转化:构建转化优化的落地页,策略性使用创始人折扣,用 UTM 追踪每个触点
  4. 留存:追踪激活(不仅仅是注册),自动化留存邮件,将推荐者转化为推荐引擎

成功的初创公司不是拥有最好产品或最多资金的那些——而是那些每天都与用户交流、不断迭代、并从第一天起追踪每个指标的那些。

你的首批 100 位客户就在那里。他们正在寻找你正在解决的问题的解决方案。去找到他们吧。完整的归因追踪设置方案,请参阅 UTM Attribution Complete Guide,了解如何将最满意的客户转化为增长引擎,请参阅 Referral Reward System。Email Marketing Automation 指南涵盖了从注册到付费客户的完整序列,Zero to MVP in 4 Weeks 蓝图帮助你在执行这个增长框架的同时构建产品。