emailr_
Alle Artikel
usecase·9 min

E-Mails zur Abonnementverlängerung: Timing und Inhalt

billingrenewalsretention

E-Mails zur Abonnementverlängerung wirken sich direkt auf Bindung und Umsatz aus. Gut getimte, klare Kommunikation reduziert Churn und fehlgeschlagene Zahlungen. So entwerfen Sie einen effektiven Ablauf für Verlängerungs-E-Mails.

Sequenz für Verlängerungs-E-Mails

Zeitplan

const renewalSequence = [
  { daysBefore: 14, template: 'renewal-reminder-14d' },
  { daysBefore: 7, template: 'renewal-reminder-7d' },
  { daysBefore: 3, template: 'renewal-reminder-3d' },
  { daysBefore: 0, template: 'renewal-processed' },
  { daysAfter: 1, template: 'renewal-failed', condition: 'payment_failed' }
];

Erinnerungs-E-Mail

interface RenewalReminder {
  user: User;
  subscription: {
    plan: string;
    amount: number;
    currency: string;
    renewsAt: Date;
    paymentMethod: string;
  };
}

await sendEmail({
  to: user.email,
  subject: `Your ${subscription.plan} plan renews in ${daysUntil} days`,
  template: 'renewal-reminder',
  data: {
    user,
    subscription,
    updatePaymentUrl: `${baseUrl}/billing/payment-method`,
    changePlanUrl: `${baseUrl}/billing/plans`,
    cancelUrl: `${baseUrl}/billing/cancel`
  }
});

Verlängerungsbestätigung

await sendEmail({
  to: user.email,
  subject: `Your ${subscription.plan} plan has renewed`,
  template: 'renewal-confirmation',
  data: {
    user,
    subscription,
    invoice: {
      id: invoice.id,
      amount: invoice.amount,
      pdfUrl: invoice.pdfUrl
    },
    nextRenewal: subscription.nextRenewalDate,
    usageSummary: await getUsageSummary(user.id)
  }
});

Wiederherstellung fehlgeschlagener Zahlungen

Mahnsequenz

const dunningSequence = [
  {
    attempt: 1,
    delay: 0,
    template: 'payment-failed-1',
    subject: 'Payment failed - please update your card'
  },
  {
    attempt: 2,
    delay: 3, // days
    template: 'payment-failed-2',
    subject: 'Second attempt failed - action required'
  },
  {
    attempt: 3,
    delay: 7,
    template: 'payment-failed-3',
    subject: 'Final notice - your account will be suspended'
  },
  {
    attempt: 4,
    delay: 10,
    template: 'account-suspended',
    subject: 'Your account has been suspended'
  }
];

E-Mail bei fehlgeschlagener Zahlung

await sendEmail({
  to: user.email,
  subject: 'Payment failed - please update your card',
  template: 'payment-failed',
  data: {
    user,
    subscription,
    failureReason: getReadableFailureReason(payment.failureCode),
    retryDate: payment.nextRetryAt,
    updateCardUrl: `${baseUrl}/billing/payment-method`,
    gracePeriodEnds: subscription.gracePeriodEnds
  },
  priority: 'high'
});

function getReadableFailureReason(code: string): string {
  const reasons = {
    'card_declined': 'Your card was declined',
    'insufficient_funds': 'Insufficient funds',
    'expired_card': 'Your card has expired',
    'incorrect_cvc': 'Incorrect security code',
    'processing_error': 'Processing error - we\'ll retry'
  };
  return reasons[code] || 'Payment could not be processed';
}

Benachrichtigungen zu Planänderungen

Upgrade-Bestätigung

await sendEmail({
  to: user.email,
  subject: `Welcome to ${newPlan.name}!`,
  template: 'plan-upgraded',
  data: {
    user,
    previousPlan: oldPlan.name,
    newPlan: {
      name: newPlan.name,
      features: getNewFeatures(oldPlan, newPlan),
      price: newPlan.price
    },
    prorated: {
      credit: proratedCredit,
      charged: proratedCharge
    },
    gettingStartedUrl: `${baseUrl}/getting-started/${newPlan.slug}`
  }
});

