emailr_
Alle Artikel
usecase·9 Min.

Re-Engagement-E-Mails: Rückgewinnungsstrategien

engagementretentionmarketing

Re-Engagement-E-Mails können abwandernde Nutzer zurückholen, bevor sie endgültig weg sind. Entscheidend sind Timing, Relevanz und der richtige Anreiz. So bauen Sie effektive Rückgewinnungskampagnen.

Re-Engagement-Trigger

Erkennung von Inaktivität

interface InactivityTrigger {
  userId: string;
  lastActiveAt: Date;
  daysInactive: number;
  previousEngagement: 'high' | 'medium' | 'low';
  accountValue: number;
}

const reEngagementTiers = [
  { daysInactive: 7, tier: 'early', urgency: 'low' },
  { daysInactive: 14, tier: 'mid', urgency: 'medium' },
  { daysInactive: 30, tier: 'late', urgency: 'high' },
  { daysInactive: 60, tier: 'critical', urgency: 'critical' }
];

Personalisierte Trigger

async function getReEngagementContent(user: User, trigger: InactivityTrigger) {
  // What did they use most?
  const topFeatures = await getTopFeatures(user.id);
  
  // What's new since they left?
  const newFeatures = await getFeaturesSince(trigger.lastActiveAt);
  
  // What did their peers accomplish?
  const peerActivity = await getPeerHighlights(user.industry);
  
  return { topFeatures, newFeatures, peerActivity };
}

Re-Engagement-Sequenz

Frühe Phase (7 Tage)

await sendEmail({
  to: user.email,
  subject: 'We noticed you haven\'t been around',
  template: 're-engagement-early',
  data: {
    user,
    lastActivity: trigger.lastActiveAt,
    topFeature: content.topFeatures[0],
    quickActionUrl: getQuickActionUrl(user),
    unsubscribeUrl: `${baseUrl}/preferences`
  }
});

Mittlere Phase (14 Tage)

await sendEmail({
  to: user.email,
  subject: 'Here\'s what you\'ve missed',
  template: 're-engagement-mid',
  data: {
    user,
    newFeatures: content.newFeatures,
    peerHighlights: content.peerActivity,
    incentive: {
      type: 'extended_trial',
      value: '7 extra days free'
    },
    returnUrl: `${baseUrl}/welcome-back?token=${token}`
  }
});

Späte Phase (30 Tage)

await sendEmail({
  to: user.email,
  subject: 'We want you back',
  template: 're-engagement-late',
  data: {
    user,
    offer: {
      type: 'discount',
      value: '50% off next month',
      code: generateOfferCode(user.id),
      expiresAt: addDays(new Date(), 7)
    },
    testimonial: await getRelevantTestimonial(user.industry),
    returnUrl: `${baseUrl}/welcome-back?offer=${offerCode}`
  }
});

Kritische Phase (60 Tage)

await sendEmail({
  to: user.email,
  subject: 'Before you go...',
  template: 're-engagement-critical',
  data: {
    user,
    dataWarning: 'Your data will be deleted in 30 days',
    exportUrl: `${baseUrl}/export?token=${exportToken}`,
    lastChanceOffer: {
      type: 'free_month',
      value: 'One month free to try again'
    },
    feedbackUrl: `${baseUrl}/feedback/churned`
  }
});

Personalisierungsstrategien

Aktivitätsbasierte Inhalte

async function getPersonalizedContent(user: User) {
  const usage = await getUserUsagePatterns(user.id);
  
  if (usage.primaryUseCase === 'reporting') {
    return {
      headline: 'Your reports are waiting',
      feature: 'New dashboard templates',
      cta: 'See your latest data'
    };
  }
  
  if (usage.primaryUseCase === 'collaboration') {
    return {
      headline: 'Your team misses you',
      feature: 'New commenting features',
      cta: 'Catch up with your team'
    };
  }
  
  return {
    headline: 'We\'ve been improving',
    feature: 'See what\'s new',
    cta: 'Explore updates'
  };
}

