Guides / SaaS

How to Track Product-Led Growth Events

5 min read·SaaS

What PLG events to track

Product-led growth is about self-serve conversion. The events that matter are:

  1. Activation events — first time a user does the thing that makes them "get it"
  2. Engagement milestones — 5th project, 10th event logged, first team member invited
  3. Friction moments — upgrade wall hit, feature locked, usage limit reached
  4. Intent signals — pricing page visit, plan comparison, billing page open

Activation event (the "aha moment")

ts
// Tracked when user logs their first event successfully
async function trackFirstEvent(userId: string, projectId: string) {
  await logit.now("activation", {
    event: "First event logged",
    description: "User hit their aha moment",
    icon: "🎯",
    notify: true,
    tags: { milestone: "activation" },
    metadata: { userId, projectId, activatedAt: new Date().toISOString() },
  });
}

Engagement milestones

ts
async function trackMilestone(userId: string, milestone: string, count: number) {
  const milestones: Record<string, { icon: string; notify: boolean }> = {
    "5_events": { icon: "⭐", notify: false },
    "first_team_invite": { icon: "👥", notify: true },
    "100_events": { icon: "🏆", notify: true },
    "first_channel_created": { icon: "📢", notify: false },
  };

  const config = milestones[milestone];
  if (!config) return;

  await logit.now("milestones", {
    event: `Milestone: ${milestone.replace(/_/g, " ")}`,
    description: `User reached ${count} ${milestone}`,
    icon: config.icon,
    notify: config.notify,
    metadata: { userId, milestone, count },
  });
}

Upgrade intent signals

ts
// When user hits a usage limit or clicks "Upgrade"
async function trackUpgradeIntent(
  userId: string,
  trigger: "usage_limit" | "feature_gate" | "upgrade_button" | "pricing_page"
) {
  await logit.now("upgrade-intent", {
    event: "Upgrade intent signal",
    description: `Triggered by: ${trigger}`,
    icon: "⬆️",
    notify: true,
    tags: { trigger },
    metadata: { userId, trigger, url: typeof window !== "undefined" ? window.location.href : "" },
  });
}

What to do with this data

  • Activation rate: % of signups who log their first event within 24h
  • Time to activate: median time from signup to first event
  • Upgrade intent rate: % of users who trigger an upgrade intent event
  • Conversion from intent: % of intent → paid

Watch your activation and upgrade-intent channels daily. If activation drops, your onboarding broke. If intent spikes but conversions don't, your pricing page has a problem.

Try LogIt free

7-day trial. No credit card required.

Start free