Downgrade-Bestätigung

await sendEmail({
  to: user.email,
  subject: `Your plan change to ${newPlan.name}`,
  template: 'plan-downgraded',
  data: {
    user,
    currentPlan: oldPlan.name,
    newPlan: newPlan.name,
    effectiveDate: downgrade.effectiveDate,
    lostFeatures: getLostFeatures(oldPlan, newPlan),
    dataRetention: 'Your data will be preserved',
    upgradeUrl: `${baseUrl}/billing/plans`
  }
});

Kündigungsablauf

Kündigungsbestätigung

await sendEmail({
  to: user.email,
  subject: 'Your subscription has been cancelled',
  template: 'subscription-cancelled',
  data: {
    user,
    subscription: {
      plan: subscription.plan,
      endsAt: subscription.currentPeriodEnd,
      // Access continues until period end
      accessUntil: subscription.currentPeriodEnd
    },
    dataExport: {
      available: true,
      exportUrl: `${baseUrl}/settings/export`
    },
    feedback: {
      url: `${baseUrl}/feedback/cancellation`,
      incentive: 'Help us improve and get 1 month free if you return'
    },
    reactivateUrl: `${baseUrl}/billing/reactivate`
  }
});

Rückgewinnung nach Kündigung

// Send 7 days before access ends
await sendEmail({
  to: user.email,
  subject: 'Your access ends in 7 days',
  template: 'access-ending-soon',
  data: {
    user,
    endsAt: subscription.currentPeriodEnd,
    whatYouLose: [
      `${usage.projectCount} projects`,
      `${usage.teamMembers} team members`,
      'All integrations'
    ],
    specialOffer: {
      discount: '30% off for 3 months',
      code: 'COMEBACK30',
      expiresAt: subscription.currentPeriodEnd
    },
    reactivateUrl: `${baseUrl}/billing/reactivate?offer=COMEBACK30`
  }
});

Handhabung jährlicher Verlängerungen

Erinnerung an jährliche Verlängerung

// 30 days before annual renewal
await sendEmail({
  to: user.email,
  subject: 'Your annual subscription renews soon',
  template: 'annual-renewal-reminder',
  data: {
    user,
    subscription: {
      plan: subscription.plan,
      amount: subscription.annualPrice,
      renewsAt: subscription.renewsAt,
      savings: calculateAnnualSavings(subscription)
    },
    yearInReview: {
      // Show value received
      emailsSent: usage.totalEmails,
      uptime: '99.99%',
      supportTickets: usage.supportTickets
    },
    options: {
      continueAnnual: 'Continue annual billing',
      switchMonthly: 'Switch to monthly',
      cancel: 'Cancel subscription'
    },
    manageUrl: `${baseUrl}/billing`
  }
});

Best Practices

  1. Früh erinnern - Geben Sie den Nutzern Zeit, ihre Zahlungsmethoden zu aktualisieren
  2. Konkrete Angaben - Nennen Sie genaue Beträge und Daten
  3. Fehler erklären - Sagen Sie den Nutzern, warum die Zahlung fehlgeschlagen ist
  4. Einfache Lösungen bieten - Mit einem Klick die Zahlungsmethode aktualisieren
  5. Wert zeigen - Erinnern Sie die Nutzer daran, wofür sie bezahlen
  6. Kulanzzeiten - Zugriff nicht sofort beenden
  7. Mehrere Kanäle - Ziehen Sie SMS für fehlgeschlagene Zahlungen in Betracht

Verlängerungs-E-Mails dienen dazu, Reibung zu verringern und unfreiwilligen Churn zu verhindern. Machen Sie es den Nutzern leicht, abonniert zu bleiben.

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.