Segmentspezifische Botschaften

const segmentMessages = {
  power_user: {
    tone: 'We miss your expertise',
    incentive: 'early_access',
    focus: 'new_features'
  },
  casual_user: {
    tone: 'Quick check-in',
    incentive: 'simplicity',
    focus: 'easy_wins'
  },
  trial_abandoned: {
    tone: 'Give us another chance',
    incentive: 'extended_trial',
    focus: 'onboarding_help'
  },
  churned_paid: {
    tone: 'We want to earn you back',
    incentive: 'discount',
    focus: 'value_proposition'
  }
};

Timing-Optimierung

Beste Versandzeiten

async function getOptimalSendTime(user: User): Promise<Date> {
  // Use historical engagement data
  const engagementHistory = await getUserEngagementTimes(user.id);
  
  if (engagementHistory.length > 0) {
    // Send when they typically engaged
    return getNextOccurrence(engagementHistory.peakHour, user.timezone);
  }
  
  // Default to industry benchmarks
  const industryDefaults = {
    b2b: { day: 'tuesday', hour: 10 },
    b2c: { day: 'saturday', hour: 11 },
    default: { day: 'wednesday', hour: 9 }
  };
  
  const defaults = industryDefaults[user.industry] || industryDefaults.default;
  return getNextOccurrence(defaults.hour, user.timezone, defaults.day);
}

Frequency Capping

const reEngagementRules = {
  maxEmailsPerSequence: 4,
  minDaysBetweenEmails: 5,
  stopConditions: [
    'user_returned',
    'user_unsubscribed',
    'user_deleted_account',
    'sequence_complete'
  ],
  
  // Don't re-engage if:
  exclusions: [
    'received_re_engagement_last_90_days',
    'marked_as_spam',
    'bounced_email'
  ]
};

Erfolgsmessung

Wichtigste Kennzahlen

interface ReEngagementMetrics {
  // Email performance
  openRate: number;
  clickRate: number;
  
  // Business outcomes
  returnRate: number;        // % who came back
  reactivationRate: number;  // % who became active again
  conversionRate: number;    // % who converted (if applicable)
  
  // By sequence stage
  byStage: {
    [stage: string]: {
      sent: number;
      returned: number;
      returnRate: number;
    };
  };
}

A/B-Tests

const reEngagementTests = [
  {
    name: 'subject_line_test',
    variants: [
      { id: 'a', subject: 'We miss you' },
      { id: 'b', subject: 'Your account is waiting' },
      { id: 'c', subject: '&#123;&#123;user.name&#125;&#125;, come back?' }
    ],
    metric: 'open_rate'
  },
  {
    name: 'incentive_test',
    variants: [
      { id: 'a', incentive: 'none' },
      { id: 'b', incentive: '20% discount' },
      { id: 'c', incentive: 'free month' }
    ],
    metric: 'return_rate'
  }
];

Best Practices

  1. Konsequent segmentieren - Verschiedene Nutzer brauchen unterschiedliche Botschaften
  2. Inhalte personalisieren - Bezug auf ihre tatsächliche Nutzung nehmen
  3. Anreize steigern - Sanft beginnen, den Wert über die Zeit erhöhen
  4. Klare Grenzen setzen - Inaktive Nutzer nicht dauerhaft zuspammen
  5. Rückkehr erleichtern - Mit einem Klick zurück, Kontext erhalten
  6. Nach Feedback fragen - Verstehen, warum sie gegangen sind
  7. Abmeldungen respektieren - Auf Wunsch sofort stoppen

Re-Engagement bedeutet, Nutzer an den Mehrwert zu erinnern, nicht sie zu bedrängen. Konzentrieren Sie sich darauf, was ihnen entgeht, nicht darauf, was Sie verlieren.

e_

Geschrieben vom emailr-Team

Wir bauen Email-Infrastruktur für Entwickler

Bereit zum Senden?

Hol dir deinen API-Schlüssel und sende deine erste E-Mail in unter 5 Minuten. Keine Kreditkarte erforderlich.